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

Version Path
wulffeld-capistrano-2.5.8.3 lib/capistrano/processable.rb
capistrano-2.5.22 lib/capistrano/processable.rb
dan-capistrano-2.5.6 lib/capistrano/processable.rb
fotonauts-capistrano-2.5.2 lib/capistrano/processable.rb
mbailey-capistrano-2.5.5 lib/capistrano/processable.rb
mbailey-capistrano-2.5.6 lib/capistrano/processable.rb
mbailey-capistrano-2.5.7 lib/capistrano/processable.rb
sneakin-capistrano-2.5.5 lib/capistrano/processable.rb
thoughtbot-capistrano-2.5.5 lib/capistrano/processable.rb
thoughtbot-capistrano-2.5.6 lib/capistrano/processable.rb
wulffeld-capistrano-2.5.8.1 lib/capistrano/processable.rb
wulffeld-capistrano-2.5.8 lib/capistrano/processable.rb
capistrano-2.14.1 lib/capistrano/processable.rb
capistrano-2.13.5 lib/capistrano/processable.rb
HeSYINUvSBZfxqA-capistrano-2.5.28 lib/capistrano/processable.rb
HeSYINUvSBZfxqA-capistrano-2.5.27 lib/capistrano/processable.rb
HeSYINUvSBZfxqA-capistrano-2.5.26 lib/capistrano/processable.rb
HeSYINUvSBZfxqA-capistrano-2.5.25 lib/capistrano/processable.rb
HeSYINUvSBZfxqA-capistrano-2.5.24 lib/capistrano/processable.rb
capistrano-2.12.0 lib/capistrano/processable.rb