1
0
Fork 0
mirror of https://github.com/rails/rails.git synced 2022-11-09 12:12:34 -05:00
rails--rails/activesupport/CHANGELOG.md
Rafael Mendonça França 9a0e09696a
Merge pull request #23930 from gsamokovarov/module-delegate-missing-to
Introduce Module#delegate_missing_to
2016-05-24 18:33:41 -03:00

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.