ichannel 3.0.3 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.yardopts CHANGED
@@ -2,3 +2,4 @@
2
2
  -
3
3
  README.md
4
4
  LICENSE.txt
5
+ ChangeLog.txt
data/ChangeLog.txt ADDED
@@ -0,0 +1,11 @@
1
+ == HEAD
2
+ * Add IChannel#empty?.
3
+
4
+ IChannel#empty? returns true when the channel is empty(nothing to read).
5
+
6
+ * Micro speed improvement on #write!, & #recv! operations.
7
+
8
+ By passing nil instead of creating two empty arrays for every read/write
9
+ operation we should see a very small improvement in their performance.
10
+
11
+ * Add ChangeLog.txt
@@ -1,3 +1,3 @@
1
1
  class IChannel
2
- VERSION = "3.0.3"
2
+ VERSION = "3.1.0"
3
3
  end
data/lib/ichannel.rb CHANGED
@@ -68,7 +68,7 @@ class IChannel
68
68
  if @writer.closed?
69
69
  raise IOError, 'The channel cannot be written to (closed).'
70
70
  end
71
- _, writable, _ = IO.select [], [@writer], [], timeout
71
+ _, writable, _ = IO.select nil, [@writer], nil, timeout
72
72
  if writable
73
73
  writable[0].send @serializer.dump(object), 0
74
74
  else
@@ -114,7 +114,7 @@ class IChannel
114
114
  if @reader.closed?
115
115
  raise IOError, 'The channel cannot be read from (closed).'
116
116
  end
117
- readable, _ = IO.select [@reader], [], [], timeout
117
+ readable, _ = IO.select [@reader], nil, nil, timeout
118
118
  if readable
119
119
  msg, _ = readable[0].recvmsg
120
120
  @serializer.load msg
@@ -123,4 +123,12 @@ class IChannel
123
123
  end
124
124
  end
125
125
  alias_method :get!, :recv!
126
+
127
+ #
128
+ # @return [Boolean]
129
+ # Returns true if the channel is empty (nothing to read).
130
+ #
131
+ def empty?
132
+ ! IO.select [@reader], nil, nil, 0.1
133
+ end
126
134
  end
@@ -39,4 +39,19 @@ class IChannelTest < Test::Unit::TestCase
39
39
  assert_equal %w(a), @channel.get
40
40
  assert_equal %w(b), @channel.get
41
41
  end
42
+
43
+ def test_empty_on_empty_channel
44
+ assert @channel.empty?
45
+ end
46
+
47
+ def test_empty_on_populated_channel
48
+ @channel.put %w(a)
49
+ refute @channel.empty?
50
+ end
51
+
52
+ def test_empty_on_emptied_channel
53
+ @channel.put %w(a)
54
+ @channel.get
55
+ assert @channel.empty?
56
+ end
42
57
  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: 3.0.3
4
+ version: 3.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: 2012-11-24 00:00:00.000000000 Z
12
+ date: 2012-11-27 00:00:00.000000000 Z
13
13
  dependencies: []
14
14
  description: ! "A modern and easy-to-use interprocess communication \n primitive."
15
15
  email:
@@ -21,6 +21,7 @@ files:
21
21
  - .gitignore
22
22
  - .travis.yml
23
23
  - .yardopts
24
+ - ChangeLog.txt
24
25
  - Gemfile
25
26
  - LICENSE.txt
26
27
  - README.md
@@ -44,7 +45,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
44
45
  version: '0'
45
46
  segments:
46
47
  - 0
47
- hash: 3488469513037529160
48
+ hash: 752004929419956183
48
49
  required_rubygems_version: !ruby/object:Gem::Requirement
49
50
  none: false
50
51
  requirements:
@@ -53,7 +54,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
53
54
  version: '0'
54
55
  segments:
55
56
  - 0
56
- hash: 3488469513037529160
57
+ hash: 752004929419956183
57
58
  requirements: []
58
59
  rubyforge_project:
59
60
  rubygems_version: 1.8.23