mailbox 0.1.7 → 0.2.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.
- data/VERSION.yml +2 -2
- data/lib/mailbox.rb +18 -6
- data/mailbox.gemspec +3 -3
- data/test/mailbox_test.rb +16 -0
- data/test/synchronized_test.rb +2 -2
- metadata +24 -13
data/VERSION.yml
CHANGED
data/lib/mailbox.rb
CHANGED
@@ -93,7 +93,7 @@ module Mailbox
|
|
93
93
|
@mailslot = false
|
94
94
|
|
95
95
|
if @next_channel_name.nil?
|
96
|
-
__setup_on_fiber__(method_name)
|
96
|
+
__setup_on_fiber__(method_name, @replyable)
|
97
97
|
else
|
98
98
|
__setup_on_channel__(method_name, @replyable)
|
99
99
|
end
|
@@ -102,25 +102,37 @@ module Mailbox
|
|
102
102
|
|
103
103
|
end
|
104
104
|
|
105
|
-
def __setup_on_fiber__(method_name)
|
105
|
+
def __setup_on_fiber__(method_name, replyable)
|
106
106
|
return super if __is_adding_mailbox_to_method__
|
107
107
|
|
108
108
|
alias_method :"__#{method_name}__", method_name
|
109
109
|
@is_adding_mailbox_to_method = true
|
110
110
|
|
111
111
|
exception_method, @exception = @exception, nil
|
112
|
-
define_method
|
112
|
+
define_method method_name do |*args|
|
113
|
+
|
114
|
+
result = nil
|
115
|
+
latch = JRL::Concurrent::CountDownLatch.new(1) if replyable
|
116
|
+
|
113
117
|
__fiber__.execute do
|
114
118
|
begin
|
115
|
-
self.send(:"__#{method_name}__", *args )
|
119
|
+
result = self.send(:"__#{method_name}__", *args )
|
116
120
|
rescue Exception => ex
|
117
121
|
raise if exception_method.nil?
|
118
122
|
self.send(:"#{exception_method}", ex)
|
123
|
+
ensure
|
124
|
+
latch.count_down if replyable
|
119
125
|
end
|
120
126
|
end
|
121
|
-
|
122
|
-
|
127
|
+
|
128
|
+
latch.await if replyable
|
129
|
+
return result
|
130
|
+
|
131
|
+
end
|
132
|
+
|
133
|
+
@replyable = false
|
123
134
|
@is_adding_mailbox_to_method = false
|
135
|
+
|
124
136
|
end
|
125
137
|
|
126
138
|
def __setup_on_channel__(method_name, replyable)
|
data/mailbox.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{mailbox}
|
8
|
-
s.version = "0.
|
8
|
+
s.version = "0.2.0"
|
9
9
|
|
10
10
|
s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
|
11
11
|
s.authors = ["Joel Friedman", "Patrick Farley"]
|
12
|
-
s.date = %q{2010-
|
12
|
+
s.date = %q{2010-03-09}
|
13
13
|
s.description = %q{Mailbox is a JRuby module that simplifies concurrency and is backed by JVM threads.}
|
14
14
|
s.email = %q{asher.friedman@gmail.com}
|
15
15
|
s.extra_rdoc_files = [
|
@@ -38,7 +38,7 @@ Gem::Specification.new do |s|
|
|
38
38
|
s.rdoc_options = ["--charset=UTF-8"]
|
39
39
|
s.require_paths = ["lib"]
|
40
40
|
s.rubyforge_project = %q{mailbox}
|
41
|
-
s.rubygems_version = %q{1.3.
|
41
|
+
s.rubygems_version = %q{1.3.6}
|
42
42
|
s.summary = %q{Mailbox is a JRuby module that simplifies concurrency and is backed by JVM threads.}
|
43
43
|
s.test_files = [
|
44
44
|
"test/mailbox_test.rb",
|
data/test/mailbox_test.rb
CHANGED
@@ -134,4 +134,20 @@ class MailboxTest < Test::Unit::TestCase
|
|
134
134
|
assert latch.await(1, Latches::TimeUnit::SECONDS), "timed out"
|
135
135
|
assert_equal "ya_rly!", response
|
136
136
|
end
|
137
|
+
|
138
|
+
def test_should_support_replayble_messages
|
139
|
+
|
140
|
+
klass = Class.new do
|
141
|
+
include Mailbox
|
142
|
+
|
143
|
+
mailslot :replyable => true
|
144
|
+
def test_method
|
145
|
+
"response"
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
assert_equal "response", klass.new.test_method
|
150
|
+
|
151
|
+
end
|
152
|
+
|
137
153
|
end
|
data/test/synchronized_test.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'test_helper.rb'
|
1
|
+
require File.dirname(__FILE__) + '/test_helper.rb'
|
2
2
|
|
3
3
|
class SynchronizedTest < Test::Unit::TestCase
|
4
4
|
|
@@ -85,4 +85,4 @@ class SynchronizedTest < Test::Unit::TestCase
|
|
85
85
|
assert_equal "thread 2", clazz.values[3], "4th wrong"
|
86
86
|
|
87
87
|
end
|
88
|
-
end
|
88
|
+
end
|
metadata
CHANGED
@@ -1,7 +1,12 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: mailbox
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
|
4
|
+
prerelease: false
|
5
|
+
segments:
|
6
|
+
- 0
|
7
|
+
- 2
|
8
|
+
- 0
|
9
|
+
version: 0.2.0
|
5
10
|
platform: ruby
|
6
11
|
authors:
|
7
12
|
- Joel Friedman
|
@@ -10,29 +15,33 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date: 2010-
|
18
|
+
date: 2010-03-09 00:00:00 -06:00
|
14
19
|
default_executable:
|
15
20
|
dependencies:
|
16
21
|
- !ruby/object:Gem::Dependency
|
17
22
|
name: jretlang
|
18
|
-
|
19
|
-
|
20
|
-
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
prerelease: false
|
24
|
+
requirement: &id001 !ruby/object:Gem::Requirement
|
21
25
|
requirements:
|
22
26
|
- - ">="
|
23
27
|
- !ruby/object:Gem::Version
|
28
|
+
segments:
|
29
|
+
- 0
|
24
30
|
version: "0"
|
25
|
-
|
31
|
+
type: :runtime
|
32
|
+
version_requirements: *id001
|
26
33
|
- !ruby/object:Gem::Dependency
|
27
34
|
name: jeweler
|
28
|
-
|
29
|
-
|
30
|
-
version_requirements: !ruby/object:Gem::Requirement
|
35
|
+
prerelease: false
|
36
|
+
requirement: &id002 !ruby/object:Gem::Requirement
|
31
37
|
requirements:
|
32
38
|
- - ">="
|
33
39
|
- !ruby/object:Gem::Version
|
40
|
+
segments:
|
41
|
+
- 0
|
34
42
|
version: "0"
|
35
|
-
|
43
|
+
type: :development
|
44
|
+
version_requirements: *id002
|
36
45
|
description: Mailbox is a JRuby module that simplifies concurrency and is backed by JVM threads.
|
37
46
|
email: asher.friedman@gmail.com
|
38
47
|
executables: []
|
@@ -72,18 +81,20 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
72
81
|
requirements:
|
73
82
|
- - ">="
|
74
83
|
- !ruby/object:Gem::Version
|
84
|
+
segments:
|
85
|
+
- 0
|
75
86
|
version: "0"
|
76
|
-
version:
|
77
87
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
78
88
|
requirements:
|
79
89
|
- - ">="
|
80
90
|
- !ruby/object:Gem::Version
|
91
|
+
segments:
|
92
|
+
- 0
|
81
93
|
version: "0"
|
82
|
-
version:
|
83
94
|
requirements: []
|
84
95
|
|
85
96
|
rubyforge_project: mailbox
|
86
|
-
rubygems_version: 1.3.
|
97
|
+
rubygems_version: 1.3.6
|
87
98
|
signing_key:
|
88
99
|
specification_version: 3
|
89
100
|
summary: Mailbox is a JRuby module that simplifies concurrency and is backed by JVM threads.
|