Skip to content

Commit e6d4001

Browse files
committed
Change Abstract actor class to a ActorContext module
1 parent 1bb6304 commit e6d4001

File tree

2 files changed

+15
-13
lines changed

2 files changed

+15
-13
lines changed

lib/concurrent/actress.rb

Lines changed: 13 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -119,10 +119,16 @@ def initialize(parent, name, actress_class, *args, &block)
119119
@terminated = Event.new
120120
@mutex = Mutex.new
121121

122-
@actress_class = Child! actress_class, Abstract
122+
@actress_class = Child! actress_class, ActorContext
123123
schedule_execution do
124124
parent_core.add_child reference if parent_core
125-
@actress = actress_class.new self, *args, &block # FIXME it may fail
125+
begin
126+
@actress = actress_class.new *args, &block
127+
@actress.send :initialize_core, self
128+
rescue => ex
129+
puts "#{ex} (#{ex.class})\n#{ex.backtrace.join("\n")}"
130+
terminate! # TODO test that this is ok
131+
end
126132
end
127133
end
128134

@@ -156,6 +162,7 @@ def terminate!
156162
guard!
157163
@terminated.set
158164
parent_core.remove_child reference if parent_core
165+
# TODO terminate all children
159166
end
160167

161168
def guard!
@@ -227,21 +234,14 @@ def reject_envelope(envelope)
227234
end
228235
end
229236

230-
class Abstract
237+
module ActorContext
231238
include Algebrick::TypeCheck
232239
extend Algebrick::TypeCheck
233240
include Algebrick::Matching
234241
include CoreDelegations
235242

236243
attr_reader :core
237244

238-
def self.new(core, *args, &block)
239-
allocate.tap do |actress|
240-
actress.__send__ :pre_initialize, core
241-
actress.__send__ :initialize, *args, &block
242-
end
243-
end
244-
245245
def on_message(message)
246246
raise NotImplementedError
247247
end
@@ -271,7 +271,7 @@ def terminate!
271271

272272
private
273273

274-
def pre_initialize(core)
274+
def initialize_core(core)
275275
@core = Type! core, Core
276276
end
277277

@@ -280,7 +280,8 @@ def envelope
280280
end
281281
end
282282

283-
class Root < Abstract
283+
class Root
284+
include ActorContext
284285
def on_message(message)
285286
# ignore
286287
end

spec/concurrent/actress_spec.rb

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,8 @@ module Concurrent
88
Child = Algebrick.atom
99
Terminate = Algebrick.atom
1010

11-
class Ping < Actress::Abstract
11+
class Ping
12+
include Actress::ActorContext
1213

1314
def initialize(queue)
1415
@queue = queue

0 commit comments

Comments
 (0)