diff options
Diffstat (limited to 'activesupport/CHANGELOG.md')
-rw-r--r-- | activesupport/CHANGELOG.md | 47 |
1 files changed, 47 insertions, 0 deletions
diff --git a/activesupport/CHANGELOG.md b/activesupport/CHANGELOG.md index 25b8af7d34..812e18a253 100644 --- a/activesupport/CHANGELOG.md +++ b/activesupport/CHANGELOG.md @@ -1,3 +1,50 @@ +* Introduce Module#delegate_missing_to. + + When building a decorator, a common pattern emerges: + + class Partition + def initialize(first_event) + @events = [ first_event ] + end + + def people + if @events.first.detail.people.any? + @events.collect { |e| Array(e.detail.people) }.flatten.uniq + else + @events.collect(&:creator).uniq + end + end + + private + def respond_to_missing?(name, include_private = false) + @events.respond_to?(name, include_private) + end + + def method_missing(method, *args, &block) + @events.send(method, *args, &block) + end + end + + With `Module#delegate_missing_to`, the above is condensed to: + + class Partition + delegate_missing_to :@events + + def initialize(first_event) + @events = [ first_event ] + end + + def people + if @events.first.detail.people.any? + @events.collect { |e| Array(e.detail.people) }.flatten.uniq + else + @events.collect(&:creator).uniq + end + end + end + + *Genadi Samokovarov*, *DHH* + * Rescuable: If a handler doesn't match the exception, check for handlers matching the exception's cause. |