It’s very simple. Here’s what I want to do with a date that is formatted as YYYYMMDD:
month = datestring[0:2]
day = datestring[2:2]
year = datestring[4:4]
return "#{month}/#{day}/#{year}"
The problem is, and I’ve never understood this about Ruby, do I do:
- a module?
- a mixin?
- something else?
I know what I want to do, I just have NO idea what kind of file or structure to put it in. And if it’s a module, do I prefix the method name with the name of the module:
module DateHelper
def DateHelper.transform(datestring)
...
end
end
Why or why wouldn’t I do this? Thanks a lot for helping to clear something up that’s represented a mental block for me.
The code in your question is suggestive of a mixin, which is one possible way to go. It is more idiomatically written like this:
Notice that the method is an instance method, and that it has a name that won’t potentially clash with other methods in an arbitrary class. If you wanted the method available at the class-level, one way you could do this would be:
That is one way to handle class-level mixins; there are others as well.
Whether you want a mixin will depend upon the context. Does the date formatting involve code that you find repeating all over the place in unrelated classes? Is it a one-off that you will never use again? Is remembering state required? Is the date format so useful it might be made into an extension to a core library? The answer to these questions will suggest whether the code should be handled in a mixin or in some other way. (Mixins are generally implemented in Ruby with modules.) Part of really learning ruby is getting a sense of the answers to these questions in different contexts; there are few simple answers in this regard, and to a certain extent things depend upon convention, personal preference and house style.
As an aside, one way to get the date format you’re looking for is this (following your input date format of YYYYMMDD):
You would not necessarily chain it together in this way in your code—Brendan Benson’s response provides a good approach, for example—although you might not need something fancy if you’re only doing this in one place.