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