I have a two part question
Best-Practice
These are the options I can see, which is the best?:
Technical part
Is there any way to make a private Module method?
module Thing def self.pub; puts "Public method"; end private def self.priv; puts "Private method"; end end
The private
in there doesn't seem to have any effect, I can still call Thing.priv
without issue.
Private instance/class methods for modulesDefining a private instance method in a module works just like in a class, you use the private keyword. You can define private class methods using the private_class_method method.
What is a private method in Ruby? It's a type of method that you can ONLY call from inside the class where it's defined. This allows you to control access to your methods.
Using BasicObject#instance_eval , you can call private method.
Both protected and private methods cannot be called from the outside of the defining class. Protected methods are accessible from the subclass and private methods are not. Private methods of the defining class can be invoked by any instance of that class. Public access is the default one.
I think the best way (and mostly how existing libs are written) to do this is by creating a class within the module that deals with all the logic, and the module just provides a convenient method, e.g.
module GTranslate class Translator def perform(text) translate(text) end private def translate(text) # do some private stuff here end end def self.translate(text) t = Translator.new t.perform(text) end end
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With