airship-ruby 1.1.2 → 1.1.3

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
2
  SHA1:
3
- metadata.gz: ac94177d71469e596c7ffb61a4c5c1eee838f196
4
- data.tar.gz: 7d10788fa32c0e7cb90b797ef11dd77a3efd8a93
3
+ metadata.gz: 577e120e2dd12d0d8d355f21adfe8d2bf93145c7
4
+ data.tar.gz: 563b3918684b1be0d36dc40642a8257fd90fc40c
5
5
  SHA512:
6
- metadata.gz: 8b53ba8664daa2506ce385cf94465a18366bdfc3cb0cab132a457708ed81e46756878f358910765db60d08cdbb0d70163d39fd4167379eb5f4e06348860a9b23
7
- data.tar.gz: 0c759743a09c30112e1f01ea942d222330641cd5b6993fdf81725f0d8e9763a7ac0705d18eeeb7630324a4d732a383c20d66bf499d43e2fbb8af7375d582503a
6
+ metadata.gz: 94df167af112babb0fd21241767a8c4d21339b16e91dbbeea280517f082a25391fea23608979a79af2c1f7313cbe711f1d08d637325c82a82fae17119cd2443f
7
+ data.tar.gz: 6f20a23eabb5b79d0b5b0be0078605035197a58c7b3712b922770ea6bebbd843429e868fcbce12e5867ac0b53331fb15919fc3b1c279c43550ac84f2275d92c7
data/airship-ruby.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = "airship-ruby"
3
- s.version = "1.1.2"
3
+ s.version = "1.1.3"
4
4
  s.licenses = ["MIT"]
5
5
  s.summary = "Airship Ruby SDK"
6
6
  s.description = "Ruby SDK"
data/lib/airship-ruby.rb CHANGED
@@ -21,7 +21,7 @@ class Airship
21
21
  "type" => "boolean",
22
22
  },
23
23
  "id" => {
24
- "type" => "string",
24
+ "type" => ["string", "integer"],
25
25
  "maxLength" => 250,
26
26
  "minLength" => 1,
27
27
  },
@@ -64,7 +64,7 @@ class Airship
64
64
  "enum" => [true],
65
65
  },
66
66
  "id" => {
67
- "type" => "string",
67
+ "type" => ["string", "integer"],
68
68
  "maxLength" => 250,
69
69
  "minLength" => 1,
70
70
  },
@@ -99,7 +99,7 @@ class Airship
99
99
  "additionalProperties" => false,
100
100
  },
101
101
  },
102
- "required" => ["type", "id", "display_name"],
102
+ "required" => ["id", "display_name"],
103
103
  "additionalProperties" => false,
104
104
  }
105
105
 
@@ -177,7 +177,7 @@ class Airship
177
177
  @gate_stats_upload_batch_interval = 60
178
178
 
179
179
  @gate_stats_watcher = nil
180
- @gate_stats_last_task_scheduled_timestamp = Concurrent::AtomicFixnum.new(0)
180
+ @gate_stats_last_task_scheduled_timestamp = 0
181
181
 
182
182
  @gate_stats_uploader_tasks = []
183
183
 
@@ -215,7 +215,11 @@ class Airship
215
215
 
216
216
  object = self._clone_object(object)
217
217
 
218
- error = self._validate_nesting(object)
218
+ if object['type'].nil?
219
+ object['type'] = 'User'
220
+ end
221
+
222
+ error = self._validate_nesting(object) || self._maybe_transform_id(object)
219
223
 
220
224
  if !error.nil?
221
225
  puts error
@@ -247,6 +251,12 @@ class Airship
247
251
  stats['sdk_gate_control_short_name'] = control_short_name
248
252
  stats['sdk_gate_timestamp'] = sdk_gate_timestamp
249
253
  stats['sdk_gate_latency'] = sdk_gate_latency
254
+
255
+ stats['sdk_gate_value'] = is_enabled
256
+ stats['sdk_gate_variation'] = variation
257
+ stats['sdk_gate_eligibility'] = is_eligible
258
+ stats['sdk_gate_type'] = 'value'
259
+
250
260
  stats['sdk_version'] = sdk_version
251
261
  stats['sdk_id'] = @@sdk_id
252
262
 
@@ -267,7 +277,11 @@ class Airship
267
277
 
268
278
  object = self._clone_object(object)
269
279
 
270
- error = self._validate_nesting(object)
280
+ if object['type'].nil?
281
+ object['type'] = 'User'
282
+ end
283
+
284
+ error = self._validate_nesting(object) || self._maybe_transform_id(object)
271
285
 
272
286
  if !error.nil?
273
287
  puts error
@@ -299,6 +313,12 @@ class Airship
299
313
  stats['sdk_gate_control_short_name'] = control_short_name
300
314
  stats['sdk_gate_timestamp'] = sdk_gate_timestamp
301
315
  stats['sdk_gate_latency'] = sdk_gate_latency
316
+
317
+ stats['sdk_gate_value'] = is_enabled
318
+ stats['sdk_gate_variation'] = variation
319
+ stats['sdk_gate_eligibility'] = is_eligible
320
+ stats['sdk_gate_type'] = 'variation'
321
+
302
322
  stats['sdk_version'] = sdk_version
303
323
  stats['sdk_id'] = @@sdk_id
304
324
 
@@ -319,7 +339,11 @@ class Airship
319
339
 
320
340
  object = self._clone_object(object)
321
341
 
322
- error = self._validate_nesting(object)
342
+ if object['type'].nil?
343
+ object['type'] = 'User'
344
+ end
345
+
346
+ error = self._validate_nesting(object) || self._maybe_transform_id(object)
323
347
 
324
348
  if !error.nil?
325
349
  puts error
@@ -351,6 +375,12 @@ class Airship
351
375
  stats['sdk_gate_control_short_name'] = control_short_name
352
376
  stats['sdk_gate_timestamp'] = sdk_gate_timestamp
353
377
  stats['sdk_gate_latency'] = sdk_gate_latency
378
+
379
+ stats['sdk_gate_value'] = is_enabled
380
+ stats['sdk_gate_variation'] = variation
381
+ stats['sdk_gate_eligibility'] = is_eligible
382
+ stats['sdk_gate_type'] = 'eligibility'
383
+
354
384
  stats['sdk_version'] = sdk_version
355
385
  stats['sdk_id'] = @@sdk_id
356
386
 
@@ -409,6 +439,11 @@ class Airship
409
439
  end
410
440
  if response.status == 200
411
441
  gating_info = JSON.parse(response.body)
442
+
443
+ if gating_info['server_info'] == 'maintenance'
444
+ return
445
+ end
446
+
412
447
  gating_info_map = self._get_gating_info_map(gating_info)
413
448
  @gating_info = gating_info
414
449
  @gating_info_map = gating_info_map
@@ -424,10 +459,10 @@ class Airship
424
459
  def _create_watcher
425
460
  Concurrent::TimerTask.new(execution_interval: @gate_stats_upload_batch_interval, timeout_interval: 10) do |task|
426
461
  now = Time.now.utc.to_i
427
- if now - @gate_stats_last_task_scheduled_timestamp.value >= @gate_stats_upload_batch_interval
462
+ if now - @gate_stats_last_task_scheduled_timestamp >= @gate_stats_upload_batch_interval
428
463
  processed = self._process_batch(0)
429
464
  if processed
430
- @gate_stats_last_task_scheduled_timestamp.value = now
465
+ @gate_stats_last_task_scheduled_timestamp = now
431
466
  end
432
467
  end
433
468
  end
@@ -482,7 +517,7 @@ class Airship
482
517
  processed = self._process_batch(@max_gate_stats_batch_size - 1, gate_stats)
483
518
  if processed
484
519
  now = Time.now.utc.to_i
485
- @gate_stats_last_task_scheduled_timestamp.value = now
520
+ @gate_stats_last_task_scheduled_timestamp = now
486
521
  end
487
522
  end
488
523
 
@@ -605,6 +640,7 @@ class Airship
605
640
  return false
606
641
  end
607
642
  elsif attribute_type == OBJECT_ATTRIBUTE_TYPE_DATETIME
643
+ # to_time.to_i respects timezones
608
644
  unix_timestamp = nil
609
645
  begin
610
646
  unix_timestamp = DateTime.parse(attribute_val).to_time.to_i
@@ -655,6 +691,7 @@ class Airship
655
691
  end
656
692
 
657
693
  sampled_inside_base_population = false
694
+ is_eligible = false
658
695
  control_info['rule_sets'].each do |rule_set|
659
696
  if sampled_inside_base_population
660
697
  break
@@ -672,6 +709,7 @@ class Airship
672
709
  end
673
710
 
674
711
  if satisfies_all_rules
712
+ is_eligible = true
675
713
  hash_key = "SAMPLING:control_#{control_info['id']}:env_#{@gating_info['env']['id']}:rule_set_#{rule_set['id']}:client_object_#{object['type']}_#{object['id']}"
676
714
  if Airship.get_hashed_value(hash_key) <= rule_set['sampling_percentage']
677
715
  sampled_inside_base_population = true
@@ -683,7 +721,7 @@ class Airship
683
721
  return {
684
722
  'is_enabled' => false,
685
723
  'variation' => nil,
686
- 'is_eligible' => false,
724
+ 'is_eligible' => is_eligible,
687
725
  }
688
726
  end
689
727
 
@@ -883,4 +921,31 @@ class Airship
883
921
  return 'A group cannot be nested inside another group'
884
922
  end
885
923
  end
924
+
925
+ def _maybe_transform_id(object)
926
+ if object['id'].is_a?(Integer)
927
+ id_str = object['id'].to_s
928
+ if id_str.length > 250
929
+ return 'Integer id must have 250 digits or less'
930
+ end
931
+ object['id'] = id_str
932
+ end
933
+
934
+ group = nil
935
+ if !object['group'].nil?
936
+ group = object['group']
937
+ end
938
+
939
+ if !group.nil?
940
+ if group['id'].is_a?(Integer)
941
+ id_str = group['id'].to_s
942
+ if id_str.length > 250
943
+ return 'Integer id must have 250 digits or less'
944
+ end
945
+ group['id'] = id_str
946
+ end
947
+ end
948
+
949
+ nil
950
+ end
886
951
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: airship-ruby
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.1.2
4
+ version: 1.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Airship Dev Team
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-02-23 00:00:00.000000000 Z
11
+ date: 2018-02-27 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday