class Bumbleworks::TreeBuilder

Attributes

name[R]
tree[R]

Public Class Methods

from_definition(*args, &block) click to toggle source
# File lib/bumbleworks/tree_builder.rb, line 34
def from_definition(*args, &block)
  tree = ::Ruote.define *args, &block
  builder = new(:tree => tree)
end
new(options) click to toggle source
# File lib/bumbleworks/tree_builder.rb, line 10
def initialize(options)
  @forced_name = options[:name]
  @definition = options[:definition]
  @tree = options[:tree]
  unless !!@definition ^ !!@tree
    raise ArgumentError, "Must specify either definition or tree (not both)" 
  end
end

Public Instance Methods

build!() click to toggle source
# File lib/bumbleworks/tree_builder.rb, line 19
def build!
  initialize_tree_from_definition! unless @tree
  if @name = name_from_tree
    @forced_name ||= name
    raise InvalidTree, "Name does not match name in definition" if @forced_name != @name
    @tree[1].delete(@tree[1].keys.first)
  end
  @name = @forced_name
  add_name_to_tree!
  @tree
rescue ::Ruote::Reader::Error => e
  raise InvalidTree, e.message
end

Private Instance Methods

add_name_to_tree!() click to toggle source
# File lib/bumbleworks/tree_builder.rb, line 56
def add_name_to_tree!
  @tree[1] = { "name" => @name }.merge(@tree[1])
end
initialize_tree_from_definition!() click to toggle source
# File lib/bumbleworks/tree_builder.rb, line 42
def initialize_tree_from_definition!
  converted = @definition.strip.gsub(/^Bumbleworks.define_process/, 'Ruote.define')
  @tree = ::Ruote::Reader.read(converted)
end
name_from_tree() click to toggle source
# File lib/bumbleworks/tree_builder.rb, line 47
def name_from_tree
  first_key, first_value = @tree[1].first
  name_from_tree = if first_key == 'name'
    first_value
  elsif first_value.nil?
    first_key
  end
end