• G
    Introduce Module#delegate_missing_to · 335fcc21
    Genadi Samokovarov 提交于
    When building decorators, a common pattern may emerge:
    
        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
    
    David suggested it in #23824.
    335fcc21
可在Tags中查看这些版本中当前仓库的状态.
CHANGELOG.md 18.4 KB