Sha256: 66fe22d0659e80fe7d6ba0953686ba17c62beb68b2d8e9850c6f931fc26aeaaf
Contents?: true
Size: 1.7 KB
Versions: 2
Compression:
Stored size: 1.7 KB
Contents
# frozen_string_literal: true require_relative 'context' require_relative 'options_template' require_relative 'step_registry' module Nocode class Executor attr_reader :yaml, :io def initialize(yaml, io: $stdout) @yaml = yaml.respond_to?(:read) ? yaml.read : yaml @yaml = YAML.safe_load(@yaml) || {} @io = io freeze end def execute steps = yaml['steps'] || [] parameters = yaml['parameters'] || {} context = Context.new(io: io, parameters: parameters) log_title steps.each do |step| step_instance = make_step(step, context) execute_step(step_instance) end log("Ended: #{DateTime.now}") log_line context end private def make_step(step, context) type = step['type'].to_s name = step['name'].to_s options = step['options'] || {} compiled_options = OptionsTemplate.new(options).evaluate(context.to_h) step_class = StepRegistry.constant!(type) step_class.new( options: Util::Dictionary.new(compiled_options), context: context, name: name, type: type ) end def execute_step(step) log(step.name) unless step.name.empty? log("Step: #{step.type}") log("Class: #{step.class}") time_in_seconds = Benchmark.measure { step.perform }.real log("Completed in #{time_in_seconds.round(3)} second(s)") log_line end def log_title log_line log('Nocode Execution') log("Started: #{DateTime.now}") log_line end def log_line log('-' * 50) end def log(msg) io.puts(msg) end end end
Version data entries
2 entries across 2 versions & 1 rubygems
Version | Path |
---|---|
nocode-0.0.2 | lib/nocode/executor.rb |
nocode-0.0.1 | lib/nocode/executor.rb |