Metaprogramming Ruby 2
Program Like the Ruby Pros
by Paolo Perrotta
Write powerful Ruby code that is easy to maintain and change. With
metaprogramming, you can produce elegant, clean, and beautiful programs.
Once the domain of expert Rubyists, metaprogramming is now accessible to
programmers of all levels. This thoroughly revised and updated second
edition of the bestselling Metaprogramming Ruby explains
metaprogramming in a down-to-earth style and arms you with a practical
toolbox that will help you write your best Ruby code ever.
eBook Formats:
Get all eBook formats here for $27.95 (USD)
Add to Cart
Dig under the surface and explore Ruby’s most advanced feature: a
collection of techniques and tricks known as metaprogramming. In this
book, you’ll learn metaprogramming as an essential component of Ruby and
discover the deep, non-obvious details of the language. Once you
understand the tenets of Ruby, including the object model, scopes, and
singleton classes, you’re on your way to applying metaprogramming both
in your daily work assignments and in your fun, after-hours projects.
Metaprogramming Ruby, Second Edition makes mastering the language
enjoyable. The book is packed with:
- Pragmatic examples of metaprogramming in action, many of which come
straight from real-life gems such as Rails.
- Programming challenges that let you experiment and play with some of
the most out-there metaprogramming concepts.
- Metaprogramming “spells”—33 practical recipes and idioms that you
can study and apply right now, to write code that is sure to
impress.
This completely revised new edition covers the new features in Ruby 2.0
and 2.1, and contains code from the latest Ruby libraries, including
Rails 4. Most examples are new, “from the wild,” with more recent
libraries. And the book reflects current ideas of when and how much
metaprogramming you should use.
Whether you’re a Ruby apprentice on the path to mastering the language
or a Ruby wiz in search of new tips, this book is for you.
What You Need
Ruby 2.x, Ruby 1.9, or a recent version of JRuby.
Resources
Releases:
- P3.1 2020/04/23
- P3.0 2016/08/06
- P2.0 2015/04/03
- P1.0 2014/08/12
Introduction
- Metaprogramming Ruby
- The M Word
- Ghost Towns and Marketplaces
- The Story of Bob, Metaprogrammer
- Metaprogramming and Ruby
- Monday: The Object Model
- Open Classes
- Inside the Object Model
- Quiz: Missing Lines
- What Happens When You Call a Method?
- Quiz: Tangle of Modules
- Wrap-Up
- Tuesday: Methods
excerpt
- A Duplication Problem
- Dynamic Methods
- method_missing
- Quiz: Bug Hunt
- Blank Slates
- Wrap-Up
- Wednesday: Blocks
- The Day of the Blocks
- Quiz: Ruby#
- Blocks Are Closures
excerpt
- instance_eval()
- Callable Objects
- Writing a Domain-Specific Language
- Quiz: A Better DSL
- Wrap-Up
- Thursday: Class Definitions
- Class Definitions Demystified
- Quiz: Class Taboo
- Singleton Methods
- Singleton Classes
- Quiz: Module Trouble
- Method Wrappers
- Quiz: Broken Math
- Wrap-Up
- Friday: Code That Writes Code
- Coding Your Way to the Weekend
- Kernel#eval
- Quiz: Checked Attributes (Step 1)
- Quiz: Checked Attributes (Step 2)
- Quiz: Checked Attributes (Step 3)
- Quiz: Checked Attributes (Step 4)
- Hook Methods
- Quiz: Checked Attributes (Step 5)
- Wrap-Up
- Epilogue
- Metaprogramming in Rails
- Preparing for a Rails Tour
- Ruby on Rails
- Installing Rails
- The Rails Source Code
- The Design of ActiveRecord
- A Short ActiveRecord Example
- How ActiveRecord Is Put Together
- A Lesson Learned
- ActiveSupport’s Concern Module
excerpt
- Rails Before Concern
- ActiveSupport::Concern
- A Lesson Learned
- The Rise and Fall of alias_method_chain
- The Rise of alias_method_chain
- The Fall of alias_method_chain
- A Lesson Learned
- The Evolution of Attribute Methods
- Attribute Methods in Action
- A History of Complexity
- A Lesson Learned
- One Final Lesson
- Metaprogramming Is Just Programming
- Appendixes
- Common Idioms
- Mimic Methods
- Nil Guards
- Self Yield
- Symbol#to_proc()
- Domain-Specific Languages
- The Case for Domain-Specific Languages
- Internal and External DSLs
- DSLs and Metaprogramming
- Spell Book
Author
Paolo Perrotta has fifteen years of experience as a developer,
ranging from embedded to enterprise software, computer games, and web
applications. Paolo lives a nomadic life, mentoring agile teams
throughout Europe. He has a base camp in Bologna, Italy. He loves Ruby.