Sha256: 3b4eede845d1e7b2068614210e4f3df504c7a412fb31db00aacd089a7c5b5ca0

Contents?: true

Size: 1.27 KB

Versions: 20

Compression:

Stored size: 1.27 KB

Contents

module ActiveFedora
  module Associations
    class AssociationScope #:nodoc:
      def self.scope(association)
        new(association).scope
      end

      attr_reader :association

      delegate :klass, :owner, :reflection, :interpolate, to: :association
      delegate :chain, :scope_chain, :options, :source_options, :active_record, to: :reflection

      def initialize(association)
        @association = association
      end

      def scope
        scope = klass.unscoped
        add_constraints(scope)
      end

      private

        def add_constraints(scope)
          chain.each_with_index do |reflection, i|
            if reflection.macro == :belongs_to
              # Create a partial solr query using the ids. We may add additional filters such as class_name later
              scope = scope.where(ActiveFedora::SolrQueryBuilder.construct_query_for_ids([owner[reflection.foreign_key]]))
            elsif reflection.macro == :has_and_belongs_to_many
            else
              scope = scope.where(ActiveFedora::SolrQueryBuilder.construct_query_for_rel(association.send(:find_reflection) => owner.id))
            end

            is_first_chain = i == 0
            is_first_chain ? klass : reflection.klass
          end

          scope
        end
    end
  end
end

Version data entries

20 entries across 20 versions & 1 rubygems

Version Path
active-fedora-10.3.0 lib/active_fedora/associations/association_scope.rb
active-fedora-10.3.0.rc2 lib/active_fedora/associations/association_scope.rb
active-fedora-10.3.0.rc1 lib/active_fedora/associations/association_scope.rb
active-fedora-10.2.1 lib/active_fedora/associations/association_scope.rb
active-fedora-10.2.0 lib/active_fedora/associations/association_scope.rb
active-fedora-10.1.0 lib/active_fedora/associations/association_scope.rb
active-fedora-10.1.0.rc1 lib/active_fedora/associations/association_scope.rb
active-fedora-10.0.0 lib/active_fedora/associations/association_scope.rb
active-fedora-10.0.0.beta4 lib/active_fedora/associations/association_scope.rb
active-fedora-10.0.0.beta3 lib/active_fedora/associations/association_scope.rb
active-fedora-10.0.0.beta2 lib/active_fedora/associations/association_scope.rb
active-fedora-10.0.0.beta1 lib/active_fedora/associations/association_scope.rb
active-fedora-9.13.0 lib/active_fedora/associations/association_scope.rb
active-fedora-9.12.0 lib/active_fedora/associations/association_scope.rb
active-fedora-9.11.0 lib/active_fedora/associations/association_scope.rb
active-fedora-9.10.4 lib/active_fedora/associations/association_scope.rb
active-fedora-9.10.3 lib/active_fedora/associations/association_scope.rb
active-fedora-9.10.2 lib/active_fedora/associations/association_scope.rb
active-fedora-9.10.1 lib/active_fedora/associations/association_scope.rb
active-fedora-9.10.0 lib/active_fedora/associations/association_scope.rb