Sha256: c4c3e82f022e348289a394b5b6022b46b2cc4ed4f9b5e14b0b6cc4a18b2d24cb

Contents?: true

Size: 1.23 KB

Versions: 4

Compression:

Stored size: 1.23 KB

Contents

module ActiveFedora
  module Associations
    class DirectlyContainsAssociation < ContainsAssociation # :nodoc:
      def insert_record(record, force = true, validate = true)
        container.save!
        super
      end

      def find_target
        query_node = if container_predicate = options[:has_member_relation]
                       owner
                     else
                       container_predicate = ::RDF::Vocab::LDP.contains
                       container
                     end

        uris = query_node.resource.query({ predicate: container_predicate }).map { |r| r.object.to_s }

        uris.map { |object_uri| klass.find(klass.uri_to_id(object_uri)) }
      end

      def container
        @container ||= DirectContainer.find_or_initialize(ActiveFedora::Base.uri_to_id(uri)).tap do |container|
          container.parent = @owner
          container.has_member_relation = Array(options[:has_member_relation])
          container.is_member_of_relation = Array(options[:is_member_of_relation])
        end
      end

      protected

        def initialize_attributes(record) # :nodoc:
          record.uri = ActiveFedora::Base.id_to_uri(container.mint_id)
          set_inverse_instance(record)
        end
    end
  end
end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
active-fedora-15.0.1 lib/active_fedora/associations/directly_contains_association.rb
active-fedora-15.0.0 lib/active_fedora/associations/directly_contains_association.rb
active-fedora-14.0.1 lib/active_fedora/associations/directly_contains_association.rb
active-fedora-14.0.0 lib/active_fedora/associations/directly_contains_association.rb