class CarryOut::PlanBuilder
Attributes
current_node[W]
plan[R]
Public Class Methods
build(options = {}, &block)
click to toggle source
# File lib/carry_out/plan_builder.rb, line 18 def self.build(options = {}, &block) options = { block_binding: block.binding }.merge(options) builder = PlanBuilder.new(options) builder.cloaker(&block) builder.plan end
new(options = {}, &block)
click to toggle source
# File lib/carry_out/plan_builder.rb, line 10 def initialize(options = {}, &block) @plan = Plan::Node.new @constant_resolver = [ options[:search] ].flatten(1) @block_binding = options[:block_binding] configure_node(@plan, &block) if block end
Public Instance Methods
call(unit = nil, &block)
click to toggle source
# File lib/carry_out/plan_builder.rb, line 29 def call(unit = nil, &block) unit = find_object(unit) if unit.is_a?(Symbol) || unit.is_a?(String) node = Plan::Node.new(unit) configure_node(node, &block) if block current_node.connects_to = node self.current_node = node node end
Also aliased as: then_call
method_missing(method, *args, &block)
click to toggle source
Calls superclass method
CarryOut::Cloaker#method_missing
# File lib/carry_out/plan_builder.rb, line 42 def method_missing(method, *args, &block) obj = find_object(method) if obj call(obj, &block) else super end end
Private Instance Methods
configure_node(node, &block)
click to toggle source
# File lib/carry_out/plan_builder.rb, line 55 def configure_node(node, &block) Plan::NodeContext.new(node).cloaker(@block_binding, &block) end
current_node()
click to toggle source
# File lib/carry_out/plan_builder.rb, line 59 def current_node @current_node ||= @plan end
find_object(name)
click to toggle source
# File lib/carry_out/plan_builder.rb, line 63 def find_object(name) constant_name = name.to_s.split('_').map { |w| w.capitalize }.join('') @constant_resolver.inject(nil) do |obj, m| return obj if obj if m.respond_to?(:call) m.call(constant_name) else m.const_get(constant_name) rescue nil end end end