Class: Hirb::Helpers::ParentChildTree

Inherits:
Tree
  • Object
show all
Defined in:
lib/hirb/helpers/parent_child_tree.rb

Instance Attribute Summary

Attributes inherited from Tree

#nodes

Class Method Summary collapse

Methods inherited from Tree

#initialize, #mark_last_nodes_per_level, #render, #render_basic, #render_description, #render_directory, #render_nodes, #render_number, #render_tree, #validate_nodes

Constructor Details

This class inherits a constructor from Hirb::Helpers::Tree

Class Method Details

.build_node(node, level) ⇒ Object

:nodoc:



19
20
21
22
# File 'lib/hirb/helpers/parent_child_tree.rb', line 19

def build_node(node, level) #:nodoc:
  @nodes << {:value=>@value_method.call(node), :level=>level}
  @children_method.call(node).each {|e| build_node(e, level + 1)}
end

.render(root_node, options = {}) ⇒ Object

Starting with the given node, this builds a tree by recursively calling a children method. Takes same options as Hirb::Helper::Table.render with some additional ones below.

Options:

:value_method

Method or proc to call to display as a node’s value. If not given, uses :name if node responds to :name or defaults to :object_id.

:children_method

Method or proc to call to obtain a node’s children. Default is :children.



9
10
11
12
13
14
15
16
17
# File 'lib/hirb/helpers/parent_child_tree.rb', line 9

def render(root_node, options={})
  value_method = options[:value_method] || (root_node.respond_to?(:name) ? :name : :object_id)
  @value_method = value_method.is_a?(Proc) ? value_method : lambda {|n| n.send(value_method) }
  children_method = options[:children_method] || :children
  @children_method = children_method.is_a?(Proc) ? children_method : lambda {|n| n.send(children_method)}
  @nodes = []
  build_node(root_node, 0)
  super(@nodes, options)
end