Method: Ditz::ModelObject#each_modelobject
- Defined in:
- lib/ditz/model.rb
#each_modelobject ⇒ Object
depth-first search on all reachable ModelObjects. fuck yeah.
184 185 186 187 188 189 190 191 192 193 194 195 196 197 198 199 200 201 |
# File 'lib/ditz/model.rb', line 184 def each_modelobject seen = {} to_see = [self] until to_see.empty? cur = to_see.pop seen[cur] = true yield cur cur.class.field_names.each do |f| val = cur.send(f) next if seen[val] if val.is_a?(ModelObject) to_see.push val elsif val.is_a?(Array) to_see += val.select { |v| v.is_a?(ModelObject) } end end end end |