class Module

def local_constants

ancestor is identical to their definition in the receiver.
previous versions it may miss some constants if their definition in some
not in an ancestor. This method is exact if running under Ruby 1.9. In
Returns the constants that have been defined locally by this object and
def local_constants
  inherited = {}
  ancestors.each do |anc|
    next if anc == self
    anc.constants.each { |const| inherited[const] = anc.const_get(const) }
  end
  constants.select do |const|
    !inherited.key?(const) || inherited[const].object_id != const_get(const).object_id
  end
end