Class: CanCan::ModelAdapters::SequelAdapter
Class Method Summary
collapse
Instance Method Summary
collapse
adapter_class, inherited, #initialize, matches_conditions_hash?, override_conditions_hash_matching?
Class Method Details
.find(model_class, id) ⇒ Object
8
9
10
|
# File 'lib/cancan/model_adapters/sequel_adapter.rb', line 8
def self.find(model_class, id)
model_class[id]
end
|
.for_class?(model_class) ⇒ Boolean
4
5
6
|
# File 'lib/cancan/model_adapters/sequel_adapter.rb', line 4
def self.for_class?(model_class)
model_class <= Sequel::Model
end
|
.matches_condition?(subject, name, value) ⇒ Boolean
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/cancan/model_adapters/sequel_adapter.rb', line 16
def self.matches_condition?(subject, name, value)
obj = subject.send(name)
if obj.nil?
false
else
value.each do |k, v|
if v.kind_of?(Hash)
return false unless self.matches_condition?(obj, k, v)
elsif obj.send(k) != v
return false
end
end
end
end
|
.override_condition_matching?(subject, name, value) ⇒ Boolean
12
13
14
|
# File 'lib/cancan/model_adapters/sequel_adapter.rb', line 12
def self.override_condition_matching?(subject, name, value)
value.kind_of?(Hash)
end
|
Instance Method Details
#database_records ⇒ Object
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
|
# File 'lib/cancan/model_adapters/sequel_adapter.rb', line 31
def database_records
if @rules.size == 0
@model_class.where('1=0')
else
rules = @rules.reject { |rule| rule.base_behavior && rule.conditions.empty? }
rules.reject! { |rule| rule.base_behavior } if rules.count < @rules.count
can_condition_added = false
rules.reverse.inject(@model_class.dataset) do |records, rule|
normalized_conditions = normalize_conditions(rule.conditions)
if rule.base_behavior
if can_condition_added
records.or normalized_conditions
else
can_condition_added = true
records.where normalized_conditions
end
else
records.exclude normalized_conditions
end
end
end
end
|