def follow_path( steps, past_steps = [] )
if steps.is_a?( Hash )
steps.each do |step, next_steps|
path_to_this_point = [past_steps, step].flatten
reflection = reflection_for( path_to_this_point ) rescue nil
if reflection
follow_path( next_steps, path_to_this_point )
else
follow_comparison( next_steps, past_steps, step )
end
end
elsif steps.is_a?( Array ) && steps.length == 2
if reflection_for( past_steps )
follow_comparison( steps, past_steps, :id )
else
follow_comparison( steps, past_steps[0..-2], past_steps[-1] )
end
else
raise "invalid obligation path #{[past_steps, steps].inspect}"
end
end