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
Posted by Jan Bussieck to 9elements's deck (2015-06-04 13:42)