cloudi 1.7.3 → 2.0.1
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 +5 -5
- checksums.yaml.gz.sig +0 -0
- data.tar.gz.sig +0 -0
- data/README.markdown +2 -2
- data/lib/cloudi.rb +103 -36
- metadata +32 -33
- metadata.gz.sig +2 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: 017a451955dbea2edcffbee125fb2c91ddfbe3df71e8eccfc170466048766940
|
4
|
+
data.tar.gz: 5e3a49115f6fab85d2ec77077aa0a145bc5314358be030d7be8514bb50028e66
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2ea5c45dd5a058b448b2ef3d26ac026de9d9ee14779c54342dcb6997ec8efa0592f0e4e5ec5f5a10f408b00a30e660c9ad5fb13bfe5e1e5d5d29dc586145aee3
|
7
|
+
data.tar.gz: adcbd1247a877d483435fb5ebe9350f3ab66bdda07f6972c6d5c79014a10c1bd8893f9be92ab3e495e19e35b71cb34ab67a1ef638436abe271aab248fe1044b1
|
checksums.yaml.gz.sig
CHANGED
Binary file
|
data.tar.gz.sig
CHANGED
Binary file
|
data/README.markdown
CHANGED
@@ -4,14 +4,14 @@
|
|
4
4
|
[](https://travis-ci.org/CloudI/cloudi_api_ruby)
|
5
5
|
[](https://rubygems.org/gems/cloudi)
|
6
6
|
|
7
|
-
Ruby [CloudI API](
|
7
|
+
Ruby [CloudI API](https://cloudi.org/api.html#1_Intro)
|
8
8
|
|
9
9
|
Available as a [Ruby gem at `https://rubygems.org/gems/cloudi`](https://rubygems.org/gems/cloudi).
|
10
10
|
|
11
11
|
Author
|
12
12
|
------
|
13
13
|
|
14
|
-
Michael Truog (mjtruog
|
14
|
+
Michael Truog (mjtruog at protonmail dot com)
|
15
15
|
|
16
16
|
License
|
17
17
|
-------
|
data/lib/cloudi.rb
CHANGED
@@ -4,7 +4,7 @@
|
|
4
4
|
#
|
5
5
|
# MIT License
|
6
6
|
#
|
7
|
-
# Copyright (c) 2011-
|
7
|
+
# Copyright (c) 2011-2020 Michael Truog <mjtruog at protonmail dot com>
|
8
8
|
#
|
9
9
|
# Permission is hereby granted, free of charge, to any person obtaining a
|
10
10
|
# copy of this software and associated documentation files (the "Software"),
|
@@ -31,6 +31,7 @@ $stdout.sync = true
|
|
31
31
|
$stderr.sync = true
|
32
32
|
|
33
33
|
require 'erlang'
|
34
|
+
require 'stringio'
|
34
35
|
|
35
36
|
module CloudI
|
36
37
|
class API
|
@@ -56,13 +57,14 @@ module CloudI
|
|
56
57
|
@s.sync = true
|
57
58
|
@use_header = true
|
58
59
|
else
|
60
|
+
$stderr.puts 'CloudI service execution must occur in CloudI'
|
59
61
|
raise InvalidInputException
|
60
62
|
end
|
61
63
|
@initialization_complete = false
|
62
64
|
@terminate = false
|
63
65
|
@size = buffer_size_str.to_i
|
64
66
|
@callbacks = Hash.new
|
65
|
-
@timeout_terminate =
|
67
|
+
@timeout_terminate = 10 # TIMEOUT_TERMINATE_MIN
|
66
68
|
send(Erlang.term_to_binary(:init))
|
67
69
|
poll_request(nil, false)
|
68
70
|
end
|
@@ -181,7 +183,7 @@ module CloudI
|
|
181
183
|
OtpErlangBinary.new(request),
|
182
184
|
timeout, priority,
|
183
185
|
OtpErlangBinary.new(trans_id), pid]))
|
184
|
-
raise ForwardAsyncException
|
186
|
+
raise ForwardAsyncException
|
185
187
|
end
|
186
188
|
|
187
189
|
def forward_sync(name, request_info, request,
|
@@ -191,7 +193,7 @@ module CloudI
|
|
191
193
|
OtpErlangBinary.new(request),
|
192
194
|
timeout, priority,
|
193
195
|
OtpErlangBinary.new(trans_id), pid]))
|
194
|
-
raise ForwardSyncException
|
196
|
+
raise ForwardSyncException
|
195
197
|
end
|
196
198
|
|
197
199
|
def return_(request_type, name, pattern, response_info, response,
|
@@ -213,7 +215,7 @@ module CloudI
|
|
213
215
|
OtpErlangBinary.new(response),
|
214
216
|
timeout,
|
215
217
|
OtpErlangBinary.new(trans_id), pid]))
|
216
|
-
raise ReturnAsyncException
|
218
|
+
raise ReturnAsyncException
|
217
219
|
end
|
218
220
|
|
219
221
|
def return_sync(name, pattern, response_info, response,
|
@@ -223,7 +225,7 @@ module CloudI
|
|
223
225
|
OtpErlangBinary.new(response),
|
224
226
|
timeout,
|
225
227
|
OtpErlangBinary.new(trans_id), pid]))
|
226
|
-
raise ReturnSyncException
|
228
|
+
raise ReturnSyncException
|
227
229
|
end
|
228
230
|
|
229
231
|
def recv_async(timeout=nil, trans_id=nil, consume=true)
|
@@ -253,6 +255,7 @@ module CloudI
|
|
253
255
|
function = function_queue.shift
|
254
256
|
function_queue.push(function)
|
255
257
|
end
|
258
|
+
return_null_response = false
|
256
259
|
case command
|
257
260
|
when MESSAGE_SEND_ASYNC
|
258
261
|
begin
|
@@ -272,29 +275,39 @@ module CloudI
|
|
272
275
|
if not response.kind_of?(String)
|
273
276
|
response = ''
|
274
277
|
end
|
275
|
-
rescue InvalidInputException => e
|
276
|
-
raise e
|
277
278
|
rescue MessageDecodingException => e
|
278
|
-
|
279
|
+
@terminate = true
|
280
|
+
return_null_response = true
|
279
281
|
rescue TerminateException => e
|
280
|
-
|
282
|
+
return_null_response = true
|
281
283
|
rescue ReturnAsyncException
|
282
284
|
return
|
283
|
-
rescue ForwardAsyncException
|
284
|
-
return
|
285
285
|
rescue ReturnSyncException => e
|
286
|
+
@terminate = true
|
286
287
|
$stderr.puts e.message
|
287
288
|
$stderr.puts e.backtrace
|
288
|
-
|
289
|
+
return
|
290
|
+
rescue ForwardAsyncException
|
289
291
|
return
|
290
292
|
rescue ForwardSyncException => e
|
293
|
+
@terminate = true
|
291
294
|
$stderr.puts e.message
|
292
295
|
$stderr.puts e.backtrace
|
293
|
-
API.assert{false}
|
294
296
|
return
|
297
|
+
rescue StandardError => e
|
298
|
+
return_null_response = true
|
299
|
+
$stderr.puts e.message
|
300
|
+
$stderr.puts e.backtrace
|
301
|
+
rescue SystemExit => e
|
302
|
+
$stderr.puts e.message
|
303
|
+
$stderr.puts e.backtrace
|
304
|
+
raise
|
295
305
|
rescue
|
296
306
|
$stderr.puts $!.message
|
297
307
|
$stderr.puts $!.backtrace
|
308
|
+
exit(1)
|
309
|
+
end
|
310
|
+
if return_null_response
|
298
311
|
response_info = ''
|
299
312
|
response = ''
|
300
313
|
end
|
@@ -321,29 +334,39 @@ module CloudI
|
|
321
334
|
if not response.kind_of?(String)
|
322
335
|
response = ''
|
323
336
|
end
|
324
|
-
rescue InvalidInputException => e
|
325
|
-
raise e
|
326
337
|
rescue MessageDecodingException => e
|
327
|
-
|
338
|
+
@terminate = true
|
339
|
+
return_null_response = true
|
328
340
|
rescue TerminateException => e
|
329
|
-
|
341
|
+
return_null_response = true
|
330
342
|
rescue ReturnSyncException
|
331
343
|
return
|
332
|
-
rescue ForwardSyncException
|
333
|
-
return
|
334
344
|
rescue ReturnAsyncException => e
|
345
|
+
@terminate = true
|
335
346
|
$stderr.puts e.message
|
336
347
|
$stderr.puts e.backtrace
|
337
|
-
|
348
|
+
return
|
349
|
+
rescue ForwardSyncException
|
338
350
|
return
|
339
351
|
rescue ForwardAsyncException => e
|
352
|
+
@terminate = true
|
340
353
|
$stderr.puts e.message
|
341
354
|
$stderr.puts e.backtrace
|
342
|
-
API.assert{false}
|
343
355
|
return
|
356
|
+
rescue StandardError => e
|
357
|
+
return_null_response = true
|
358
|
+
$stderr.puts e.message
|
359
|
+
$stderr.puts e.backtrace
|
360
|
+
rescue SystemExit => e
|
361
|
+
$stderr.puts e.message
|
362
|
+
$stderr.puts e.backtrace
|
363
|
+
raise
|
344
364
|
rescue
|
345
365
|
$stderr.puts $!.message
|
346
366
|
$stderr.puts $!.backtrace
|
367
|
+
exit(1)
|
368
|
+
end
|
369
|
+
if return_null_response
|
347
370
|
response_info = ''
|
348
371
|
response = ''
|
349
372
|
end
|
@@ -402,7 +425,11 @@ module CloudI
|
|
402
425
|
|
403
426
|
def poll_request(timeout, external)
|
404
427
|
if @terminate
|
405
|
-
|
428
|
+
if external
|
429
|
+
return false
|
430
|
+
else
|
431
|
+
raise TerminateException.new(@timeout_terminate)
|
432
|
+
end
|
406
433
|
elsif external and not @initialization_complete
|
407
434
|
send(Erlang.term_to_binary(:polling))
|
408
435
|
@initialization_complete = true
|
@@ -492,6 +519,9 @@ module CloudI
|
|
492
519
|
callback(command, name, pattern, request_info, request,
|
493
520
|
request_timeout, priority, trans_id,
|
494
521
|
Erlang.binary_to_term(pid))
|
522
|
+
if @terminate
|
523
|
+
return false
|
524
|
+
end
|
495
525
|
when MESSAGE_RECV_ASYNC, MESSAGE_RETURN_SYNC
|
496
526
|
i += j; j = 4
|
497
527
|
response_info_size = data[i, j].unpack('L')[0]
|
@@ -615,35 +645,66 @@ module CloudI
|
|
615
645
|
return poll_request(timeout, true)
|
616
646
|
end
|
617
647
|
|
618
|
-
def
|
619
|
-
|
620
|
-
|
621
|
-
|
622
|
-
|
648
|
+
def shutdown(reason=nil)
|
649
|
+
if reason.nil?
|
650
|
+
reason = ''
|
651
|
+
end
|
652
|
+
send(Erlang.term_to_binary([:shutdown, reason]))
|
653
|
+
end
|
654
|
+
|
655
|
+
def self.text_pairs_parse(text)
|
656
|
+
pairs = {}
|
657
|
+
text_segments = text.split(NULL.chr)
|
658
|
+
(0...(text_segments.length)).step(2).each do |i|
|
659
|
+
value = pairs[text_segments[i]]
|
623
660
|
if value == nil
|
624
|
-
|
661
|
+
pairs[text_segments[i]] = text_segments[i + 1]
|
625
662
|
elsif value.kind_of?(Array)
|
626
|
-
value <<
|
663
|
+
value << text_segments[i + 1]
|
627
664
|
else
|
628
|
-
|
665
|
+
pairs[text_segments[i]] = [value, text_segments[i + 1]]
|
629
666
|
end
|
630
667
|
end
|
631
|
-
return
|
668
|
+
return pairs
|
632
669
|
end
|
633
670
|
|
634
|
-
def
|
635
|
-
|
671
|
+
def self.text_pairs_new(pairs, response)
|
672
|
+
text_stream = StringIO.new
|
673
|
+
pairs.each do |key, values|
|
674
|
+
if values.kind_of?(String)
|
675
|
+
text_stream.write "#{key}\0#{values}\0"
|
676
|
+
else
|
677
|
+
values.each do |value|
|
678
|
+
text_stream.write "#{key}\0#{value}\0"
|
679
|
+
end
|
680
|
+
end
|
681
|
+
end
|
682
|
+
text = text_stream.string
|
683
|
+
if response and text == ''
|
684
|
+
return "\0"
|
685
|
+
else
|
686
|
+
return text
|
687
|
+
end
|
688
|
+
end
|
689
|
+
|
690
|
+
def self.info_key_value_parse(info)
|
691
|
+
return text_pairs_parse(info)
|
692
|
+
end
|
693
|
+
|
694
|
+
def self.info_key_value_new(pairs, response = true)
|
695
|
+
return text_pairs_new(pairs, response)
|
636
696
|
end
|
637
697
|
|
638
698
|
def self.assert
|
639
|
-
raise
|
699
|
+
raise AssertionError unless yield # if $DEBUG
|
640
700
|
end
|
641
701
|
|
642
702
|
private :null_response
|
643
703
|
private :callback
|
644
704
|
private :handle_events
|
645
705
|
private :poll_request
|
646
|
-
|
706
|
+
private_class_method :text_pairs_parse
|
707
|
+
private_class_method :text_pairs_new
|
647
708
|
private
|
648
709
|
|
649
710
|
def send(data)
|
@@ -729,5 +790,11 @@ module CloudI
|
|
729
790
|
end
|
730
791
|
attr_reader :timeout
|
731
792
|
end
|
793
|
+
|
794
|
+
class AssertionError < Exception
|
795
|
+
end
|
796
|
+
|
797
|
+
class FatalError < Exception
|
798
|
+
end
|
732
799
|
end
|
733
800
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cloudi
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.0.1
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Michael Truog
|
@@ -10,27 +10,27 @@ bindir: bin
|
|
10
10
|
cert_chain:
|
11
11
|
- |
|
12
12
|
-----BEGIN CERTIFICATE-----
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
+
|
31
|
-
|
13
|
+
MIIDgDCCAmigAwIBAgIBATANBgkqhkiG9w0BAQUFADBDMRAwDgYDVQQDDAdtanRy
|
14
|
+
dW9nMRowGAYKCZImiZPyLGQBGRYKcHJvdG9ubWFpbDETMBEGCgmSJomT8ixkARkW
|
15
|
+
A2NvbTAeFw0xOTExMjkwMjM1MzJaFw0yMDExMjgwMjM1MzJaMEMxEDAOBgNVBAMM
|
16
|
+
B21qdHJ1b2cxGjAYBgoJkiaJk/IsZAEZFgpwcm90b25tYWlsMRMwEQYKCZImiZPy
|
17
|
+
LGQBGRYDY29tMIIBIjANBgkqhkiG9w0BAQEFAAOCAQ8AMIIBCgKCAQEA5Ar67eHx
|
18
|
+
R/cmFgsj58SkbsqEQWZOQ5GNO25IKuwjGHqznJXszXM1NW0YFLjgXjsXVdTXPeIC
|
19
|
+
CbkfoR8Yc1CEI6FYOWqhO0JqpPfYzt0s27o3Ua2x8j6n+31iRkbArIX2IVEjvBNd
|
20
|
+
UiTg6mG4Hc3KLqrBRDxZ+uyzqH/FEGPi5Ggak/E5xKwSdPWBPqDYKcze+suXxYO7
|
21
|
+
u38NwloGxpatQGgHgNGf83RfWDPaiYHGdPAsvUDzRFauxcG8sYRbmohc0TmE5+TQ
|
22
|
+
KMviZJNaNOaQkW1/twRQpo9PEv8bxEzEXT+tNOMEHrXgKv4+xEZYBM7D1FdP8gKj
|
23
|
+
wMXN22ZkLWzP8wIDAQABo38wfTAJBgNVHRMEAjAAMAsGA1UdDwQEAwIEsDAdBgNV
|
24
|
+
HQ4EFgQUT8+9UATmehNm5Lg1aBx8HLK7MZwwIQYDVR0RBBowGIEWbWp0cnVvZ0Bw
|
25
|
+
cm90b25tYWlsLmNvbTAhBgNVHRIEGjAYgRZtanRydW9nQHByb3Rvbm1haWwuY29t
|
26
|
+
MA0GCSqGSIb3DQEBBQUAA4IBAQANj/kudiIbxJaurULxhML4palEaqIeWCw24bxj
|
27
|
+
X72RvO4Ti6DDKpeccK0QF26tZCOw4ngxPPY0w1Zzq96iYMVPlKVBYVDCtjIkFNDt
|
28
|
+
Q/0hupNd8lLloTlIJ7jzHohfPtzUjsdC0d0cwXZLkjxhw67N7QPDxsCEa+jiHaWd
|
29
|
+
i+DxiISAPKf9ugw5kej0v2j15juXiK5pwKIDDGAFfv3WAFbJXleLoqdM87rbC/vq
|
30
|
+
KH+3FIhF8jYeRqq/8g4k6zsZZwRewPjObe3Wm4yEv0f0dxdQRuWcuE7s7z0Bss5J
|
31
|
+
YQYB6UQUREuP9rhSHKbAZd9CPR3XW+S7PkeQiWc8ceLFVsfK
|
32
32
|
-----END CERTIFICATE-----
|
33
|
-
date:
|
33
|
+
date: 2020-11-26 00:00:00.000000000 Z
|
34
34
|
dependencies:
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
36
|
name: erlang_rb
|
@@ -38,42 +38,42 @@ dependencies:
|
|
38
38
|
requirements:
|
39
39
|
- - "~>"
|
40
40
|
- !ruby/object:Gem::Version
|
41
|
-
version: '
|
41
|
+
version: '2.0'
|
42
42
|
- - ">="
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version:
|
44
|
+
version: 2.0.1
|
45
45
|
type: :runtime
|
46
46
|
prerelease: false
|
47
47
|
version_requirements: !ruby/object:Gem::Requirement
|
48
48
|
requirements:
|
49
49
|
- - "~>"
|
50
50
|
- !ruby/object:Gem::Version
|
51
|
-
version: '
|
51
|
+
version: '2.0'
|
52
52
|
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 2.0.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
56
|
name: erlang_rb
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '
|
61
|
+
version: '2.0'
|
62
62
|
- - ">="
|
63
63
|
- !ruby/object:Gem::Version
|
64
|
-
version:
|
64
|
+
version: 2.0.1
|
65
65
|
type: :development
|
66
66
|
prerelease: false
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
69
|
- - "~>"
|
70
70
|
- !ruby/object:Gem::Version
|
71
|
-
version: '
|
71
|
+
version: '2.0'
|
72
72
|
- - ">="
|
73
73
|
- !ruby/object:Gem::Version
|
74
|
-
version:
|
74
|
+
version: 2.0.1
|
75
75
|
description: Ruby CloudI API
|
76
|
-
email: mjtruog@
|
76
|
+
email: mjtruog@protonmail.com
|
77
77
|
executables: []
|
78
78
|
extensions: []
|
79
79
|
extra_rdoc_files:
|
@@ -81,7 +81,7 @@ extra_rdoc_files:
|
|
81
81
|
files:
|
82
82
|
- README.markdown
|
83
83
|
- lib/cloudi.rb
|
84
|
-
homepage:
|
84
|
+
homepage: https://cloudi.org
|
85
85
|
licenses:
|
86
86
|
- MIT
|
87
87
|
metadata: {}
|
@@ -100,8 +100,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
100
100
|
- !ruby/object:Gem::Version
|
101
101
|
version: '0'
|
102
102
|
requirements: []
|
103
|
-
|
104
|
-
rubygems_version: 2.6.11
|
103
|
+
rubygems_version: 3.1.2
|
105
104
|
signing_key:
|
106
105
|
specification_version: 4
|
107
106
|
summary: CloudI API
|
metadata.gz.sig
CHANGED
@@ -1,3 +1,2 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
��gA�A!Y,?V
|
1
|
+
�2>��ux.&P�&��zu(���P�u}�.�hٕ>O�v��c�����C`�� M*�;AƢ���xX��zi�&��
|
2
|
+
�FK��t�?[aH��:�|��d*Ҥ�sG�w�Yoj�9@@
|