Last month I wrote a short post on some of the benefits of using fluent interfaces. A slightly annoying element of implementing fluent interfaces is that fluent methods must return self. For example:
# ... def im_fluent # Do stuff self end def me_too # Do stuff self end # ...This annoys me not because its some form of duplication (tacking
self
on the end of each method is far from difficult to manage). Rather, I dislike this because it's not necessarily clear to programmers using this code that returning self
enables the benefits of fluent methods. That's where the froyo
gem (Fluent Ruby Objects Yo) comes in.When a ruby class extends
FroYo
, it mixes-in the make_fluent
method. make_fluent
accepts the symbols (or string names) of existing method names and creates proxies that return self
, leaving existing methods intact. The proxy methods are prefixed with an underscore. Without further ado, here's a simple, useless example:
require 'froyo' class FunkyStringMaker extend FroYo def initialize @value = '' end def appending_funky @value.concat('funky') end def n_times_append_monkey(n) n.times { @value.concat('monkey') } end def blah @value = 'blah ' + @value end def to_s @value end make_fluent :blah, :n_times_append_monkey, :appending_funky end FunkyStringMaker.new. _appending_funky. _n_times_append_monkey(2). _blah.to_s # => 'blah funkymonkeymonkey'
As usual, all code is on my github.
No comments:
Post a Comment