airship-ruby 1.1.2 → 1.1.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.
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