cloudi 1.3.2 → 1.3.3

Sign up to get free protection for your applications and to get access to all the features.
Files changed (5) hide show
  1. data.tar.gz.sig +3 -1
  2. data/README.markdown +2 -0
  3. data/lib/cloudi.rb +220 -145
  4. metadata +8 -8
  5. metadata.gz.sig +0 -0
data.tar.gz.sig CHANGED
@@ -1 +1,3 @@
1
- 1LȅsH����?/�"E1�3#������{v������]x=���[��|�N��[��YI9c���s��`9)O�� kc���5p>����W*�g6����i��1C�1�90-�/����e�1�dk28�"b2�o"��&g9�:�u$�@$��I�U��exW4�����=�F���s��<�=f�=%�����>��Ct�'�@һ4}�:�V_��B�A���ll�B8��_��_��:��c�:�Q
1
+ w�%��T�� B2u=�D5��KA��dr �;Ȃ��N= �) �����.�%M$)��G
2
+ �8FцM
3
+ ��,�����97�Oc�:Z �]�,
data/README.markdown CHANGED
@@ -5,3 +5,5 @@
5
5
 
6
6
  Ruby [CloudI API](http://cloudi.org/api.html#1_Intro)
7
7
 
8
+ Available as a [Ruby gem at `https://rubygems.org/gems/cloudi`](https://rubygems.org/gems/cloudi).
9
+
data/lib/cloudi.rb CHANGED
@@ -73,11 +73,22 @@ module CloudI
73
73
  raise InvalidInputException
74
74
  end
75
75
  @initialization_complete = false
76
+ @terminate = false
76
77
  @size = buffer_size_str.to_i
77
78
  @callbacks = Hash.new
78
- send(term_to_binary(:init))
79
+ @timeout_terminate = 1000 # TIMEOUT_TERMINATE_MIN
80
+ send(Erlang.term_to_binary(:init))
79
81
  poll_request(false)
80
82
  end
83
+ attr_reader :process_index
84
+ attr_reader :process_count
85
+ attr_reader :process_count_max
86
+ attr_reader :process_count_min
87
+ attr_reader :prefix
88
+ attr_reader :timeout_initialize
89
+ attr_reader :timeout_async
90
+ attr_reader :timeout_sync
91
+ attr_reader :timeout_terminate
81
92
 
82
93
  def self.thread_count
83
94
  s = getenv('CLOUDI_API_INIT_THREAD_COUNT')
@@ -92,7 +103,12 @@ module CloudI
92
103
  else
93
104
  value.push(function)
94
105
  end
95
- send(term_to_binary([:subscribe, pattern]))
106
+ send(Erlang.term_to_binary([:subscribe, pattern]))
107
+ end
108
+
109
+ def subscribe_count(pattern)
110
+ send(Erlang.term_to_binary([:subscribe_count, pattern]))
111
+ return poll_request(false)
96
112
  end
97
113
 
98
114
  def unsubscribe(pattern)
@@ -103,60 +119,60 @@ module CloudI
103
119
  if value.empty?
104
120
  @callbacks.delete(key)
105
121
  end
106
- send(term_to_binary([:unsubscribe, pattern]))
122
+ send(Erlang.term_to_binary([:unsubscribe, pattern]))
107
123
  end
108
124
 
109
125
  def send_async(name, request,
110
126
  timeout=nil, request_info=nil, priority=nil)
111
127
  if timeout.nil?
112
- timeout = @timeoutAsync
128
+ timeout = @timeout_async
113
129
  end
114
130
  if request_info.nil?
115
131
  request_info = ''
116
132
  end
117
133
  if priority.nil?
118
- priority = @priorityDefault
134
+ priority = @priority_default
119
135
  end
120
- send(term_to_binary([:send_async, name,
121
- OtpErlangBinary.new(request_info),
122
- OtpErlangBinary.new(request),
123
- timeout, priority]))
136
+ send(Erlang.term_to_binary([:send_async, name,
137
+ OtpErlangBinary.new(request_info),
138
+ OtpErlangBinary.new(request),
139
+ timeout, priority]))
124
140
  return poll_request(false)
125
141
  end
126
142
 
127
143
  def send_sync(name, request,
128
144
  timeout=nil, request_info=nil, priority=nil)
129
145
  if timeout.nil?
130
- timeout = @timeoutSync
146
+ timeout = @timeout_sync
131
147
  end
132
148
  if request_info.nil?
133
149
  request_info = ''
134
150
  end
135
151
  if priority.nil?
136
- priority = @priorityDefault
152
+ priority = @priority_default
137
153
  end
138
- send(term_to_binary([:send_sync, name,
139
- OtpErlangBinary.new(request_info),
140
- OtpErlangBinary.new(request),
141
- timeout, priority]))
154
+ send(Erlang.term_to_binary([:send_sync, name,
155
+ OtpErlangBinary.new(request_info),
156
+ OtpErlangBinary.new(request),
157
+ timeout, priority]))
142
158
  return poll_request(false)
143
159
  end
144
160
 
145
161
  def mcast_async(name, request,
146
162
  timeout=nil, request_info=nil, priority=nil)
147
163
  if timeout.nil?
148
- timeout = @timeoutAsync
164
+ timeout = @timeout_async
149
165
  end
150
166
  if request_info.nil?
151
167
  request_info = ''
152
168
  end
153
169
  if priority.nil?
154
- priority = @priorityDefault
170
+ priority = @priority_default
155
171
  end
156
- send(term_to_binary([:mcast_async, name,
157
- OtpErlangBinary.new(request_info),
158
- OtpErlangBinary.new(request),
159
- timeout, priority]))
172
+ send(Erlang.term_to_binary([:mcast_async, name,
173
+ OtpErlangBinary.new(request_info),
174
+ OtpErlangBinary.new(request),
175
+ timeout, priority]))
160
176
  return poll_request(false)
161
177
  end
162
178
 
@@ -174,7 +190,7 @@ module CloudI
174
190
 
175
191
  def forward_async(name, request_info, request,
176
192
  timeout, priority, trans_id, pid)
177
- if @requestTimeoutAdjustment
193
+ if @request_timeout_adjustment
178
194
  if timeout == @request_timeout
179
195
  elapsed = [0,
180
196
  ((Time.now - @request_timer) * 1000.0).floor].max
@@ -185,17 +201,17 @@ module CloudI
185
201
  end
186
202
  end
187
203
  end
188
- send(term_to_binary([:forward_async, name,
189
- OtpErlangBinary.new(request_info),
190
- OtpErlangBinary.new(request),
191
- timeout, priority,
192
- OtpErlangBinary.new(trans_id), pid]))
204
+ send(Erlang.term_to_binary([:forward_async, name,
205
+ OtpErlangBinary.new(request_info),
206
+ OtpErlangBinary.new(request),
207
+ timeout, priority,
208
+ OtpErlangBinary.new(trans_id), pid]))
193
209
  raise ForwardAsyncException.new()
194
210
  end
195
211
 
196
212
  def forward_sync(name, request_info, request,
197
213
  timeout, priority, trans_id, pid)
198
- if @requestTimeoutAdjustment
214
+ if @request_timeout_adjustment
199
215
  if timeout == @request_timeout
200
216
  elapsed = [0,
201
217
  ((Time.now - @request_timer) * 1000.0).floor].max
@@ -206,11 +222,11 @@ module CloudI
206
222
  end
207
223
  end
208
224
  end
209
- send(term_to_binary([:forward_sync, name,
210
- OtpErlangBinary.new(request_info),
211
- OtpErlangBinary.new(request),
212
- timeout, priority,
213
- OtpErlangBinary.new(trans_id), pid]))
225
+ send(Erlang.term_to_binary([:forward_sync, name,
226
+ OtpErlangBinary.new(request_info),
227
+ OtpErlangBinary.new(request),
228
+ timeout, priority,
229
+ OtpErlangBinary.new(trans_id), pid]))
214
230
  raise ForwardSyncException.new()
215
231
  end
216
232
 
@@ -228,7 +244,7 @@ module CloudI
228
244
 
229
245
  def return_async(name, pattern, response_info, response,
230
246
  timeout, trans_id, pid)
231
- if @requestTimeoutAdjustment
247
+ if @request_timeout_adjustment
232
248
  if timeout == @request_timeout
233
249
  elapsed = [0,
234
250
  ((Time.now - @request_timer) * 1000.0).floor].max
@@ -241,17 +257,17 @@ module CloudI
241
257
  end
242
258
  end
243
259
  end
244
- send(term_to_binary([:return_async, name, pattern,
245
- OtpErlangBinary.new(response_info),
246
- OtpErlangBinary.new(response),
247
- timeout,
248
- OtpErlangBinary.new(trans_id), pid]))
260
+ send(Erlang.term_to_binary([:return_async, name, pattern,
261
+ OtpErlangBinary.new(response_info),
262
+ OtpErlangBinary.new(response),
263
+ timeout,
264
+ OtpErlangBinary.new(trans_id), pid]))
249
265
  raise ReturnAsyncException.new()
250
266
  end
251
267
 
252
268
  def return_sync(name, pattern, response_info, response,
253
269
  timeout, trans_id, pid)
254
- if @requestTimeoutAdjustment
270
+ if @request_timeout_adjustment
255
271
  if timeout == @request_timeout
256
272
  elapsed = [0,
257
273
  ((Time.now - @request_timer) * 1000.0).floor].max
@@ -264,58 +280,31 @@ module CloudI
264
280
  end
265
281
  end
266
282
  end
267
- send(term_to_binary([:return_sync, name, pattern,
268
- OtpErlangBinary.new(response_info),
269
- OtpErlangBinary.new(response),
270
- timeout,
271
- OtpErlangBinary.new(trans_id), pid]))
283
+ send(Erlang.term_to_binary([:return_sync, name, pattern,
284
+ OtpErlangBinary.new(response_info),
285
+ OtpErlangBinary.new(response),
286
+ timeout,
287
+ OtpErlangBinary.new(trans_id), pid]))
272
288
  raise ReturnSyncException.new()
273
289
  end
274
290
 
275
291
  def recv_async(timeout=nil, trans_id=nil, consume=true)
276
292
  if timeout.nil?
277
- timeout = @timeoutSync
293
+ timeout = @timeout_sync
278
294
  end
279
295
  if trans_id.nil?
280
296
  trans_id = 0.chr * 16
281
297
  end
282
- send(term_to_binary([:recv_async, timeout,
283
- OtpErlangBinary.new(trans_id), consume]))
298
+ send(Erlang.term_to_binary([:recv_async, timeout,
299
+ OtpErlangBinary.new(trans_id),
300
+ consume]))
284
301
  return poll_request(false)
285
302
  end
286
303
 
287
- def process_index
288
- return @processIndex
289
- end
290
-
291
- def process_count
292
- return @processCount
293
- end
294
-
295
- def process_count_max
296
- return @processCountMax
297
- end
298
-
299
- def process_count_min
300
- return @processCountMin
301
- end
302
-
303
- def prefix
304
- return @prefix
305
- end
306
-
307
- def timeout_async
308
- return @timeoutAsync
309
- end
310
-
311
- def timeout_sync
312
- return @timeoutSync
313
- end
314
-
315
304
  def callback(command, name, pattern, request_info, request,
316
305
  timeout, priority, trans_id, pid)
317
306
  request_time_start = nil
318
- if @requestTimeoutAdjustment
307
+ if @request_timeout_adjustment
319
308
  @request_timer = Time.now
320
309
  @request_timeout = timeout
321
310
  end
@@ -415,9 +404,48 @@ module CloudI
415
404
  end
416
405
  end
417
406
 
407
+ def handle_events(external, data, data_size, i, command=nil)
408
+ if command.nil?
409
+ if i > data_size
410
+ raise MessageDecodingException
411
+ end
412
+ j = 4
413
+ command = data[i, j].unpack('L')[0]
414
+ else
415
+ j = 4
416
+ end
417
+ loop do
418
+ case command
419
+ when MESSAGE_TERM
420
+ @terminate = true
421
+ if external
422
+ return false
423
+ else
424
+ raise TerminateException.new(@timeout_terminate)
425
+ end
426
+ when MESSAGE_REINIT
427
+ i += j; j = 4
428
+ @process_count = data[i, j].unpack('L')[0]
429
+ i += j
430
+ when MESSAGE_KEEPALIVE
431
+ send(Erlang.term_to_binary(:keepalive))
432
+ i += j
433
+ end
434
+ if i > data_size
435
+ raise MessageDecodingException
436
+ elsif i == data_size
437
+ return true
438
+ end
439
+ j = 4
440
+ command = data[i, j].unpack('L')[0]
441
+ end
442
+ end
443
+
418
444
  def poll_request(external)
419
- if external and not @initialization_complete
420
- send(term_to_binary(:polling))
445
+ if @terminate
446
+ return nil
447
+ elsif external and not @initialization_complete
448
+ send(Erlang.term_to_binary(:polling))
421
449
  @initialization_complete = true
422
450
  end
423
451
 
@@ -433,110 +461,144 @@ module CloudI
433
461
  end
434
462
 
435
463
  data = recv('')
436
- if data.bytesize == 0
464
+ data_size = data.bytesize
465
+ if data_size == 0
437
466
  return nil
438
467
  end
468
+ i = 0; j = 4
439
469
 
440
470
  loop do
441
- i = 0; j = 4
442
471
  command = data[i, j].unpack('L')[0]
443
472
  case command
444
473
  when MESSAGE_INIT
445
474
  i += j; j = 4 + 4 + 4 + 4 + 4
446
475
  tmp = data[i, j].unpack('LLLLL')
447
- @processIndex = tmp[0]
448
- @processCount = tmp[1]
449
- @processCountMax = tmp[2]
450
- @processCountMin = tmp[3]
451
- prefixSize = tmp[4]
452
- i += j; j = prefixSize + 4 + 4 + 1 + 1
453
- tmp = data[i, j].unpack("Z#{prefixSize}LLcC")
476
+ @process_index = tmp[0]
477
+ @process_count = tmp[1]
478
+ @process_count_max = tmp[2]
479
+ @process_count_min = tmp[3]
480
+ prefix_size = tmp[4]
481
+ i += j; j = prefix_size + 4 + 4 + 4 + 4 + 1 + 1
482
+ tmp = data[i, j].unpack("Z#{prefix_size}LLLLcC")
454
483
  @prefix = tmp[0]
455
- @timeoutAsync = tmp[1]
456
- @timeoutSync = tmp[2]
457
- @priorityDefault = tmp[3]
458
- @requestTimeoutAdjustment = (tmp[4] != 0)
484
+ @timeout_initialize = tmp[1]
485
+ @timeout_async = tmp[2]
486
+ @timeout_sync = tmp[3]
487
+ @timeout_terminate = tmp[4]
488
+ @priority_default = tmp[5]
489
+ @request_timeout_adjustment = (tmp[6] != 0)
459
490
  i += j
460
- if i != data.length
461
- raise MessageDecodingException
491
+ if i != data_size
492
+ API.assert{external == false}
493
+ handle_events(external, data, data_size, i)
462
494
  end
463
495
  return
464
496
  when MESSAGE_SEND_ASYNC, MESSAGE_SEND_SYNC
465
497
  i += j; j = 4
466
- nameSize = data[i, j].unpack('L')[0]
467
- i += j; j = nameSize + 4
468
- tmp = data[i, j].unpack("Z#{nameSize}L")
498
+ name_size = data[i, j].unpack('L')[0]
499
+ i += j; j = name_size + 4
500
+ tmp = data[i, j].unpack("Z#{name_size}L")
469
501
  name = tmp[0]
470
- patternSize = tmp[1]
471
- i += j; j = patternSize + 4
472
- tmp = data[i, j].unpack("Z#{patternSize}L")
502
+ pattern_size = tmp[1]
503
+ i += j; j = pattern_size + 4
504
+ tmp = data[i, j].unpack("Z#{pattern_size}L")
473
505
  pattern = tmp[0]
474
- requestInfoSize = tmp[1]
475
- i += j; j = requestInfoSize + 1 + 4
476
- tmp = data[i, j].unpack("a#{requestInfoSize}xL")
506
+ request_info_size = tmp[1]
507
+ i += j; j = request_info_size + 1 + 4
508
+ tmp = data[i, j].unpack("a#{request_info_size}xL")
477
509
  request_info = tmp[0]
478
- requestSize = tmp[1]
479
- i += j; j = requestSize + 1 + 4 + 1 + 16 + 4
480
- tmp = data[i, j].unpack("a#{requestSize}xLca16L")
510
+ request_size = tmp[1]
511
+ i += j; j = request_size + 1 + 4 + 1 + 16 + 4
512
+ tmp = data[i, j].unpack("a#{request_size}xLca16L")
481
513
  request = tmp[0]
482
514
  timeout = tmp[1]
483
515
  priority = tmp[2]
484
516
  trans_id = tmp[3]
485
- pidSize = tmp[4]
486
- i += j; j = pidSize
487
- pid = data[i, j].unpack("a#{pidSize}")[0]
517
+ pid_size = tmp[4]
518
+ i += j; j = pid_size
519
+ pid = data[i, j].unpack("a#{pid_size}")[0]
488
520
  i += j
489
- if i != data.length
490
- raise MessageDecodingException
521
+ if i != data_size
522
+ API.assert{external == true}
523
+ if not handle_events(external, data, data_size, i)
524
+ return nil
525
+ end
491
526
  end
492
527
  data.clear()
493
528
  callback(command, name, pattern, request_info, request,
494
- timeout, priority, trans_id, binary_to_term(pid))
529
+ timeout, priority, trans_id,
530
+ Erlang.binary_to_term(pid))
495
531
  when MESSAGE_RECV_ASYNC, MESSAGE_RETURN_SYNC
496
532
  i += j; j = 4
497
- responseInfoSize = data[i, j].unpack('L')[0]
498
- i += j; j = responseInfoSize + 1 + 4
499
- tmp = data[i, j].unpack("a#{responseInfoSize}xL")
533
+ response_info_size = data[i, j].unpack('L')[0]
534
+ i += j; j = response_info_size + 1 + 4
535
+ tmp = data[i, j].unpack("a#{response_info_size}xL")
500
536
  response_info = tmp[0]
501
- responseSize = tmp[1]
502
- i += j; j = responseSize + 1 + 16
503
- tmp = data[i, j].unpack("a#{responseSize}xa16")
537
+ response_size = tmp[1]
538
+ i += j; j = response_size + 1 + 16
539
+ tmp = data[i, j].unpack("a#{response_size}xa16")
504
540
  response = tmp[0]
505
541
  trans_id = tmp[1]
506
542
  i += j
507
- if i != data.length
508
- raise MessageDecodingException
543
+ if i != data_size
544
+ API.assert{external == false}
545
+ handle_events(external, data, data_size, i)
509
546
  end
510
547
  return [response_info, response, trans_id]
511
548
  when MESSAGE_RETURN_ASYNC
512
549
  i += j; j = 16
513
550
  trans_id = data[i, j].unpack('a16')[0]
514
551
  i += j
515
- if i != data.length
516
- raise MessageDecodingException
552
+ if i != data_size
553
+ API.assert{external == false}
554
+ handle_events(external, data, data_size, i)
517
555
  end
518
556
  return trans_id
519
557
  when MESSAGE_RETURNS_ASYNC
520
558
  i += j; j = 4
521
- transIdCount = data[i, j].unpack('L')[0]
522
- i += j; j = 16 * transIdCount
523
- transIdList = data[i, j].unpack('a16' * transIdCount)
559
+ trans_id_count = data[i, j].unpack('L')[0]
560
+ i += j; j = 16 * trans_id_count
561
+ trans_ids = data[i, j].unpack('a16' * trans_id_count)
524
562
  i += j
525
- if i != data.length
526
- raise MessageDecodingException
563
+ if i != data_size
564
+ API.assert{external == false}
565
+ handle_events(external, data, data_size, i)
527
566
  end
528
- return transIdList
529
- when MESSAGE_KEEPALIVE
530
- send(term_to_binary(:keepalive))
567
+ return trans_ids
568
+ when MESSAGE_SUBSCRIBE_COUNT
569
+ i += j; j = 4
570
+ count = data[i, j].unpack('L')[0]
531
571
  i += j
532
- if i < data.length
572
+ if i != data_size
573
+ API.assert{external == false}
574
+ handle_events(external, data, data_size, i)
575
+ end
576
+ return count
577
+ when MESSAGE_TERM
578
+ if not handle_events(external, data, data_size, i, command)
579
+ return nil
580
+ end
581
+ API.assert{false}
582
+ when MESSAGE_REINIT
583
+ i += j; j = 4
584
+ @process_count = data[i, j].unpack('L')[0]
585
+ i += j; j = 4
586
+ if i == data_size
587
+ #
588
+ elsif i < data_size
589
+ next
590
+ else
533
591
  raise MessageDecodingException
534
592
  end
535
- data.slice!(0, i)
536
- if data.length > 0
537
- if IO.select([@s], nil, nil, 0).nil?
538
- next
539
- end
593
+ when MESSAGE_KEEPALIVE
594
+ send(Erlang.term_to_binary(:keepalive))
595
+ i += j; j = 4
596
+ if i == data_size
597
+ #
598
+ elsif i < data_size
599
+ next
600
+ else
601
+ raise MessageDecodingException
540
602
  end
541
603
  else
542
604
  raise MessageDecodingException
@@ -554,9 +616,11 @@ module CloudI
554
616
  end
555
617
 
556
618
  data = recv(data)
557
- if data.bytesize == 0
619
+ data_size = data.bytesize
620
+ if data_size == 0
558
621
  return nil
559
622
  end
623
+ i = 0; j = 4
560
624
  end
561
625
  end
562
626
 
@@ -593,6 +657,7 @@ module CloudI
593
657
  end
594
658
 
595
659
  private :callback
660
+ private :handle_events
596
661
  private :poll_request
597
662
  private :binary_key_value_parse
598
663
  private
@@ -631,14 +696,17 @@ module CloudI
631
696
  data
632
697
  end
633
698
 
634
- MESSAGE_INIT = 1
635
- MESSAGE_SEND_ASYNC = 2
636
- MESSAGE_SEND_SYNC = 3
637
- MESSAGE_RECV_ASYNC = 4
638
- MESSAGE_RETURN_ASYNC = 5
639
- MESSAGE_RETURN_SYNC = 6
640
- MESSAGE_RETURNS_ASYNC = 7
641
- MESSAGE_KEEPALIVE = 8
699
+ MESSAGE_INIT = 1
700
+ MESSAGE_SEND_ASYNC = 2
701
+ MESSAGE_SEND_SYNC = 3
702
+ MESSAGE_RECV_ASYNC = 4
703
+ MESSAGE_RETURN_ASYNC = 5
704
+ MESSAGE_RETURN_SYNC = 6
705
+ MESSAGE_RETURNS_ASYNC = 7
706
+ MESSAGE_KEEPALIVE = 8
707
+ MESSAGE_REINIT = 9
708
+ MESSAGE_SUBSCRIBE_COUNT = 10
709
+ MESSAGE_TERM = 11
642
710
 
643
711
  NULL = 0
644
712
 
@@ -664,5 +732,12 @@ module CloudI
664
732
 
665
733
  class MessageDecodingException < Exception
666
734
  end
735
+
736
+ class TerminateException < Exception
737
+ def initialize(timeout)
738
+ @timeout = timeout
739
+ end
740
+ attr_reader :timeout
741
+ end
667
742
  end
668
743
 
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.3.2
4
+ version: 1.3.3
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -50,11 +50,11 @@ cert_chain:
50
50
  -----END CERTIFICATE-----
51
51
 
52
52
  '
53
- date: 2014-06-24 00:00:00.000000000 Z
53
+ date: 2014-09-30 00:00:00.000000000 Z
54
54
  dependencies:
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: erlang_rb
57
- requirement: &11610740 !ruby/object:Gem::Requirement
57
+ requirement: &15927380 !ruby/object:Gem::Requirement
58
58
  none: false
59
59
  requirements:
60
60
  - - ~>
@@ -62,13 +62,13 @@ dependencies:
62
62
  version: '1.3'
63
63
  - - ! '>='
64
64
  - !ruby/object:Gem::Version
65
- version: 1.3.2
65
+ version: 1.3.3
66
66
  type: :runtime
67
67
  prerelease: false
68
- version_requirements: *11610740
68
+ version_requirements: *15927380
69
69
  - !ruby/object:Gem::Dependency
70
70
  name: erlang_rb
71
- requirement: &11608600 !ruby/object:Gem::Requirement
71
+ requirement: &15925360 !ruby/object:Gem::Requirement
72
72
  none: false
73
73
  requirements:
74
74
  - - ~>
@@ -76,10 +76,10 @@ dependencies:
76
76
  version: '1.3'
77
77
  - - ! '>='
78
78
  - !ruby/object:Gem::Version
79
- version: 1.3.2
79
+ version: 1.3.3
80
80
  type: :development
81
81
  prerelease: false
82
- version_requirements: *11608600
82
+ version_requirements: *15925360
83
83
  description: Ruby CloudI API
84
84
  email: mjtruog@gmail.com
85
85
  executables: []
metadata.gz.sig CHANGED
Binary file