Sha256: 8d4eb373ab762a5382176426ef25db633772e559ce938e4b0ce381947422196a

Contents?: true

Size: 987 Bytes

Versions: 6

Compression:

Stored size: 987 Bytes

Contents

module BubbleWrap
  module Reactor
    class DependentDeferrable < DefaultDeferrable
      # args are Deferrable(s) which the returned Deferrable depends on.
      # returns a Deferrable that depends on args.
      # which:
      #   succeeds only when every Deferrable in args succeeds
      #   fails immediately when any Deferrable in args fails
      # Have to be careful that #deferred_args for DependentDeferrable is a list of #deferred_args from its children Deferrable(s).
      def self.on(*args)
        deferrable = self.new
        @children_deferrables = args
        @children_deferrables.each do |e|
          e.callback do |result|
            if @children_deferrables.all? {|a| a.deferred_status == :succeeded}
              deferrable.succeed(*@children_deferrables.map(&:deferred_args))
            end
          end
          e.errback do |result|
            deferrable.fail(*e.deferred_args)
          end
        end
        deferrable
      end
    end
  end
end

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
bubble-wrap-1.9.7 motion/reactor/dependent_deferrable.rb
bubble-wrap-1.9.6 motion/reactor/dependent_deferrable.rb
bubble-wrap-1.9.5 motion/reactor/dependent_deferrable.rb
bubble-wrap-1.9.4 motion/reactor/dependent_deferrable.rb
bubble-wrap-1.9.3 motion/reactor/dependent_deferrable.rb
bubble-wrap-1.9.2 motion/reactor/dependent_deferrable.rb