I have a class with a constant defined for it. I then have a class method defined that accesses that class constant. This works fine. An example:
#! /usr/bin/
Its probably worth noting that you don't need to include modules into a metaclass.
class NonInstantiableClass
Const = "hello, world!"
class << self
include CommonMethods
end
end
Ruby has the extend keyword that effectively adds the modules interface to a class, e.g.
class NonInstantiableClass
Const = "hello, world!"
extend CommonMethods
end
You still need to ensure you're referencing the right constant using self::Const or const_get, but extend <module> is the better way to add those methods to the class.
This seems to work:
#! /usr/bin/env ruby
module CommonMethods
def shout_my_constant
puts self::Const.upcase
end
end
class NonInstantiableClass
Const = "hello, world!"
class << self
include CommonMethods
end
end
NonInstantiableClass.shout_my_constant
HTH
The problem is, if you just write Const it is evaluated on Module creation time. You have to use Module#const_get instead like this: const_get(:Const). This is evaluated at runtime when the method is executed. So this happens in your class and not in your module.