Sha256: 06181028ef12b49bedaff2f2bbb4d1272885c0caadab4f9d79f917e252314fe5

Contents?: true

Size: 1.3 KB

Versions: 7

Compression:

Stored size: 1.3 KB

Contents

module ActiveFedora
  module Associations
    class ContainsAssociation < SingularAssociation #:nodoc:
      # Implements the reader method, e.g. foo.bar for Foo.has_one :bar
      def reader(force_reload = false)
        super || build
      end

      def find_target
        reflection.build_association(target_uri).tap do |record|
          configure_datastream(record) if reflection.options[:block]
        end 
      end

      def target_uri
        "#{owner.uri}/#{reflection.name}"
      end

      private

      def raise_on_type_mismatch(record)
        return if record.is_a? LoadableFromJson::SolrBackedMetadataFile
        super
      end

      def replace(record)
        if record
          raise_on_type_mismatch(record)
          @updated = true
        end

        self.target = record
      end

      def new_record(method, attributes)
        record = super
        configure_datastream(record)
        record
      end

      def configure_datastream(record)
        # If you called has_metadata with a block, pass the block into the File class
        if reflection.options[:block].class == Proc
          reflection.options[:block].call(record)
        end
        if record.new_record? && reflection.options[:autocreate]
          record.datastream_will_change!
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
active-fedora-9.0.8 lib/active_fedora/associations/contains_association.rb
active-fedora-9.1.2 lib/active_fedora/associations/contains_association.rb
active-fedora-9.1.1 lib/active_fedora/associations/contains_association.rb
active-fedora-9.1.0 lib/active_fedora/associations/contains_association.rb
active-fedora-9.1.0.rc1 lib/active_fedora/associations/contains_association.rb
active-fedora-9.0.6 lib/active_fedora/associations/contains_association.rb
active-fedora-9.0.5 lib/active_fedora/associations/contains_association.rb