I just finished reading this book. This book has the best explanation on symbols. It does a good job of explaining duck typing, blocks and metaprogramming. The topics under metaprogramming are very easy to understand, they are reflection, message sending and method missing.
I found it easier to understand because it shows snippets of Java code to show how the problem can be solved and then gives the Ruby equivalent.
It does not explain very well or go deeper on the DSL topic. This could have doubled the size of the book easily.