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.

Files changed (51) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGES.md +10 -2
  3. data/LICENSE.txt +1 -1
  4. data/README.md +26 -14
  5. data/culture/gems/dependencies.yml +8 -2
  6. data/examples/stack.rb +47 -0
  7. data/lib/celluloid.rb +9 -6
  8. data/lib/celluloid/actor.rb +7 -32
  9. data/lib/celluloid/actor/manager.rb +7 -0
  10. data/lib/celluloid/actor/system.rb +163 -0
  11. data/lib/celluloid/call/sync.rb +1 -1
  12. data/lib/celluloid/calls.rb +3 -3
  13. data/lib/celluloid/cell.rb +1 -1
  14. data/lib/celluloid/condition.rb +3 -4
  15. data/lib/celluloid/debug.rb +1 -0
  16. data/lib/celluloid/deprecate.rb +3 -0
  17. data/lib/celluloid/exceptions.rb +20 -15
  18. data/lib/celluloid/future.rb +40 -3
  19. data/lib/celluloid/group.rb +5 -9
  20. data/lib/celluloid/group/pool.rb +1 -1
  21. data/lib/celluloid/group/spawner.rb +1 -2
  22. data/lib/celluloid/mailbox.rb +2 -2
  23. data/lib/celluloid/managed.rb +3 -0
  24. data/lib/celluloid/notices.rb +1 -1
  25. data/lib/celluloid/proxies.rb +7 -8
  26. data/lib/celluloid/proxy/abstract.rb +16 -21
  27. data/lib/celluloid/proxy/actor.rb +33 -37
  28. data/lib/celluloid/proxy/async.rb +24 -29
  29. data/lib/celluloid/proxy/block.rb +20 -24
  30. data/lib/celluloid/proxy/cell.rb +58 -62
  31. data/lib/celluloid/proxy/future.rb +33 -37
  32. data/lib/celluloid/proxy/sync.rb +31 -35
  33. data/lib/celluloid/system_events.rb +53 -1
  34. data/lib/celluloid/task.rb +13 -21
  35. data/lib/celluloid/task/fibered.rb +1 -1
  36. data/lib/celluloid/task/threaded.rb +2 -2
  37. data/lib/celluloid/version.rb +1 -1
  38. data/spec/celluloid/{group → actor}/manager_spec.rb +0 -0
  39. data/spec/celluloid/{actor_system_spec.rb → actor/system_spec.rb} +4 -4
  40. data/spec/celluloid/block_spec.rb +64 -3
  41. data/spec/celluloid/condition_spec.rb +6 -0
  42. data/spec/celluloid/future_spec.rb +2 -2
  43. data/spec/deprecate/actor_system_spec.rb +1 -1
  44. data/spec/deprecate/future_spec.rb +2 -2
  45. data/spec/shared/actor_examples.rb +20 -4
  46. data/spec/shared/group_examples.rb +1 -1
  47. data/spec/shared/mailbox_examples.rb +1 -1
  48. data/spec/spec_helper.rb +3 -3
  49. metadata +110 -76
  50. data/lib/celluloid/actor_system.rb +0 -160
  51. data/lib/celluloid/group/manager.rb +0 -27
@@ -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 Task::TerminatedError
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::ResumableError)
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
- deliver(value)
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
- Internals::Logger.with_backtrace(backtrace) do |logger|
120
- type = @dangerous_suspend ? :warn : :debug
121
- logger.send(type, "Terminating task: type=#{@type.inspect}, meta=#{@meta.inspect}, status=#{@status.inspect}")
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 = Task::TerminatedError.new("task was terminated")
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} (please see https://github.com/celluloid/celluloid/wiki/Fiber-stack-errors)"
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?(Task::TerminatedError)
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
@@ -1,3 +1,3 @@
1
1
  module Celluloid
2
- VERSION = "0.17.0"
2
+ VERSION = "0.17.1"
3
3
  end
@@ -1,4 +1,4 @@
1
- RSpec.describe Celluloid::ActorSystem do
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 ActorSystem" do
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::ActorSystem::ROOT_SERVICES.map { |r| r[:as] })
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::Group::NotActive)
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
- "somevalue"
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 "works" do
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
- "somevalue",
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 TimeoutError when the future times out" do
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::TimeoutError)
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::Group::NotActive)
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 TimeoutError when the future times out" do
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::TimeoutError)
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::Task::TerminatedError)
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::Task::TimeoutError" do
1220
- allow(logger).to receive(:crash).with("Actor crashed!", Celluloid::Task::TimeoutError)
1221
- expect { a1.ask_name_with_timeout a2, 0.3 }.to raise_error(Celluloid::Task::TimeoutError)
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::TimeoutError)
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
@@ -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::ActorSystem.new.within do
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.0
4
+ version: 0.17.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Tony Arcieri
8
- autorequire:
8
+ - digitalextremist//
9
+ autorequire:
9
10
  bindir: bin
10
11
  cert_chain: []
11
- date: 2015-07-04 00:00:00.000000000 Z
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
- name: celluloid-essentials
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
- name: celluloid-supervision
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
- name: celluloid-fsm
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
- name: celluloid-extras
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 objects just as easily as they build sequential programs out of sequential objects
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/actor_system.rb
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.6
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: []