Class: ModelSet::Query

Inherits:
Object
  • Object
show all
Defined in:
lib/model_set/query.rb

Direct Known Subclasses

RawQuery, SQLBaseQuery, SetQuery, SolrQuery, SphinxQuery

Instance Attribute Summary collapse

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(model_set = ModelSet, *args) ⇒ Query

Returns a new instance of Query.



5
6
7
8
9
10
11
12
# File 'lib/model_set/query.rb', line 5

def initialize(model_set = ModelSet, *args)
  if model_set.kind_of?(Class)
    @set_class = model_set
  else
    @set_class = model_set.class
    anchor!(model_set.query, *args) if model_set.query
  end
end

Instance Attribute Details

#limitObject (readonly)

Returns the value of attribute limit.



59
60
61
# File 'lib/model_set/query.rb', line 59

def limit
  @limit
end

#set_classObject (readonly)

Returns the value of attribute set_class.



59
60
61
# File 'lib/model_set/query.rb', line 59

def set_class
  @set_class
end

#sort_orderObject (readonly)

Returns the value of attribute sort_order.



59
60
61
# File 'lib/model_set/query.rb', line 59

def sort_order
  @sort_order
end

Class Method Details

.after_query(*args, &block) ⇒ Object



122
123
124
125
126
127
128
# File 'lib/model_set/query.rb', line 122

def self.after_query(*args, &block)
  if block
    @after_query = block
  else
    @after_query
  end
end

.before_query(&block) ⇒ Object



96
97
98
99
100
101
102
# File 'lib/model_set/query.rb', line 96

def self.before_query(&block)
  if block
    @before_query = block
  else
    @before_query
  end
end

.on_exception(&block) ⇒ Object



109
110
111
112
113
114
115
# File 'lib/model_set/query.rb', line 109

def self.on_exception(&block)
  if block
    @on_exception = block
  else
    @on_exception
  end
end

Instance Method Details

#after_query(*args) ⇒ Object



117
118
119
120
# File 'lib/model_set/query.rb', line 117

def after_query(*args)
  proc = self.class.after_query
  proc.bind(self).call(*args) if proc
end

#before_query(*args) ⇒ Object



91
92
93
94
# File 'lib/model_set/query.rb', line 91

def before_query(*args)
  proc = self.class.before_query
  proc.bind(self).call(*args) if proc
end

#clear_cache!Object



54
55
56
57
# File 'lib/model_set/query.rb', line 54

def clear_cache!
  @count = nil
  clear_limited_cache!
end

#clear_limited_cache!Object



48
49
50
51
52
# File 'lib/model_set/query.rb', line 48

def clear_limited_cache!
  @ids  = nil
  @size = nil
  self
end

#condition_opsObject



130
131
132
133
134
# File 'lib/model_set/query.rb', line 130

def condition_ops
  { :not => 'NOT ',
    :and => ' AND ',
    :or  => ' OR ' }
end

#limit!(limit, offset = nil) ⇒ Object



34
35
36
37
38
39
# File 'lib/model_set/query.rb', line 34

def limit!(limit, offset = nil)
  @limit  = limit  ? limit.to_i  : nil
  @offset = offset ? offset.to_i : nil
  @page   = nil if offset
  clear_limited_cache!
end

#limit_enabled?Boolean

Returns:

  • (Boolean)


30
31
32
# File 'lib/model_set/query.rb', line 30

def limit_enabled?
  true # Override if limit is not possible for subclass.
end

#model_classObject



63
64
65
# File 'lib/model_set/query.rb', line 63

def model_class
  set_class.query_model_class
end

#model_nameObject



67
68
69
# File 'lib/model_set/query.rb', line 67

def model_name
  model_class.name
end

#offsetObject



75
76
77
78
79
# File 'lib/model_set/query.rb', line 75

def offset
  if limit
    @offset ||= @page ? (@page - 1) * limit : 0
  end
end

#on_exception(*args) ⇒ Object



104
105
106
107
# File 'lib/model_set/query.rb', line 104

def on_exception(*args)
  proc = self.class.on_exception
  proc ? proc.bind(self).call(*args) : raise(args.first)
end

#order_by!(order) ⇒ Object



14
15
16
17
# File 'lib/model_set/query.rb', line 14

def order_by!(order)
  @sort_order = order
  clear_cache!
end

#pageObject



81
82
83
84
85
# File 'lib/model_set/query.rb', line 81

def page
  if limit
    @page ||= @offset ? (@offset / limit) : 1
  end
end

#page!(page) ⇒ Object



24
25
26
27
28
# File 'lib/model_set/query.rb', line 24

def page!(page)
  @page   = page ? page.to_i : nil
  @offset = nil
  clear_limited_cache!
end

#pagesObject



87
88
89
# File 'lib/model_set/query.rb', line 87

def pages
  limit ? (1.0 * count / limit).ceil : 1
end

#table_nameObject



71
72
73
# File 'lib/model_set/query.rb', line 71

def table_name
  model_class.table_name
end

#transform_condition(condition) ⇒ Object



136
137
138
# File 'lib/model_set/query.rb', line 136

def transform_condition(condition)
  [condition]
end

#unlimited!Object



41
42
43
44
45
46
# File 'lib/model_set/query.rb', line 41

def unlimited!
  @limit  = nil
  @offset = nil
  @page   = nil
  clear_limited_cache!
end

#unsorted!Object



19
20
21
22
# File 'lib/model_set/query.rb', line 19

def unsorted!
  @sort_order = nil
  clear_cache!
end