lib/tryouts/mixins/hash.rb



class Hash
  
  # A depth-first look to find the deepest point in the Hash. 
  # The top level Hash is counted in the total so the final
  # number is the depth of its children + 1. An example:
  # 
  #     ahash = { :level1 => { :level2 => {} } }
  #     ahash.deepest_point  # => 3
  #
  def deepest_point(h=self, steps=0)
    if h.is_a?(Hash)
      steps += 1
      h.each_pair do |n,possible_h|
        ret = deepest_point(possible_h, steps)
        steps = ret if steps < ret
      end
    else
      return 0
    end
    steps
  end
  
  unless method_defined?(:last)
    # Ruby 1.9 doesn't have a Hash#last (but Tryouts::OrderedHash does). 
    # It's used in Tryouts to return the most recently added instance of
    # Tryouts to @@instances. 
    #
    # NOTE: This method is defined only when Hash.method_defined?(:last)
    # returns false. 
    def last
      self[ self.keys.last ]
    end
  end
  
end