collectiveidea / recursable

Some helpers for using trees in Rails

recursable / lib / recursable.rb
100644 34 lines (30 sloc) 0.766 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
require 'recursable/enumerable'
require 'recursable/nested_set'
require 'recursable/object'
require 'recursable/tree'
 
module Recursable
  def recurse &block
    block.call self, lambda{
      self.children.each do |child|
        child.recurse &block
      end
    }
  end
  
  # A recursion method built for awesome_nested_set. Probably won't work with other nested_sets.'
  def nested_set_recurse(set, &block)
    block.call self, lambda{
      index = set.index(self) + 1
      while set[index].parent_id == self.id
        set[index].nested_set_recurse(set, &block)
        index += 1
      end
    }
  end
 
  def recursive_map &block
    block.call self, lambda{
      self.children.map do |child|
        child.recursive_map &block
      end
    }
  end
end