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



29
30
31
32
33
34
35
# File 'lib/search_object/plugin/enum.rb', line 29

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

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

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

.build(name, enums) ⇒ Object



23
24
25
26
27
# File 'lib/search_object/plugin/enum.rb', line 23

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



37
38
39
40
41
42
43
44
# File 'lib/search_object/plugin/enum.rb', line 37

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

  return object.handle_invalid_enum(option, scope, value) if object.respond_to? :handle_invalid_enum, true

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