From: Rich Kilmer Date: 2001-10-07T03:41:06+09:00 Subject: [ruby-talk:22164] Creating external accessors for class constants I find myself wanting to use class constants more globally in my code. Because of Ruby's encapsulation rules, every attribute (and constant) is private. A helper method exists on Module to simplify externalizing attributes: attr, attr_accessor, attr_reader, attr_writer I was wondering whether it would make sense to have a similar method for class constants? const_reader defined as follows.... # add the const_reader method to Module class Module def const_reader(*symbols) symbols.each do |symbol| class_eval "def #{self.name}.#{symbol.to_s}; #{symbol.to_s}; end" end end end # define constants and export them via const_reader: class Airlines AA="American Airlines" BA="British Airways" const_reader :AA, :BA end # These constants are now accessible via class methods (publicly) # but (still) as constants internal to the class (no method overhead). puts Airlines.AA # => "American Airlines" puts Airlines.BA # => "British Airways" -Rich Kilmer