Sha256: 927c36e68a30d1b65bacff0f42a470aa5f6e0a23814b7e32f9511eba7eccfea8

Contents?: true

Size: 1.3 KB

Versions: 5

Compression:

Stored size: 1.3 KB

Contents

module ActiveFedora
  module Associations
    class BasicContainsAssociation < 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) 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

5 entries across 5 versions & 1 rubygems

Version Path
active-fedora-9.3.0 lib/active_fedora/associations/basic_contains_association.rb
active-fedora-9.2.1 lib/active_fedora/associations/basic_contains_association.rb
active-fedora-9.2.0 lib/active_fedora/associations/basic_contains_association.rb
active-fedora-9.2.0.rc2 lib/active_fedora/associations/basic_contains_association.rb
active-fedora-9.2.0.rc1 lib/active_fedora/associations/basic_contains_association.rb