lib/hirb/helpers/parent_child_tree.rb in cldwalker-hirb-0.2.5 vs lib/hirb/helpers/parent_child_tree.rb in cldwalker-hirb-0.2.6

- old
+ new

@@ -3,20 +3,21 @@ # 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 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 to call to obtain a node's children. Default is :children. + # [:children_method] Method or proc to call to obtain a node's children. Default is :children. def render(root_node, options={}) @value_method = options[:value_method] || (root_node.respond_to?(:name) ? :name : :object_id) @children_method = options[:children_method] || :children @nodes = [] build_node(root_node, 0) super(@nodes, options) end def build_node(node, level) #:nodoc: @nodes << {:value=>node.send(@value_method), :level=>level} - node.send(@children_method).each {|e| build_node(e, level + 1)} + children = @children_method.is_a?(Proc) ? @children_method.call(node) : node.send(@children_method) + children.each {|e| build_node(e, level + 1)} end end -end \ No newline at end of file +end