[rspec-users] Depot app, Demeter's law and troubles cleanly specing

David Chelimsky dchelimsky at gmail.com
Fri Nov 27 06:07:57 EST 2009


On Thu, Nov 26, 2009 at 9:24 PM, Emerson Macedo <lists at ruby-forum.com>wrote:

> Fernando Perez wrote:
> > Hi,
> >
> > Let's take the example of the depot app. In my controller I set @order.
> > Then in the view comes the bad stuff:
> >
> > @order.items.each do |item|
> >   item.product.title
> > end
> >
> > Now I'm having problems specing item.product.title. A quick and dirty
> > fix is to trade a for for an underscore, so I create Item#product_title:
> >
> > def product_title
> >   product.title
> > end
> >
> > The problem is that I have a few models that act the same way, so I
> > would find myself writing lot's of these little instance methods, and
> > the solution looks a bit stupid to me. So how do you handle such issue?
> >
> > I thought about composed_of, but AWDWR's examples still break Demeter's
> > law and that annoys me.
> >
> >
> > Thanks in advance
>
> Hi, please try the Law of Demeter gem
>
> Its a DRY way to apply Law of Demeter with demeter gem
>

Interesting. There is a plugin still floating around called Demeter's
Revenge that does a similar thing with associations rather than attributes.
So, in the demeter gem, you can do this:

@post.author_name # same as @post.author.name

Whereas in demeters_revenge you can do this:

@post.create_author # same as @post.author.create

Be nice if both sets of behaviour were in one gem :)
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://rubyforge.org/pipermail/rspec-users/attachments/20091127/c9c79f4e/attachment-0001.html>


More information about the rspec-users mailing list