Nested methods make me all DRY
(by Erik Peterson on January 29th 2008)

Here's a cool little thing I ran into when investigating scoped_struct You can nest methods on ruby:

def a
  def b
    return "b"
  end
end

That way, when you do a.b you get "b" as the result. Pretty neat, huh? This would be much more useful if you used it in classes to shorten up method names. Going with the example in Mike's blog, let's have a Player class that represents a football player. We want methods to give us some stats back:

class Player
  def fumbles
    def dropped
      1
    end
    def lost
      2
    end
    def recovered
      3
    end
    self
  end
end

This way, you get my_player.fumbles.dropped and my_player.fumbles.received all nested and defined all DRY like. One little catch is that you have to put that self return right after the method definitions in the fumbles scope. Otherwise, you'll get all kinds of nil errors.