Sha256: 3756252667d98d4558863de6ea68b4679394ea3b203bbaedf17e7a9c9624b5c0

Contents?: true

Size: 1.32 KB

Versions: 7

Compression:

Stored size: 1.32 KB

Contents

module Protector
  module Adapters
    module ActiveRecord
      # Patches `ActiveRecord::Associations::Preloader`
      module Preloader extend ActiveSupport::Concern

        # Patches `ActiveRecord::Associations::Preloader::Association`
        module Association extend ActiveSupport::Concern
          included do
            # AR 4 has renamed `scoped` to `scope`
            if method_defined?(:scope)
              alias_method_chain :scope, :protector
            else
              alias_method 'scope_without_protector', 'scoped'
              alias_method 'scoped', 'scope_with_protector'
            end
          end

          # Gets current subject of preloading association
          def protector_subject
            # Owners are always loaded from the single source
            # having same protector_subject
            owners.first.protector_subject
          end

          def protector_subject?
            owners.first.protector_subject?
          end

          # Restricts preloading association scope with subject of the owner
          def scope_with_protector(*args)
            return scope_without_protector unless protector_subject?

            @meta ||= klass.protector_meta.evaluate(protector_subject)

            scope_without_protector.merge(@meta.relation)
          end
        end
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
protector-0.7.7 lib/protector/adapters/active_record/preloader.rb
protector-0.7.6 lib/protector/adapters/active_record/preloader.rb
protector-0.7.4 lib/protector/adapters/active_record/preloader.rb
protector-0.7.3 lib/protector/adapters/active_record/preloader.rb
protector-0.7.2 lib/protector/adapters/active_record/preloader.rb
protector-0.7.1 lib/protector/adapters/active_record/preloader.rb
protector-0.7.0 lib/protector/adapters/active_record/preloader.rb