class Class
def cattr_reader(*syms)
end
cattr_reader :hair_colors, instance_reader: false
class Person
or instance_accessor: false.
If you want to opt out the instance reader method, you can pass instance_reader: false
# => NameError: invalid attribute name
end
cattr_reader :"1_Badname "
class Person
The attribute name must be a valid method name in Ruby.
Person.new.hair_colors # => [:brown, :black]
Person.hair_colors # => [:brown, :black]
Person.class_variable_set("@@hair_colors", [:brown, :black])
end
cattr_reader :hair_colors
class Person
returns the attribute value.
Defines a class attribute if it's not defined and creates a reader method that
def cattr_reader(*syms) options = syms.extract_options! syms.each do |sym| raise NameError.new("invalid class attribute name: #{sym}") unless sym =~ /^[_A-Za-z]\w*$/ class_eval(<<-EOS, __FILE__, __LINE__ + 1) unless defined? @@#{sym} @@#{sym} = nil end def self.#{sym} @@#{sym} end EOS unless options[:instance_reader] == false || options[:instance_accessor] == false class_eval(<<-EOS, __FILE__, __LINE__ + 1) def #{sym} @@#{sym} end EOS end end end