ntl-actor 0.6.2 → 1.0.0.pre1
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.
- checksums.yaml +4 -4
- data/lib/actor.rb +45 -19
- data/lib/actor/actor.rb +12 -132
- data/lib/actor/build.rb +36 -0
- data/lib/actor/controls.rb +7 -7
- data/lib/actor/messages.rb +20 -4
- data/lib/actor/messaging/address.rb +26 -0
- data/lib/actor/messaging/address/controls.rb +11 -0
- data/lib/actor/messaging/address/dependency.rb +13 -0
- data/lib/actor/messaging/address/none.rb +33 -0
- data/lib/actor/messaging/message.rb +39 -1
- data/lib/actor/messaging/message/name.rb +33 -0
- data/lib/actor/messaging/publisher.rb +39 -0
- data/lib/actor/messaging/publisher/assertions.rb +11 -0
- data/lib/actor/messaging/publisher/dependency.rb +13 -0
- data/lib/actor/messaging/publisher/substitute.rb +62 -0
- data/lib/actor/messaging/queue.rb +21 -0
- data/lib/actor/messaging/queue/substitute.rb +53 -0
- data/lib/actor/messaging/reader.rb +32 -0
- data/lib/actor/messaging/reader/assertions.rb +25 -0
- data/lib/actor/messaging/reader/dependency.rb +13 -0
- data/lib/actor/messaging/reader/substitute.rb +31 -0
- data/lib/actor/messaging/writer.rb +28 -0
- data/lib/actor/messaging/writer/dependency.rb +13 -0
- data/lib/actor/messaging/writer/substitute.rb +45 -0
- data/lib/actor/module/dependencies.rb +30 -0
- data/lib/actor/module/dependencies/assertions.rb +23 -0
- data/lib/actor/module/handler.rb +31 -0
- data/lib/actor/module/handler/macro.rb +13 -0
- data/lib/actor/module/handler/method_name.rb +13 -0
- data/lib/actor/module/include_assertions.rb +18 -0
- data/lib/actor/module/run_loop.rb +19 -0
- data/lib/actor/module/start.rb +27 -0
- data/lib/actor/module/suspend_resume.rb +36 -0
- data/lib/actor/module/suspend_resume/assertions.rb +26 -0
- data/lib/actor/module/suspend_resume/configure.rb +13 -0
- data/lib/actor/module/suspend_resume/controls.rb +17 -0
- data/lib/actor/module/suspend_resume/handle.rb +17 -0
- data/lib/actor/module/suspend_resume/initialize.rb +13 -0
- data/lib/actor/start.rb +34 -34
- data/lib/actor/supervisor.rb +60 -71
- data/lib/actor/supervisor/address/get.rb +15 -0
- data/lib/actor/supervisor/address/put.rb +13 -0
- data/lib/actor/supervisor/address/registry.rb +7 -0
- data/lib/actor/supervisor/assertions.rb +20 -0
- metadata +42 -28
- data/lib/actor/address.rb +0 -18
- data/lib/actor/controls/actor.rb +0 -89
- data/lib/actor/controls/address.rb +0 -48
- data/lib/actor/controls/error.rb +0 -11
- data/lib/actor/controls/message.rb +0 -39
- data/lib/actor/controls/message/attribute.rb +0 -17
- data/lib/actor/controls/thread.rb +0 -9
- data/lib/actor/controls/uuid.rb +0 -15
- data/lib/actor/destructure.rb +0 -23
- data/lib/actor/duration.rb +0 -7
- data/lib/actor/future.rb +0 -38
- data/lib/actor/handle_macro.rb +0 -37
- data/lib/actor/messaging/read.rb +0 -54
- data/lib/actor/messaging/read/substitute.rb +0 -33
- data/lib/actor/messaging/write.rb +0 -26
- data/lib/actor/messaging/write/substitute.rb +0 -39
- data/lib/actor/observers.rb +0 -45
- data/lib/actor/router.rb +0 -94
- data/lib/actor/stream.rb +0 -36
- data/lib/actor/substitutes/kernel.rb +0 -23
- data/lib/actor/substitutes/thread.rb +0 -39
- data/lib/actor/substitutes/thread_group.rb +0 -26
data/lib/actor/duration.rb
DELETED
data/lib/actor/future.rb
DELETED
@@ -1,38 +0,0 @@
|
|
1
|
-
module Actor
|
2
|
-
class Future
|
3
|
-
attr_reader :reader
|
4
|
-
attr_accessor :message
|
5
|
-
|
6
|
-
def initialize reader
|
7
|
-
@reader = reader
|
8
|
-
end
|
9
|
-
|
10
|
-
def self.build &block
|
11
|
-
address = Address.build
|
12
|
-
reader = Messaging::Read.build address
|
13
|
-
|
14
|
-
instance = new reader
|
15
|
-
|
16
|
-
block.(address)
|
17
|
-
|
18
|
-
instance
|
19
|
-
end
|
20
|
-
|
21
|
-
def self.get wait: nil, &block
|
22
|
-
instance = build &block
|
23
|
-
instance.get wait: wait
|
24
|
-
end
|
25
|
-
|
26
|
-
def get wait: nil
|
27
|
-
return message unless message.nil?
|
28
|
-
|
29
|
-
self.message = reader.(wait: wait)
|
30
|
-
end
|
31
|
-
|
32
|
-
def ready?
|
33
|
-
get
|
34
|
-
|
35
|
-
message ? true : false
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
data/lib/actor/handle_macro.rb
DELETED
@@ -1,37 +0,0 @@
|
|
1
|
-
module Actor
|
2
|
-
module HandleMacro
|
3
|
-
def handle_macro pattern, &action
|
4
|
-
method_name = MethodName.get pattern
|
5
|
-
|
6
|
-
define_method method_name, &action
|
7
|
-
end
|
8
|
-
alias_method :handle, :handle_macro
|
9
|
-
|
10
|
-
module MethodName
|
11
|
-
PATTERN = %r{(?:\A|[a-z0-9])[A-Z]}
|
12
|
-
|
13
|
-
def self.get message_pattern
|
14
|
-
case message_pattern
|
15
|
-
when Class, String then
|
16
|
-
message_name = message_pattern.to_s
|
17
|
-
|
18
|
-
*, message_name = message_name.split '::'
|
19
|
-
|
20
|
-
message_name.gsub! PATTERN do |str|
|
21
|
-
str.downcase!
|
22
|
-
str.insert 1, '_' if str.length == 2
|
23
|
-
str
|
24
|
-
end
|
25
|
-
|
26
|
-
get message_name.to_sym
|
27
|
-
|
28
|
-
when Symbol then
|
29
|
-
:"handle_#{message_pattern}"
|
30
|
-
|
31
|
-
else
|
32
|
-
get message_pattern.class
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
data/lib/actor/messaging/read.rb
DELETED
@@ -1,54 +0,0 @@
|
|
1
|
-
module Actor
|
2
|
-
module Messaging
|
3
|
-
class Read
|
4
|
-
attr_reader :queue
|
5
|
-
attr_reader :stream
|
6
|
-
|
7
|
-
def initialize queue, stream
|
8
|
-
@queue = queue
|
9
|
-
@stream = stream
|
10
|
-
end
|
11
|
-
|
12
|
-
def self.build address, queue=nil
|
13
|
-
queue ||= Queue.new
|
14
|
-
|
15
|
-
stream = address.stream
|
16
|
-
stream.add_queue queue
|
17
|
-
|
18
|
-
instance = new queue, stream
|
19
|
-
instance
|
20
|
-
end
|
21
|
-
|
22
|
-
def self.call address, wait: nil
|
23
|
-
instance = build address
|
24
|
-
instance.(wait: wait)
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.configure receiver, address, attr_name: nil
|
28
|
-
attr_name ||= :reader
|
29
|
-
|
30
|
-
instance = build address
|
31
|
-
receiver.public_send "#{attr_name}=", instance
|
32
|
-
instance
|
33
|
-
end
|
34
|
-
|
35
|
-
def call wait: nil
|
36
|
-
if wait
|
37
|
-
queue.deq
|
38
|
-
else
|
39
|
-
non_block = true
|
40
|
-
|
41
|
-
begin
|
42
|
-
queue.deq non_block
|
43
|
-
rescue ThreadError
|
44
|
-
nil
|
45
|
-
end
|
46
|
-
end
|
47
|
-
end
|
48
|
-
|
49
|
-
def messages_available?
|
50
|
-
not queue.empty?
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Actor
|
2
|
-
module Messaging
|
3
|
-
class Read
|
4
|
-
class Substitute
|
5
|
-
def call wait: nil
|
6
|
-
message = messages.shift
|
7
|
-
|
8
|
-
if message.nil? and wait
|
9
|
-
raise WouldWait
|
10
|
-
end
|
11
|
-
|
12
|
-
message
|
13
|
-
end
|
14
|
-
|
15
|
-
def messages_available?
|
16
|
-
messages.any?
|
17
|
-
end
|
18
|
-
|
19
|
-
def add_message message
|
20
|
-
messages << message
|
21
|
-
end
|
22
|
-
|
23
|
-
def messages
|
24
|
-
@messages ||= []
|
25
|
-
end
|
26
|
-
|
27
|
-
WouldWait = Class.new StandardError
|
28
|
-
|
29
|
-
singleton_class.send :alias_method, :build, :new
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1,26 +0,0 @@
|
|
1
|
-
module Actor
|
2
|
-
module Messaging
|
3
|
-
class Write
|
4
|
-
def self.call message, address
|
5
|
-
instance = new
|
6
|
-
instance.(message, address)
|
7
|
-
end
|
8
|
-
|
9
|
-
def self.configure receiver, attr_name: nil
|
10
|
-
attr_name ||= :writer
|
11
|
-
|
12
|
-
instance = new
|
13
|
-
receiver.public_send "#{attr_name}=", instance
|
14
|
-
instance
|
15
|
-
end
|
16
|
-
|
17
|
-
def call message, address
|
18
|
-
stream = address.stream
|
19
|
-
|
20
|
-
stream.write message
|
21
|
-
|
22
|
-
nil
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
26
|
-
end
|
@@ -1,39 +0,0 @@
|
|
1
|
-
module Actor
|
2
|
-
module Messaging
|
3
|
-
class Write
|
4
|
-
class Substitute
|
5
|
-
attr_reader :records
|
6
|
-
|
7
|
-
def initialize
|
8
|
-
@records = []
|
9
|
-
end
|
10
|
-
|
11
|
-
def call message, address
|
12
|
-
record = Record.new message, address
|
13
|
-
|
14
|
-
records << record
|
15
|
-
|
16
|
-
record
|
17
|
-
end
|
18
|
-
|
19
|
-
Record = Struct.new :message, :address
|
20
|
-
|
21
|
-
singleton_class.send :alias_method, :build, :new
|
22
|
-
|
23
|
-
module Assertions
|
24
|
-
def written? message=nil, &block
|
25
|
-
if message.nil?
|
26
|
-
block ||= proc { true }
|
27
|
-
else
|
28
|
-
block ||= proc { |msg| msg == message }
|
29
|
-
end
|
30
|
-
|
31
|
-
records.any? do |record|
|
32
|
-
block.(record.message, record.address)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
data/lib/actor/observers.rb
DELETED
@@ -1,45 +0,0 @@
|
|
1
|
-
module Actor
|
2
|
-
module Observers
|
3
|
-
def observe message_pattern, &callback
|
4
|
-
handler_method = HandleMacro::MethodName.get message_pattern
|
5
|
-
|
6
|
-
observer_id = callback.object_id
|
7
|
-
|
8
|
-
record = Observer.new observer_id, handler_method, callback
|
9
|
-
|
10
|
-
add_observer record
|
11
|
-
end
|
12
|
-
|
13
|
-
def add_observer record
|
14
|
-
observers = observer_registry[record.handler_method]
|
15
|
-
|
16
|
-
observers[record.observer_id] = record
|
17
|
-
end
|
18
|
-
|
19
|
-
def notify_observers message
|
20
|
-
handler_method = HandleMacro::MethodName.get message
|
21
|
-
|
22
|
-
observers = observer_registry[handler_method]
|
23
|
-
|
24
|
-
observers.each_value.map do |record|
|
25
|
-
callback = record.callback
|
26
|
-
|
27
|
-
callback.(message)
|
28
|
-
end
|
29
|
-
end
|
30
|
-
|
31
|
-
def remove_observer record
|
32
|
-
observers = observer_registry[record.handler_method]
|
33
|
-
|
34
|
-
observers.delete record.observer_id
|
35
|
-
end
|
36
|
-
|
37
|
-
def observer_registry
|
38
|
-
@observer_registry ||= Hash.new do |hash, handler_method|
|
39
|
-
hash[handler_method] = {}
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
Observer = Struct.new :observer_id, :handler_method, :callback
|
44
|
-
end
|
45
|
-
end
|
data/lib/actor/router.rb
DELETED
@@ -1,94 +0,0 @@
|
|
1
|
-
module Actor
|
2
|
-
class Router
|
3
|
-
include Actor
|
4
|
-
|
5
|
-
attr_writer :kernel
|
6
|
-
attr_reader :routes
|
7
|
-
|
8
|
-
def initialize
|
9
|
-
@routes = Hash.new do |hash, input|
|
10
|
-
hash[input] = Set.new
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
handle :start do
|
15
|
-
:continue
|
16
|
-
end
|
17
|
-
|
18
|
-
handle :continue do
|
19
|
-
routed_messages = route_messages
|
20
|
-
|
21
|
-
unless routed_messages
|
22
|
-
kernel.sleep Duration.millisecond
|
23
|
-
end
|
24
|
-
|
25
|
-
:continue
|
26
|
-
end
|
27
|
-
|
28
|
-
handle :add_route do |message|
|
29
|
-
reader = message.reader
|
30
|
-
output_address = message.output_address
|
31
|
-
|
32
|
-
add reader, output_address
|
33
|
-
end
|
34
|
-
|
35
|
-
handle :remove_route do |message|
|
36
|
-
reader = message.reader
|
37
|
-
output_address = message.output_address
|
38
|
-
|
39
|
-
remove reader, output_address
|
40
|
-
end
|
41
|
-
|
42
|
-
handle :stop do
|
43
|
-
if routes.any? { |reader, _| reader.messages_available? }
|
44
|
-
route_messages
|
45
|
-
:stop
|
46
|
-
else
|
47
|
-
super()
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
def add reader, output_address
|
52
|
-
routes[reader] << output_address
|
53
|
-
end
|
54
|
-
|
55
|
-
def remove reader, output_address
|
56
|
-
routes[reader].delete output_address
|
57
|
-
end
|
58
|
-
|
59
|
-
def route_messages
|
60
|
-
routed_messages = false
|
61
|
-
|
62
|
-
routes.each do |input_reader, outputs|
|
63
|
-
msg = input_reader.(wait: false)
|
64
|
-
|
65
|
-
next unless msg
|
66
|
-
|
67
|
-
routed_messages = true
|
68
|
-
|
69
|
-
outputs.each do |output|
|
70
|
-
writer.(msg, output)
|
71
|
-
end
|
72
|
-
end
|
73
|
-
|
74
|
-
routed_messages
|
75
|
-
end
|
76
|
-
|
77
|
-
def configure
|
78
|
-
self.kernel = Kernel
|
79
|
-
end
|
80
|
-
|
81
|
-
def kernel
|
82
|
-
@kernel ||= Substitutes::Kernel.new
|
83
|
-
end
|
84
|
-
|
85
|
-
AddRoute = Struct.new :reader, :output_address
|
86
|
-
RemoveRoute = Struct.new :reader, :output_address
|
87
|
-
|
88
|
-
module Assertions
|
89
|
-
def route? reader, output_address
|
90
|
-
routes[reader].include? output_address
|
91
|
-
end
|
92
|
-
end
|
93
|
-
end
|
94
|
-
end
|
data/lib/actor/stream.rb
DELETED
@@ -1,36 +0,0 @@
|
|
1
|
-
module Actor
|
2
|
-
class Stream
|
3
|
-
attr_reader :queues
|
4
|
-
|
5
|
-
def initialize
|
6
|
-
@queues = Set.new
|
7
|
-
end
|
8
|
-
|
9
|
-
def add_queue queue
|
10
|
-
queues << queue
|
11
|
-
end
|
12
|
-
|
13
|
-
def remove_queue queue
|
14
|
-
queues.delete queue
|
15
|
-
end
|
16
|
-
|
17
|
-
def write message
|
18
|
-
queues.each do |queue|
|
19
|
-
queue.enq message
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
module Null
|
24
|
-
extend self
|
25
|
-
|
26
|
-
def add_queue queue
|
27
|
-
end
|
28
|
-
|
29
|
-
def remove_queue queue
|
30
|
-
end
|
31
|
-
|
32
|
-
def write message
|
33
|
-
end
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
@@ -1,23 +0,0 @@
|
|
1
|
-
module Actor
|
2
|
-
module Substitutes
|
3
|
-
class Kernel
|
4
|
-
def initialize
|
5
|
-
@sleep_duration = nil
|
6
|
-
end
|
7
|
-
|
8
|
-
def sleep duration=nil
|
9
|
-
@sleep_duration = duration
|
10
|
-
end
|
11
|
-
|
12
|
-
module Assertions
|
13
|
-
def slept? duration=nil
|
14
|
-
if duration.nil?
|
15
|
-
@sleep_duration ? true : false
|
16
|
-
else
|
17
|
-
@sleep_duration == duration
|
18
|
-
end
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
end
|
23
|
-
end
|