mirror of
https://github.com/rails/rails.git
synced 2022-11-09 12:12:34 -05:00
9a0e09696a
Introduce Module#delegate_missing_to
1.5 KiB
1.5 KiB
-
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.
Jeremy Daer
Please check 5-0-stable for previous changes.