# File lib/model.rb, line 135 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