redis_open3 0.0.1 → 0.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 060a708ef7b2533866b91169cd1b2890500f7315
4
- data.tar.gz: 370b16a073547778f1c8c66a03ea0d281c20907f
3
+ metadata.gz: 394d841ea55842e0efe813e5e2734f27d852cd20
4
+ data.tar.gz: 812e91f841ba305844b47091dbea610200f4c905
5
5
  SHA512:
6
- metadata.gz: 39d569cdc09b5295fcc10c14ecb40d0faafed89548b5d936a3c678b123a631f0d453354aa10e9df91171a1c7a8f310bfc152dcb37f9fa3ef795449f444f0dc6e
7
- data.tar.gz: e4e8d305f0fb35b8b77c69a21a6a1bb4d1e920941190adb79db01d704a8690e58a061604aa24eb4585bac0345d462859745e6169270f5ece947e4a735fe33d57
6
+ metadata.gz: 8d56133410c8fc67db16af3cc23918dccab6ef0f352e9b7c5c1183247e496e3f86a05b2e0649a0ff336c0ed677554085e2ec07e02d11100060e93bb3bdaa56f7
7
+ data.tar.gz: 42894d54ed96ebe807e13323f0cad450a9362db8f6c779432fcd7f16ae6eebee01a25531cba0432f93bc7a1e3659695c7741c64a023f03483971f4c8bfe5ee89
data/lib/redis_open3.rb CHANGED
@@ -1,9 +1,7 @@
1
- require "redis_open3/version"
2
- require 'redis'
1
+ require 'redis_open3/version'
2
+ require 'redis_open3/enum'
3
3
 
4
4
  class RedisOpen3
5
- class Error < StandardError; end
6
-
7
5
  IN_KEY = 'redis_open3_in'
8
6
  OUT_KEY = 'redis_open3_out'
9
7
  ERR_KEY = 'redis_open3_err'
@@ -17,11 +15,14 @@ class RedisOpen3
17
15
  with_enums(generated_uuids) do |redis_in, redis_out, redis_err, uuids|
18
16
  begin
19
17
  yield redis_in, redis_out, redis_err, uuids
18
+ rescue Exception => e
19
+ redis_in.fail
20
+ raise e
20
21
  ensure
21
- redis_in.close
22
22
  redis_out.delete
23
23
  redis_err.delete
24
24
  end
25
+ redis_in.close
25
26
  end
26
27
  end
27
28
 
@@ -30,13 +31,14 @@ class RedisOpen3
30
31
  begin
31
32
  yield redis_in, redis_out, redis_err
32
33
  rescue Exception => e
34
+ redis_out.fail
33
35
  ([e.inspect] + e.backtrace).each { |row| redis_err << row }
34
36
  raise e
35
37
  ensure
36
38
  redis_in.delete
37
- redis_out.close
38
39
  redis_err.close
39
40
  end
41
+ redis_out.close
40
42
  end
41
43
  end
42
44
 
@@ -1,9 +1,10 @@
1
1
  require 'redis'
2
- require 'redis_open3'
2
+ require 'redis_open3/error'
3
3
 
4
4
  class RedisOpen3
5
5
  class Enum
6
6
  class TimeoutError < RedisOpen3::Error; end
7
+ class Error < RedisOpen3::Error; end
7
8
 
8
9
  include Enumerable
9
10
  attr_reader :list_name
@@ -12,6 +13,9 @@ class RedisOpen3
12
13
  EOF = '90829c12-3ac3-4af9-aeb4-8b63d1cc1d23'
13
14
  EOF_REGX = /\A#{EOF}\z/
14
15
 
16
+ ERR = '7ce43256-a6ed-4890-9352-956ab8816dbd'
17
+ ERR_REGX = /\A#{ERR}\z/
18
+
15
19
  def initialize(list_name, opts={})
16
20
  @list_name = list_name
17
21
  @timeout = opts[:timeout]
@@ -29,6 +33,7 @@ class RedisOpen3
29
33
  def each(&block)
30
34
  Enumerator.new do |y|
31
35
  until (line = pop.chomp) =~ EOF_REGX
36
+ raise Error, "Received error signal." if line =~ ERR_REGX
32
37
  y << line
33
38
  end
34
39
  end.each(&block)
@@ -38,6 +43,10 @@ class RedisOpen3
38
43
  @redis.del(list_name)
39
44
  end
40
45
 
46
+ def fail
47
+ push(ERR)
48
+ end
49
+
41
50
  private
42
51
 
43
52
  def push(string)
@@ -0,0 +1,3 @@
1
+ class RedisOpen3
2
+ class Error < StandardError; end
3
+ end
@@ -1,3 +1,3 @@
1
1
  class RedisOpen3
2
- VERSION = "0.0.1"
2
+ VERSION = "0.0.2"
3
3
  end
@@ -63,9 +63,30 @@ describe RedisOpen3::Enum do
63
63
  end
64
64
  end
65
65
 
66
+ describe '#fail' do
67
+ let(:err) { RedisOpen3::Enum::ERR }
68
+
69
+ it 'adds the ERR uuid to the redis list' do
70
+ RedisConn.with do |redis|
71
+ expect {
72
+ enum.fail
73
+ }.to change {
74
+ redis.lpop(list_name)
75
+ }.from(nil).to(err)
76
+ end
77
+ end
78
+ end
79
+
66
80
  context 'timeout' do
67
81
  it 'raises a timeout error if the timeout expires' do
68
82
  expect { enum.each.to_a }.to raise_error(RedisOpen3::Enum::TimeoutError)
69
83
  end
70
84
  end
85
+
86
+ context 'when an error signal is sent' do
87
+ it 'raises a command failed error' do
88
+ RedisConn.with { |redis| redis.lpush(enum.list_name, RedisOpen3::Enum::ERR)}
89
+ expect { enum.each.to_a }.to raise_error(RedisOpen3::Enum::Error)
90
+ end
91
+ end
71
92
  end
@@ -5,7 +5,7 @@ describe RedisOpen3 do
5
5
  let(:conns) { RedisConn.method(:with) }
6
6
 
7
7
  describe '#popen3' do
8
- it 'yields 3 redis enum objects and an array with their list uuids' do
8
+ it 'yields 3 redis enum objects and a hash with their list uuids' do
9
9
  ropen.open3 do |r_in, r_out, r_err, uuids|
10
10
  expect(uuids[RedisOpen3::IN_KEY]).to eq r_in.list_name
11
11
  expect(uuids[RedisOpen3::OUT_KEY]).to eq r_out.list_name
@@ -35,6 +35,17 @@ describe RedisOpen3 do
35
35
  expect(redis.exists(err_name)).to eq false
36
36
  end
37
37
  end
38
+
39
+ context 'an exception is raised' do
40
+ it 'sends fail to redis_in' do
41
+ expect {
42
+ ropen.open3 do |redis_in|
43
+ expect(redis_in).to receive(:fail)
44
+ raise 'fail'
45
+ end
46
+ }.to raise_error RuntimeError, 'fail'
47
+ end
48
+ end
38
49
  end
39
50
 
40
51
  describe '#process3' do
@@ -69,5 +80,16 @@ describe RedisOpen3 do
69
80
  expect(redis.exists(uuids[RedisOpen3::IN_KEY])).to eq false
70
81
  end
71
82
  end
83
+
84
+ context 'an exception is raised' do
85
+ it 'sends fail to redis_out' do
86
+ expect {
87
+ ropen.process3(uuids) do |_, redis_out|
88
+ expect(redis_out).to receive(:fail)
89
+ raise 'fail'
90
+ end
91
+ }.to raise_error RuntimeError, 'fail'
92
+ end
93
+ end
72
94
  end
73
95
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: redis_open3
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.0.1
4
+ version: 0.0.2
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tyler Hartland
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2014-08-22 00:00:00.000000000 Z
11
+ date: 2014-08-26 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -81,6 +81,7 @@ files:
81
81
  - Rakefile
82
82
  - lib/redis_open3.rb
83
83
  - lib/redis_open3/enum.rb
84
+ - lib/redis_open3/error.rb
84
85
  - lib/redis_open3/version.rb
85
86
  - redis_open3.gemspec
86
87
  - spec/lib/redis_open3/enum_spec.rb