See how our experiences differ? Just the other day I was fixing a bug caused by someone writing:
def squidget(options = {})
squid = { :foo => :bar, ... }.merge(options)
...
squid[:bash] = :blitz
end
The method was returning :blitz instead of the hash that the method was constructing. I changed it to a returning statement and to my eye it looks much more clear what is going on.
Of course, you could add a "return squid" at the end, or just plain "squid," but somehow that seems less clear, since when you start manufacturing the squid, it isn't obvious what you are doing until you reach the end of the method. Witha returning statement, you know right away.
All in all, I feel good about all constructions in Ruby that use blocks to wrap around the stuff they are doing, like
Foo.transaction do
...
end
But you're younger than I am, so your brain is probably sharper. Maybe you find it easier to just work directly with imperitive-style code. Many people I know prefer it that way. I know I like to simulate Scheme as much as possible, and use expressions instead of assigning local variables as much as possible. It could be laziness on my part.