Sha256: 53d5f1aa39a82ce77fd81073461ad1f5e54e1cdd1bd76b3458909ee6120d1c29

Contents?: true

Size: 1.89 KB

Versions: 6

Compression:

Stored size: 1.89 KB

Contents

module CanCan
  module ModelAdapters
    class AbstractAdapter
      def self.inherited(subclass)
        @subclasses ||= []
        @subclasses << subclass
      end

      def self.adapter_class(model_class)
        @subclasses.detect { |subclass| subclass.for_class?(model_class) } || DefaultAdapter
      end

      # Used to determine if the given adapter should be used for the passed in class.
      def self.for_class?(member_class)
        false # override in subclass
      end

      # Used to determine if this model adapter will override the matching behavior for a hash of conditions.
      # If this returns true then matches_conditions_hash? will be called. See Rule#matches_conditions_hash
      def self.override_conditions_hash_matching?(subject, conditions)
        false
      end

      # Override if override_conditions_hash_matching? returns true
      def self.matches_conditions_hash?(subject, conditions)
        raise NotImplemented, "This model adapter does not support matching on a conditions hash."
      end

      # Used to determine if this model adapter will override the matching behavior for a specific condition.
      # If this returns true then matches_condition? will be called. See Rule#matches_conditions_hash
      def self.override_condition_matching?(subject, name, value)
        false
      end

      # Override if override_condition_matching? returns true
      def self.matches_condition?(subject, name, value)
        raise NotImplemented, "This model adapter does not support matching on a specific condition."
      end

      def initialize(model_class, rules)
        @model_class = model_class
        @rules = rules
      end

      def database_records
        # This should be overridden in a subclass to return records which match @rules
        raise NotImplemented, "This model adapter does not support fetching records from the database."
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
cancan-1.6.5 lib/cancan/model_adapters/abstract_adapter.rb
cancan-1.6.4 lib/cancan/model_adapters/abstract_adapter.rb
cancan-1.6.3 lib/cancan/model_adapters/abstract_adapter.rb
cancan-1.6.2 lib/cancan/model_adapters/abstract_adapter.rb
cancan-1.6.1 lib/cancan/model_adapters/abstract_adapter.rb
cancan-1.6.0 lib/cancan/model_adapters/abstract_adapter.rb