ntl-actor 1.2.7 → 1.4.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: c6965d5d346b54326a4585868bd058ce8f0df52964916b6f80cd6a0f7e1ad8fa
4
- data.tar.gz: fe87441686b8c1da10e089c86b501a732413a89f1de8ac8c7d0e3c693e741668
3
+ metadata.gz: f13d4d98998e8545edb0339b4c99114f9aca0d329752f32bd8ffff1af8405aff
4
+ data.tar.gz: 35a076fe76b028acab5cb7ff50ba33ded3c30da2b28e41db0ac15865daff1425
5
5
  SHA512:
6
- metadata.gz: 769c204f2115d4f8daccf1337571ae67d3f32624dfef554d36353b08e9b650c6b1856a16d9e0956cbe41c7e85f58f81ffa3adce4b528ef0e32894e6aa23a467c
7
- data.tar.gz: 2d84924a222a4e4f619cd1e7c18526b6d54d7181f3806b9afd0d83484d8cb7d9e32c020151acd339b8b9a721eb1110739e9424537bd12a4025d646bb8ec0dc6d
6
+ metadata.gz: d52e098b26cf0970d9a9e004d7eaff65ad026110f09a15aaea0e664332db1e88f60d3fa4c4345ead984ce76e4d110ee7ac22e4a9f5cc1d84c82ff87d4cd08e2b
7
+ data.tar.gz: c15455bf367450b34083feea4c380094775016eb871fd3566723351be0bd7dff4478196e9c1b5316b49b3767cb4bb7409a1a2aa302efcb756fbc2dc996ca99a5
data/lib/actor/build.rb CHANGED
@@ -1,17 +1,19 @@
1
1
  module Actor
2
2
  class Build
3
3
  attr_reader :arguments
4
+ attr_reader :keyword_arguments
4
5
  attr_reader :block
5
6
  attr_reader :cls
6
7
 
7
- def initialize cls, arguments, &block
8
+ def initialize cls, arguments, keyword_arguments, &block
8
9
  @arguments = arguments
10
+ @keyword_arguments = keyword_arguments
9
11
  @block = block
10
12
  @cls = cls
11
13
  end
12
14
 
13
- def self.call cls, *arguments, &block
14
- instance = new cls, arguments, &block
15
+ def self.call cls, *arguments, **keyword_arguments, &block
16
+ instance = new cls, arguments, keyword_arguments, &block
15
17
  instance.()
16
18
  end
17
19
 
@@ -23,9 +25,9 @@ module Actor
23
25
  end
24
26
 
25
27
  if block
26
- actor = method.(*arguments, &block)
28
+ actor = method.(*arguments, **keyword_arguments, &block)
27
29
  else
28
- actor = method.(*arguments)
30
+ actor = method.(*arguments, **keyword_arguments)
29
31
  end
30
32
 
31
33
  actor.configure
@@ -28,37 +28,35 @@ module Actor
28
28
  records << record
29
29
  end
30
30
 
31
- Record = Struct.new :message, :wait
32
-
33
- module Assertions
34
- def registered? address=nil
35
- if address.nil?
36
- registered_addresses.any?
37
- else
38
- registered_addresses.include? address
39
- end
31
+ def registered? address=nil
32
+ if address.nil?
33
+ registered_addresses.any?
34
+ else
35
+ registered_addresses.include? address
40
36
  end
37
+ end
41
38
 
42
- def unregistered? address=nil
43
- if address.nil?
44
- unregistered_addresses.any?
45
- else
46
- unregistered_addresses.include? address
47
- end
39
+ def unregistered? address=nil
40
+ if address.nil?
41
+ unregistered_addresses.any?
42
+ else
43
+ unregistered_addresses.include? address
48
44
  end
45
+ end
49
46
 
50
- def published? message=nil, wait: nil
51
- records.each do |record|
52
- next unless message.nil? or record.message == message
53
- next unless wait.nil? or record.wait == wait
54
-
55
- return true
56
- end
47
+ def published? message=nil, wait: nil
48
+ records.each do |record|
49
+ next unless message.nil? or record.message == message
50
+ next unless wait.nil? or record.wait == wait
57
51
 
58
- false
52
+ return true
59
53
  end
54
+
55
+ false
60
56
  end
61
57
 
58
+ Record = Struct.new :message, :wait
59
+
62
60
  singleton_class.send :alias_method, :build, :new # subst-attr compat
63
61
  end
64
62
  end
@@ -34,6 +34,10 @@ module Actor
34
34
  send.(message, address, wait: wait)
35
35
  end
36
36
  end
37
+
38
+ def registered? address
39
+ addresses.include? address
40
+ end
37
41
  end
38
42
  end
39
43
  end
@@ -31,6 +31,15 @@ module Actor
31
31
  record
32
32
  end
33
33
 
34
+ def enqueued? message=nil, wait: nil
35
+ @enqueued_records.any? do |record|
36
+ next unless message.nil? or record.message == message
37
+ next unless wait.nil? or record.non_block == !wait
38
+
39
+ true
40
+ end
41
+ end
42
+
34
43
  def max
35
44
  Float::INFINITY
36
45
  end
@@ -42,18 +51,6 @@ module Actor
42
51
  WouldBlockError = Class.new StandardError
43
52
 
44
53
  Record = Struct.new :message, :non_block
45
-
46
- module Assertions
47
- def enqueued? message=nil, wait: nil
48
- @enqueued_records.any? do |record|
49
- next unless message.nil? or record.message == message
50
- next unless wait.nil? or record.non_block == !wait
51
-
52
- true
53
- end
54
- end
55
- end
56
-
57
54
  singleton_class.send :alias_method, :build, :new # subst-attr compat
58
55
  end
59
56
  end
@@ -27,6 +27,24 @@ module Actor
27
27
  rescue ThreadError
28
28
  return nil
29
29
  end
30
+
31
+ def address? address
32
+ queue? address.queue
33
+ end
34
+
35
+ def next_message? message
36
+ begin
37
+ next_message = @queue.deq true
38
+ rescue ThreadError
39
+ return false
40
+ end
41
+
42
+ next_message == message
43
+ end
44
+
45
+ def queue? queue
46
+ self.queue == queue
47
+ end
30
48
  end
31
49
  end
32
50
  end
@@ -16,6 +16,18 @@ module Actor
16
16
  records << record
17
17
  end
18
18
 
19
+ def sent? message=nil, address: nil, wait: nil
20
+ records.each do |record|
21
+ next unless message.nil? or record.message? message
22
+ next unless address.nil? or record.address == address
23
+ next unless wait.nil? or record.wait == wait
24
+
25
+ return true
26
+ end
27
+
28
+ false
29
+ end
30
+
19
31
  Record = Struct.new :message, :address, :wait do
20
32
  def message? pattern
21
33
  return true if message == pattern
@@ -26,20 +38,6 @@ module Actor
26
38
  end
27
39
  end
28
40
 
29
- module Assertions
30
- def sent? message=nil, address: nil, wait: nil
31
- records.each do |record|
32
- next unless message.nil? or record.message? message
33
- next unless address.nil? or record.address == address
34
- next unless wait.nil? or record.wait == wait
35
-
36
- return true
37
- end
38
-
39
- false
40
- end
41
- end
42
-
43
41
  singleton_class.send :alias_method, :build, :new # subst-attr compat
44
42
  end
45
43
  end
@@ -8,14 +8,28 @@ module Actor
8
8
  include Messaging::Send::Dependency
9
9
 
10
10
  prepend Configure
11
-
12
- IncludeAssertions.(Assertions, self)
13
11
  end
14
12
  end
15
13
 
16
14
  def configure
17
15
  end
18
16
 
17
+ def dependencies_configured?
18
+ address_configured? and reader_configured? and send_configured?
19
+ end
20
+
21
+ def address_configured?
22
+ address.instance_of? Messaging::Address
23
+ end
24
+
25
+ def reader_configured?
26
+ read.instance_of? Messaging::Read
27
+ end
28
+
29
+ def send_configured?
30
+ send.instance_of? Messaging::Send
31
+ end
32
+
19
33
  module Configure
20
34
  def configure
21
35
  self.address = Messaging::Address.build
@@ -2,9 +2,7 @@ module Actor
2
2
  module Module
3
3
  module Start
4
4
  def start *arguments, include: nil, **keyword_arguments, &block
5
- arguments << keyword_arguments if keyword_arguments.any?
6
-
7
- actor, thread = Actor::Start.(self, *arguments, &block)
5
+ actor, thread = Actor::Start.(self, *arguments, **keyword_arguments, &block)
8
6
 
9
7
  address = actor.address
10
8
 
@@ -2,7 +2,7 @@ module Actor
2
2
  module Module
3
3
  module SuspendResume
4
4
  module Initialize
5
- def initialize *;
5
+ def initialize ...
6
6
  @suspended = false
7
7
 
8
8
  super
@@ -6,8 +6,6 @@ module Actor
6
6
  prepend Configure
7
7
  prepend Handle
8
8
  prepend Initialize
9
-
10
- IncludeAssertions.(Assertions, self)
11
9
  end
12
10
  end
13
11
 
@@ -28,6 +26,25 @@ module Actor
28
26
  end
29
27
  end
30
28
 
29
+ def message_deferred? message=nil, wait: nil
30
+ non_block = wait == false
31
+
32
+ begin
33
+ msg = suspend_queue.deq true
34
+ rescue ThreadError
35
+ end
36
+
37
+ if message.nil?
38
+ msg ? true : false
39
+ else
40
+ msg == message
41
+ end
42
+ end
43
+
44
+ def suspended?
45
+ @suspended == true
46
+ end
47
+
31
48
  def suspend_queue
32
49
  @suspend_queue ||= Messaging::Queue::Substitute.build
33
50
  end
data/lib/actor/start.rb CHANGED
@@ -9,11 +9,11 @@ module Actor
9
9
  @actor = actor
10
10
  end
11
11
 
12
- def self.call actor_or_actor_class, *arguments, &block
12
+ def self.call actor_or_actor_class, *arguments, **keyword_arguments, &block
13
13
  if actor_or_actor_class.is_a? Actor and not actor_or_actor_class.is_a? Class
14
14
  actor = actor_or_actor_class
15
15
  else
16
- actor = Build.(actor_or_actor_class, *arguments, &block)
16
+ actor = Build.(actor_or_actor_class, *arguments, **keyword_arguments, &block)
17
17
  end
18
18
 
19
19
  instance = new actor
@@ -24,9 +24,7 @@ module Actor
24
24
  end
25
25
 
26
26
  def self.start &assembly_block
27
- if Thread.respond_to?(:report_on_exception=)
28
- Thread.report_on_exception = false
29
- end
27
+ Thread.report_on_exception = false
30
28
 
31
29
  thread = Thread.new do
32
30
  instance = Build.(self, &assembly_block)
@@ -62,7 +60,14 @@ module Actor
62
60
  end
63
61
 
64
62
  handle Messages::ActorStarted do |message|
65
- publish.register message.address
63
+ actor_address = message.address
64
+
65
+ if error
66
+ send.(Messages::Stop, actor_address)
67
+ return
68
+ end
69
+
70
+ publish.register actor_address
66
71
 
67
72
  self.actor_count += 1
68
73
  end
@@ -107,6 +112,14 @@ module Actor
107
112
  super stop
108
113
  end
109
114
 
115
+ def registered_actor? actor
116
+ publish.registered? actor.address
117
+ end
118
+
119
+ def unregistered_actor? actor
120
+ publish.unregistered? actor.address
121
+ end
122
+
110
123
  def assembly_block
111
124
  @assembly_block ||= proc { }
112
125
  end
data/lib/actor.rb CHANGED
@@ -16,7 +16,6 @@ require 'actor/messaging/message'
16
16
  require 'actor/messaging/message/name'
17
17
 
18
18
  require 'actor/messaging/read'
19
- require 'actor/messaging/read/assertions'
20
19
  require 'actor/messaging/read/dependency'
21
20
  require 'actor/messaging/read/substitute'
22
21
 
@@ -25,24 +24,20 @@ require 'actor/messaging/send/dependency'
25
24
  require 'actor/messaging/send/substitute'
26
25
 
27
26
  require 'actor/messaging/publish'
28
- require 'actor/messaging/publish/assertions'
29
27
  require 'actor/messaging/publish/dependency'
30
28
  require 'actor/messaging/publish/substitute'
31
29
 
32
30
  require 'actor/messages'
33
31
 
34
32
  require 'actor/module/dependencies'
35
- require 'actor/module/dependencies/assertions'
36
33
  require 'actor/module/digest'
37
34
  require 'actor/module/handler'
38
35
  require 'actor/module/handler/method_name'
39
36
  require 'actor/module/handler/macro'
40
37
  require 'actor/module/handler/send_next_message'
41
- require 'actor/module/include_assertions'
42
38
  require 'actor/module/run_loop'
43
39
  require 'actor/module/start'
44
40
  require 'actor/module/suspend_resume'
45
- require 'actor/module/suspend_resume/assertions'
46
41
  require 'actor/module/suspend_resume/configure'
47
42
  require 'actor/module/suspend_resume/controls'
48
43
  require 'actor/module/suspend_resume/handle'
@@ -56,7 +51,6 @@ require 'actor/supervisor'
56
51
  require 'actor/supervisor/address/get'
57
52
  require 'actor/supervisor/address/put'
58
53
  require 'actor/supervisor/address/registry'
59
- require 'actor/supervisor/assertions'
60
54
  require 'actor/supervisor/observer'
61
55
 
62
56
  require 'actor/actor'
metadata CHANGED
@@ -1,15 +1,29 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ntl-actor
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.7
4
+ version: 1.4.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Nathan Ladd
8
- autorequire:
8
+ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-09-05 00:00:00.000000000 Z
12
- dependencies: []
11
+ date: 2022-11-24 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: test_bench
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - ">="
18
+ - !ruby/object:Gem::Version
19
+ version: '0'
20
+ type: :development
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - ">="
25
+ - !ruby/object:Gem::Version
26
+ version: '0'
13
27
  description: Implementation of actor pattern for Ruby
14
28
  email: nathanladd+github@gmail.com
15
29
  executables: []
@@ -29,30 +43,25 @@ files:
29
43
  - lib/actor/messaging/message.rb
30
44
  - lib/actor/messaging/message/name.rb
31
45
  - lib/actor/messaging/publish.rb
32
- - lib/actor/messaging/publish/assertions.rb
33
46
  - lib/actor/messaging/publish/dependency.rb
34
47
  - lib/actor/messaging/publish/substitute.rb
35
48
  - lib/actor/messaging/queue.rb
36
49
  - lib/actor/messaging/queue/substitute.rb
37
50
  - lib/actor/messaging/read.rb
38
- - lib/actor/messaging/read/assertions.rb
39
51
  - lib/actor/messaging/read/dependency.rb
40
52
  - lib/actor/messaging/read/substitute.rb
41
53
  - lib/actor/messaging/send.rb
42
54
  - lib/actor/messaging/send/dependency.rb
43
55
  - lib/actor/messaging/send/substitute.rb
44
56
  - lib/actor/module/dependencies.rb
45
- - lib/actor/module/dependencies/assertions.rb
46
57
  - lib/actor/module/digest.rb
47
58
  - lib/actor/module/handler.rb
48
59
  - lib/actor/module/handler/macro.rb
49
60
  - lib/actor/module/handler/method_name.rb
50
61
  - lib/actor/module/handler/send_next_message.rb
51
- - lib/actor/module/include_assertions.rb
52
62
  - lib/actor/module/run_loop.rb
53
63
  - lib/actor/module/start.rb
54
64
  - lib/actor/module/suspend_resume.rb
55
- - lib/actor/module/suspend_resume/assertions.rb
56
65
  - lib/actor/module/suspend_resume/configure.rb
57
66
  - lib/actor/module/suspend_resume/controls.rb
58
67
  - lib/actor/module/suspend_resume/handle.rb
@@ -62,13 +71,12 @@ files:
62
71
  - lib/actor/supervisor/address/get.rb
63
72
  - lib/actor/supervisor/address/put.rb
64
73
  - lib/actor/supervisor/address/registry.rb
65
- - lib/actor/supervisor/assertions.rb
66
74
  - lib/actor/supervisor/observer.rb
67
75
  homepage: https://github.com/ntl/actor
68
76
  licenses:
69
77
  - MIT
70
78
  metadata: {}
71
- post_install_message:
79
+ post_install_message:
72
80
  rdoc_options: []
73
81
  require_paths:
74
82
  - lib
@@ -84,9 +92,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
84
92
  - !ruby/object:Gem::Version
85
93
  version: '0'
86
94
  requirements: []
87
- rubyforge_project:
88
- rubygems_version: 2.7.6
89
- signing_key:
95
+ rubygems_version: 3.3.23
96
+ signing_key:
90
97
  specification_version: 4
91
98
  summary: Implementation of actor pattern for Ruby
92
99
  test_files: []
@@ -1,11 +0,0 @@
1
- module Actor
2
- module Messaging
3
- class Publish
4
- module Assertions
5
- def registered? address
6
- addresses.include? address
7
- end
8
- end
9
- end
10
- end
11
- end
@@ -1,25 +0,0 @@
1
- module Actor
2
- module Messaging
3
- class Read
4
- module Assertions
5
- def address? address
6
- queue? address.queue
7
- end
8
-
9
- def next_message? message
10
- begin
11
- next_message = @queue.deq true
12
- rescue ThreadError
13
- return false
14
- end
15
-
16
- next_message == message
17
- end
18
-
19
- def queue? queue
20
- self.queue == queue
21
- end
22
- end
23
- end
24
- end
25
- end
@@ -1,23 +0,0 @@
1
- module Actor
2
- module Module
3
- module Dependencies
4
- module Assertions
5
- def dependencies_configured?
6
- address_configured? and reader_configured? and send_configured?
7
- end
8
-
9
- def address_configured?
10
- address.instance_of? Messaging::Address
11
- end
12
-
13
- def reader_configured?
14
- read.instance_of? Messaging::Read
15
- end
16
-
17
- def send_configured?
18
- send.instance_of? Messaging::Send
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,18 +0,0 @@
1
- module Actor
2
- module Module
3
- module IncludeAssertions
4
- def self.call assertions_module, receiver
5
- receiver.module_exec do
6
- unless const_defined? :Assertions, false
7
- receiver_assertions_module = ::Module.new
8
- const_set :Assertions, receiver_assertions_module
9
- end
10
-
11
- receiver_assertions_module ||= const_get :Assertions
12
-
13
- receiver_assertions_module.include assertions_module
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,26 +0,0 @@
1
- module Actor
2
- module Module
3
- module SuspendResume
4
- module Assertions
5
- def message_deferred? message=nil, wait: nil
6
- non_block = wait == false
7
-
8
- begin
9
- msg = suspend_queue.deq true
10
- rescue ThreadError
11
- end
12
-
13
- if message.nil?
14
- msg ? true : false
15
- else
16
- msg == message
17
- end
18
- end
19
-
20
- def suspended?
21
- @suspended == true
22
- end
23
- end
24
- end
25
- end
26
- end
@@ -1,20 +0,0 @@
1
- module Actor
2
- class Supervisor
3
- module Assertions
4
- def self.extended supervisor
5
- supervisor.instance_exec do
6
- assertions_module = publish.class::Assertions
7
- publish.extend assertions_module
8
- end
9
- end
10
-
11
- def registered_actor? actor
12
- publish.registered? actor.address
13
- end
14
-
15
- def unregistered_actor? actor
16
- publish.unregistered? actor.address
17
- end
18
- end
19
- end
20
- end