I have a two part question
Best-Practice
- 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
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.
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.