Class: Legion::Extensions::Transformer::Client
- Inherits:
-
Object
- Object
- Legion::Extensions::Transformer::Client
- Defined in:
- lib/legion/extensions/transformer/client.rb
Instance Method Summary collapse
- #transform(payload:, transformation: nil, engine: nil, schema: nil, engine_options: {}, name: nil) ⇒ Object
- #transform_chain(steps:, payload:) ⇒ Object
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: ) if transformation.nil? && name eng = resolve_engine(engine, transformation) rendered = eng.render(transformation, payload, **) 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 |