ichannel 7.0.0 → 7.1.0

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.
@@ -2,9 +2,9 @@ rvm:
2
2
  - 1.9.2
3
3
  - 1.9.3
4
4
  - 2.0.0
5
- - ruby-head
5
+ # - ruby-head
6
6
  - rbx-19mode
7
- - jruby-19mode
7
+ # - jruby-19mode
8
8
 
9
9
  env:
10
10
  - SERIALIZER=YAML
@@ -1,3 +1,10 @@
1
+ == v7.1.0
2
+ - Redis#last_msg, UNIXSocket#last_msg return last read value
3
+ after a channel has been closed.
4
+ The old behavior was to return nil. I'm not sure why I decided to
5
+ do that but it's not useful.
6
+
7
+
1
8
  == v7.0.0
2
9
  - IChannel::UNIXSocket#get! raises Timeout::Error
3
10
  When a read does not complete in time a Timeout::Error will be
data/README.md CHANGED
@@ -16,8 +16,8 @@ the same machine or network. The basic premise is that you can "put" a ruby
16
16
  object onto the channel and on the other end(maybe in a different process,
17
17
  or maybe on a different machine) you can "get" the object from the channel.
18
18
  A [unix socket](http://www.ruby-doc.org/stdlib-2.0/libdoc/socket/rdoc/UNIXSocket.html)
19
- (local to a single machine) or [redis](https://redis.io) can be used for
20
- transport.
19
+ (local to a single machine) or [redis](https://redis.io) can be used for
20
+ storage.
21
21
 
22
22
  A channel depends on a serializer when reading and writing from the underlying
23
23
  socket(e.g: redis or a unix socket) but you can use any serializer that
@@ -32,7 +32,7 @@ __1.__
32
32
 
33
33
  A demo of how to pass ruby objects through a channel and also between processes.
34
34
  [Marshal](http://rubydoc.info/stdlib/core/Marshal) is the serializer of choice,
35
- and a streamed UNIXSocket is used for transport:
35
+ and a streamed UNIXSocket is used for storage:
36
36
 
37
37
  ```ruby
38
38
  channel = IChannel.unix Marshal
@@ -47,7 +47,7 @@ channel.get # => 'Hello!'
47
47
  __2.__
48
48
 
49
49
  A demo of a channel sending messages between machines by using
50
- [redis](https://redis.io) for transport:
50
+ [redis](https://redis.io) for storage:
51
51
 
52
52
  ```ruby
53
53
  channel = IChannel.redis Marshal, host: "10.0.0.1", key: "readme-example"
@@ -99,12 +99,12 @@ __PLATFORM SUPPORT__
99
99
 
100
100
  _supported_
101
101
 
102
- * CRuby (1.9+)
103
- * Rubinius (1.9+)
102
+ * CRuby (1.9+)
103
+ * Rubinius (1.9+)
104
104
  * JRuby (1.9+ - some tests skipped)
105
- JRuby is supported and passes the test suite but it has a few skips.
106
- Three skips are because jruby does not implement Kernel.fork.
107
- The other tests pass on jruby, & those tests cover both unix sockets & redis.
105
+ JRuby is supported and passes the test suite but it skips any
106
+ tests(three/four) that invoke Kernel#fork. The other tests pass
107
+ on jruby, and those tests cover unix sockets/redis.
108
108
 
109
109
  _unsupported_
110
110
 
@@ -114,7 +114,7 @@ _unsupported_
114
114
  __INSTALL__
115
115
 
116
116
  If you plan on using redis you'll need to install the 'redis' gem. It's
117
- optional:
117
+ optional and only loaded when `IChannel.redis` is invoked:
118
118
 
119
119
  $ gem install redis
120
120
 
@@ -34,7 +34,6 @@ class IChannel::Redis
34
34
  def close
35
35
  unless closed?
36
36
  @redis.quit
37
- @last_msg = nil
38
37
  @closed = true
39
38
  end
40
39
  end
@@ -36,7 +36,6 @@ module IChannel
36
36
  unless closed?
37
37
  @reader.close
38
38
  @writer.close
39
- @last_msg = nil
40
39
  true
41
40
  end
42
41
  end
@@ -1,3 +1,3 @@
1
1
  module IChannel
2
- VERSION = "7.0.0"
2
+ VERSION = "7.1.0"
3
3
  end
@@ -1,6 +1,9 @@
1
1
  require_relative 'setup'
2
- require_relative 'ichannel_unix_test'
3
- class IChannelRedisTest < IChannelUNIXTest
2
+ class IChannelRedisTest < Test::Unit::TestCase
3
+ # This includes the tests all channels should pass(redis or unix
4
+ # socket). Any tests specific to redis can go in this class.
5
+ include UniformIChannelTest
6
+
4
7
  def setup
5
8
  serializer = Object.const_get ENV["SERIALIZER"] || "Marshal"
6
9
  @channel = IChannel.redis serializer
@@ -1,5 +1,9 @@
1
- require_relative 'setup'
2
- class IChannelUNIXTest < Test::Unit::TestCase
1
+ require_relative "setup"
2
+ class IChannelTest < Test::Unit::TestCase
3
+ # This includes the tests all channels should pass(redis or unix
4
+ # socket). Any tests specific to a unit socket can go in this class.
5
+ include UniformIChannelTest
6
+
3
7
  def setup
4
8
  serializer = Object.const_get ENV["SERIALIZER"] || "Marshal"
5
9
  @channel = IChannel.unix serializer
@@ -8,108 +12,4 @@ class IChannelUNIXTest < Test::Unit::TestCase
8
12
  def teardown
9
13
  @channel.close
10
14
  end
11
-
12
- def test_interface
13
- %w(write
14
- write!
15
- get
16
- get!
17
- close
18
- closed?
19
- readable?
20
- last_msg
21
- put
22
- put!
23
- recv
24
- recv!).each do |method|
25
- assert @channel.respond_to? method
26
- end
27
- end
28
-
29
- def test_blocking_get
30
- assert_raises Timeout::Error do
31
- Timeout.timeout(1) { @channel.get }
32
- end
33
- end
34
-
35
- def test_timeout_on_get
36
- assert_raises Timeout::Error do
37
- @channel.get! 0.1
38
- end
39
- end
40
-
41
- def test_last_msg_after_read
42
- @channel.put [42]
43
- @channel.get
44
- assert_equal [42], @channel.last_msg
45
- end
46
-
47
- def test_fork
48
- if RUBY_ENGINE == "jruby"
49
- skip "jruby does not implement Kernel.fork"
50
- end
51
- pid = fork do
52
- @channel.put [42]
53
- end
54
- Process.wait pid
55
- assert_equal [42], @channel.get
56
- end
57
-
58
- def test_last_msg
59
- @channel.put %w(a)
60
- @channel.put %w(b)
61
- assert_equal %w(b), @channel.last_msg
62
- end
63
-
64
- def test_last_msg_cache
65
- @channel.put %w(a)
66
- 2.times { assert_equal %w(a), @channel.last_msg }
67
- @channel.close
68
- assert_equal nil, @channel.last_msg
69
- end
70
-
71
- def test_bust_last_msg_cache
72
- @channel.put %w(a)
73
- assert_equal %w(a), @channel.last_msg
74
- @channel.put %w(b)
75
- 2.times { assert_equal %w(b), @channel.last_msg }
76
- end
77
-
78
- def test_put_on_closed_channel
79
- @channel.close
80
- assert_raises IOError do
81
- @channel.put %w(a)
82
- end
83
- end
84
-
85
- def test_get_on_closed_channel
86
- @channel.close
87
- assert_raises IOError do
88
- @channel.get
89
- end
90
- end
91
-
92
- def test_queued_messages
93
- @channel.put %w(a)
94
- @channel.put %w(b)
95
- assert_equal %w(a), @channel.get
96
- assert_equal %w(b), @channel.get
97
- end
98
-
99
- def test_readable_on_populated_channel
100
- @channel.put %w(a)
101
- @channel.put %w(b)
102
- assert @channel.readable?
103
- end
104
-
105
- def test_readable_on_empty_channel
106
- @channel.put %w(42)
107
- @channel.get # discard
108
- refute @channel.readable?
109
- end
110
-
111
- def test_readable_on_closed_channel
112
- @channel.close
113
- refute @channel.readable?
114
- end
115
15
  end
@@ -4,3 +4,4 @@ require_relative '../lib/ichannel'
4
4
  require 'yaml'
5
5
  require 'json'
6
6
  require 'test/unit'
7
+ require_relative "uniform_ichannel_test"
@@ -0,0 +1,111 @@
1
+ #
2
+ # These are the tests any ichannel-like interface should pass.
3
+ # The redis and unix socket channel are tested against all these
4
+ # tests.
5
+ #
6
+ require_relative 'setup'
7
+ module UniformIChannelTest
8
+ def test_interface
9
+ %w(write
10
+ write!
11
+ get
12
+ get!
13
+ close
14
+ closed?
15
+ readable?
16
+ last_msg
17
+ put
18
+ put!
19
+ recv
20
+ recv!).each do |method|
21
+ assert @channel.respond_to? method
22
+ end
23
+ end
24
+
25
+ def test_blocking_get
26
+ assert_raises Timeout::Error do
27
+ Timeout.timeout(1) { @channel.get }
28
+ end
29
+ end
30
+
31
+ def test_timeout_on_get
32
+ assert_raises Timeout::Error do
33
+ @channel.get! 0.1
34
+ end
35
+ end
36
+
37
+ def test_last_msg_after_read
38
+ @channel.put [42]
39
+ @channel.get
40
+ assert_equal [42], @channel.last_msg
41
+ end
42
+
43
+ def test_fork
44
+ if RUBY_ENGINE == "jruby"
45
+ skip "jruby does not implement Kernel.fork"
46
+ end
47
+ pid = fork do
48
+ @channel.put [42]
49
+ end
50
+ Process.wait pid
51
+ assert_equal [42], @channel.get
52
+ end
53
+
54
+ def test_last_msg
55
+ @channel.put %w(a)
56
+ @channel.put %w(b)
57
+ assert_equal %w(b), @channel.last_msg
58
+ end
59
+
60
+ def test_last_msg_cache
61
+ @channel.put %w(a)
62
+ 2.times { assert_equal %w(a), @channel.last_msg }
63
+ @channel.close
64
+ assert_equal %w(a), @channel.last_msg
65
+ end
66
+
67
+ def test_bust_last_msg_cache
68
+ @channel.put %w(a)
69
+ assert_equal %w(a), @channel.last_msg
70
+ @channel.put %w(b)
71
+ 2.times { assert_equal %w(b), @channel.last_msg }
72
+ end
73
+
74
+ def test_put_on_closed_channel
75
+ @channel.close
76
+ assert_raises IOError do
77
+ @channel.put %w(a)
78
+ end
79
+ end
80
+
81
+ def test_get_on_closed_channel
82
+ @channel.close
83
+ assert_raises IOError do
84
+ @channel.get
85
+ end
86
+ end
87
+
88
+ def test_queued_messages
89
+ @channel.put %w(a)
90
+ @channel.put %w(b)
91
+ assert_equal %w(a), @channel.get
92
+ assert_equal %w(b), @channel.get
93
+ end
94
+
95
+ def test_readable_on_populated_channel
96
+ @channel.put %w(a)
97
+ @channel.put %w(b)
98
+ assert @channel.readable?
99
+ end
100
+
101
+ def test_readable_on_empty_channel
102
+ @channel.put %w(42)
103
+ @channel.get # discard
104
+ refute @channel.readable?
105
+ end
106
+
107
+ def test_readable_on_closed_channel
108
+ @channel.close
109
+ refute @channel.readable?
110
+ end
111
+ end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ichannel
3
3
  version: !ruby/object:Gem::Version
4
- version: 7.0.0
4
+ version: 7.1.0
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,7 +9,7 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2013-07-29 00:00:00.000000000 Z
12
+ date: 2013-08-07 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: interprocess communication channel
15
15
  email:
@@ -37,6 +37,7 @@ files:
37
37
  - test/ichannel_redis_test.rb
38
38
  - test/ichannel_unix_test.rb
39
39
  - test/setup.rb
40
+ - test/uniform_ichannel_test.rb
40
41
  homepage: https://github.com/robgleeson/ichannel
41
42
  licenses: []
42
43
  post_install_message:
@@ -51,7 +52,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
51
52
  version: '0'
52
53
  segments:
53
54
  - 0
54
- hash: -3143838182628750731
55
+ hash: 3208859644147126315
55
56
  required_rubygems_version: !ruby/object:Gem::Requirement
56
57
  none: false
57
58
  requirements:
@@ -60,7 +61,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
60
61
  version: '0'
61
62
  segments:
62
63
  - 0
63
- hash: -3143838182628750731
64
+ hash: 3208859644147126315
64
65
  requirements: []
65
66
  rubyforge_project:
66
67
  rubygems_version: 1.8.23
@@ -71,4 +72,5 @@ test_files:
71
72
  - test/ichannel_redis_test.rb
72
73
  - test/ichannel_unix_test.rb
73
74
  - test/setup.rb
75
+ - test/uniform_ichannel_test.rb
74
76
  has_rdoc: