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.
@@ -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.