Class: Gitter::EnumerableDriver
Instance Attribute Summary
#scope
Instance Method Summary
collapse
#initialize, #new
Instance Method Details
#count ⇒ Object
6
7
8
|
# File 'lib/gitter/drivers/enumerable_driver.rb', line 6
def count
scope.size
end
|
#distinct_values(attr) ⇒ Object
65
66
67
|
# File 'lib/gitter/drivers/enumerable_driver.rb', line 65
def distinct_values attr
group(attr).keys.uniq
end
|
#each(&block) ⇒ Object
57
58
59
|
# File 'lib/gitter/drivers/enumerable_driver.rb', line 57
def each &block
new scope.each(&block)
end
|
#greater_or_equal(attr, value) ⇒ Object
49
50
51
|
# File 'lib/gitter/drivers/enumerable_driver.rb', line 49
def greater_or_equal attr, value
scope.find_all{|item| item.send(:attr) >= value}
end
|
#group(arg) ⇒ Object
23
24
25
|
# File 'lib/gitter/drivers/enumerable_driver.rb', line 23
def group arg
new scope.group_by(&arg)
end
|
#less_or_equal(attr, value) ⇒ Object
53
54
55
|
# File 'lib/gitter/drivers/enumerable_driver.rb', line 53
def less_or_equal attr, value
scope.find_all{|item| item.send(:attr) <= value}
end
|
#named_scope(name) ⇒ Object
61
62
63
|
# File 'lib/gitter/drivers/enumerable_driver.rb', line 61
def named_scope name
raise NotImplementError
end
|
#order(attr, desc = nil) ⇒ Object
10
11
12
13
14
15
16
17
|
# File 'lib/gitter/drivers/enumerable_driver.rb', line 10
def order attr, desc = nil
sign = case desc
when true, 'true' then 1
when false, 'false' then -1
else -1
end
new scope.sort{|a,b| sign * (a.send(attr).try(:to_s) <=> b.send(attr).try(:to_s)) }
end
|
#to_s ⇒ Object
69
70
71
|
# File 'lib/gitter/drivers/enumerable_driver.rb', line 69
def to_s
scope.to_s
end
|
#unordered ⇒ Object
19
20
21
|
# File 'lib/gitter/drivers/enumerable_driver.rb', line 19
def unordered
self
end
|
#where(attr_values, opts = {}) ⇒ Object
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
|
# File 'lib/gitter/drivers/enumerable_driver.rb', line 27
def where attr_values, opts = {}
exact = opts.fetch(:exact){true}
ignore_case = opts.fetch(:ignore_case){false}
strip_blank = opts.fetch(:strip_blank){false}
attr_texts = attr_values.map do |attr,value|
value = value.strip if strip_blank
text = exact ? value : /#{value}/
text = /#{value}/i if ignore_case
[attr,text]
end
s = scope.find_all do |item|
attr_texts.all? do |attr,text|
data = item.send(attr).try(:to_s)
text === data
end
end
new s
end
|