3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
|
# File 'lib/active_record/grouping_enum.rb', line 3
def grouping_enum(definitions)
definitions.each do |name, values|
name = name.to_sym
klass = self
values.each do |key, enums|
_grouping_enum_methods_module.module_eval do
klass.send(:detect_enum_conflict!, name, "#{key}?")
define_method("#{key}?") do
values = []
enums.each do |enum|
values << klass.defined_enums[name.to_s].fetch(enum.to_s)
end
values.include?(self[name])
end
klass.send(:detect_enum_conflict!, name, "#{key}", true)
klass.scope "#{key}", lambda {
query = "#{name} == #{klass.defined_enums[name.to_s][enums.shift.to_s]}"
enums.each do |enum|
query << " or #{name} == #{klass.defined_enums[name.to_s][enum.to_s]}"
end
klass.where(query)
}
end
end
end
end
|