ntl-actor 0.6.2 → 1.0.0.pre1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (68) hide show
  1. checksums.yaml +4 -4
  2. data/lib/actor.rb +45 -19
  3. data/lib/actor/actor.rb +12 -132
  4. data/lib/actor/build.rb +36 -0
  5. data/lib/actor/controls.rb +7 -7
  6. data/lib/actor/messages.rb +20 -4
  7. data/lib/actor/messaging/address.rb +26 -0
  8. data/lib/actor/messaging/address/controls.rb +11 -0
  9. data/lib/actor/messaging/address/dependency.rb +13 -0
  10. data/lib/actor/messaging/address/none.rb +33 -0
  11. data/lib/actor/messaging/message.rb +39 -1
  12. data/lib/actor/messaging/message/name.rb +33 -0
  13. data/lib/actor/messaging/publisher.rb +39 -0
  14. data/lib/actor/messaging/publisher/assertions.rb +11 -0
  15. data/lib/actor/messaging/publisher/dependency.rb +13 -0
  16. data/lib/actor/messaging/publisher/substitute.rb +62 -0
  17. data/lib/actor/messaging/queue.rb +21 -0
  18. data/lib/actor/messaging/queue/substitute.rb +53 -0
  19. data/lib/actor/messaging/reader.rb +32 -0
  20. data/lib/actor/messaging/reader/assertions.rb +25 -0
  21. data/lib/actor/messaging/reader/dependency.rb +13 -0
  22. data/lib/actor/messaging/reader/substitute.rb +31 -0
  23. data/lib/actor/messaging/writer.rb +28 -0
  24. data/lib/actor/messaging/writer/dependency.rb +13 -0
  25. data/lib/actor/messaging/writer/substitute.rb +45 -0
  26. data/lib/actor/module/dependencies.rb +30 -0
  27. data/lib/actor/module/dependencies/assertions.rb +23 -0
  28. data/lib/actor/module/handler.rb +31 -0
  29. data/lib/actor/module/handler/macro.rb +13 -0
  30. data/lib/actor/module/handler/method_name.rb +13 -0
  31. data/lib/actor/module/include_assertions.rb +18 -0
  32. data/lib/actor/module/run_loop.rb +19 -0
  33. data/lib/actor/module/start.rb +27 -0
  34. data/lib/actor/module/suspend_resume.rb +36 -0
  35. data/lib/actor/module/suspend_resume/assertions.rb +26 -0
  36. data/lib/actor/module/suspend_resume/configure.rb +13 -0
  37. data/lib/actor/module/suspend_resume/controls.rb +17 -0
  38. data/lib/actor/module/suspend_resume/handle.rb +17 -0
  39. data/lib/actor/module/suspend_resume/initialize.rb +13 -0
  40. data/lib/actor/start.rb +34 -34
  41. data/lib/actor/supervisor.rb +60 -71
  42. data/lib/actor/supervisor/address/get.rb +15 -0
  43. data/lib/actor/supervisor/address/put.rb +13 -0
  44. data/lib/actor/supervisor/address/registry.rb +7 -0
  45. data/lib/actor/supervisor/assertions.rb +20 -0
  46. metadata +42 -28
  47. data/lib/actor/address.rb +0 -18
  48. data/lib/actor/controls/actor.rb +0 -89
  49. data/lib/actor/controls/address.rb +0 -48
  50. data/lib/actor/controls/error.rb +0 -11
  51. data/lib/actor/controls/message.rb +0 -39
  52. data/lib/actor/controls/message/attribute.rb +0 -17
  53. data/lib/actor/controls/thread.rb +0 -9
  54. data/lib/actor/controls/uuid.rb +0 -15
  55. data/lib/actor/destructure.rb +0 -23
  56. data/lib/actor/duration.rb +0 -7
  57. data/lib/actor/future.rb +0 -38
  58. data/lib/actor/handle_macro.rb +0 -37
  59. data/lib/actor/messaging/read.rb +0 -54
  60. data/lib/actor/messaging/read/substitute.rb +0 -33
  61. data/lib/actor/messaging/write.rb +0 -26
  62. data/lib/actor/messaging/write/substitute.rb +0 -39
  63. data/lib/actor/observers.rb +0 -45
  64. data/lib/actor/router.rb +0 -94
  65. data/lib/actor/stream.rb +0 -36
  66. data/lib/actor/substitutes/kernel.rb +0 -23
  67. data/lib/actor/substitutes/thread.rb +0 -39
  68. data/lib/actor/substitutes/thread_group.rb +0 -26
@@ -0,0 +1,15 @@
1
+ module Actor
2
+ class Supervisor
3
+ module Address
4
+ module Get
5
+ def self.call thread_group=nil
6
+ thread_group ||= Thread.current.group
7
+
8
+ Registry.fetch thread_group do
9
+ Messaging::Address::None.instance
10
+ end
11
+ end
12
+ end
13
+ end
14
+ end
15
+ end
@@ -0,0 +1,13 @@
1
+ module Actor
2
+ class Supervisor
3
+ module Address
4
+ module Put
5
+ def self.call address
6
+ thread_group = Thread.current.group
7
+
8
+ Registry[thread_group] = address
9
+ end
10
+ end
11
+ end
12
+ end
13
+ end
@@ -0,0 +1,7 @@
1
+ module Actor
2
+ class Supervisor
3
+ module Address
4
+ Registry = Hash.new
5
+ end
6
+ end
7
+ end
@@ -0,0 +1,20 @@
1
+ module Actor
2
+ class Supervisor
3
+ module Assertions
4
+ def self.extended supervisor
5
+ supervisor.instance_exec do
6
+ assertions_module = publisher.class::Assertions
7
+ publisher.extend assertions_module
8
+ end
9
+ end
10
+
11
+ def registered_actor? actor
12
+ publisher.registered? actor.address
13
+ end
14
+
15
+ def unregistered_actor? actor
16
+ publisher.unregistered? actor.address
17
+ end
18
+ end
19
+ end
20
+ end
metadata CHANGED
@@ -1,17 +1,16 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ntl-actor
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.6.2
4
+ version: 1.0.0.pre1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Ladd
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-11-01 00:00:00.000000000 Z
11
+ date: 2016-11-15 00:00:00.000000000 Z
12
12
  dependencies: []
13
- description: Implementation of actor pattern for ruby designed for simplicity and
14
- frugality
13
+ description: Implementation of actor pattern for ruby
15
14
  email: nathanladd+github@gmail.com
16
15
  executables: []
17
16
  extensions: []
@@ -19,33 +18,48 @@ extra_rdoc_files: []
19
18
  files:
20
19
  - lib/actor.rb
21
20
  - lib/actor/actor.rb
22
- - lib/actor/address.rb
21
+ - lib/actor/build.rb
23
22
  - lib/actor/controls.rb
24
- - lib/actor/controls/actor.rb
25
- - lib/actor/controls/address.rb
26
- - lib/actor/controls/error.rb
27
- - lib/actor/controls/message.rb
28
- - lib/actor/controls/message/attribute.rb
29
- - lib/actor/controls/thread.rb
30
- - lib/actor/controls/uuid.rb
31
- - lib/actor/destructure.rb
32
- - lib/actor/duration.rb
33
- - lib/actor/future.rb
34
- - lib/actor/handle_macro.rb
35
23
  - lib/actor/messages.rb
24
+ - lib/actor/messaging/address.rb
25
+ - lib/actor/messaging/address/controls.rb
26
+ - lib/actor/messaging/address/dependency.rb
27
+ - lib/actor/messaging/address/none.rb
36
28
  - lib/actor/messaging/message.rb
37
- - lib/actor/messaging/read.rb
38
- - lib/actor/messaging/read/substitute.rb
39
- - lib/actor/messaging/write.rb
40
- - lib/actor/messaging/write/substitute.rb
41
- - lib/actor/observers.rb
42
- - lib/actor/router.rb
29
+ - lib/actor/messaging/message/name.rb
30
+ - lib/actor/messaging/publisher.rb
31
+ - lib/actor/messaging/publisher/assertions.rb
32
+ - lib/actor/messaging/publisher/dependency.rb
33
+ - lib/actor/messaging/publisher/substitute.rb
34
+ - lib/actor/messaging/queue.rb
35
+ - lib/actor/messaging/queue/substitute.rb
36
+ - lib/actor/messaging/reader.rb
37
+ - lib/actor/messaging/reader/assertions.rb
38
+ - lib/actor/messaging/reader/dependency.rb
39
+ - lib/actor/messaging/reader/substitute.rb
40
+ - lib/actor/messaging/writer.rb
41
+ - lib/actor/messaging/writer/dependency.rb
42
+ - lib/actor/messaging/writer/substitute.rb
43
+ - lib/actor/module/dependencies.rb
44
+ - lib/actor/module/dependencies/assertions.rb
45
+ - lib/actor/module/handler.rb
46
+ - lib/actor/module/handler/macro.rb
47
+ - lib/actor/module/handler/method_name.rb
48
+ - lib/actor/module/include_assertions.rb
49
+ - lib/actor/module/run_loop.rb
50
+ - lib/actor/module/start.rb
51
+ - lib/actor/module/suspend_resume.rb
52
+ - lib/actor/module/suspend_resume/assertions.rb
53
+ - lib/actor/module/suspend_resume/configure.rb
54
+ - lib/actor/module/suspend_resume/controls.rb
55
+ - lib/actor/module/suspend_resume/handle.rb
56
+ - lib/actor/module/suspend_resume/initialize.rb
43
57
  - lib/actor/start.rb
44
- - lib/actor/stream.rb
45
- - lib/actor/substitutes/kernel.rb
46
- - lib/actor/substitutes/thread.rb
47
- - lib/actor/substitutes/thread_group.rb
48
58
  - lib/actor/supervisor.rb
59
+ - lib/actor/supervisor/address/get.rb
60
+ - lib/actor/supervisor/address/put.rb
61
+ - lib/actor/supervisor/address/registry.rb
62
+ - lib/actor/supervisor/assertions.rb
49
63
  homepage: https://github.com/ntl/actor
50
64
  licenses:
51
65
  - MIT
@@ -62,9 +76,9 @@ required_ruby_version: !ruby/object:Gem::Requirement
62
76
  version: '0'
63
77
  required_rubygems_version: !ruby/object:Gem::Requirement
64
78
  requirements:
65
- - - ">="
79
+ - - ">"
66
80
  - !ruby/object:Gem::Version
67
- version: '0'
81
+ version: 1.3.1
68
82
  requirements: []
69
83
  rubyforge_project:
70
84
  rubygems_version: 2.6.6
data/lib/actor/address.rb DELETED
@@ -1,18 +0,0 @@
1
- module Actor
2
- Address = Struct.new :stream, :uuid do
3
- def self.build stream=nil
4
- stream ||= Stream.new
5
-
6
- uuid = SecureRandom.uuid
7
-
8
- instance = new stream, uuid
9
- instance
10
- end
11
- end
12
-
13
- class Address
14
- NoneClass = Class.new Address
15
-
16
- None = NoneClass.new Stream::Null, 'no-stream'
17
- end
18
- end
@@ -1,89 +0,0 @@
1
- module Actor
2
- module Controls
3
- module Actor
4
- def self.example
5
- Example.new
6
- end
7
-
8
- class Example
9
- include ::Actor
10
-
11
- def initialize
12
- @messages = []
13
- end
14
-
15
- handle Message::Example do |message|
16
- @messages << message
17
- nil
18
- end
19
-
20
- def handled? message
21
- @messages.include? message
22
- end
23
- end
24
-
25
- class Continues
26
- include ::Actor
27
-
28
- def handle message
29
- if message == Message.example
30
- Message::Other.example
31
- else
32
- Message.example
33
- end
34
- end
35
-
36
- handle Message::Example do
37
- end
38
- end
39
-
40
- class Stops
41
- include ::Actor
42
-
43
- def self.example
44
- instance = new
45
- instance.reader.add_message Messages::Start.new
46
- instance
47
- end
48
-
49
- handle :start do
50
- @stopped = true
51
-
52
- raise StopIteration
53
- end
54
-
55
- def stopped?
56
- @stopped ? true : false
57
- end
58
- end
59
-
60
- class Crashes
61
- include ::Actor
62
-
63
- def self.example
64
- instance = new
65
- instance.reader.add_message Messages::Start.new
66
- instance
67
- end
68
-
69
- handle :start do
70
- raise error
71
- end
72
-
73
- def error
74
- @error ||= Error.example
75
- end
76
- end
77
-
78
- class Singleton
79
- include ::Actor
80
-
81
- def self.define &block
82
- cls = Class.new Singleton
83
- cls.class_exec &block if block
84
- cls.new
85
- end
86
- end
87
- end
88
- end
89
- end
@@ -1,48 +0,0 @@
1
- module Actor
2
- module Controls
3
- module Address
4
- def self.example id_offset=nil, stream: nil
5
- stream ||= Stream.new
6
-
7
- uuid = UUID.example id_offset
8
-
9
- ::Actor::Address.new stream, uuid
10
- end
11
-
12
- def self.pair id_offset=nil
13
- stream = Stream.new
14
-
15
- queue = Queue.new
16
- stream.add_queue queue
17
-
18
- address = example id_offset, stream: stream
19
-
20
- return address, queue
21
- end
22
-
23
- module Actor
24
- def self.example
25
- Address.example 0
26
- end
27
- end
28
-
29
- module Supervisor
30
- def self.example
31
- Address.example 1
32
- end
33
-
34
- module Broadcast
35
- def self.example
36
- Address.example 2
37
- end
38
- end
39
- end
40
-
41
- module Router
42
- def self.example
43
- Address.example 3
44
- end
45
- end
46
- end
47
- end
48
- end
@@ -1,11 +0,0 @@
1
- module Actor
2
- module Controls
3
- module Error
4
- def self.example
5
- Example.new
6
- end
7
-
8
- Example = Class.new StandardError
9
- end
10
- end
11
- end
@@ -1,39 +0,0 @@
1
- module Actor
2
- module Controls
3
- module Message
4
- def self.example
5
- attribute = Attribute.example
6
-
7
- Example.new attribute
8
- end
9
-
10
- module Other
11
- def self.example
12
- attribute = Attribute::Other.example
13
-
14
- Example.new attribute
15
- end
16
- end
17
-
18
- Example = Struct.new :some_attribute do
19
- include Messaging::Message
20
- end
21
-
22
- module ActorStarted
23
- def self.example
24
- actor_address = Address::Actor.example
25
-
26
- Messages::ActorStarted.new actor_address
27
- end
28
- end
29
-
30
- module ActorCrashed
31
- def self.example error=nil
32
- error ||= Error.example
33
-
34
- Messages::ActorCrashed.new error
35
- end
36
- end
37
- end
38
- end
39
- end
@@ -1,17 +0,0 @@
1
- module Actor
2
- module Controls
3
- module Message
4
- module Attribute
5
- def self.example
6
- 'some-attribute'
7
- end
8
-
9
- module Other
10
- def self.example
11
- 'other-attribute'
12
- end
13
- end
14
- end
15
- end
16
- end
17
- end
@@ -1,9 +0,0 @@
1
- module Actor
2
- module Controls
3
- module Thread
4
- def self.example
5
- Substitutes::Thread.new
6
- end
7
- end
8
- end
9
- end
@@ -1,15 +0,0 @@
1
- module Actor
2
- module Controls
3
- module UUID
4
- def self.example id_offset=nil
5
- id_offset ||= 0
6
-
7
- id_offset = id_offset.to_s 16
8
-
9
- dword = id_offset.rjust 8, '0'
10
-
11
- "#{dword}-0000-4000-8000-000000000000"
12
- end
13
- end
14
- end
15
- end
@@ -1,23 +0,0 @@
1
- module Actor
2
- module Destructure
3
- def self.call primary_return_value, include=nil, **values
4
- include = Array(include)
5
-
6
- if include.empty?
7
- primary_return_value
8
- else
9
- return_values = include.map do |return_value_name|
10
- begin
11
- values.fetch return_value_name
12
- rescue KeyError
13
- raise Error, "Invalid return value to include `#{return_value_name.inspect}'"
14
- end
15
- end
16
-
17
- return primary_return_value, *return_values
18
- end
19
- end
20
-
21
- Error = Class.new StandardError
22
- end
23
- end