class AdvancedSearch::SExp::NodeBuilder

@api private

Public Class Methods

new(type, *args) click to toggle source

@api private

# File lib/advanced_search/sexp/node_builder.rb, line 8
def initialize(type, *args)
  @type = type
  @args = args
end

Public Instance Methods

build() click to toggle source

@api private

# File lib/advanced_search/sexp/node_builder.rb, line 14
def build
  constructor_args, child_nodes = split_args
  # puts [@type, @args, constructor_arity, constructor_args, child_nodes].inspect
  node = node_class.new(*constructor_args)
  add_edges(node, child_nodes)
  node
end

Private Instance Methods

add_edges(node, children) click to toggle source

@api private

# File lib/advanced_search/sexp/node_builder.rb, line 25
def add_edges(node, children)
  children.each do |i|
    node.add_edge(i)
  end
end
constructor_arity() click to toggle source

@api private

# File lib/advanced_search/sexp/node_builder.rb, line 32
def constructor_arity
  node_class.allocate.method(:initialize).arity
end
node_class() click to toggle source

@api private

# File lib/advanced_search/sexp/node_builder.rb, line 37
def node_class
  @_node_class ||= ::Object.const_get(node_class_path)
rescue ::NameError => e
  raise InvalidType.new(@type, e)
end
node_class_path() click to toggle source

@api private @return String - absolute constant path

# File lib/advanced_search/sexp/node_builder.rb, line 45
def node_class_path
  format('::AdvancedSearch::AST::%s', @type.to_s.capitalize)
end
split_args() click to toggle source

@api private

# File lib/advanced_search/sexp/node_builder.rb, line 50
def split_args
  c_arity = constructor_arity
  [
    @args[0, c_arity],
    @args[c_arity..-1]
  ]
end