Sha256: 2af904cba8e713bd5e6f155d3572ef02a068c888988a7a1610cf289c263adb93
Contents?: true
Size: 1.06 KB
Versions: 3
Compression:
Stored size: 1.06 KB
Contents
module BusinessFlow class Step attr_reader :klass, :inputs, :outputs def initialize(klass, inputs, outputs, flow_klass) @klass = klass @inputs = inputs @outputs = outputs @flow_klass = flow_klass end # @klass can be a symbol or class def dispatch(flow, inputs) callable.call(flow, inputs) end private def callable @callable ||= if @klass.is_a?(Symbol) && @flow_klass.method_defined?(@klass) || @flow_klass.private_method_defined?(@klass) proc { |flow, _| flow.send(@klass) && nil } else @klass = lookup_klass || raise(NameError, "undefined constant #{@klass}") proc { |_, inputs| @klass.call(inputs) } end end def lookup_klass return @klass unless @klass.is_a?(Symbol) constant_name = @klass.to_s.camelcase @flow_klass.parents.each do |parent| begin break parent.const_get(constant_name) rescue NameError next end end end end end
Version data entries
3 entries across 3 versions & 1 rubygems
Version | Path |
---|---|
business_flow-0.1.2 | lib/business_flow/step.rb |
business_flow-0.1.1 | lib/business_flow/step.rb |
business_flow-0.1.0 | lib/business_flow/step.rb |