Sha256: 472ac4d6fef0f83a73218946e09f2e745903cea27edf6c8576ffcaa189052ea4
Contents?: true
Size: 1.25 KB
Versions: 82
Compression:
Stored size: 1.25 KB
Contents
module Capistrano module Processable module SessionAssociation def self.on(exception, session) unless exception.respond_to?(:session) exception.extend(self) exception.session = session end return exception end attr_accessor :session end def process_iteration(wait=nil, &block) ensure_each_session { |session| session.preprocess } return false if block && !block.call(self) readers = sessions.map { |session| session.listeners.keys }.flatten.reject { |io| io.closed? } writers = readers.select { |io| io.respond_to?(:pending_write?) && io.pending_write? } if readers.any? || writers.any? readers, writers, = IO.select(readers, writers, nil, wait) end if readers ensure_each_session do |session| ios = session.listeners.keys session.postprocess(ios & readers, ios & writers) end end true end def ensure_each_session errors = [] sessions.each do |session| begin yield session rescue Exception => error errors << SessionAssociation.on(error, session) end end raise errors.first if errors.any? sessions end end end
Version data entries
82 entries across 82 versions & 10 rubygems