module SimpleEnum::Scopes::Extension

Public Instance Methods

generate_enum_scopes_extension_for(enum, accessor) click to toggle source
# File lib/simple_enum/scopes/extension.rb, line 4
def generate_enum_scopes_extension_for enum, accessor
  define_range_scope_method(enum, accessor)
  define_multiple_values_scope_method(enum, accessor)
end

Private Instance Methods

define_multiple_values_scope_method(enum, accessor) click to toggle source
# File lib/simple_enum/scopes/extension.rb, line 17
def define_multiple_values_scope_method(enum, accessor)
  # arr can be an array of values or a single value
  singleton_class.send(:define_method, "#{accessor.name.pluralize}_as") do |arr|
    targeted_values = Array(arr).map(&:to_s) & enum.keys
    where(accessor.source => targeted_values.map{ |value| enum[value] })
  end
end
define_range_scope_method(enum, accessor) click to toggle source
# File lib/simple_enum/scopes/extension.rb, line 11
def define_range_scope_method(enum, accessor)
  singleton_class.send(:define_method, "#{accessor.name}_between") do |min_val, max_val|
    where(accessor.source => enum[min_val]..enum[max_val])
  end
end