mailbox 0.1.7 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,5 +1,5 @@
1
1
  ---
2
2
  :major: 0
3
- :minor: 1
4
- :patch: 7
3
+ :minor: 2
4
+ :patch: 0
5
5
  :build:
@@ -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( method_name, lambda do |*args|
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
- end )
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)
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{mailbox}
8
- s.version = "0.1.7"
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-02-26}
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.5}
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",
@@ -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
@@ -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
- version: 0.1.7
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-02-26 00:00:00 -06:00
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
- type: :runtime
19
- version_requirement:
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
- version:
31
+ type: :runtime
32
+ version_requirements: *id001
26
33
  - !ruby/object:Gem::Dependency
27
34
  name: jeweler
28
- type: :development
29
- version_requirement:
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
- version:
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.5
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.