class Subroutine::Factory::Builder
Public Class Methods
new(config, *args)
click to toggle source
# File lib/subroutine/factory/builder.rb, line 7 def initialize(config, *args) @config = config @options = config.options.dup @args = args.dup @overrides = @args.extract_options! end
Public Instance Methods
execute!()
click to toggle source
# File lib/subroutine/factory/builder.rb, line 14 def execute! args = @args.dup Array(@options[:setups]).each{|block| block.call(args, extras) } args.push(inputs) op = op_class.new(*args) Array(@options[:befores]).each{|block| block.call(op, extras) } op.submit! output = extract_output(op) Array(@options[:afters]).each{|block| block.call(op, output, extras) } output end
extract_output(op)
click to toggle source
# File lib/subroutine/factory/builder.rb, line 75 def extract_output(op) if @options[:output] return op.send(@options[:output]) elsif @options[:outputs] if @options[:outputs].length == 1 && @options[:outputs][0].is_a?(Array) @options[:outputs][0].map{|output| op.send(output) } else @options[:outputs].inject({}){|out, output| out[output] = op.send(output); out } end else op end end
extras()
click to toggle source
# File lib/subroutine/factory/builder.rb, line 50 def extras @extras ||= begin out = {} @options[:extras].each_pair do |k, v| if @overrides.has_key?(k) out[k] = @overrides[k] elsif !v.nil? out[k] = invoke_input(v) end end out end end
inputs()
click to toggle source
# File lib/subroutine/factory/builder.rb, line 34 def inputs @inputs ||= begin out = {} @options[:inputs].each_pair do |k,v| if @overrides.has_key?(k) out[k] = @overrides[k] else out[k] = invoke_input(v) end end out end end
invoke_input(input)
click to toggle source
# File lib/subroutine/factory/builder.rb, line 66 def invoke_input(input) return input unless input.respond_to?(:call) input.arity.zero? ? input.call : input.call(extras) end
op_class()
click to toggle source
# File lib/subroutine/factory/builder.rb, line 71 def op_class @options[:op].constantize end