Sha256: 5330075a3e9dee475eb47005efa9270d3e020e501e5e67ffcc90f69dd0c010da

Contents?: true

Size: 1.23 KB

Versions: 5

Compression:

Stored size: 1.23 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

          # 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(klass, protector_subject)
            scope_without_protector.merge(@meta.relation)
          end
        end
      end
    end
  end
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
protector-0.2.4 lib/protector/adapters/active_record/preloader.rb
protector-0.2.3 lib/protector/adapters/active_record/preloader.rb
protector-0.2.2 lib/protector/adapters/active_record/preloader.rb
protector-0.2.1 lib/protector/adapters/active_record/preloader.rb
protector-0.1.1 lib/protector/adapters/active_record/preloader.rb