Private module methods in Ruby
I have a two part question
- I have an algorithm that performs some operation on a data structure using the public interface
- It is currently a module with numerous static methods, all private except for the one public interface method.
- There is one instance variable that needs to be shared among all the methods.
These are the options I can see, which is the best?:
- Module with static ('module' in ruby) methods
- Class with static methods
- Mixin module for inclusion into the data structure
- Refactor out the part of the algorithm that modifies that data structure (very small) and make that a mixin that calls the static methods of the algorithm module
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.
I think the best way (and mostly how existing libs are written) do this by making 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 ); 'hola munda'; end end def self.translate( text ) t = Translator.new t.perform( text ) end end