Ruby as an Object Oriented Language. What that means is whatever message I send, I strictly send it on some object/instance of class.
Example:
class
where is the object that I am sending method on
It's self. Whenenver you don't specify a receiver, the receiver is self.
The definition of private in Ruby is that private methods can only be called without a receiver, i.e. with an implicit receiver of self. Interestingly, it didn't bother you at all with the puts method which is also a private instance method ;-)
Note: there's an exception to this rule. Private setters can be called with an explicit receiver, as long as the receiver is self. In fact, they must be called with an explicit receiver, because otherwise there would be an ambiguity with local variable assignments:
foo = :fortytwo # local variable
self.foo = :fortytwo # setter