I prefer to let my code and my tools remember stuff for me. Rails and similarly-magical Ruby systems have too high a (human) memory overhead for my taste. Hard to jump in and out of if it's not the main thing you do every day.
I know in my projects I use some techniques which if you continued to work on the project you would really appreciate how many problems it solves but it seems crazy to my coworkers. Luckily it's a small gem and I'm the one who works on it but still.
To metaprogramming! The cause of -- and solution to -- all of life's problems.
def my_method
super_result = super
...
(do something with super_result, or simply after super has been called)
...
super_result <== to make sure your method returns the result of super
end
you can just do this: def my_method
super.tap{|result| (do something with/after result) } <== will still return the result of super
endlike many other features on the fringe of a language it's important to understand when it's appropriate to use
also - there are few better buzzes writing code than doing something neat, skinny and appropriate with those Ruby features
I sometimes fantasise about a world where what you describe is just... how we write software. I really wish i could use my colleagues libraries instead of digging into their source code.
As far as the metaprogramming is encapsulated in a module with a good API and serves to make business code easier to read, it can be extremely helpful.