Class: CanCan::ModelAdapters::ActiveRecord3Adapter

Inherits:
AbstractAdapter show all
Includes:
ActiveRecordAdapter
Defined in:
lib/cancan/model_adapters/active_record_3_adapter.rb

Class Method Summary collapse

Methods included from ActiveRecordAdapter

#conditions, #database_records, #joins, #tableized_conditions

Methods inherited from AbstractAdapter

adapter_class, #database_records, find, inherited, #initialize, matches_conditions_hash?, override_conditions_hash_matching?

Constructor Details

This class inherits a constructor from CanCan::ModelAdapters::AbstractAdapter

Class Method Details

.for_class?(model_class) ⇒ Boolean

Returns:

  • (Boolean)


5
6
7
# File 'lib/cancan/model_adapters/active_record_3_adapter.rb', line 5

def self.for_class?(model_class)
  model_class <= ActiveRecord::Base
end

.matches_condition?(subject, name, value) ⇒ Boolean

Returns:

  • (Boolean)


13
14
15
16
17
18
19
20
21
22
# File 'lib/cancan/model_adapters/active_record_3_adapter.rb', line 13

def self.matches_condition?(subject, name, value)
  subject_value = subject.send(name.column)
  if name.method.to_s.ends_with? "_any"
    value.any? { |v| meta_where_match? subject_value, name.method.to_s.sub("_any", ""), v }
  elsif name.method.to_s.ends_with? "_all"
    value.all? { |v| meta_where_match? subject_value, name.method.to_s.sub("_all", ""), v }
  else
    meta_where_match? subject_value, name.method, value
  end
end

.meta_where_match?(subject_value, method, value) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
# File 'lib/cancan/model_adapters/active_record_3_adapter.rb', line 24

def self.meta_where_match?(subject_value, method, value)
  case method.to_sym
  when :eq      then subject_value == value
  when :not_eq  then subject_value != value
  when :in      then value.include?(subject_value)
  when :not_in  then !value.include?(subject_value)
  when :lt      then subject_value < value
  when :lteq    then subject_value <= value
  when :gt      then subject_value > value
  when :gteq    then subject_value >= value
  when :matches then subject_value =~ Regexp.new("^" + Regexp.escape(value).gsub("%", ".*") + "$", true)
  when :does_not_match then !meta_where_match?(subject_value, :matches, value)
  else raise NotImplemented, "The #{method} MetaWhere condition is not supported."
  end
end

.override_condition_matching?(subject, name, value) ⇒ Boolean

Returns:

  • (Boolean)


9
10
11
# File 'lib/cancan/model_adapters/active_record_3_adapter.rb', line 9

def self.override_condition_matching?(subject, name, value)
  name.kind_of?(MetaWhere::Column) if defined? MetaWhere
end