Module: SearchObject::Plugin::Enum::Handler

Defined in:
lib/search_object/plugin/enum.rb

Class Method Summary collapse

Class Method Details

.apply_filter(object:, option:, enums:, scope:, value:) ⇒ Object



32
33
34
35
36
37
38
39
40
# File 'lib/search_object/plugin/enum.rb', line 32

def apply_filter(object:, option:, enums:, scope:, value:)
  return if value.nil? || value == ''

  unless enums.include? value
    return handle_invalid_value(object: object, option: option, enums: enums, scope: scope, value: value)
  end

  object.send("apply_#{Helper.underscore(option)}_with_#{Helper.underscore(value)}", scope)
end

.build(name, enums) ⇒ Object



26
27
28
29
30
# File 'lib/search_object/plugin/enum.rb', line 26

def build(name, enums)
  enums = enums.map(&:to_s)
  handler = self
  ->(scope, value) { handler.apply_filter(object: self, option: name, enums: enums, scope: scope, value: value) }
end

.handle_invalid_value(object:, option:, enums:, scope:, value:) ⇒ Object



42
43
44
45
46
47
48
49
50
# File 'lib/search_object/plugin/enum.rb', line 42

def handle_invalid_value(object:, option:, enums:, scope:, value:)
  specific = "handle_invalid_#{option}"
  return object.send(specific, scope, value) if object.respond_to? specific, true

  catch_all = 'handle_invalid_enum'
  return object.send(catch_all, option, scope, value) if object.respond_to? catch_all, true

  raise InvalidEnumValueError.new(option, enums, value)
end