Class: RecordCache::Scope

Inherits:
Object
  • Object
show all
Defined in:
lib/record_cache/scope.rb

Instance Attribute Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model_class, query) ⇒ Scope

Returns a new instance of Scope.



5
6
7
8
# File 'lib/record_cache/scope.rb', line 5

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

Instance Attribute Details

#model_classObject (readonly)

Returns the value of attribute model_class.



3
4
5
# File 'lib/record_cache/scope.rb', line 3

def model_class
  @model_class
end

#queryObject (readonly)

Returns the value of attribute query.



3
4
5
# File 'lib/record_cache/scope.rb', line 3

def query
  @query
end

Instance Method Details

#conditionsObject



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
# File 'lib/record_cache/scope.rb', line 41

def conditions
  @conditions ||= begin
    query.collect do |field, scope|
      if defined?(AntiObject) and scope.kind_of?(AntiObject)
        scope  = ~scope
        invert = true
      end

      if scope.nil?
        op = invert ? 'IS NOT' : 'IS'
        "#{field} #{op} NULL"
      elsif scope.is_a?(Array)
        op = invert ? 'NOT IN' : 'IN'
        model_class.send(:sanitize_sql, ["#{field} #{op} (?)", scope])
      else
        op = invert ? '!=' : '='
        model_class.send(:sanitize_sql, ["#{field} #{op} ?", scope])
      end
    end.join(' AND ')
  end
  @conditions
end

#empty?Boolean

Returns:

  • (Boolean)


10
11
12
# File 'lib/record_cache/scope.rb', line 10

def empty?
  query.empty?
end

#fieldsObject



14
15
16
# File 'lib/record_cache/scope.rb', line 14

def fields
  query.keys
end

#match?(field, value) ⇒ Boolean

Returns:

  • (Boolean)


30
31
32
33
34
35
36
37
38
39
# File 'lib/record_cache/scope.rb', line 30

def match?(field, value)
  scope = query[field]
  if defined?(AntiObject) and scope.kind_of?(AntiObject)
    scope  = ~scope
    invert = true
  end

  match = [*scope].include?(value)
  invert ? !match : match
end

#match_current?(model) ⇒ Boolean

Returns:

  • (Boolean)


18
19
20
21
22
# File 'lib/record_cache/scope.rb', line 18

def match_current?(model)
  fields.all? do |field|
    match?( field, model.send(field) )
  end
end

#match_previous?(model) ⇒ Boolean

Returns:

  • (Boolean)


24
25
26
27
28
# File 'lib/record_cache/scope.rb', line 24

def match_previous?(model)
  fields.all? do |field|
    match?( field, model.attr_was(field) )
  end
end