Class: Legion::Extensions::Transformer::Client

Inherits:
Object
  • Object
show all
Defined in:
lib/legion/extensions/transformer/client.rb

Instance Method Summary collapse

Instance Method Details

#transform(payload:, transformation: nil, engine: nil, schema: nil, engine_options: {}, name: nil) ⇒ Object



11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
# File 'lib/legion/extensions/transformer/client.rb', line 11

def transform(payload:, transformation: nil, engine: nil, schema: nil, engine_options: {}, name: nil)
  return transform_by_name(name: name, payload: payload, engine_options: engine_options) if transformation.nil? && name

  eng = resolve_engine(engine, transformation)
  rendered = eng.render(transformation, payload, **engine_options)
  rendered = parse_rendered(rendered)

  return rendered if rendered.is_a?(Hash) && rendered[:success] == false

  if schema
    validation = Helpers::SchemaValidator.validate(schema: schema, data: rendered)
    return { success: false, status: 'transformer.validation_failed', errors: validation[:errors] } unless validation[:valid]
  end

  { success: true, result: rendered }
end

#transform_chain(steps:, payload:) ⇒ Object



28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
# File 'lib/legion/extensions/transformer/client.rb', line 28

def transform_chain(steps:, payload:)
  result = payload.dup
  steps.each do |step|
    eng = resolve_engine(step[:engine], step[:transformation])
    step_opts = step[:engine_options] || {}
    rendered = eng.render(step[:transformation], result, **step_opts)
    rendered = parse_rendered(rendered)

    return rendered if rendered.is_a?(Hash) && rendered[:success] == false

    if step[:schema]
      validation = Helpers::SchemaValidator.validate(schema: step[:schema], data: rendered)
      return { success: false, status: 'transformer.validation_failed', errors: validation[:errors] } unless validation[:valid]
    end

    if rendered.is_a?(Hash)
      result = result.merge({ args: rendered }.merge(rendered))
    else
      result[:args] = rendered
    end
  end
  { success: true, result: result }
end