mattr_reader(*syms) public

Defines a class attribute and creates a class and instance reader methods. The underlying the class variable is set to nil, if it is not previously defined.

module HairColors
  mattr_reader :hair_colors
end

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

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

module Foo
  mattr_reader :"1_Badname "
end
# => NameError: invalid attribute name

If you want to opt out the creation on the instance reader method, pass instance_reader: false or instance_accessor: false.

module HairColors
  mattr_writer :hair_colors, instance_reader: false
end

class Person
  include HairColors
end

Person.new.hair_colors # => NoMethodError

Also, you can pass a block to set up the attribute with a default value.

module HairColors
  cattr_reader :hair_colors do
    [:brown, :black, :blonde, :red]
  end
end

class Person
  include HairColors
end

Person.hair_colors # => [:brown, :black, :blonde, :red]
Show source
Register or log in to add new notes.