Module: ActiveRecord::GroupingEnum

Defined in:
lib/active_record/grouping_enum.rb,
lib/active_record/grouping_enum/version.rb

Constant Summary collapse

VERSION =
"0.1.0"

Instance Method Summary collapse

Instance Method Details

#grouping_enum(definitions) ⇒ Object



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