Sha256: 4e0d0fbba3d9a12b804a4580d39b482765137be9cc38cb7a1e012eb169ae05cf
Contents?: true
Size: 1.75 KB
Versions: 3
Compression:
Stored size: 1.75 KB
Contents
# frozen_string_literal: true module Grumlin module StepsSerializers class Bytecode < Serializer # constructor params: no_return: true|false, default false # TODO: add pretty NONE_STEP = StepData.new("none", []) def serialize steps = ShortcutsApplyer.call(@steps) no_return = @params[:no_return] || false { step: (steps.steps + (no_return ? [NONE_STEP] : [])).map { |s| serialize_step(s) } }.tap do |v| v.merge!(source: steps.configuration_steps.map { |s| serialize_step(s) }) if steps.configuration_steps.any? end end private def serialize_step(step) [step.name, *step.arguments.map { |arg| serialize_arg(arg) }] end def serialize_arg(arg) return serialize_typed_value(arg) if arg.is_a?(TypedValue) return serialize_predicate(arg) if arg.is_a?(Expressions::P::Predicate) return arg.value if arg.is_a?(Expressions::WithOptions) return arg unless arg.is_a?(Steps) { :@type => "g:Bytecode", :@value => Bytecode.new(arg, **@params.merge(no_return: false)).serialize } end def serialize_typed_value(value) return value.value if value.type.nil? { "@type": "g:#{value.type}", "@value": value.value } end def serialize_predicate(value) { "@type": "g:#{value.namespace}", "@value": { predicate: value.name, value: if value.type.nil? value.value else { "@type": "g:#{value.type}", "@value": value.value } end } } end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
grumlin-0.17.0 | lib/grumlin/steps_serializers/bytecode.rb |
grumlin-0.16.1 | lib/grumlin/steps_serializers/bytecode.rb |
grumlin-0.16.0 | lib/grumlin/steps_serializers/bytecode.rb |