class RedisOpen3

Constants

ERR_KEY
IN_KEY
OUT_KEY
VERSION

Public Class Methods

new(redis_pool, opts={}) click to toggle source
# File lib/redis_open3.rb, line 9
def initialize(redis_pool, opts={})
  @redis_pool = redis_pool
  @timeout    = opts[:timeout] || 900
end

Public Instance Methods

open3() { |redis_in, redis_out, redis_err, uuids| ... } click to toggle source
# File lib/redis_open3.rb, line 14
def open3
  with_enums(generated_uuids) do |redis_in, redis_out, redis_err, uuids|
    begin
      yield redis_in, redis_out, redis_err, uuids
    rescue Exception => e
      redis_in.fail
      raise e
    ensure
      redis_out.delete
      redis_err.delete
    end
    redis_in.close
  end
end
process3(uuids) { |redis_in, redis_out, redis_err| ... } click to toggle source
# File lib/redis_open3.rb, line 29
def process3(uuids)
  with_enums(uuids) do |redis_in, redis_out, redis_err|
    begin
      yield redis_in, redis_out, redis_err
    rescue Exception => e
      redis_out.fail
      ([e.inspect] + e.backtrace).each { |row| redis_err << row }
      raise e
    ensure
      redis_in.delete
      redis_err.close
    end
    redis_out.close
  end
end

Private Instance Methods

generated_uuids() click to toggle source
# File lib/redis_open3.rb, line 66
def generated_uuids
  [ IN_KEY, OUT_KEY, ERR_KEY ].inject({}) do |result, key|
    result[key] = SecureRandom.uuid
    result
  end
end
with_conns() { |redis1, redis2, redis3| ... } click to toggle source
# File lib/redis_open3.rb, line 47
def with_conns
  @redis_pool.call do |redis1|
    @redis_pool.call do |redis2|
      @redis_pool.call do |redis3|
        yield redis1, redis2, redis3
      end
    end
  end
end
with_enums(uuids) { |redis_in, redis_out, redis_err, uuids| ... } click to toggle source
# File lib/redis_open3.rb, line 57
def with_enums(uuids)
  with_conns do |redis1, redis2, redis3|
    redis_in  = Enum.new(uuids[IN_KEY],  redis: redis1, timeout: @timeout)
    redis_out = Enum.new(uuids[OUT_KEY], redis: redis2, timeout: @timeout)
    redis_err = Enum.new(uuids[ERR_KEY], redis: redis3, timeout: @timeout)
    yield redis_in, redis_out, redis_err, uuids
  end
end