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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: c69109f6c72629dacf32ac289cc1d0fab9b33137
4
- data.tar.gz: 371220b7bd79dece478d612221cd7ad4018bc712
2
+ SHA256:
3
+ metadata.gz: 017a451955dbea2edcffbee125fb2c91ddfbe3df71e8eccfc170466048766940
4
+ data.tar.gz: 5e3a49115f6fab85d2ec77077aa0a145bc5314358be030d7be8514bb50028e66
5
5
  SHA512:
6
- metadata.gz: 8cd17f308816b1b69a94e94f76df9b5bf27668c25f4ca5d48c43b711e8df70caef57af10eda13d2e6f17e8b2a4385252a966ee4919d1835e8a0f3e090790d8f3
7
- data.tar.gz: 8235c839ff81032fd6dbd57fb3eb51a5d19a99803a5e58922b5ba2378d43023486ae706458f1e0e44081b7bdd5beca06b3dfef2862aff0b34da809b5f15fa191
6
+ metadata.gz: 2ea5c45dd5a058b448b2ef3d26ac026de9d9ee14779c54342dcb6997ec8efa0592f0e4e5ec5f5a10f408b00a30e660c9ad5fb13bfe5e1e5d5d29dc586145aee3
7
+ data.tar.gz: adcbd1247a877d483435fb5ebe9350f3ab66bdda07f6972c6d5c79014a10c1bd8893f9be92ab3e495e19e35b71cb34ab67a1ef638436abe271aab248fe1044b1
Binary file
data.tar.gz.sig CHANGED
Binary file
@@ -4,14 +4,14 @@
4
4
  [![Build Status](https://travis-ci.org/CloudI/cloudi_api_ruby.png)](https://travis-ci.org/CloudI/cloudi_api_ruby)
5
5
  [![Gem Package Version](https://img.shields.io/gem/v/cloudi.svg?maxAge=2592000)](https://rubygems.org/gems/cloudi)
6
6
 
7
- Ruby [CloudI API](http://cloudi.org/api.html#1_Intro)
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 [at] gmail (dot) com)
14
+ Michael Truog (mjtruog at protonmail dot com)
15
15
 
16
16
  License
17
17
  -------
@@ -4,7 +4,7 @@
4
4
  #
5
5
  # MIT License
6
6
  #
7
- # Copyright (c) 2011-2017 Michael Truog <mjtruog at gmail dot com>
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 = 1000 # TIMEOUT_TERMINATE_MIN
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.new()
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.new()
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.new()
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.new()
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
- raise e
279
+ @terminate = true
280
+ return_null_response = true
279
281
  rescue TerminateException => e
280
- raise e
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
- API.assert{false}
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
- raise e
338
+ @terminate = true
339
+ return_null_response = true
328
340
  rescue TerminateException => e
329
- raise e
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
- API.assert{false}
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
- return false
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 text_key_value_parse(text)
619
- result = {}
620
- data = text.split(NULL.chr)
621
- (0...(data.length)).step(2).each do |i|
622
- value = result[data[i]]
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
- result[data[i]] = data[i + 1]
661
+ pairs[text_segments[i]] = text_segments[i + 1]
625
662
  elsif value.kind_of?(Array)
626
- value << data[i + 1]
663
+ value << text_segments[i + 1]
627
664
  else
628
- result[data[i]] = [value, data[i + 1]]
665
+ pairs[text_segments[i]] = [value, text_segments[i + 1]]
629
666
  end
630
667
  end
631
- return result
668
+ return pairs
632
669
  end
633
670
 
634
- def info_key_value_parse(message_info)
635
- return text_key_value_parse(message_info)
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 'Assertion failed !' unless yield # if $DEBUG
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
- private :text_key_value_parse
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: 1.7.3
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
- MIIDbDCCAlSgAwIBAgIBATANBgkqhkiG9w0BAQUFADA+MRAwDgYDVQQDDAdtanRy
14
- dW9nMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20w
15
- HhcNMTcwOTEzMDYwMzAwWhcNMTgwOTEzMDYwMzAwWjA+MRAwDgYDVQQDDAdtanRy
16
- dW9nMRUwEwYKCZImiZPyLGQBGRYFZ21haWwxEzARBgoJkiaJk/IsZAEZFgNjb20w
17
- ggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDPlZFk7xAzMnUiNr/uHQV1
18
- xPPNZmqevvZgfY9SMS2C7c4kGTNBePRvmr3ihTW8yFTEXNRdCO3Ibm9zp7YFmlzz
19
- l7lyxHnEsrmPDmb5Ry+gIfrJ2M7lHqhbtvk3+5n5VB4npxEwXX3rsFWixO/8IOdX
20
- s9fuALCwdRbWwSBSgp+8SGHIl16G7iTxD7moHNsqW4i8ryyRr05jnhxJBSCcZShE
21
- Oa//izbIxWRvBk2Ibn/YlwZ2SrJXJ/DWxFkeXOcEFRQYy0vTn577GK0f4NTzoab5
22
- G5FKKk0oMtl5W+kaF6+qd7XkotSMCC4jG9dU17G9HkbHfjPKS4mkbMnlYIXlN5ZJ
23
- AgMBAAGjdTBzMAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQWBBSkVYwB
24
- WjkE89b0x4Kq7W1UH82QODAcBgNVHREEFTATgRFtanRydW9nQGdtYWlsLmNvbTAc
25
- BgNVHRIEFTATgRFtanRydW9nQGdtYWlsLmNvbTANBgkqhkiG9w0BAQUFAAOCAQEA
26
- YO8ZXcsUY/3m6/JFCTqL9qL2wR4zfcYwo/uYDo2S7FR/EGsy1M+qLJB8V13AR2Li
27
- d/2mLm+SnhAgR32fMOaM58pbyFhlGaaEIs11xYywwbEbVe3eRxunsaJBcJxYeRZ+
28
- V+c3ebJejEGUNJ4dRSB6WvWr9zl7FozsWBNSYJoWDMfkC2B2zHo08va5DRSActEn
29
- 27W/V+TnP3ONYvcoDcOr7sNOhNISlpgB5kDcl7stP85hm99IVK7vZi8t2jX/8GTT
30
- +H4JAL4xk2aIYYf48338kxyZ8y9BNgp8cGbMEDtRSCgJnYk820Yt/fhM2DZtCbBL
31
- tOEdFrZvpA23/sCoGvunHw==
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: 2018-02-26 00:00:00.000000000 Z
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: '1.7'
41
+ version: '2.0'
42
42
  - - ">="
43
43
  - !ruby/object:Gem::Version
44
- version: 1.7.3
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: '1.7'
51
+ version: '2.0'
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.7.3
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: '1.7'
61
+ version: '2.0'
62
62
  - - ">="
63
63
  - !ruby/object:Gem::Version
64
- version: 1.7.3
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: '1.7'
71
+ version: '2.0'
72
72
  - - ">="
73
73
  - !ruby/object:Gem::Version
74
- version: 1.7.3
74
+ version: 2.0.1
75
75
  description: Ruby CloudI API
76
- email: mjtruog@gmail.com
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: http://cloudi.org
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
- rubyforge_project:
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
- 3��;��~������>�iaA�*0F\=�&���rX+ 7dFȃ�����5Xu���
2
- ��+��QUa�3S�OUy���y����-�T�1�G�'���9�!���\��)��ñev����7�DH}�<��P�>Â)�5D�fW��=��������x����|s��$�Qo����a {UX5j��?[*������wDͤ���Q�N*F��oI%�ڴӗKl_�8�yN
3
- ��gA�A!Y,?V
1
+ 2>��ux.&P�&��zu(���Pu}�.�hٕ>O�v��c�����C`�� M*�;AƢ���xX��zi�&��
2
+ �FK��t�?[aH��:�|��d*Ҥ�sGw�Yoj9@@