Sha256: f0f6ad79a4807751fad9a3f16dce1daaa59a21c0e2b48f02bfad25058e2bb207

Contents?: true

Size: 1.1 KB

Versions: 2

Compression:

Stored size: 1.1 KB

Contents

# frozen_string_literal: true

module WorksCited
  module Mixins
    # HasWorksCited Mixin
    module HasWorksCited
      extend ActiveSupport::Concern

      # rubocop:disable Naming/PredicateName
      def has_works_cited(_options = {})
        extend ClassMethods
        include InstanceMethods

        has_many :works_cited_citations, as: :record, class_name: 'WorksCited::Citation'
        accepts_nested_attributes_for :works_cited_citations, reject_if: :all_blank, allow_destroy: true
      end
      # rubocop:enable Naming/PredicateName

      # Extended by has_works_cited mixin
      module ClassMethods
      end

      # Included by has_works_cited mixin
      module InstanceMethods
        def works_cited_citations_attributes=(raw_citations)
          array = []
          raw_citations&.each do |_index, citation|
            destroy = citation.delete(:_destroy)
            if destroy == '1'
              Citation.find(citation[:id]).destroy if citation[:id]
              next
            end

            array << citation
          end
          super array
        end
      end
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
works_cited-0.1.16 lib/works_cited/mixins/has_works_cited.rb
works_cited-0.1.15 lib/works_cited/mixins/has_works_cited.rb