Sha256: 30f8fe53027e85c2f9fe76c5ae3481fadc92b58c752d54050425713f0af46aeb

Contents?: true

Size: 1.34 KB

Versions: 4

Compression:

Stored size: 1.34 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)
          run_type_validator(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

4 entries across 4 versions & 1 rubygems

Version Path
active-fedora-9.4.3 lib/active_fedora/associations/basic_contains_association.rb
active-fedora-9.4.2 lib/active_fedora/associations/basic_contains_association.rb
active-fedora-9.4.1 lib/active_fedora/associations/basic_contains_association.rb
active-fedora-9.4.0 lib/active_fedora/associations/basic_contains_association.rb