Sha256: f4f83c05c0cb84634146efb0f577b49c9f18d947cf88dec186946b1a980f594e

Contents?: true

Size: 1.81 KB

Versions: 2

Compression:

Stored size: 1.81 KB

Contents

module Hydra::PCDM
  module PcdmBehavior
    extend ActiveSupport::Concern
    included do
      ordered_aggregation :members,
                          has_member_relation: Vocab::PCDMTerms.hasMember,
                          class_name: 'ActiveFedora::Base',
                          type_validator: type_validator,
                          through: :list_source
      indirectly_contains :related_objects, has_member_relation: RDF::Vocab::ORE.aggregates,
                                            inserted_content_relation: RDF::Vocab::ORE.proxyFor, class_name: 'ActiveFedora::Base',
                                            through: 'ActiveFedora::Aggregation::Proxy', foreign_key: :target,
                                            type_validator: Validators::PCDMObjectValidator
    end

    module ClassMethods
      def type_validator
        @type_validator ||= Validators::CompositeValidator.new(
          super,
          Validators::PCDMValidator,
          Validators::AncestorValidator
        )
      end
    end

    def member_of
      return [] if id.nil?
      ActiveFedora::Base.where(member_ids_ssim: id)
    end

    def ordered_member_ids
      ordered_member_proxies.map(&:target_id)
    end

    def objects
      members.select(&:pcdm_object?)
    end

    def object_ids
      members.select(&:pcdm_object?).map(&:id)
    end

    def ordered_objects
      ordered_members.to_a.select(&:pcdm_object?)
    end

    def ordered_object_ids
      ordered_objects.map(&:id)
    end

    def in_collections
      member_of.select(&:pcdm_collection?).to_a
    end

    def in_collection_ids
      in_collections.map(&:id)
    end

    def ancestor?(record)
      ancestor_checker.ancestor?(record)
    end

    def ancestor_checker
      @ancestor_checker ||= ::Hydra::PCDM::AncestorChecker.new(self)
    end
  end
end

Version data entries

2 entries across 2 versions & 1 rubygems

Version Path
hydra-pcdm-0.5.0 lib/hydra/pcdm/models/concerns/pcdm_behavior.rb
hydra-pcdm-0.4.0 lib/hydra/pcdm/models/concerns/pcdm_behavior.rb