flagger 2.0.7 → 2.0.8

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
  SHA256:
3
- metadata.gz: 3b8d3a71a3ebf846ddd02a461846ed8728343c1ede7fd8f1c0b2d4859148bc26
4
- data.tar.gz: 686e9d2fac07a968409965e3a8de3f5c333f63c5cfc4326897db74be0622e040
3
+ metadata.gz: 0fa76b1a7db4fbc5d5cb1ea633ad9b80c1be88a96a72981236f9269761df48b2
4
+ data.tar.gz: e1db140f820c1d686933012ccf025be0035c2dbeb11b2f605c8e3cb3624ded27
5
5
  SHA512:
6
- metadata.gz: 1f0fb7945ba04bcfa49a9f14d24e916a6f266ae88e622d75044d7f8e2d18bf3d8fd823cd40ca1ee33ee15888390c8be33cce499449dd53369d6d792e74f6d68a
7
- data.tar.gz: b45da70ff40c408561460229808464cc1afedd66a299d9766df95875d903d03f7ec6a80d24b3e4cb41e1e740c554cb2cf4f4c745839ea1808e5bfacbc6cd3fd5
6
+ metadata.gz: c03669a986cc241b36de63f1e329acf53843cda76ee946097cf4a593145da5b7511f60c4420e5eb34d9e19e04f3a637c96a46f00838fb655180b055aeb4e777f
7
+ data.tar.gz: ed7633985b7c68c9b83fed40772b759bd9c149ece3c3a7cfdaca1748296990a143befc8ce6a947e98014a2f8a065a8501c69e6344a9c72f9f23c96ae2a4016aa
data/lib/flagger/cloud.rb CHANGED
@@ -351,7 +351,7 @@ module FlaggerEnvironments
351
351
  end
352
352
  return_value = flag&.treatment(entity)
353
353
 
354
- if !return_value then
354
+ if return_value.nil? then
355
355
  return return_value
356
356
  end
357
357
 
@@ -361,10 +361,11 @@ module FlaggerEnvironments
361
361
  id: entity.id,
362
362
  treatment: return_value[:treatment].codename,
363
363
  method_called: 'get_treatment',
364
- eligible: return_value[:eligible]
364
+ eligible: return_value[:eligible],
365
+ time_exposed: Time.now.iso8601
365
366
  }
366
367
 
367
- return_value = return_value[:treatment].codename
368
+ return_value = return_value[:treatment].is_ghost ? flag&.off_treatment&.codename : return_value[:treatment].codename
368
369
 
369
370
  save_exposure(exposure)
370
371
 
@@ -386,7 +387,7 @@ module FlaggerEnvironments
386
387
  end
387
388
  return_value = flag&.payload(entity)
388
389
 
389
- if !return_value then
390
+ if return_value.nil? then
390
391
  return return_value
391
392
  end
392
393
 
@@ -396,10 +397,11 @@ module FlaggerEnvironments
396
397
  id: entity.id,
397
398
  treatment: return_value[:treatment].codename,
398
399
  method_called: 'get_payload',
399
- eligible: return_value[:eligible]
400
+ eligible: return_value[:eligible],
401
+ time_exposed: Time.now.iso8601
400
402
  }
401
403
 
402
- return_value = return_value[:treatment].payload
404
+ return_value = return_value[:treatment].is_ghost ? flag&.off_treatment&.payload : return_value[:treatment].payload
403
405
 
404
406
  save_exposure(exposure)
405
407
 
@@ -420,7 +422,7 @@ module FlaggerEnvironments
420
422
  end
421
423
  return_value = flag&.eligible?(entity)
422
424
 
423
- if !return_value then
425
+ if return_value.nil? then
424
426
  return return_value
425
427
  end
426
428
 
@@ -430,7 +432,8 @@ module FlaggerEnvironments
430
432
  id: entity.id,
431
433
  treatment: return_value[:treatment].codename,
432
434
  method_called: 'is_eligible',
433
- eligible: return_value[:eligible]
435
+ eligible: return_value[:eligible],
436
+ time_exposed: Time.now.iso8601
434
437
  }
435
438
 
436
439
  return_value = return_value[:eligible]
@@ -454,7 +457,7 @@ module FlaggerEnvironments
454
457
  end
455
458
  return_value = flag&.enabled?(entity)
456
459
 
457
- if !return_value then
460
+ if return_value.nil? then
458
461
  return return_value
459
462
  end
460
463
 
@@ -464,7 +467,8 @@ module FlaggerEnvironments
464
467
  id: entity.id,
465
468
  treatment: return_value[:treatment].codename,
466
469
  method_called: 'is_enabled',
467
- eligible: return_value[:eligible]
470
+ eligible: return_value[:eligible],
471
+ time_exposed: Time.now.iso8601
468
472
  }
469
473
 
470
474
  return_value = !return_value[:treatment].is_off_treatment
@@ -234,6 +234,7 @@ module FlaggerModels
234
234
  @populations = (json['populations'] || []).map {|population| Population.new(population)}
235
235
  @splits = Hash[(json['splits'] || []).map {|split| [split['treatment_id'], Split.new(split)]}]
236
236
  @treatments = Hash[(json['treatments'] || []).map {|treatment| [treatment['treatment_id'], Treatment.new(treatment)]}]
237
+ @off_treatment = json['treatments'].find {|treatment| treatment['is_off_treatment'] }
237
238
 
238
239
  @env_hash_key = env_hash_key
239
240
 
@@ -258,7 +259,7 @@ module FlaggerModels
258
259
 
259
260
  def eligible?(entity)
260
261
  if @flag_type == 'uncategorized' or !entity then
261
- false
262
+ nil
262
263
  else
263
264
  resolved_allocation(@env_hash_key, entity)
264
265
  end
@@ -266,7 +267,7 @@ module FlaggerModels
266
267
 
267
268
  def enabled?(entity)
268
269
  if @flag_type == 'uncategorized' or !entity then
269
- false
270
+ nil
270
271
  else
271
272
  resolved_allocation(@env_hash_key, entity)
272
273
  end
@@ -402,13 +403,14 @@ module FlaggerModels
402
403
  matches = @rules.all? {|rule| rule.match(entity)}
403
404
  if matches then
404
405
  samplingHashKey = "SAMPLING:control_#{flag.hash_key}:env_#{env_hash_key}:rule_set_#{@hash_key}:client_object_#{entity.type}_#{entity.id}"
405
- if Population.getHashedPercentage(samplingHashKey) <= @percentage and @percentage > 0 then
406
+ hashedPercentage = Population.getHashedPercentage(samplingHashKey)
407
+ if hashedPercentage <= @percentage and @percentage > 0 then
406
408
 
407
409
  allocationHashKey = "DISTRIBUTION:control_#{flag.hash_key}:env_#{env_hash_key}:client_object_#{entity.type}_#{entity.id}"
408
410
  allocationHashedPercentage = Population.getHashedPercentage(allocationHashKey)
409
411
 
410
412
  splits = if sticky then
411
- @universes[(@percentage * 100).floor - 1]
413
+ @universes[[(hashedPercentage * 100).floor - 1, 0].max]
412
414
  else
413
415
  flag.splits
414
416
  end
@@ -630,21 +632,21 @@ module FlaggerModels
630
632
  class Treatment < GatingInfoModel
631
633
  SCHEMA = Dry::Validation.Schema do
632
634
  required(:@treatment_id) { str? }
633
- required(:@is_control) { bool? }
635
+ required(:@is_ghost) { bool? }
634
636
  required(:@codename) { str? }
635
637
  required(:@is_off_treatment) { bool? }
636
638
  optional(:@payload) { str? | type?(Numeric) | bool? | array? | type?(Hash) }
637
639
  end
638
640
 
639
641
  attr_reader :treatment_id
640
- attr_reader :is_control
642
+ attr_reader :is_ghost
641
643
  attr_reader :codename
642
644
  attr_reader :is_off_treatment
643
645
  attr_reader :payload
644
646
 
645
647
  def initialize(json)
646
648
  @treatment_id = json['treatment_id']
647
- @is_control = json['is_control']
649
+ @is_ghost = json['is_ghost']
648
650
  @codename = json['codename']
649
651
  @is_off_treatment = json['is_off_treatment']
650
652
  @payload = json['payload']
@@ -1,4 +1,4 @@
1
1
  module FlaggerUtils
2
- VERSION = '2.0.7'
2
+ VERSION = '2.0.8'
3
3
  end
4
4
 
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: flagger
3
3
  version: !ruby/object:Gem::Version
4
- version: 2.0.7
4
+ version: 2.0.8
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-11-01 00:00:00.000000000 Z
11
+ date: 2018-12-07 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -127,7 +127,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
127
127
  version: '0'
128
128
  requirements: []
129
129
  rubyforge_project:
130
- rubygems_version: 2.7.7
130
+ rubygems_version: 2.7.6
131
131
  signing_key:
132
132
  specification_version: 4
133
133
  summary: Flagger Ruby SDK