Declare private accessors in Ruby

Updated . Posted . Visible to the public.

Sometimes you might want certain accessors to only be available within your class, so you make them private. However Ruby will yell a warning at you if you do something like this:

private
attr_accessor :name
#=> warning: private attribute?

In order to filter out this noise you can declare your own accessor like so:

module PrivateAccessors
  def private_attr_accessor(*names)
    attr_accessor *names
    private *names
  end
  
  def private_attr_reader(*names)
    attr_reader *names
    private *names
  end
 
  def private_attr_writer(*names)
    attr_writer *names
    names = names.map do |attr| "#{attr}=".to_sym end
    private *names
  end
end
Jan Bussieck
Last edit
Jan Bussieck
Posted by Jan Bussieck to 9elements's deck (2015-06-04 13:42)