rsmp 0.1.17 → 0.1.30

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.
data/lib/rsmp/version.rb CHANGED
@@ -1,3 +1,3 @@
1
1
  module RSMP
2
- VERSION = "0.1.17"
2
+ VERSION = "0.1.30"
3
3
  end
data/lib/rsmp/wait.rb CHANGED
@@ -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
data/rsmp.gemspec CHANGED
@@ -26,28 +26,17 @@ Gem::Specification.new do |spec|
26
26
  `git ls-files -z`.split("\x0").reject { |f| f.match(%r{^(test|spec|features)/}) }
27
27
  end
28
28
 
29
- # Add schema files in rsmp_schema submodule
30
- gem_dir = Pathname.new(__dir__).expand_path
31
- submodule_path = File.expand_path 'lib/rsmp_schema/schema'
32
- Dir.chdir(submodule_path) do
33
- submodule_relative_path = Pathname.new(submodule_path).relative_path_from(gem_dir)
34
- `git ls-files`.split($\).each do |filename|
35
- # for each git file, prepend relative submodule path and add to spec
36
- spec.files << submodule_relative_path.join(filename).to_s
37
- end
38
- end
39
-
40
29
  spec.bindir = "exe"
41
30
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
42
31
  spec.require_paths = ["lib"]
43
32
 
44
- spec.add_dependency "async", "~> 1.23.0"
45
- spec.add_dependency "async-io", "~> 1.27.4"
33
+ spec.add_dependency "async", "~> 1.28.7"
34
+ spec.add_dependency "async-io", "~> 1.30.2"
46
35
  spec.add_dependency "colorize", "~> 0.8.1"
47
36
  spec.add_dependency "thor", "~> 1.0.1"
48
- spec.add_dependency "json_schemer", "~> 0.2.11"
37
+ spec.add_dependency "rsmp_schemer", "~> 0.2.0"
49
38
 
50
- spec.add_development_dependency "bundler", "~> 2.1.4"
39
+ spec.add_development_dependency "bundler", "~> 2.2.3"
51
40
  spec.add_development_dependency "rake", "~> 13.0.1"
52
41
  spec.add_development_dependency "rspec", "~> 3.9.0"
53
42
  spec.add_development_dependency "rspec-expectations", "~> 3.9.1"
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.17
4
+ version: 0.1.30
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: 2020-03-24 00:00:00.000000000 Z
11
+ date: 2021-06-02 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.7
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.7
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.4
33
+ version: 1.30.2
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.4
40
+ version: 1.30.2
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: colorize
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -67,33 +67,33 @@ dependencies:
67
67
  - !ruby/object:Gem::Version
68
68
  version: 1.0.1
69
69
  - !ruby/object:Gem::Dependency
70
- name: json_schemer
70
+ name: rsmp_schemer
71
71
  requirement: !ruby/object:Gem::Requirement
72
72
  requirements:
73
73
  - - "~>"
74
74
  - !ruby/object:Gem::Version
75
- version: 0.2.11
75
+ version: 0.2.0
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.11
82
+ version: 0.2.0
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.1.4
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.1.4
96
+ version: 2.2.3
97
97
  - !ruby/object:Gem::Dependency
98
98
  name: rake
99
99
  requirement: !ruby/object:Gem::Requirement
@@ -197,130 +197,39 @@ files:
197
197
  - Rakefile
198
198
  - bin/console
199
199
  - bin/setup
200
- - config/site.yaml
201
200
  - config/supervisor.yaml
202
201
  - config/tlc.yaml
202
+ - documentation/classes_and_modules.md
203
+ - documentation/message_distribution.md
203
204
  - exe/rsmp
204
205
  - lib/rsmp.rb
205
206
  - lib/rsmp/alarm.rb
206
207
  - lib/rsmp/archive.rb
207
- - lib/rsmp/base.rb
208
208
  - lib/rsmp/cli.rb
209
+ - lib/rsmp/collector.rb
209
210
  - lib/rsmp/component.rb
211
+ - lib/rsmp/components.rb
212
+ - lib/rsmp/convert/export/json_schema.rb
213
+ - lib/rsmp/convert/import/yaml.rb
214
+ - lib/rsmp/deep_merge.rb
210
215
  - lib/rsmp/error.rb
216
+ - lib/rsmp/inspect.rb
217
+ - lib/rsmp/listener.rb
211
218
  - lib/rsmp/logger.rb
219
+ - lib/rsmp/logging.rb
212
220
  - lib/rsmp/message.rb
213
221
  - lib/rsmp/node.rb
214
- - lib/rsmp/probe.rb
215
- - lib/rsmp/probe_collection.rb
222
+ - lib/rsmp/notifier.rb
216
223
  - lib/rsmp/proxy.rb
217
224
  - lib/rsmp/rsmp.rb
218
225
  - lib/rsmp/site.rb
219
- - lib/rsmp/site_base.rb
220
226
  - lib/rsmp/site_proxy.rb
227
+ - lib/rsmp/site_proxy_wait.rb
221
228
  - lib/rsmp/supervisor.rb
222
- - lib/rsmp/supervisor_base.rb
223
229
  - lib/rsmp/supervisor_proxy.rb
224
230
  - lib/rsmp/tlc.rb
225
231
  - lib/rsmp/version.rb
226
232
  - lib/rsmp/wait.rb
227
- - lib/rsmp_schema/schema/core/aggregated_status.json
228
- - lib/rsmp_schema/schema/core/alarm.json
229
- - lib/rsmp_schema/schema/core/command_request.json
230
- - lib/rsmp_schema/schema/core/command_response.json
231
- - lib/rsmp_schema/schema/core/core.json
232
- - lib/rsmp_schema/schema/core/definitions.json
233
- - lib/rsmp_schema/schema/core/message_ack.json
234
- - lib/rsmp_schema/schema/core/message_not_ack.json
235
- - lib/rsmp_schema/schema/core/rsmp.json
236
- - lib/rsmp_schema/schema/core/status.json
237
- - lib/rsmp_schema/schema/core/status_request.json
238
- - lib/rsmp_schema/schema/core/status_response.json
239
- - lib/rsmp_schema/schema/core/status_subscribe.json
240
- - lib/rsmp_schema/schema/core/status_unsubscribe.json
241
- - lib/rsmp_schema/schema/core/status_update.json
242
- - lib/rsmp_schema/schema/core/version.json
243
- - lib/rsmp_schema/schema/core/watchdog.json
244
- - lib/rsmp_schema/schema/tlc/alarms/A0001.json
245
- - lib/rsmp_schema/schema/tlc/alarms/A0002.json
246
- - lib/rsmp_schema/schema/tlc/alarms/A0003.json
247
- - lib/rsmp_schema/schema/tlc/alarms/A0004.json
248
- - lib/rsmp_schema/schema/tlc/alarms/A0005.json
249
- - lib/rsmp_schema/schema/tlc/alarms/A0006.json
250
- - lib/rsmp_schema/schema/tlc/alarms/A0007.json
251
- - lib/rsmp_schema/schema/tlc/alarms/A0008.json
252
- - lib/rsmp_schema/schema/tlc/alarms/A0009.json
253
- - lib/rsmp_schema/schema/tlc/alarms/A0101.json
254
- - lib/rsmp_schema/schema/tlc/alarms/A0201.json
255
- - lib/rsmp_schema/schema/tlc/alarms/A0202.json
256
- - lib/rsmp_schema/schema/tlc/alarms/A0301.json
257
- - lib/rsmp_schema/schema/tlc/alarms/A0302.json
258
- - lib/rsmp_schema/schema/tlc/alarms/alarms.json
259
- - lib/rsmp_schema/schema/tlc/commands/M0001.json
260
- - lib/rsmp_schema/schema/tlc/commands/M0002.json
261
- - lib/rsmp_schema/schema/tlc/commands/M0003.json
262
- - lib/rsmp_schema/schema/tlc/commands/M0004.json
263
- - lib/rsmp_schema/schema/tlc/commands/M0005.json
264
- - lib/rsmp_schema/schema/tlc/commands/M0006.json
265
- - lib/rsmp_schema/schema/tlc/commands/M0007.json
266
- - lib/rsmp_schema/schema/tlc/commands/M0008.json
267
- - lib/rsmp_schema/schema/tlc/commands/M0010.json
268
- - lib/rsmp_schema/schema/tlc/commands/M0011.json
269
- - lib/rsmp_schema/schema/tlc/commands/M0012.json
270
- - lib/rsmp_schema/schema/tlc/commands/M0013.json
271
- - lib/rsmp_schema/schema/tlc/commands/M0014.json
272
- - lib/rsmp_schema/schema/tlc/commands/M0015.json
273
- - lib/rsmp_schema/schema/tlc/commands/M0016.json
274
- - lib/rsmp_schema/schema/tlc/commands/M0017.json
275
- - lib/rsmp_schema/schema/tlc/commands/M0018.json
276
- - lib/rsmp_schema/schema/tlc/commands/M0019.json
277
- - lib/rsmp_schema/schema/tlc/commands/M0103.json
278
- - lib/rsmp_schema/schema/tlc/commands/command_requests.json
279
- - lib/rsmp_schema/schema/tlc/commands/command_responses.json
280
- - lib/rsmp_schema/schema/tlc/commands/commands.json
281
- - lib/rsmp_schema/schema/tlc/statuses/S0001.json
282
- - lib/rsmp_schema/schema/tlc/statuses/S0002.json
283
- - lib/rsmp_schema/schema/tlc/statuses/S0003.json
284
- - lib/rsmp_schema/schema/tlc/statuses/S0004.json
285
- - lib/rsmp_schema/schema/tlc/statuses/S0005.json
286
- - lib/rsmp_schema/schema/tlc/statuses/S0006.json
287
- - lib/rsmp_schema/schema/tlc/statuses/S0007.json
288
- - lib/rsmp_schema/schema/tlc/statuses/S0008.json
289
- - lib/rsmp_schema/schema/tlc/statuses/S0009.json
290
- - lib/rsmp_schema/schema/tlc/statuses/S0010.json
291
- - lib/rsmp_schema/schema/tlc/statuses/S0011.json
292
- - lib/rsmp_schema/schema/tlc/statuses/S0012.json
293
- - lib/rsmp_schema/schema/tlc/statuses/S0013.json
294
- - lib/rsmp_schema/schema/tlc/statuses/S0014.json
295
- - lib/rsmp_schema/schema/tlc/statuses/S0015.json
296
- - lib/rsmp_schema/schema/tlc/statuses/S0016.json
297
- - lib/rsmp_schema/schema/tlc/statuses/S0017.json
298
- - lib/rsmp_schema/schema/tlc/statuses/S0018.json
299
- - lib/rsmp_schema/schema/tlc/statuses/S0019.json
300
- - lib/rsmp_schema/schema/tlc/statuses/S0020.json
301
- - lib/rsmp_schema/schema/tlc/statuses/S0021.json
302
- - lib/rsmp_schema/schema/tlc/statuses/S0022.json
303
- - lib/rsmp_schema/schema/tlc/statuses/S0023.json
304
- - lib/rsmp_schema/schema/tlc/statuses/S0024.json
305
- - lib/rsmp_schema/schema/tlc/statuses/S0025.json
306
- - lib/rsmp_schema/schema/tlc/statuses/S0026.json
307
- - lib/rsmp_schema/schema/tlc/statuses/S0027.json
308
- - lib/rsmp_schema/schema/tlc/statuses/S0028.json
309
- - lib/rsmp_schema/schema/tlc/statuses/S0029.json
310
- - lib/rsmp_schema/schema/tlc/statuses/S0091.json
311
- - lib/rsmp_schema/schema/tlc/statuses/S0092.json
312
- - lib/rsmp_schema/schema/tlc/statuses/S0095.json
313
- - lib/rsmp_schema/schema/tlc/statuses/S0096.json
314
- - lib/rsmp_schema/schema/tlc/statuses/S0201.json
315
- - lib/rsmp_schema/schema/tlc/statuses/S0202.json
316
- - lib/rsmp_schema/schema/tlc/statuses/S0203.json
317
- - lib/rsmp_schema/schema/tlc/statuses/S0204.json
318
- - lib/rsmp_schema/schema/tlc/statuses/S0205.json
319
- - lib/rsmp_schema/schema/tlc/statuses/S0206.json
320
- - lib/rsmp_schema/schema/tlc/statuses/S0207.json
321
- - lib/rsmp_schema/schema/tlc/statuses/S0208.json
322
- - lib/rsmp_schema/schema/tlc/statuses/statuses.json
323
- - lib/rsmp_schema/schema/tlc/sxl.json
324
233
  - rsmp.gemspec
325
234
  homepage: https://github.com/rsmp-nordic/rsmp
326
235
  licenses:
@@ -330,7 +239,7 @@ metadata:
330
239
  source_code_uri: https://github.com/rsmp-nordic/rsmp
331
240
  changelog_uri: https://github.com/rsmp-nordic/rsmp/blob/master/CHANGELOG.md
332
241
  bug_tracker_uri: https://github.com/rsmp-nordic/rsmp/issues
333
- post_install_message:
242
+ post_install_message:
334
243
  rdoc_options: []
335
244
  require_paths:
336
245
  - lib
@@ -345,8 +254,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
345
254
  - !ruby/object:Gem::Version
346
255
  version: '0'
347
256
  requirements: []
348
- rubygems_version: 3.1.2
349
- signing_key:
257
+ rubygems_version: 3.2.3
258
+ signing_key:
350
259
  specification_version: 4
351
260
  summary: RoadSide Message Protocol (RSMP) library.
352
261
  test_files: []
data/config/site.yaml DELETED
@@ -1,40 +0,0 @@
1
- site_id: RN+SI0001
2
- supervisors:
3
- - ip: 127.0.0.1
4
- port: 12111
5
-
6
- sxl: traffic_light_controller
7
-
8
- rsmp_versions:
9
- - 3.1.1
10
- - 3.1.2
11
- - 3.1.3
12
- - 3.1.4
13
-
14
- components:
15
- main:
16
- C1:
17
-
18
- watchdog_interval: 1
19
- watchdog_timeout: 2
20
- acknowledgement_timeout: 1
21
- command_response_timeout: 1
22
- status_response_timeout: 1
23
- status_update_timeout: 1
24
- reconnect_interval: 0.1
25
-
26
- log:
27
- active: true
28
- color: true
29
- timestamp: true
30
- id: true
31
- component: true
32
- ip: false
33
- site_id: true
34
- level: false
35
- text: true
36
- direction: true
37
- json: true
38
- acknowledgements: false
39
- watchdogs: false
40
-
data/lib/rsmp/probe.rb DELETED
@@ -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