Module: ActiveRecord::GroupingEnum

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

Constant Summary collapse

VERSION =
"1.0.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
# 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}?") { enums.map(&:to_s).include?(self[name]) }

        klass.send(:detect_enum_conflict!, name, key.to_s, true)
        klass.scope key.to_s, lambda {
          clause = enums.each_with_object Hash.new { |h, k| h[k] = [] } do |enum, obj|
            obj[name] << klass.public_send(name.to_s.pluralize.to_sym)[enum.to_s]
          end
          klass.where(clause)
        }
      end
    end
  end
end