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
then_call(unit = nil, &block)
Alias for: call

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