celluloid 0.12.0.pre2 → 0.12.0.pre3
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/lib/celluloid.rb +23 -7
- data/lib/celluloid/proxies/actor_proxy.rb +5 -2
- data/lib/celluloid/proxies/async_proxy.rb +2 -2
- data/lib/celluloid/proxies/future_proxy.rb +2 -2
- data/lib/celluloid/tasks/task_fiber.rb +1 -1
- data/lib/celluloid/tasks/task_thread.rb +1 -1
- data/lib/celluloid/version.rb +1 -1
- data/spec/support/actor_examples.rb +13 -2
- data/spec/support/example_actor_class.rb +5 -1
- metadata +34 -35
data/lib/celluloid.rb
CHANGED
@@ -143,8 +143,16 @@ module Celluloid
|
|
143
143
|
end
|
144
144
|
|
145
145
|
# Define the default task type for this class
|
146
|
-
def task_class(klass)
|
147
|
-
|
146
|
+
def task_class(klass = nil)
|
147
|
+
if klass
|
148
|
+
@task_class = klass
|
149
|
+
elsif defined?(@task_class)
|
150
|
+
@task_class
|
151
|
+
elsif superclass.respond_to? :task_class
|
152
|
+
superclass.task_class
|
153
|
+
else
|
154
|
+
Celluloid.task_class
|
155
|
+
end
|
148
156
|
end
|
149
157
|
|
150
158
|
# Mark methods as running exclusively
|
@@ -174,7 +182,7 @@ module Celluloid
|
|
174
182
|
:mailbox => mailbox_factory,
|
175
183
|
:exit_handler => @exit_handler,
|
176
184
|
:exclusive_methods => @exclusive_methods,
|
177
|
-
:task_class =>
|
185
|
+
:task_class => task_class
|
178
186
|
}
|
179
187
|
end
|
180
188
|
|
@@ -364,13 +372,21 @@ module Celluloid
|
|
364
372
|
end
|
365
373
|
|
366
374
|
# Handle async calls within an actor itself
|
367
|
-
def async(meth, *args, &block)
|
368
|
-
|
375
|
+
def async(meth = nil, *args, &block)
|
376
|
+
if meth
|
377
|
+
Actor.async Thread.current[:actor].mailbox, meth, *args, &block
|
378
|
+
else
|
379
|
+
Thread.current[:actor].proxy.async
|
380
|
+
end
|
369
381
|
end
|
370
382
|
|
371
383
|
# Handle calls to future within an actor itself
|
372
|
-
def future(meth, *args, &block)
|
373
|
-
|
384
|
+
def future(meth = nil, *args, &block)
|
385
|
+
if meth
|
386
|
+
Actor.future Thread.current[:actor].mailbox, meth, *args, &block
|
387
|
+
else
|
388
|
+
Thread.current[:actor].proxy.future
|
389
|
+
end
|
374
390
|
end
|
375
391
|
end
|
376
392
|
|
@@ -6,6 +6,9 @@ module Celluloid
|
|
6
6
|
|
7
7
|
def initialize(actor)
|
8
8
|
@mailbox, @thread, @klass = actor.mailbox, actor.thread, actor.subject.class.to_s
|
9
|
+
|
10
|
+
@async_proxy = AsyncProxy.new(actor)
|
11
|
+
@future_proxy = FutureProxy.new(actor)
|
9
12
|
end
|
10
13
|
|
11
14
|
def class
|
@@ -59,7 +62,7 @@ module Celluloid
|
|
59
62
|
if method_name
|
60
63
|
Actor.async @mailbox, method_name, *args, &block
|
61
64
|
else
|
62
|
-
|
65
|
+
@async_proxy
|
63
66
|
end
|
64
67
|
end
|
65
68
|
|
@@ -68,7 +71,7 @@ module Celluloid
|
|
68
71
|
if method_name
|
69
72
|
Actor.future @mailbox, method_name, *args, &block
|
70
73
|
else
|
71
|
-
|
74
|
+
@future_proxy
|
72
75
|
end
|
73
76
|
end
|
74
77
|
|
@@ -59,7 +59,7 @@ module Celluloid
|
|
59
59
|
|
60
60
|
# Nicer string inspect for tasks
|
61
61
|
def inspect
|
62
|
-
"<Celluloid::
|
62
|
+
"<Celluloid::TaskFiber:0x#{object_id.to_s(16)} @type=#{@type.inspect}, @status=#{@status.inspect}>"
|
63
63
|
end
|
64
64
|
end
|
65
65
|
end
|
@@ -73,7 +73,7 @@ module Celluloid
|
|
73
73
|
|
74
74
|
# Nicer string inspect for tasks
|
75
75
|
def inspect
|
76
|
-
"<Celluloid::
|
76
|
+
"<Celluloid::TaskThread:0x#{object_id.to_s(16)} @type=#{@type.inspect}, @status=#{@status.inspect}>"
|
77
77
|
end
|
78
78
|
end
|
79
79
|
end
|
data/lib/celluloid/version.rb
CHANGED
@@ -160,7 +160,13 @@ shared_context "a Celluloid Actor" do |included_module|
|
|
160
160
|
actor.greet.should == "Hi, I'm Charlie Sheen"
|
161
161
|
end
|
162
162
|
|
163
|
-
it "supports asynchronous calls to itself" do
|
163
|
+
it "supports method! syntax for asynchronous calls to itself" do
|
164
|
+
actor = actor_class.new "Troy McClure"
|
165
|
+
actor.change_name_with_a_bang "Charlie Sheen"
|
166
|
+
actor.greet.should == "Hi, I'm Charlie Sheen"
|
167
|
+
end
|
168
|
+
|
169
|
+
it "supports async.method syntax for asynchronous calls to itself" do
|
164
170
|
actor = actor_class.new "Troy McClure"
|
165
171
|
actor.change_name_async "Charlie Sheen"
|
166
172
|
actor.greet.should == "Hi, I'm Charlie Sheen"
|
@@ -675,8 +681,13 @@ shared_context "a Celluloid Actor" do |included_module|
|
|
675
681
|
end
|
676
682
|
end
|
677
683
|
|
678
|
-
it "
|
684
|
+
it "overrides the task class" do
|
679
685
|
subject.new.tasks.first.should be_a ExampleTask
|
680
686
|
end
|
687
|
+
|
688
|
+
it "retains custom task classes when subclassed" do
|
689
|
+
subclass = Class.new(subject)
|
690
|
+
subclass.new.tasks.first.should be_a ExampleTask
|
691
|
+
end
|
681
692
|
end
|
682
693
|
end
|
@@ -13,10 +13,14 @@ module ExampleActorClass
|
|
13
13
|
@name = new_name
|
14
14
|
end
|
15
15
|
|
16
|
-
def
|
16
|
+
def change_name_with_a_bang(new_name)
|
17
17
|
change_name! new_name
|
18
18
|
end
|
19
19
|
|
20
|
+
def change_name_async(new_name)
|
21
|
+
async.change_name new_name
|
22
|
+
end
|
23
|
+
|
20
24
|
def greet
|
21
25
|
"Hi, I'm #{@name}"
|
22
26
|
end
|
metadata
CHANGED
@@ -1,61 +1,62 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: celluloid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.12.0.pre3
|
4
5
|
prerelease: 7
|
5
|
-
version: 0.12.0.pre2
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
8
8
|
- Tony Arcieri
|
9
|
-
autorequire:
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2012-09-03 00:00:00.
|
12
|
+
date: 2012-09-03 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: timers
|
16
|
-
|
16
|
+
requirement: &70304033561060 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
17
18
|
requirements:
|
18
19
|
- - ! '>='
|
19
20
|
- !ruby/object:Gem::Version
|
20
21
|
version: 1.0.0
|
21
|
-
none: false
|
22
|
-
requirement: *2056
|
23
|
-
prerelease: false
|
24
22
|
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70304033561060
|
25
25
|
- !ruby/object:Gem::Dependency
|
26
26
|
name: rake
|
27
|
-
|
27
|
+
requirement: &70304033560520 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
28
29
|
requirements:
|
29
30
|
- - ! '>='
|
30
31
|
- !ruby/object:Gem::Version
|
31
32
|
version: '0'
|
32
|
-
none: false
|
33
|
-
requirement: *2074
|
34
|
-
prerelease: false
|
35
33
|
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70304033560520
|
36
36
|
- !ruby/object:Gem::Dependency
|
37
37
|
name: rspec
|
38
|
-
|
38
|
+
requirement: &70304033559840 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
39
40
|
requirements:
|
40
41
|
- - ! '>='
|
41
42
|
- !ruby/object:Gem::Version
|
42
43
|
version: '0'
|
43
|
-
none: false
|
44
|
-
requirement: *2092
|
45
|
-
prerelease: false
|
46
44
|
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70304033559840
|
47
47
|
- !ruby/object:Gem::Dependency
|
48
48
|
name: benchmark_suite
|
49
|
-
|
49
|
+
requirement: &70304033559280 !ruby/object:Gem::Requirement
|
50
|
+
none: false
|
50
51
|
requirements:
|
51
52
|
- - ! '>='
|
52
53
|
- !ruby/object:Gem::Version
|
53
54
|
version: '0'
|
54
|
-
none: false
|
55
|
-
requirement: *2108
|
56
|
-
prerelease: false
|
57
55
|
type: :development
|
58
|
-
|
56
|
+
prerelease: false
|
57
|
+
version_requirements: *70304033559280
|
58
|
+
description: Celluloid enables people to build concurrent programs out of concurrent
|
59
|
+
objects just as easily as they build sequential programs out of sequential objects
|
59
60
|
email:
|
60
61
|
- tony.arcieri@gmail.com
|
61
62
|
executables: []
|
@@ -63,7 +64,6 @@ extensions: []
|
|
63
64
|
extra_rdoc_files: []
|
64
65
|
files:
|
65
66
|
- README.md
|
66
|
-
- lib/celluloid.rb
|
67
67
|
- lib/celluloid/actor.rb
|
68
68
|
- lib/celluloid/boot.rb
|
69
69
|
- lib/celluloid/calls.rb
|
@@ -79,6 +79,10 @@ files:
|
|
79
79
|
- lib/celluloid/method.rb
|
80
80
|
- lib/celluloid/notifications.rb
|
81
81
|
- lib/celluloid/pool_manager.rb
|
82
|
+
- lib/celluloid/proxies/abstract_proxy.rb
|
83
|
+
- lib/celluloid/proxies/actor_proxy.rb
|
84
|
+
- lib/celluloid/proxies/async_proxy.rb
|
85
|
+
- lib/celluloid/proxies/future_proxy.rb
|
82
86
|
- lib/celluloid/receivers.rb
|
83
87
|
- lib/celluloid/registry.rb
|
84
88
|
- lib/celluloid/responses.rb
|
@@ -88,15 +92,12 @@ files:
|
|
88
92
|
- lib/celluloid/supervisor.rb
|
89
93
|
- lib/celluloid/system_events.rb
|
90
94
|
- lib/celluloid/task.rb
|
95
|
+
- lib/celluloid/tasks/task_fiber.rb
|
96
|
+
- lib/celluloid/tasks/task_thread.rb
|
91
97
|
- lib/celluloid/thread_handle.rb
|
92
98
|
- lib/celluloid/uuid.rb
|
93
99
|
- lib/celluloid/version.rb
|
94
|
-
- lib/celluloid
|
95
|
-
- lib/celluloid/proxies/actor_proxy.rb
|
96
|
-
- lib/celluloid/proxies/async_proxy.rb
|
97
|
-
- lib/celluloid/proxies/future_proxy.rb
|
98
|
-
- lib/celluloid/tasks/task_fiber.rb
|
99
|
-
- lib/celluloid/tasks/task_thread.rb
|
100
|
+
- lib/celluloid.rb
|
100
101
|
- spec/support/actor_examples.rb
|
101
102
|
- spec/support/example_actor_class.rb
|
102
103
|
- spec/support/mailbox_examples.rb
|
@@ -104,28 +105,26 @@ files:
|
|
104
105
|
homepage: https://github.com/celluloid/celluloid
|
105
106
|
licenses:
|
106
107
|
- MIT
|
107
|
-
post_install_message:
|
108
|
+
post_install_message:
|
108
109
|
rdoc_options: []
|
109
110
|
require_paths:
|
110
111
|
- lib
|
111
112
|
required_ruby_version: !ruby/object:Gem::Requirement
|
113
|
+
none: false
|
112
114
|
requirements:
|
113
115
|
- - ! '>='
|
114
116
|
- !ruby/object:Gem::Version
|
115
117
|
version: 1.9.2
|
116
|
-
none: false
|
117
118
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
119
|
+
none: false
|
118
120
|
requirements:
|
119
121
|
- - ! '>='
|
120
122
|
- !ruby/object:Gem::Version
|
121
123
|
version: 1.3.6
|
122
|
-
none: false
|
123
124
|
requirements: []
|
124
|
-
rubyforge_project:
|
125
|
-
rubygems_version: 1.8.
|
126
|
-
signing_key:
|
125
|
+
rubyforge_project:
|
126
|
+
rubygems_version: 1.8.17
|
127
|
+
signing_key:
|
127
128
|
specification_version: 3
|
128
129
|
summary: Actor-based concurrent object framework for Ruby
|
129
130
|
test_files: []
|
130
|
-
has_rdoc:
|
131
|
-
...
|