So I understand that the attr syntax sugar in ruby translates into just defining instance variables and methods for writing/reading them.
What I'm wanting to know is, what are the best practices for design if you are trying to keep your class public interfaces minimal? Should you avoid attr_accessor like unless very clearly public? How do attr_writer and attr_reader fit into public/private visibility?
If it makes sense, say, to use attr_reader for private fields that are often read, should you use attr_reader liberally and not even define the fields explicitly?