cloudi 1.7.2 → 2.0.0

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: 916554780735fd65981d4280ba0c3cfddfa36324
4
- data.tar.gz: 69d7a32a85c80fc720618db3f4913191c0950dd4
2
+ SHA256:
3
+ metadata.gz: 0471a083e2e81711a27b2efdd1779820cb687f50ea9b1cc8019cbad439c16b30
4
+ data.tar.gz: aa4a82edf6d025917958595bbc69cee9a72bfb04e4cd2f435f3aa47513b5795c
5
5
  SHA512:
6
- metadata.gz: 7a31931154e385f0f018d25bdf44a09e911fa52db3f34cbcb6e19539188ab704f4a337e124f8fb51c4378523c709d3f1846ff116cef82251a115c079c91ab1e0
7
- data.tar.gz: 9ec7578b5581a491c7e930aa64c4c8fae3703d781acaf64c79574f759acd67b24deac2cf9084fac2b027ba84edc4573f30beda3a5f39f8223a607d9febb45719
6
+ metadata.gz: 47603319fafe80c8af0ad85bc7e0189663d43d488d72439647b63653dd481474b9d5ff0a21d3eb9d6ba42ac770efe80418e51e69a7673f372f3db5bab7924e98
7
+ data.tar.gz: 724f8075fee5e275fed0d317604907b0e67e2ff51bd5f0be1e07f513fe85a15ca407db64f1d4bdbf38550c1d9c22ba75562987848d932ba13b54872db8d018be
Binary file
data.tar.gz.sig CHANGED
@@ -1,3 +1 @@
1
- Zga2ϕ)5�%d�g['�^�~��鞏
2
- ���P>!�11a��������u�$u��D[�+Qy�|�q�k��gτ�z��4��E��[�0�|�<R���N�yl"���9̬� �&�I-���D��x�Qr��R��>?��b%T��}�a��R��~j�i;���
3
- �Ǯ �!w�T�#��Ɉ~OD5 nwc�Q����|��4-�2~�G�h�:�C��
1
+ ?��S���0��X����g���t(Y5U:�c)�|!�tZ`����j$��VxFeN��"��EOcqy%i�f��q��ߝ��I��A�|���9�}�!<�rO���qx�_ɃiV4n�ҭoP}��L�bSv-!$$�/H6|�����헙�YN;���b��y��m�G�d�Nn�Mq����|�����^j��Rh��(㫀4N?e?/2�۱� ���o�c �7��_�Ä<N�7��
@@ -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
@@ -62,7 +63,7 @@ module CloudI
62
63
  @terminate = false
63
64
  @size = buffer_size_str.to_i
64
65
  @callbacks = Hash.new
65
- @timeout_terminate = 1000 # TIMEOUT_TERMINATE_MIN
66
+ @timeout_terminate = 10 # TIMEOUT_TERMINATE_MIN
66
67
  send(Erlang.term_to_binary(:init))
67
68
  poll_request(nil, false)
68
69
  end
@@ -253,6 +254,7 @@ module CloudI
253
254
  function = function_queue.shift
254
255
  function_queue.push(function)
255
256
  end
257
+ return_null_response = false
256
258
  case command
257
259
  when MESSAGE_SEND_ASYNC
258
260
  begin
@@ -272,29 +274,31 @@ module CloudI
272
274
  if not response.kind_of?(String)
273
275
  response = ''
274
276
  end
275
- rescue InvalidInputException => e
276
- raise e
277
277
  rescue MessageDecodingException => e
278
- raise e
278
+ @terminate = true
279
+ return_null_response = true
279
280
  rescue TerminateException => e
280
- raise e
281
+ return_null_response = true
281
282
  rescue ReturnAsyncException
282
283
  return
283
- rescue ForwardAsyncException
284
- return
285
284
  rescue ReturnSyncException => e
285
+ @terminate = true
286
286
  $stderr.puts e.message
287
287
  $stderr.puts e.backtrace
288
- API.assert{false}
288
+ return
289
+ rescue ForwardAsyncException
289
290
  return
290
291
  rescue ForwardSyncException => e
292
+ @terminate = true
291
293
  $stderr.puts e.message
292
294
  $stderr.puts e.backtrace
293
- API.assert{false}
294
295
  return
295
296
  rescue
297
+ return_null_response = true
296
298
  $stderr.puts $!.message
297
299
  $stderr.puts $!.backtrace
300
+ end
301
+ if return_null_response
298
302
  response_info = ''
299
303
  response = ''
300
304
  end
@@ -321,29 +325,31 @@ module CloudI
321
325
  if not response.kind_of?(String)
322
326
  response = ''
323
327
  end
324
- rescue InvalidInputException => e
325
- raise e
326
328
  rescue MessageDecodingException => e
327
- raise e
329
+ @terminate = true
330
+ return_null_response = true
328
331
  rescue TerminateException => e
329
- raise e
332
+ return_null_response = true
330
333
  rescue ReturnSyncException
331
334
  return
332
- rescue ForwardSyncException
333
- return
334
335
  rescue ReturnAsyncException => e
336
+ @terminate = true
335
337
  $stderr.puts e.message
336
338
  $stderr.puts e.backtrace
337
- API.assert{false}
339
+ return
340
+ rescue ForwardSyncException
338
341
  return
339
342
  rescue ForwardAsyncException => e
343
+ @terminate = true
340
344
  $stderr.puts e.message
341
345
  $stderr.puts e.backtrace
342
- API.assert{false}
343
346
  return
344
347
  rescue
348
+ return_null_response = true
345
349
  $stderr.puts $!.message
346
350
  $stderr.puts $!.backtrace
351
+ end
352
+ if return_null_response
347
353
  response_info = ''
348
354
  response = ''
349
355
  end
@@ -402,7 +408,11 @@ module CloudI
402
408
 
403
409
  def poll_request(timeout, external)
404
410
  if @terminate
405
- return false
411
+ if external
412
+ return false
413
+ else
414
+ raise TerminateException.new(@timeout_terminate)
415
+ end
406
416
  elsif external and not @initialization_complete
407
417
  send(Erlang.term_to_binary(:polling))
408
418
  @initialization_complete = true
@@ -492,6 +502,9 @@ module CloudI
492
502
  callback(command, name, pattern, request_info, request,
493
503
  request_timeout, priority, trans_id,
494
504
  Erlang.binary_to_term(pid))
505
+ if @terminate
506
+ return false
507
+ end
495
508
  when MESSAGE_RECV_ASYNC, MESSAGE_RETURN_SYNC
496
509
  i += j; j = 4
497
510
  response_info_size = data[i, j].unpack('L')[0]
@@ -615,24 +628,54 @@ module CloudI
615
628
  return poll_request(timeout, true)
616
629
  end
617
630
 
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]]
631
+ def shutdown(reason=nil)
632
+ if reason.nil?
633
+ reason = ''
634
+ end
635
+ send(Erlang.term_to_binary([:shutdown, reason]))
636
+ end
637
+
638
+ def self.text_pairs_parse(text)
639
+ pairs = {}
640
+ text_segments = text.split(NULL.chr)
641
+ (0...(text_segments.length)).step(2).each do |i|
642
+ value = pairs[text_segments[i]]
623
643
  if value == nil
624
- result[data[i]] = data[i + 1]
644
+ pairs[text_segments[i]] = text_segments[i + 1]
625
645
  elsif value.kind_of?(Array)
626
- value << data[i + 1]
646
+ value << text_segments[i + 1]
627
647
  else
628
- result[data[i]] = [value, data[i + 1]]
648
+ pairs[text_segments[i]] = [value, text_segments[i + 1]]
629
649
  end
630
650
  end
631
- return result
651
+ return pairs
652
+ end
653
+
654
+ def self.text_pairs_new(pairs, response)
655
+ text_stream = StringIO.new
656
+ pairs.each do |key, values|
657
+ if values.kind_of?(String)
658
+ text_stream.write "#{key}\0#{values}\0"
659
+ else
660
+ values.each do |value|
661
+ text_stream.write "#{key}\0#{value}\0"
662
+ end
663
+ end
664
+ end
665
+ text = text_stream.string
666
+ if response and text == ''
667
+ return "\0"
668
+ else
669
+ return text
670
+ end
671
+ end
672
+
673
+ def self.info_key_value_parse(info)
674
+ return text_pairs_parse(info)
632
675
  end
633
676
 
634
- def info_key_value_parse(message_info)
635
- return text_key_value_parse(message_info)
677
+ def self.info_key_value_new(pairs, response = true)
678
+ return text_pairs_new(pairs, response)
636
679
  end
637
680
 
638
681
  def self.assert
@@ -643,7 +686,8 @@ module CloudI
643
686
  private :callback
644
687
  private :handle_events
645
688
  private :poll_request
646
- private :text_key_value_parse
689
+ private_class_method :text_pairs_parse
690
+ private_class_method :text_pairs_new
647
691
  private
648
692
 
649
693
  def send(data)
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.2
4
+ version: 2.0.0
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: 2017-09-12 00:00:00.000000000 Z
33
+ date: 2020-06-04 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.2
44
+ version: 2.0.0
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.2
54
+ version: 2.0.0
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.2
64
+ version: 2.0.0
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.2
74
+ version: 2.0.0
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
Binary file