class Trusona::Mappers::BaseMapper

A starting point for specific resource mappers

Attributes

custom_mappings[RW]
resource[RW]

Public Instance Methods

map(response, existing = {}) click to toggle source
# File lib/trusona/mappers/base_mapper.rb, line 11
def map(response, existing = {})
  raise ArgumentError if response_invalid?(response)
  raise ArgumentError if existing_invalid?(existing)

  raise if existing.nil?

  parsed_response = response.to_h

  if parsed_response.is_a?(Array)
    parsed_response.map { |r| map_item(r, existing) }.compact
  else
    map_item(parsed_response, existing)
  end
end

Private Instance Methods

existing_invalid?(existing) click to toggle source
# File lib/trusona/mappers/base_mapper.rb, line 67
def existing_invalid?(existing)
  return true unless existing.respond_to?(:to_h)

  false
end
map_custom_fields(response) click to toggle source
# File lib/trusona/mappers/base_mapper.rb, line 42
def map_custom_fields(response)
  return response if custom_mappings.nil? || custom_mappings.empty?

  custom_mappings.each do |original_key, new_key|
    value = response.delete(original_key)
    response[new_key] = value
  end

  response
end
map_item(item, existing) click to toggle source
# File lib/trusona/mappers/base_mapper.rb, line 28
def map_item(item, existing)
  return nil if item.nil? || item.empty?

  item = normalize_keys(item)
  item = merge_existing_state(item, existing.to_h)
  item = map_custom_fields(item)

  (resource || Trusona::Resources::BaseResource).send(:new, item)
end
merge_existing_state(response, existing) click to toggle source
# File lib/trusona/mappers/base_mapper.rb, line 38
def merge_existing_state(response, existing)
  existing.to_h.compact.merge(response)
end
resource_invalid?(resource) click to toggle source
# File lib/trusona/mappers/base_mapper.rb, line 60
def resource_invalid?(resource)
  return true if resource.nil?
  return true unless resource.respond_to?(:new)

  false
end
response_invalid?(response) click to toggle source
# File lib/trusona/mappers/base_mapper.rb, line 53
def response_invalid?(response)
  return true if response.nil?
  return true unless response.respond_to?(:to_h)

  false
end