rsmp 0.1.11 → 0.1.21

Sign up to get free protection for your applications and to get access to all the features.
@@ -1,3 +1,3 @@
1
1
  module RSMP
2
- VERSION = "0.1.11"
2
+ VERSION = "0.1.21"
3
3
  end
@@ -1,17 +1,16 @@
1
- # Helper for waiting for an Async condition using a block
2
-
3
1
  module RSMP
4
- class Wait
5
-
6
- def self.wait_for task, condition, timeout, &block
7
- task.with_timeout(timeout) do
8
- while task.running? do
2
+ module Wait
3
+ # wait for an async condition to signal, then yield to block
4
+ # if block returns true we're done. otherwise, wait again
5
+ def wait_for condition, timeout, &block
6
+ raise RuntimeError.new("Can't wait for condition because task is not running") unless @task.running?
7
+ @task.with_timeout(timeout) do
8
+ while @task.running? do
9
9
  value = condition.wait
10
10
  result = yield value
11
11
  return result if result # return result of check, if not nil
12
12
  end
13
13
  end
14
14
  end
15
-
16
15
  end
17
16
  end
@@ -41,18 +41,17 @@ Gem::Specification.new do |spec|
41
41
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
42
42
  spec.require_paths = ["lib"]
43
43
 
44
- spec.add_dependency "async", "~> 1.23.0"
45
- spec.add_dependency "async-io", "~> 1.27.1"
44
+ spec.add_dependency "async", "~> 1.28.3"
45
+ spec.add_dependency "async-io", "~> 1.30.1"
46
46
  spec.add_dependency "colorize", "~> 0.8.1"
47
- spec.add_dependency "thor", "~> 0.20.3"
48
- spec.add_dependency "json_schemer", "~> 0.2.8"
49
-
50
- spec.add_development_dependency "bundler", "~> 2.0"
51
- spec.add_development_dependency "rake", "~> 10.0"
52
- spec.add_development_dependency "rspec", "~> 3.0"
53
- spec.add_development_dependency "rspec-expectations", "~> 3.8.3"
54
- spec.add_development_dependency "rspec-with_params", "~> 0.2.0"
47
+ spec.add_dependency "thor", "~> 1.0.1"
48
+ spec.add_dependency "json_schemer", "~> 0.2.17"
49
+
50
+ spec.add_development_dependency "bundler", "~> 2.2.3"
51
+ spec.add_development_dependency "rake", "~> 13.0.1"
52
+ spec.add_development_dependency "rspec", "~> 3.9.0"
53
+ spec.add_development_dependency "rspec-expectations", "~> 3.9.1"
55
54
  spec.add_development_dependency "timecop", "~> 0.9.1"
56
55
  spec.add_development_dependency "cucumber", "~> 3.1.2"
57
- spec.add_development_dependency "aruba", "~> 0.14.11"
56
+ spec.add_development_dependency "aruba", "~> 1.0.0"
58
57
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: rsmp
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.11
4
+ version: 0.1.21
5
5
  platform: ruby
6
6
  authors:
7
7
  - Emil Tin
8
- autorequire:
8
+ autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2019-12-17 00:00:00.000000000 Z
11
+ date: 2021-01-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: async
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.23.0
19
+ version: 1.28.3
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
24
  - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.23.0
26
+ version: 1.28.3
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: async-io
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: 1.27.1
33
+ version: 1.30.1
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
38
  - - "~>"
39
39
  - !ruby/object:Gem::Version
40
- version: 1.27.1
40
+ version: 1.30.1
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: colorize
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -58,98 +58,84 @@ dependencies:
58
58
  requirements:
59
59
  - - "~>"
60
60
  - !ruby/object:Gem::Version
61
- version: 0.20.3
61
+ version: 1.0.1
62
62
  type: :runtime
63
63
  prerelease: false
64
64
  version_requirements: !ruby/object:Gem::Requirement
65
65
  requirements:
66
66
  - - "~>"
67
67
  - !ruby/object:Gem::Version
68
- version: 0.20.3
68
+ version: 1.0.1
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: json_schemer
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.2.8
75
+ version: 0.2.17
76
76
  type: :runtime
77
77
  prerelease: false
78
78
  version_requirements: !ruby/object:Gem::Requirement
79
79
  requirements:
80
80
  - - "~>"
81
81
  - !ruby/object:Gem::Version
82
- version: 0.2.8
82
+ version: 0.2.17
83
83
  - !ruby/object:Gem::Dependency
84
84
  name: bundler
85
85
  requirement: !ruby/object:Gem::Requirement
86
86
  requirements:
87
87
  - - "~>"
88
88
  - !ruby/object:Gem::Version
89
- version: '2.0'
89
+ version: 2.2.3
90
90
  type: :development
91
91
  prerelease: false
92
92
  version_requirements: !ruby/object:Gem::Requirement
93
93
  requirements:
94
94
  - - "~>"
95
95
  - !ruby/object:Gem::Version
96
- version: '2.0'
96
+ version: 2.2.3
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
100
100
  requirements:
101
101
  - - "~>"
102
102
  - !ruby/object:Gem::Version
103
- version: '10.0'
103
+ version: 13.0.1
104
104
  type: :development
105
105
  prerelease: false
106
106
  version_requirements: !ruby/object:Gem::Requirement
107
107
  requirements:
108
108
  - - "~>"
109
109
  - !ruby/object:Gem::Version
110
- version: '10.0'
110
+ version: 13.0.1
111
111
  - !ruby/object:Gem::Dependency
112
112
  name: rspec
113
113
  requirement: !ruby/object:Gem::Requirement
114
114
  requirements:
115
115
  - - "~>"
116
116
  - !ruby/object:Gem::Version
117
- version: '3.0'
117
+ version: 3.9.0
118
118
  type: :development
119
119
  prerelease: false
120
120
  version_requirements: !ruby/object:Gem::Requirement
121
121
  requirements:
122
122
  - - "~>"
123
123
  - !ruby/object:Gem::Version
124
- version: '3.0'
124
+ version: 3.9.0
125
125
  - !ruby/object:Gem::Dependency
126
126
  name: rspec-expectations
127
127
  requirement: !ruby/object:Gem::Requirement
128
128
  requirements:
129
129
  - - "~>"
130
130
  - !ruby/object:Gem::Version
131
- version: 3.8.3
131
+ version: 3.9.1
132
132
  type: :development
133
133
  prerelease: false
134
134
  version_requirements: !ruby/object:Gem::Requirement
135
135
  requirements:
136
136
  - - "~>"
137
137
  - !ruby/object:Gem::Version
138
- version: 3.8.3
139
- - !ruby/object:Gem::Dependency
140
- name: rspec-with_params
141
- requirement: !ruby/object:Gem::Requirement
142
- requirements:
143
- - - "~>"
144
- - !ruby/object:Gem::Version
145
- version: 0.2.0
146
- type: :development
147
- prerelease: false
148
- version_requirements: !ruby/object:Gem::Requirement
149
- requirements:
150
- - - "~>"
151
- - !ruby/object:Gem::Version
152
- version: 0.2.0
138
+ version: 3.9.1
153
139
  - !ruby/object:Gem::Dependency
154
140
  name: timecop
155
141
  requirement: !ruby/object:Gem::Requirement
@@ -184,14 +170,14 @@ dependencies:
184
170
  requirements:
185
171
  - - "~>"
186
172
  - !ruby/object:Gem::Version
187
- version: 0.14.11
173
+ version: 1.0.0
188
174
  type: :development
189
175
  prerelease: false
190
176
  version_requirements: !ruby/object:Gem::Requirement
191
177
  requirements:
192
178
  - - "~>"
193
179
  - !ruby/object:Gem::Version
194
- version: 0.14.11
180
+ version: 1.0.0
195
181
  description: Easy RSMP site and supervisor communication.
196
182
  email:
197
183
  - zf0f@kk.dk
@@ -213,27 +199,32 @@ files:
213
199
  - bin/setup
214
200
  - config/site.yaml
215
201
  - config/supervisor.yaml
202
+ - config/tlc.yaml
203
+ - documentation/classes_and_modules.md
204
+ - documentation/message_distribution.md
216
205
  - exe/rsmp
217
206
  - lib/rsmp.rb
218
207
  - lib/rsmp/alarm.rb
219
208
  - lib/rsmp/archive.rb
220
- - lib/rsmp/base.rb
221
209
  - lib/rsmp/cli.rb
210
+ - lib/rsmp/collector.rb
222
211
  - lib/rsmp/component.rb
212
+ - lib/rsmp/components.rb
223
213
  - lib/rsmp/error.rb
214
+ - lib/rsmp/listener.rb
224
215
  - lib/rsmp/logger.rb
216
+ - lib/rsmp/logging.rb
225
217
  - lib/rsmp/message.rb
226
218
  - lib/rsmp/node.rb
227
- - lib/rsmp/probe.rb
228
- - lib/rsmp/probe_collection.rb
219
+ - lib/rsmp/notifier.rb
229
220
  - lib/rsmp/proxy.rb
230
221
  - lib/rsmp/rsmp.rb
231
222
  - lib/rsmp/site.rb
232
- - lib/rsmp/site_base.rb
233
223
  - lib/rsmp/site_proxy.rb
224
+ - lib/rsmp/site_proxy_wait.rb
234
225
  - lib/rsmp/supervisor.rb
235
- - lib/rsmp/supervisor_base.rb
236
226
  - lib/rsmp/supervisor_proxy.rb
227
+ - lib/rsmp/tlc.rb
237
228
  - lib/rsmp/version.rb
238
229
  - lib/rsmp/wait.rb
239
230
  - lib/rsmp_schema/schema/core/aggregated_status.json
@@ -286,7 +277,10 @@ files:
286
277
  - lib/rsmp_schema/schema/tlc/commands/M0017.json
287
278
  - lib/rsmp_schema/schema/tlc/commands/M0018.json
288
279
  - lib/rsmp_schema/schema/tlc/commands/M0019.json
280
+ - lib/rsmp_schema/schema/tlc/commands/M0020.json
281
+ - lib/rsmp_schema/schema/tlc/commands/M0021.json
289
282
  - lib/rsmp_schema/schema/tlc/commands/M0103.json
283
+ - lib/rsmp_schema/schema/tlc/commands/M0104.json
290
284
  - lib/rsmp_schema/schema/tlc/commands/command_requests.json
291
285
  - lib/rsmp_schema/schema/tlc/commands/command_responses.json
292
286
  - lib/rsmp_schema/schema/tlc/commands/commands.json
@@ -319,10 +313,13 @@ files:
319
313
  - lib/rsmp_schema/schema/tlc/statuses/S0027.json
320
314
  - lib/rsmp_schema/schema/tlc/statuses/S0028.json
321
315
  - lib/rsmp_schema/schema/tlc/statuses/S0029.json
316
+ - lib/rsmp_schema/schema/tlc/statuses/S0030.json
317
+ - lib/rsmp_schema/schema/tlc/statuses/S0031.json
322
318
  - lib/rsmp_schema/schema/tlc/statuses/S0091.json
323
319
  - lib/rsmp_schema/schema/tlc/statuses/S0092.json
324
320
  - lib/rsmp_schema/schema/tlc/statuses/S0095.json
325
321
  - lib/rsmp_schema/schema/tlc/statuses/S0096.json
322
+ - lib/rsmp_schema/schema/tlc/statuses/S0097.json
326
323
  - lib/rsmp_schema/schema/tlc/statuses/S0201.json
327
324
  - lib/rsmp_schema/schema/tlc/statuses/S0202.json
328
325
  - lib/rsmp_schema/schema/tlc/statuses/S0203.json
@@ -342,7 +339,7 @@ metadata:
342
339
  source_code_uri: https://github.com/rsmp-nordic/rsmp
343
340
  changelog_uri: https://github.com/rsmp-nordic/rsmp/blob/master/CHANGELOG.md
344
341
  bug_tracker_uri: https://github.com/rsmp-nordic/rsmp/issues
345
- post_install_message:
342
+ post_install_message:
346
343
  rdoc_options: []
347
344
  require_paths:
348
345
  - lib
@@ -357,8 +354,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
357
354
  - !ruby/object:Gem::Version
358
355
  version: '0'
359
356
  requirements: []
360
- rubygems_version: 3.0.6
361
- signing_key:
357
+ rubygems_version: 3.2.3
358
+ signing_key:
362
359
  specification_version: 4
363
360
  summary: RoadSide Message Protocol (RSMP) library.
364
361
  test_files: []
@@ -1,114 +0,0 @@
1
- # A probe checks incoming messages and store matches
2
- # Once it has collected what it needs, it triggers a condition variable
3
- # and the client wakes up.
4
-
5
- module RSMP
6
- class Probe
7
- attr_reader :condition, :items, :done
8
-
9
- # block should send a message and return message just sent
10
- def self.collect_response proxy, options={}, &block
11
- from = proxy.archive.current_index
12
- sent = yield
13
- raise RuntimeError unless sent && sent[:message].is_a?(RSMP::Message)
14
- item = proxy.archive.capture(options.merge(from: from+1, num: 1, with_message: true)) do |item|
15
- ["CommandResponse","StatusResponse","MessageNotAck"].include?(item[:message].type)
16
- end
17
- if item
18
- item[:message]
19
- else
20
- nil
21
- end
22
- end
23
-
24
-
25
- def initialize archive
26
- raise ArgumentError.new("Archive expected") unless archive.is_a? Archive
27
- @archive = archive
28
- @items = []
29
- @condition = Async::Notification.new
30
- end
31
-
32
- def capture task, options={}, &block
33
- @options = options
34
- @block = block
35
- @num = options[:num]
36
-
37
- if options[:earliest]
38
- from = find_timestamp_index options[:earliest]
39
- backscan from
40
- elsif options[:from]
41
- backscan options[:from]
42
- end
43
-
44
- # if backscan didn't find enough items, then
45
- # insert ourself as probe and sleep until enough items are captured
46
- if @items.size < @num
47
- begin
48
- @archive.probes.add self
49
- task.with_timeout(options[:timeout]) do
50
- @condition.wait
51
- end
52
- ensure
53
- @archive.probes.remove self
54
- end
55
- end
56
-
57
- if @num == 1
58
- @items.first # if one item was requested, return item instead of array
59
- else
60
- @items[0..@num-1] # return array, but ensure we never return more than requested
61
- end
62
- end
63
-
64
- def find_timestamp_index earliest
65
- (0..@archive.items.size).bsearch do |i| # use binary search to find item index
66
- @archive.items[i][:timestamp] >= earliest
67
- end
68
- end
69
-
70
- def backscan from
71
- from.upto(@archive.items.size-1) do |i|
72
- return if process @archive.items[i]
73
- end
74
- end
75
-
76
- def reset
77
- @items.clear
78
- @done = false
79
- end
80
-
81
- def process item
82
- raise ArgumentError unless item
83
- return true if @done
84
- if matches? item
85
- @items << item
86
- if @num && @items.size >= @num
87
- @done = true
88
- @condition.signal
89
- return true
90
- end
91
- end
92
- false
93
- end
94
-
95
- def matches? item
96
- raise ArgumentError unless item
97
-
98
- if @options[:type]
99
- return false if item[:message] == nil
100
- if @options[:type].is_a? Array
101
- return false unless @options[:type].include? item[:message].type
102
- else
103
- return false unless item[:message].type == @options[:type]
104
- end
105
- end
106
- return if @options[:level] && item[:level] != @options[:level]
107
- return false if @options[:with_message] && !(item[:direction] && item[:message])
108
- if @block
109
- return false if @block.call(item) == false
110
- end
111
- true
112
- end
113
- end
114
- end
@@ -1,28 +0,0 @@
1
- # Collection of probes
2
-
3
- module RSMP
4
- class ProbeCollection
5
-
6
- def initialize
7
- @probes = []
8
- end
9
-
10
- def add probe
11
- raise ArgumentError unless probe
12
- @probes << probe
13
- end
14
-
15
- def remove probe
16
- raise ArgumentError unless probe
17
- @probes.delete probe
18
- end
19
-
20
- def process item
21
- @probes.each { |probe| probe.process item }
22
- end
23
-
24
- def clear
25
- @probes.each { |probe| probe.clear }
26
- end
27
- end
28
- end