metaprogramming/module_constants.rb
tests/_examples/metaprogramming/module_constants.rb in the metorex repository.
# Module#constants — written without parentheses where possible. Covers
# own constants, mixin constants (transitively), the inherit flag,
# private_constant filtering, Symbol indexing, and Array difference.
module Deep
DEEP_CONST = 1
end
module Shallow
include Deep
SHALLOW_CONST = 2
end
class Holder
include Shallow
OWN_CONST = 3
SECRET = 4
private_constant :SECRET
end
puts Holder.constants.sort.inspect
puts Holder.constants(false).sort.inspect
puts Holder.constants(nil).sort.inspect
inherited_only = Holder.constants - Holder.constants(false)
puts inherited_only.sort.inspect
sym = :Word
puts sym[0]
puts sym[0] == sym[0].upcase
count = Module.constants.size
module AddedTop
end
puts Module.constants.size == count + 1
puts Module.constants.include?(:Array)
Object.send :remove_const, :AddedTop
Output:
[:DEEP_CONST, :OWN_CONST, :SHALLOW_CONST]
[:OWN_CONST]
[:OWN_CONST]
[:DEEP_CONST, :SHALLOW_CONST]
W
true
true
true