celluloid 0.17.0 → 0.17.1
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of celluloid might be problematic. Click here for more details.
- checksums.yaml +4 -4
- data/CHANGES.md +10 -2
- data/LICENSE.txt +1 -1
- data/README.md +26 -14
- data/culture/gems/dependencies.yml +8 -2
- data/examples/stack.rb +47 -0
- data/lib/celluloid.rb +9 -6
- data/lib/celluloid/actor.rb +7 -32
- data/lib/celluloid/actor/manager.rb +7 -0
- data/lib/celluloid/actor/system.rb +163 -0
- data/lib/celluloid/call/sync.rb +1 -1
- data/lib/celluloid/calls.rb +3 -3
- data/lib/celluloid/cell.rb +1 -1
- data/lib/celluloid/condition.rb +3 -4
- data/lib/celluloid/debug.rb +1 -0
- data/lib/celluloid/deprecate.rb +3 -0
- data/lib/celluloid/exceptions.rb +20 -15
- data/lib/celluloid/future.rb +40 -3
- data/lib/celluloid/group.rb +5 -9
- data/lib/celluloid/group/pool.rb +1 -1
- data/lib/celluloid/group/spawner.rb +1 -2
- data/lib/celluloid/mailbox.rb +2 -2
- data/lib/celluloid/managed.rb +3 -0
- data/lib/celluloid/notices.rb +1 -1
- data/lib/celluloid/proxies.rb +7 -8
- data/lib/celluloid/proxy/abstract.rb +16 -21
- data/lib/celluloid/proxy/actor.rb +33 -37
- data/lib/celluloid/proxy/async.rb +24 -29
- data/lib/celluloid/proxy/block.rb +20 -24
- data/lib/celluloid/proxy/cell.rb +58 -62
- data/lib/celluloid/proxy/future.rb +33 -37
- data/lib/celluloid/proxy/sync.rb +31 -35
- data/lib/celluloid/system_events.rb +53 -1
- data/lib/celluloid/task.rb +13 -21
- data/lib/celluloid/task/fibered.rb +1 -1
- data/lib/celluloid/task/threaded.rb +2 -2
- data/lib/celluloid/version.rb +1 -1
- data/spec/celluloid/{group → actor}/manager_spec.rb +0 -0
- data/spec/celluloid/{actor_system_spec.rb → actor/system_spec.rb} +4 -4
- data/spec/celluloid/block_spec.rb +64 -3
- data/spec/celluloid/condition_spec.rb +6 -0
- data/spec/celluloid/future_spec.rb +2 -2
- data/spec/deprecate/actor_system_spec.rb +1 -1
- data/spec/deprecate/future_spec.rb +2 -2
- data/spec/shared/actor_examples.rb +20 -4
- data/spec/shared/group_examples.rb +1 -1
- data/spec/shared/mailbox_examples.rb +1 -1
- data/spec/spec_helper.rb +3 -3
- metadata +110 -76
- data/lib/celluloid/actor_system.rb +0 -160
- data/lib/celluloid/group/manager.rb +0 -27
data/lib/celluloid/task.rb
CHANGED
@@ -1,19 +1,6 @@
|
|
1
1
|
module Celluloid
|
2
|
-
# Asked to do task-related things outside a task
|
3
|
-
class NotTaskError < Celluloid::Error; end
|
4
|
-
|
5
|
-
# Trying to resume a dead task
|
6
|
-
class DeadTaskError < Celluloid::Error; end
|
7
|
-
|
8
|
-
# Errors which should be resumed automatically
|
9
|
-
class ResumableError < Celluloid::Error; end
|
10
|
-
|
11
2
|
# Tasks are interruptable/resumable execution contexts used to run methods
|
12
3
|
class Task
|
13
|
-
class TerminatedError < ResumableError; end # kill a running task after terminate
|
14
|
-
|
15
|
-
class TimeoutError < ResumableError; end # kill a running task after timeout
|
16
|
-
|
17
4
|
# Obtain the current task
|
18
5
|
def self.current
|
19
6
|
Thread.current[:celluloid_task] || fail(NotTaskError, "not within a task context")
|
@@ -55,7 +42,7 @@ module Celluloid
|
|
55
42
|
|
56
43
|
actor.tasks << self
|
57
44
|
yield
|
58
|
-
rescue
|
45
|
+
rescue TaskTerminated
|
59
46
|
# Task was explicitly terminated
|
60
47
|
ensure
|
61
48
|
name_current_thread nil
|
@@ -85,15 +72,18 @@ module Celluloid
|
|
85
72
|
value = signal
|
86
73
|
|
87
74
|
@status = :running
|
88
|
-
fail value if value.is_a?(Celluloid::
|
89
|
-
|
75
|
+
fail value if value.is_a?(Celluloid::Interruption)
|
90
76
|
value
|
91
77
|
end
|
92
78
|
|
93
79
|
# Resume a suspended task, giving it a value to return if needed
|
94
80
|
def resume(value = nil)
|
95
81
|
guard "Cannot resume a task from inside of a task" if Thread.current[:celluloid_task]
|
96
|
-
|
82
|
+
if running?
|
83
|
+
deliver(value)
|
84
|
+
else
|
85
|
+
Internals::Logger.warn "Attempted to resume a dead task: type=#{@type.inspect}, meta=#{@meta.inspect}, status=#{@status.inspect}"
|
86
|
+
end
|
97
87
|
nil
|
98
88
|
end
|
99
89
|
|
@@ -116,11 +106,13 @@ module Celluloid
|
|
116
106
|
fail "Cannot terminate an exclusive task" if exclusive?
|
117
107
|
|
118
108
|
if running?
|
119
|
-
|
120
|
-
|
121
|
-
|
109
|
+
if $CELLULOID_DEBUG
|
110
|
+
Internals::Logger.with_backtrace(backtrace) do |logger|
|
111
|
+
type = @dangerous_suspend ? :warn : :debug
|
112
|
+
logger.send(type, "Terminating task: type=#{@type.inspect}, meta=#{@meta.inspect}, status=#{@status.inspect}")
|
113
|
+
end
|
122
114
|
end
|
123
|
-
exception =
|
115
|
+
exception = TaskTerminated.new("task was terminated")
|
124
116
|
exception.set_backtrace(caller)
|
125
117
|
resume exception
|
126
118
|
else
|
@@ -25,7 +25,7 @@ module Celluloid
|
|
25
25
|
def deliver(value)
|
26
26
|
@fiber.resume value
|
27
27
|
rescue SystemStackError => ex
|
28
|
-
raise StackError, "#{ex} (
|
28
|
+
raise StackError, "#{ex} @#{meta[:method_name] || :unknown} (see https://github.com/celluloid/celluloid/wiki/Fiber-stack-errors)"
|
29
29
|
rescue FiberError => ex
|
30
30
|
raise DeadTaskError, "cannot resume a dead task (#{ex})"
|
31
31
|
end
|
@@ -18,10 +18,10 @@ module Celluloid
|
|
18
18
|
thread = Internals::ThreadHandle.new(Thread.current[:celluloid_actor_system], :task) do
|
19
19
|
begin
|
20
20
|
ex = @resume_queue.pop
|
21
|
-
fail ex if ex.is_a?(
|
21
|
+
fail ex if ex.is_a?(TaskTerminated)
|
22
22
|
|
23
23
|
yield
|
24
|
-
rescue Exception => ex
|
24
|
+
rescue ::Exception => ex
|
25
25
|
@exception_queue << ex
|
26
26
|
ensure
|
27
27
|
@yield_mutex.synchronize do
|
data/lib/celluloid/version.rb
CHANGED
File without changes
|
@@ -1,4 +1,4 @@
|
|
1
|
-
RSpec.describe Celluloid::
|
1
|
+
RSpec.describe Celluloid::Actor::System do
|
2
2
|
class TestActor
|
3
3
|
include Celluloid
|
4
4
|
def identity
|
@@ -10,7 +10,7 @@ RSpec.describe Celluloid::ActorSystem do
|
|
10
10
|
subject.shutdown
|
11
11
|
end
|
12
12
|
|
13
|
-
it "supports non-global
|
13
|
+
it "supports non-global Actor::System" do
|
14
14
|
subject.within do
|
15
15
|
expect(Celluloid.actor_system).to eq(subject)
|
16
16
|
end
|
@@ -27,7 +27,7 @@ RSpec.describe Celluloid::ActorSystem do
|
|
27
27
|
|
28
28
|
it "starts default actors" do
|
29
29
|
subject.start
|
30
|
-
expect(subject.registered).to eq(Celluloid::
|
30
|
+
expect(subject.registered).to eq(Celluloid::Actor::System::ROOT_SERVICES.map { |r| r[:as] })
|
31
31
|
end
|
32
32
|
|
33
33
|
it "support getting threads" do
|
@@ -73,7 +73,7 @@ RSpec.describe Celluloid::ActorSystem do
|
|
73
73
|
subject.shutdown
|
74
74
|
|
75
75
|
expect { subject.get_thread }
|
76
|
-
.to raise_error(Celluloid::
|
76
|
+
.to raise_error(Celluloid::NotActive)
|
77
77
|
end
|
78
78
|
|
79
79
|
it "warns nicely when no actor system is started" do
|
@@ -15,10 +15,36 @@ RSpec.describe "Blocks", actor_system: :global do
|
|
15
15
|
$data << receive_result(:self)
|
16
16
|
$data << current_actor.receive_result(:current_actor)
|
17
17
|
$data << sender_actor.receive_result(:sender)
|
18
|
-
|
18
|
+
:pete_the_polyglot_alien
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
22
|
+
def deferred_excecution(value, &block)
|
23
|
+
defer {
|
24
|
+
yield(value)
|
25
|
+
}
|
26
|
+
end
|
27
|
+
|
28
|
+
def deferred_current_actor(&block)
|
29
|
+
defer {
|
30
|
+
yield(current_actor.name)
|
31
|
+
}
|
32
|
+
end
|
33
|
+
|
34
|
+
def defer_for_something(other, &block)
|
35
|
+
sender_actor = current_actor
|
36
|
+
defer {
|
37
|
+
$data << [:outside, @name, current_actor.name]
|
38
|
+
other.do_something_and_callback do |value|
|
39
|
+
$data << [:yielded, @name, current_actor.name]
|
40
|
+
$data << receive_result(:self)
|
41
|
+
$data << current_actor.receive_result(:current_actor)
|
42
|
+
$data << sender_actor.receive_result(:sender)
|
43
|
+
:pete_the_polyglot_alien
|
44
|
+
end
|
45
|
+
}
|
46
|
+
end
|
47
|
+
|
22
48
|
def do_something_and_callback
|
23
49
|
$data << [:something, @name, current_actor.name]
|
24
50
|
$data << yield(:foo)
|
@@ -29,7 +55,7 @@ RSpec.describe "Blocks", actor_system: :global do
|
|
29
55
|
end
|
30
56
|
end
|
31
57
|
|
32
|
-
it "
|
58
|
+
it "work between actors" do
|
33
59
|
$data = []
|
34
60
|
|
35
61
|
a1 = MyBlockActor.new("one")
|
@@ -44,7 +70,42 @@ RSpec.describe "Blocks", actor_system: :global do
|
|
44
70
|
[:self, "one", "one"],
|
45
71
|
[:current_actor, "one", "one"],
|
46
72
|
[:sender, "one", "one"],
|
47
|
-
|
73
|
+
:pete_the_polyglot_alien,
|
74
|
+
]
|
75
|
+
|
76
|
+
expect($data).to eq(expected)
|
77
|
+
end
|
78
|
+
|
79
|
+
execute_deferred = Proc.new {
|
80
|
+
a1 = MyBlockActor.new("one")
|
81
|
+
expect(a1.deferred_excecution(:pete_the_polyglot_alien) { |v| v })
|
82
|
+
.to eq(:pete_the_polyglot_alien)
|
83
|
+
}
|
84
|
+
|
85
|
+
unless RUBY_ENGINE == 'jruby'
|
86
|
+
xit("can be deferred", &execute_deferred)
|
87
|
+
else
|
88
|
+
it("can be deferred", &execute_deferred)
|
89
|
+
end
|
90
|
+
|
91
|
+
xit "can execute deferred blocks referencing current_actor" do
|
92
|
+
a1 = MyBlockActor.new("one")
|
93
|
+
expect(a1.deferred_current_actor { |v| v }).to be("one")
|
94
|
+
end
|
95
|
+
|
96
|
+
xit "can execute deferred blocks with another actor" do
|
97
|
+
$data = []
|
98
|
+
a1 = MyBlockActor.new("one")
|
99
|
+
a2 = MyBlockActor.new("two")
|
100
|
+
a1.defer_for_something a2
|
101
|
+
expected = [
|
102
|
+
[:outside, "one", "one"],
|
103
|
+
[:something, "two", "two"],
|
104
|
+
[:yielded, "one", "one"],
|
105
|
+
[:self, "one", "one"],
|
106
|
+
[:current_actor, "one", "one"],
|
107
|
+
[:sender, "one", "one"],
|
108
|
+
:pete_the_polyglot_alien,
|
48
109
|
]
|
49
110
|
|
50
111
|
expect($data).to eq(expected)
|
@@ -59,6 +59,12 @@ RSpec.describe Celluloid::Condition, actor_system: :global do
|
|
59
59
|
expect(future.value).to be(:example_value)
|
60
60
|
end
|
61
61
|
|
62
|
+
it "supports running blocks with value once obtained" do
|
63
|
+
condition = Celluloid::Condition.new
|
64
|
+
actor.async.signal_condition condition, :value
|
65
|
+
expect(condition.wait { |value| "#{value} post-handled" }).to eq("value post-handled")
|
66
|
+
end
|
67
|
+
|
62
68
|
it "supports waiting outside actors" do
|
63
69
|
condition = Celluloid::Condition.new
|
64
70
|
actor.async.signal_condition condition, :value
|
@@ -28,8 +28,8 @@ RSpec.describe Celluloid::Future, actor_system: :global do
|
|
28
28
|
expect(future).to be_ready
|
29
29
|
end
|
30
30
|
|
31
|
-
it "raises
|
31
|
+
it "raises TaskTimeout when the future times out" do
|
32
32
|
future = Celluloid::Future.new { sleep 2 }
|
33
|
-
expect { future.value(1) }.to raise_exception(Celluloid::
|
33
|
+
expect { future.value(1) }.to raise_exception(Celluloid::TaskTimeout)
|
34
34
|
end
|
35
35
|
end
|
@@ -62,7 +62,7 @@ RSpec.describe "Deprecated Celluloid::ActorSystem" do
|
|
62
62
|
subject.shutdown
|
63
63
|
|
64
64
|
expect { subject.get_thread }
|
65
|
-
.to raise_error(Celluloid::
|
65
|
+
.to raise_error(Celluloid::NotActive)
|
66
66
|
end
|
67
67
|
|
68
68
|
it "warns nicely when no actor system is started" do
|
@@ -25,8 +25,8 @@ RSpec.describe "Deprecated Celluloid::Future", actor_system: :global do
|
|
25
25
|
expect(future).to be_ready
|
26
26
|
end
|
27
27
|
|
28
|
-
it "raises
|
28
|
+
it "raises TaskTimeout when the future times out" do
|
29
29
|
future = Celluloid::Future.new { sleep 2 }
|
30
|
-
expect { future.value(1) }.to raise_exception(Celluloid::
|
30
|
+
expect { future.value(1) }.to raise_exception(Celluloid::TaskTimeout)
|
31
31
|
end
|
32
32
|
end unless $CELLULOID_BACKPORTED == false
|
@@ -225,7 +225,7 @@ RSpec.shared_examples "a Celluloid Actor" do
|
|
225
225
|
|
226
226
|
it "warns about suspending the finalizer" do
|
227
227
|
allow(logger).to receive(:warn)
|
228
|
-
allow(logger).to receive(:crash).with(/finalizer crashed!/, Celluloid::
|
228
|
+
allow(logger).to receive(:crash).with(/finalizer crashed!/, Celluloid::TaskTerminated)
|
229
229
|
expect(logger).to receive(:warn).with(/Dangerously suspending task: type=:finalizer, meta={:dangerous_suspend=>true, :method_name=>:cleanup}, status=:sleeping/)
|
230
230
|
actor.terminate
|
231
231
|
Specs.sleep_and_wait_until { !actor.alive? }
|
@@ -576,9 +576,11 @@ RSpec.shared_examples "a Celluloid Actor" do
|
|
576
576
|
Class.new do # like a boss
|
577
577
|
include CelluloidSpecs.included_module
|
578
578
|
trap_exit :lambaste_subordinate
|
579
|
+
attr_reader :exception
|
579
580
|
|
580
581
|
def initialize(name)
|
581
582
|
@name = name
|
583
|
+
@exception = nil
|
582
584
|
@subordinate_lambasted = false
|
583
585
|
end
|
584
586
|
|
@@ -588,6 +590,7 @@ RSpec.shared_examples "a Celluloid Actor" do
|
|
588
590
|
|
589
591
|
def lambaste_subordinate(_actor, _reason)
|
590
592
|
@subordinate_lambasted = true
|
593
|
+
@exception = _reason
|
591
594
|
end
|
592
595
|
end
|
593
596
|
end
|
@@ -669,6 +672,19 @@ RSpec.shared_examples "a Celluloid Actor" do
|
|
669
672
|
sleep 0.1 # hax to prevent a race between exit handling and the next call
|
670
673
|
expect(chuck.links.count).to be(0)
|
671
674
|
end
|
675
|
+
|
676
|
+
it "traps exit reason from subordinates" do
|
677
|
+
allow(logger).to receive(:crash).with("Actor crashed!", ExampleCrash)
|
678
|
+
chuck = supervisor_class.new "Chuck Lorre"
|
679
|
+
chuck.link @charlie
|
680
|
+
|
681
|
+
expect do
|
682
|
+
@charlie.crash
|
683
|
+
end.to raise_exception(ExampleCrash)
|
684
|
+
|
685
|
+
sleep 0.1 # hax to prevent a race between exit handling and the next call
|
686
|
+
expect(chuck.exception.class).to be(ExampleCrash)
|
687
|
+
end
|
672
688
|
end
|
673
689
|
|
674
690
|
context :signaling do
|
@@ -1216,9 +1232,9 @@ RSpec.shared_examples "a Celluloid Actor" do
|
|
1216
1232
|
let(:a1) { actor_class.new }
|
1217
1233
|
let(:a2) { actor_class.new }
|
1218
1234
|
|
1219
|
-
it "allows timing out tasks, raising Celluloid::
|
1220
|
-
allow(logger).to receive(:crash).with("Actor crashed!", Celluloid::
|
1221
|
-
expect { a1.ask_name_with_timeout a2, 0.3 }.to raise_error(Celluloid::
|
1235
|
+
it "allows timing out tasks, raising Celluloid::TaskTimeout" do
|
1236
|
+
allow(logger).to receive(:crash).with("Actor crashed!", Celluloid::TaskTimeout)
|
1237
|
+
expect { a1.ask_name_with_timeout a2, 0.3 }.to raise_error(Celluloid::TaskTimeout)
|
1222
1238
|
Specs.sleep_and_wait_until { !a1.alive? }
|
1223
1239
|
end
|
1224
1240
|
|
@@ -25,7 +25,7 @@ RSpec.shared_examples "a Celluloid Group" do
|
|
25
25
|
wait_until_idle
|
26
26
|
end
|
27
27
|
|
28
|
-
[StandardError, Exception].each do |exception_class|
|
28
|
+
[::StandardError, ::Exception].each do |exception_class|
|
29
29
|
context "with an #{exception_class} in the thread" do
|
30
30
|
before do
|
31
31
|
@wait_queue = Queue.new # doesn't work if in a let()
|
@@ -43,7 +43,7 @@ RSpec.shared_examples "a Celluloid Mailbox" do
|
|
43
43
|
|
44
44
|
expect do
|
45
45
|
subject.receive(interval) { false }
|
46
|
-
end.to raise_exception(Celluloid::
|
46
|
+
end.to raise_exception(Celluloid::TaskTimeout)
|
47
47
|
|
48
48
|
# Just check to make sure it didn't return earlier
|
49
49
|
expect(Time.now - started_at).to be >= interval
|
data/spec/spec_helper.rb
CHANGED
@@ -50,8 +50,8 @@ RSpec.configure do |config|
|
|
50
50
|
if @fake_logger.crashes?
|
51
51
|
crashes = @fake_logger.crashes.map do |args, call_stack|
|
52
52
|
msg, ex = *args
|
53
|
-
"\n** Crash: #{msg.inspect}(#{ex.inspect})\n Backtrace:\n (crash) #{call_stack * "\n (crash) "
|
54
|
-
"\n** Crash: \"Actor crashed!\"(#{ex.inspect})\n Backtrace:\n (crash) #{call_stack * "\n (crash) "
|
53
|
+
"\n** Crash: #{msg.inspect}(#{ex.inspect})\n Backtrace:\n (crash) #{call_stack * "\n (crash) "}"\
|
54
|
+
"\n** Crash: \"Actor crashed!\"(#{ex.inspect})\n Backtrace:\n (crash) #{call_stack * "\n (crash) "}"\
|
55
55
|
"\n Exception Backtrace (#{ex.inspect}):\n (ex) #{ex.backtrace * "\n (ex) "}"
|
56
56
|
end.join("\n")
|
57
57
|
|
@@ -80,7 +80,7 @@ RSpec.configure do |config|
|
|
80
80
|
end
|
81
81
|
|
82
82
|
config.around actor_system: :within do |ex|
|
83
|
-
Celluloid::
|
83
|
+
Celluloid::Actor::System.new.within do
|
84
84
|
ex.run
|
85
85
|
end
|
86
86
|
end
|
metadata
CHANGED
@@ -1,242 +1,273 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: celluloid
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.17.
|
4
|
+
version: 0.17.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tony Arcieri
|
8
|
-
|
8
|
+
- digitalextremist//
|
9
|
+
autorequire:
|
9
10
|
bindir: bin
|
10
11
|
cert_chain: []
|
11
|
-
date: 2015-
|
12
|
+
date: 2015-08-06 00:00:00.000000000 Z
|
12
13
|
dependencies:
|
13
14
|
- !ruby/object:Gem::Dependency
|
15
|
+
name: bundler
|
14
16
|
requirement: !ruby/object:Gem::Requirement
|
15
17
|
requirements:
|
16
|
-
- -
|
18
|
+
- - ">="
|
17
19
|
- !ruby/object:Gem::Version
|
18
20
|
version: '0'
|
19
|
-
name: bundler
|
20
|
-
prerelease: false
|
21
21
|
type: :runtime
|
22
|
+
prerelease: false
|
22
23
|
version_requirements: !ruby/object:Gem::Requirement
|
23
24
|
requirements:
|
24
|
-
- -
|
25
|
+
- - ">="
|
25
26
|
- !ruby/object:Gem::Version
|
26
27
|
version: '0'
|
27
28
|
- !ruby/object:Gem::Dependency
|
29
|
+
name: nenv
|
28
30
|
requirement: !ruby/object:Gem::Requirement
|
29
31
|
requirements:
|
30
|
-
- -
|
32
|
+
- - ">="
|
31
33
|
- !ruby/object:Gem::Version
|
32
34
|
version: '0'
|
33
|
-
name: nenv
|
34
|
-
prerelease: false
|
35
35
|
type: :runtime
|
36
|
+
prerelease: false
|
36
37
|
version_requirements: !ruby/object:Gem::Requirement
|
37
38
|
requirements:
|
38
|
-
- -
|
39
|
+
- - ">="
|
39
40
|
- !ruby/object:Gem::Version
|
40
41
|
version: '0'
|
41
42
|
- !ruby/object:Gem::Dependency
|
43
|
+
name: dotenv
|
42
44
|
requirement: !ruby/object:Gem::Requirement
|
43
45
|
requirements:
|
44
|
-
- -
|
46
|
+
- - ">="
|
45
47
|
- !ruby/object:Gem::Version
|
46
48
|
version: '0'
|
47
|
-
name: dotenv
|
48
|
-
prerelease: false
|
49
49
|
type: :runtime
|
50
|
+
prerelease: false
|
50
51
|
version_requirements: !ruby/object:Gem::Requirement
|
51
52
|
requirements:
|
52
|
-
- -
|
53
|
+
- - ">="
|
53
54
|
- !ruby/object:Gem::Version
|
54
55
|
version: '0'
|
55
56
|
- !ruby/object:Gem::Dependency
|
57
|
+
name: benchmark_suite
|
56
58
|
requirement: !ruby/object:Gem::Requirement
|
57
59
|
requirements:
|
58
|
-
- -
|
60
|
+
- - ">="
|
59
61
|
- !ruby/object:Gem::Version
|
60
62
|
version: '0'
|
61
|
-
name: benchmark_suite
|
62
|
-
prerelease: false
|
63
63
|
type: :development
|
64
|
+
prerelease: false
|
64
65
|
version_requirements: !ruby/object:Gem::Requirement
|
65
66
|
requirements:
|
66
|
-
- -
|
67
|
+
- - ">="
|
67
68
|
- !ruby/object:Gem::Version
|
68
69
|
version: '0'
|
69
70
|
- !ruby/object:Gem::Dependency
|
71
|
+
name: rubocop
|
70
72
|
requirement: !ruby/object:Gem::Requirement
|
71
73
|
requirements:
|
72
|
-
- -
|
74
|
+
- - ">="
|
73
75
|
- !ruby/object:Gem::Version
|
74
76
|
version: '0'
|
75
|
-
name: rubocop
|
76
|
-
prerelease: false
|
77
77
|
type: :development
|
78
|
+
prerelease: false
|
78
79
|
version_requirements: !ruby/object:Gem::Requirement
|
79
80
|
requirements:
|
80
|
-
- -
|
81
|
+
- - ">="
|
81
82
|
- !ruby/object:Gem::Version
|
82
83
|
version: '0'
|
83
84
|
- !ruby/object:Gem::Dependency
|
85
|
+
name: transpec
|
84
86
|
requirement: !ruby/object:Gem::Requirement
|
85
87
|
requirements:
|
86
|
-
- -
|
88
|
+
- - ">="
|
87
89
|
- !ruby/object:Gem::Version
|
88
90
|
version: '0'
|
89
|
-
name: pry
|
90
|
-
prerelease: false
|
91
91
|
type: :development
|
92
|
+
prerelease: false
|
92
93
|
version_requirements: !ruby/object:Gem::Requirement
|
93
94
|
requirements:
|
94
|
-
- -
|
95
|
+
- - ">="
|
95
96
|
- !ruby/object:Gem::Version
|
96
97
|
version: '0'
|
97
98
|
- !ruby/object:Gem::Dependency
|
99
|
+
name: pry
|
98
100
|
requirement: !ruby/object:Gem::Requirement
|
99
101
|
requirements:
|
100
|
-
- -
|
102
|
+
- - ">="
|
101
103
|
- !ruby/object:Gem::Version
|
102
104
|
version: '0'
|
103
|
-
name: rake
|
104
|
-
prerelease: false
|
105
105
|
type: :development
|
106
|
+
prerelease: false
|
106
107
|
version_requirements: !ruby/object:Gem::Requirement
|
107
108
|
requirements:
|
108
|
-
- -
|
109
|
+
- - ">="
|
109
110
|
- !ruby/object:Gem::Version
|
110
111
|
version: '0'
|
111
112
|
- !ruby/object:Gem::Dependency
|
113
|
+
name: rake
|
112
114
|
requirement: !ruby/object:Gem::Requirement
|
113
115
|
requirements:
|
114
|
-
- -
|
116
|
+
- - ">="
|
115
117
|
- !ruby/object:Gem::Version
|
116
118
|
version: '0'
|
117
|
-
name: rspec
|
118
|
-
prerelease: false
|
119
119
|
type: :development
|
120
|
+
prerelease: false
|
120
121
|
version_requirements: !ruby/object:Gem::Requirement
|
121
122
|
requirements:
|
122
|
-
- -
|
123
|
+
- - ">="
|
123
124
|
- !ruby/object:Gem::Version
|
124
125
|
version: '0'
|
125
126
|
- !ruby/object:Gem::Dependency
|
127
|
+
name: rspec
|
126
128
|
requirement: !ruby/object:Gem::Requirement
|
127
129
|
requirements:
|
128
|
-
- -
|
130
|
+
- - ">="
|
129
131
|
- !ruby/object:Gem::Version
|
130
132
|
version: '0'
|
131
|
-
name: coveralls
|
132
|
-
prerelease: false
|
133
133
|
type: :development
|
134
|
+
prerelease: false
|
134
135
|
version_requirements: !ruby/object:Gem::Requirement
|
135
136
|
requirements:
|
136
|
-
- -
|
137
|
+
- - ">="
|
137
138
|
- !ruby/object:Gem::Version
|
138
139
|
version: '0'
|
139
140
|
- !ruby/object:Gem::Dependency
|
141
|
+
name: guard-rspec
|
140
142
|
requirement: !ruby/object:Gem::Requirement
|
141
143
|
requirements:
|
142
|
-
- -
|
144
|
+
- - ">="
|
143
145
|
- !ruby/object:Gem::Version
|
144
146
|
version: '0'
|
145
|
-
|
147
|
+
type: :development
|
146
148
|
prerelease: false
|
147
|
-
type: :runtime
|
148
149
|
version_requirements: !ruby/object:Gem::Requirement
|
149
150
|
requirements:
|
150
|
-
- -
|
151
|
+
- - ">="
|
151
152
|
- !ruby/object:Gem::Version
|
152
153
|
version: '0'
|
153
154
|
- !ruby/object:Gem::Dependency
|
155
|
+
name: coveralls
|
154
156
|
requirement: !ruby/object:Gem::Requirement
|
155
157
|
requirements:
|
156
|
-
- -
|
158
|
+
- - ">="
|
157
159
|
- !ruby/object:Gem::Version
|
158
160
|
version: '0'
|
159
|
-
|
161
|
+
type: :development
|
160
162
|
prerelease: false
|
161
|
-
type: :runtime
|
162
163
|
version_requirements: !ruby/object:Gem::Requirement
|
163
164
|
requirements:
|
164
|
-
- -
|
165
|
+
- - ">="
|
165
166
|
- !ruby/object:Gem::Version
|
166
167
|
version: '0'
|
167
168
|
- !ruby/object:Gem::Dependency
|
169
|
+
name: celluloid-essentials
|
168
170
|
requirement: !ruby/object:Gem::Requirement
|
169
171
|
requirements:
|
170
|
-
- -
|
172
|
+
- - ">="
|
171
173
|
- !ruby/object:Gem::Version
|
172
174
|
version: '0'
|
173
|
-
name: celluloid-pool
|
174
|
-
prerelease: false
|
175
175
|
type: :runtime
|
176
|
+
prerelease: false
|
176
177
|
version_requirements: !ruby/object:Gem::Requirement
|
177
178
|
requirements:
|
178
|
-
- -
|
179
|
+
- - ">="
|
179
180
|
- !ruby/object:Gem::Version
|
180
181
|
version: '0'
|
181
182
|
- !ruby/object:Gem::Dependency
|
183
|
+
name: celluloid-supervision
|
182
184
|
requirement: !ruby/object:Gem::Requirement
|
183
185
|
requirements:
|
184
|
-
- -
|
186
|
+
- - ">="
|
185
187
|
- !ruby/object:Gem::Version
|
186
188
|
version: '0'
|
187
|
-
|
189
|
+
type: :runtime
|
188
190
|
prerelease: false
|
191
|
+
version_requirements: !ruby/object:Gem::Requirement
|
192
|
+
requirements:
|
193
|
+
- - ">="
|
194
|
+
- !ruby/object:Gem::Version
|
195
|
+
version: '0'
|
196
|
+
- !ruby/object:Gem::Dependency
|
197
|
+
name: celluloid-pool
|
198
|
+
requirement: !ruby/object:Gem::Requirement
|
199
|
+
requirements:
|
200
|
+
- - ">="
|
201
|
+
- !ruby/object:Gem::Version
|
202
|
+
version: '0'
|
189
203
|
type: :runtime
|
204
|
+
prerelease: false
|
190
205
|
version_requirements: !ruby/object:Gem::Requirement
|
191
206
|
requirements:
|
192
|
-
- -
|
207
|
+
- - ">="
|
193
208
|
- !ruby/object:Gem::Version
|
194
209
|
version: '0'
|
195
210
|
- !ruby/object:Gem::Dependency
|
211
|
+
name: celluloid-fsm
|
196
212
|
requirement: !ruby/object:Gem::Requirement
|
197
213
|
requirements:
|
198
|
-
- -
|
214
|
+
- - ">="
|
199
215
|
- !ruby/object:Gem::Version
|
200
216
|
version: '0'
|
201
|
-
|
217
|
+
type: :runtime
|
202
218
|
prerelease: false
|
219
|
+
version_requirements: !ruby/object:Gem::Requirement
|
220
|
+
requirements:
|
221
|
+
- - ">="
|
222
|
+
- !ruby/object:Gem::Version
|
223
|
+
version: '0'
|
224
|
+
- !ruby/object:Gem::Dependency
|
225
|
+
name: celluloid-extras
|
226
|
+
requirement: !ruby/object:Gem::Requirement
|
227
|
+
requirements:
|
228
|
+
- - ">="
|
229
|
+
- !ruby/object:Gem::Version
|
230
|
+
version: '0'
|
203
231
|
type: :runtime
|
232
|
+
prerelease: false
|
204
233
|
version_requirements: !ruby/object:Gem::Requirement
|
205
234
|
requirements:
|
206
|
-
- -
|
235
|
+
- - ">="
|
207
236
|
- !ruby/object:Gem::Version
|
208
237
|
version: '0'
|
209
238
|
- !ruby/object:Gem::Dependency
|
239
|
+
name: timers
|
210
240
|
requirement: !ruby/object:Gem::Requirement
|
211
241
|
requirements:
|
212
|
-
- - ~>
|
242
|
+
- - "~>"
|
213
243
|
- !ruby/object:Gem::Version
|
214
244
|
version: 4.0.0
|
215
|
-
name: timers
|
216
|
-
prerelease: false
|
217
245
|
type: :runtime
|
246
|
+
prerelease: false
|
218
247
|
version_requirements: !ruby/object:Gem::Requirement
|
219
248
|
requirements:
|
220
|
-
- - ~>
|
249
|
+
- - "~>"
|
221
250
|
- !ruby/object:Gem::Version
|
222
251
|
version: 4.0.0
|
223
252
|
- !ruby/object:Gem::Dependency
|
253
|
+
name: rspec-logsplit
|
224
254
|
requirement: !ruby/object:Gem::Requirement
|
225
255
|
requirements:
|
226
|
-
- -
|
256
|
+
- - ">="
|
227
257
|
- !ruby/object:Gem::Version
|
228
258
|
version: 0.1.2
|
229
|
-
name: rspec-logsplit
|
230
|
-
prerelease: false
|
231
259
|
type: :runtime
|
260
|
+
prerelease: false
|
232
261
|
version_requirements: !ruby/object:Gem::Requirement
|
233
262
|
requirements:
|
234
|
-
- -
|
263
|
+
- - ">="
|
235
264
|
- !ruby/object:Gem::Version
|
236
265
|
version: 0.1.2
|
237
|
-
description: Celluloid enables people to build concurrent programs out of concurrent
|
266
|
+
description: Celluloid enables people to build concurrent programs out of concurrent
|
267
|
+
objects just as easily as they build sequential programs out of sequential objects
|
238
268
|
email:
|
239
269
|
- tony.arcieri@gmail.com
|
270
|
+
- code@extremist.digital
|
240
271
|
executables: []
|
241
272
|
extensions: []
|
242
273
|
extra_rdoc_files: []
|
@@ -268,10 +299,12 @@ files:
|
|
268
299
|
- examples/futures.rb
|
269
300
|
- examples/ring.rb
|
270
301
|
- examples/simple_pmap.rb
|
302
|
+
- examples/stack.rb
|
271
303
|
- examples/timers.rb
|
272
304
|
- lib/celluloid.rb
|
273
305
|
- lib/celluloid/actor.rb
|
274
|
-
- lib/celluloid/
|
306
|
+
- lib/celluloid/actor/manager.rb
|
307
|
+
- lib/celluloid/actor/system.rb
|
275
308
|
- lib/celluloid/autostart.rb
|
276
309
|
- lib/celluloid/backported.rb
|
277
310
|
- lib/celluloid/call/async.rb
|
@@ -282,17 +315,18 @@ files:
|
|
282
315
|
- lib/celluloid/condition.rb
|
283
316
|
- lib/celluloid/core_ext.rb
|
284
317
|
- lib/celluloid/current.rb
|
318
|
+
- lib/celluloid/debug.rb
|
285
319
|
- lib/celluloid/deprecate.rb
|
286
320
|
- lib/celluloid/exceptions.rb
|
287
321
|
- lib/celluloid/fiber.rb
|
288
322
|
- lib/celluloid/future.rb
|
289
323
|
- lib/celluloid/group.rb
|
290
|
-
- lib/celluloid/group/manager.rb
|
291
324
|
- lib/celluloid/group/pool.rb
|
292
325
|
- lib/celluloid/group/spawner.rb
|
293
326
|
- lib/celluloid/logging.rb
|
294
327
|
- lib/celluloid/mailbox.rb
|
295
328
|
- lib/celluloid/mailbox/evented.rb
|
329
|
+
- lib/celluloid/managed.rb
|
296
330
|
- lib/celluloid/notices.rb
|
297
331
|
- lib/celluloid/proxies.rb
|
298
332
|
- lib/celluloid/proxy/abstract.rb
|
@@ -310,15 +344,15 @@ files:
|
|
310
344
|
- lib/celluloid/test.rb
|
311
345
|
- lib/celluloid/thread.rb
|
312
346
|
- lib/celluloid/version.rb
|
347
|
+
- spec/celluloid/actor/manager_spec.rb
|
348
|
+
- spec/celluloid/actor/system_spec.rb
|
313
349
|
- spec/celluloid/actor_spec.rb
|
314
|
-
- spec/celluloid/actor_system_spec.rb
|
315
350
|
- spec/celluloid/block_spec.rb
|
316
351
|
- spec/celluloid/calls_spec.rb
|
317
352
|
- spec/celluloid/condition_spec.rb
|
318
353
|
- spec/celluloid/evented_mailbox_spec.rb
|
319
354
|
- spec/celluloid/future_spec.rb
|
320
355
|
- spec/celluloid/group/elastic_spec.rb
|
321
|
-
- spec/celluloid/group/manager_spec.rb
|
322
356
|
- spec/celluloid/group/pool_spec.rb
|
323
357
|
- spec/celluloid/group/spawner_spec.rb
|
324
358
|
- spec/celluloid/mailbox/evented_spec.rb
|
@@ -355,24 +389,24 @@ homepage: https://github.com/celluloid/celluloid
|
|
355
389
|
licenses:
|
356
390
|
- MIT
|
357
391
|
metadata: {}
|
358
|
-
post_install_message:
|
392
|
+
post_install_message:
|
359
393
|
rdoc_options: []
|
360
394
|
require_paths:
|
361
395
|
- lib
|
362
396
|
required_ruby_version: !ruby/object:Gem::Requirement
|
363
397
|
requirements:
|
364
|
-
- -
|
398
|
+
- - ">="
|
365
399
|
- !ruby/object:Gem::Version
|
366
400
|
version: 1.9.2
|
367
401
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
368
402
|
requirements:
|
369
|
-
- -
|
403
|
+
- - ">="
|
370
404
|
- !ruby/object:Gem::Version
|
371
405
|
version: 1.3.6
|
372
406
|
requirements: []
|
373
|
-
rubyforge_project:
|
374
|
-
rubygems_version: 2.4.
|
375
|
-
signing_key:
|
407
|
+
rubyforge_project:
|
408
|
+
rubygems_version: 2.4.7
|
409
|
+
signing_key:
|
376
410
|
specification_version: 4
|
377
411
|
summary: Actor-based concurrent object framework for Ruby
|
378
412
|
test_files: []
|