flagger 2.0.7 → 2.0.8

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