Class: Subroutine::Factory::Builder
- Inherits:
-
Object
- Object
- Subroutine::Factory::Builder
- Defined in:
- lib/subroutine/factory/builder.rb
Instance Method Summary collapse
- #execute! ⇒ Object
- #extract_output(op) ⇒ Object
- #extras ⇒ Object
-
#initialize(config, *args) ⇒ Builder
constructor
A new instance of Builder.
- #inputs ⇒ Object
- #invoke_input(input) ⇒ Object
- #op_class ⇒ Object
Constructor Details
#initialize(config, *args) ⇒ Builder
Returns a new instance of Builder.
7 8 9 10 11 12 |
# File 'lib/subroutine/factory/builder.rb', line 7 def initialize(config, *args) @config = config @options = config..dup @args = args.dup @overrides = @args. end |
Instance Method Details
#execute! ⇒ Object
14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 |
# 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) ⇒ Object
75 76 77 78 79 80 81 82 83 84 85 86 87 |
# 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 ⇒ Object
50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 |
# 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 ⇒ Object
34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 |
# 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) ⇒ Object
66 67 68 69 |
# 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 ⇒ Object
71 72 73 |
# File 'lib/subroutine/factory/builder.rb', line 71 def op_class @options[:op].constantize end |