Very interesting approach, this is how I write my service objects nowdays. It’s the way it feels more idiomatic and useful. Here are my thoughts about it and how it lead me to discover the functional programming techniques trying to improve my OO.
Update: BTW I tend to use the self.call instead of self.build like the @jeff_dickey example, for me it works better this way and is easier to stub (using a block). When it comes to use attributes or not: if I use them I never modify them outside the constructor. Using attributes or not depends on the developer or the problem itself, here is the inflection point between going for the FP or OO approach.