cloudi 1.7.3 → 2.0.1

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
- 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@@