Skip to content
Find file
9a0e096 May 24, 2016
54 lines (40 sloc) 1.47 KB
  • 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.

Something went wrong with that request. Please try again.