cloudi 1.3.2 → 1.3.3

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