Flowdock
cattr_reader(*syms) public

Defines a class attribute if it’s not defined and creates a reader method that returns the attribute value.

class Person
  cattr_reader :hair_colors
end

Person.class_variable_set("@@hair_colors", [:brown, :black])
Person.hair_colors     # => [:brown, :black]
Person.new.hair_colors # => [:brown, :black]

The attribute name must be a valid method name in Ruby.

class Person
  cattr_reader :"1_Badname "
end
# => NameError: invalid attribute name

If you want to opt out the instance reader method, you can pass :instance_reader => false or :instance_accessor => false.

class Person
  cattr_reader :hair_colors, :instance_reader => false
end

Person.new.hair_colors # => NoMethodError
Show source
Register or log in to add new notes.
January 27, 2009 - (v2.1.0 - v2.2.1)
2 thanks

Description

Similar to Ruby’s built-in attr_reader, only it creates a class attribute reader method (as opposed to an instance attribute reader method).

February 2, 2013
0 thanks

Other Example

##

class Exam
 cattr_reader :code, :description, :points, :instance_reader => false

 @@code = "EXM"
 @@description = "Sent Exam"
 @@points = 1000
end

In this case it’s possible to use

Exam.code # => EXM
Exam.description # => Sent Exam
Exam.points # => 1000