class Github::CoreExt::OrderedHash

def ==(hsh2)

def ==(hsh2)
  return false if @order != hsh2.order
  super hsh2
end

def [](*args)

def [](*args)
  hsh = OrderedHash.new
  if Hash == args[0]
    hsh.replace args[0]
  elsif (args.size % 2) != 0
    pp args if ENV['DEBUG']
    raise ArgumentError, "odd number of elements for Hash"
  else
    0.step(args.size - 1, 2) do |a|
      b = a + 1
      hsh[args[a]] = args[b]
    end
  end
  hsh
end

def []=(key, value)

def []=(key, value)
  @order.push key unless member?(key)
  super key, value
end

def __class__

def __class__
  OrderedHash
end

def class

def class
  Hash
end

def clear

def clear
  @order = []
  super
end

def delete(key)

def delete(key)
  @order.delete key
  super
end

def delete_if

def delete_if
  @order.clone.each { |k| delete k if yield }
  self
end

def each

def each
  @order.each { |k| yield k, self[k] }
  self
end

def each_key

def each_key
  @order.each { |k| yield k }
  self
end

def each_value

def each_value
  @order.each { |k| yield self[k] }
  self
end

def initialize(*args, &block)

def initialize(*args, &block)
  super
  @order = []
end

def keys

def keys
  @order
end

def replace(hsh2)

def replace(hsh2)
  @order = hsh2.keys
  super hsh2
end

def shift

def shift
  key = @order.first
  key ? [key, delete(key)] : super
end

def values

def values
  ary = []
  @order.each { |k| ary.push self[k] }
  ary
end