Using self as the first argument in ruby instance methods -
this string#dasherize activesupport::inflector:
def dasherize(underscored_word) underscored_word.tr('_', '-') end it replaces underscores in string dashes.
'puni_puni'.dasherize # => "puni-puni" the receiver used argument method.
activesupport::inflector.dasherize(puni_puni) # => "puni-puni" when try similar, doesn't work:
module newdash def new_dasherize(underscored_word) underscored_word.tr('_', '-') end end string.include newdash t = "t_e_s_t" t.new_dasherize # => argumenterror: wrong number of arguments (0 1) t.new_dasherize(t) # => "t-e-s-t" how can replicate behavior, , technical term it?
you can in couple different ways. lclk mentioned 1 way, setting self default underscored_word in argument list. way referencing self directly
module newdash def new_dasherize self.tr('_', '-') end end string.include newdash after running that, can call new_dasherize directly on string itself
>> 'puni_puni'.new_dasherize => "puni-puni" you can achieve exact same thing, activesupport style, this
class string def new_dasherize self.tr('_', '-') end end that's activesupport does, open string class (check out) , tack on methods. happen delegate implementation of dasherize method activesupport::inflections
if here, you'll see activesupport implements dasherize method.
the technical term "extending object", though i'm not positive on that.
Comments
Post a Comment