Payload translator

Using a yaml configuration you can transform a payload to another payload. Example:

# config.yaml
payload:
  id:
    $field: _id
    $formatter: to_integer
  user_name:
    $field: name
  login_type:
    $field: login_provider
    $map:
      google: GOOGLE
      twitter: TWITTER
      auth0: APP
  country:
    $fnc: get_country

Input:

// internal_payload.json

{
  "_id": 1,
  "name": "Jhon Doe",
  "login_provider": "auth0"
}
translator = PayloadTranslator::Service.new(config)
external_payload = translator.translate(internal_payload)

Return:

// external_payload.json

{
  "id": "1",
  "user_name": "Jhon Doe",
  "login_type": "APP"
}

Configure handlers

Resolve the field output with a custom function.

PayloadTranslator.configure do |config|
  config.handlers = {
    get_country: ->(payload) { payload['name'] },
  }
end

Or per service

PayloadTranslator::Service(config, handlers: get_country: ->(payload) { payload['name'] })

Configure formatters

Apply different formatters to the output.

PayloadTranslator.configure do |config|
  config.formatters = {
    uppercase: ->(value) { value.upcase },
    to_integer: ->(value) { value.to_i },
  }
end

Or formatter per service

PayloadTranslator::Service(config, formatters: to_integer: ->(value) { value.to_i })