When creating singleton methods in classes and modules I prefer the def self.name notation since I think it’s more distinct, plus a few more reasons. The limitation of it is that it doesn’t allow to create private methods by default.
module Mo
private
def self.private?
"No!"
end
end
>> Mo.private?
=> "No!"
The solution is using class << self notation:
module Mo
class << self
private
def actually_private?
"Oh yes... But you won't see this, I'm private you know..."
end
end
end
>> Mo.actually_private?
NoMethodError: private method `actually_private?' called for Mo:Module