Class: Edi::Amazon::EnumMapper

Inherits:
Object
  • Object
show all
Defined in:
app/services/edi/amazon/enum_mapper.rb

Overview

Service object: enum mapper.

Instance Method Summary collapse

Constructor Details

#initialize(schema) ⇒ EnumMapper

Returns a new instance of EnumMapper.



4
5
6
# File 'app/services/edi/amazon/enum_mapper.rb', line 4

def initialize(schema)
  @schema = schema
end

Instance Method Details

#enum_editable?(field_path) ⇒ Boolean

Returns:

  • (Boolean)


32
33
34
35
36
37
# File 'app/services/edi/amazon/enum_mapper.rb', line 32

def enum_editable?(field_path)
  field = traverse_schema(field_path)
  return true unless field

  field['editable'].to_b
end

#enum_fieldsObject

Retrieve a list of all fields with enums



40
41
42
# File 'app/services/edi/amazon/enum_mapper.rb', line 40

def enum_fields
  collect_enum_fields(@schema['properties'])
end

#enum_mappings(field_path) ⇒ Object

Retrieve a hash of all enum names and values for a dot-separated field



20
21
22
23
24
25
26
27
28
29
30
# File 'app/services/edi/amazon/enum_mapper.rb', line 20

def enum_mappings(field_path)
  field = traverse_schema(field_path)
  return {} unless field

  enum_names = field['enumNames']
  enums = field['enum']

  return {} unless enum_names && enums

  enum_names.zip(enums).to_h
end

#enum_value(field_path, display_name) ⇒ Object

Retrieve the enum value for a given dot-separated field and display name
If the enum is editable, the display name can be used as is



10
11
12
13
14
15
16
17
# File 'app/services/edi/amazon/enum_mapper.rb', line 10

def enum_value(field_path, display_name)
  mappings = enum_mappings(field_path)
  return display_name if mappings.blank?

  v = mappings[display_name]
  v ||= display_name if enum_editable?(field_path)
  v
end