test_track_rails_client 0.9.19 → 0.9.20

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,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- ZjBiNDc0ODg2MTNiMjFjYjdjMzg5Y2EyOGFlNjk3MTNjN2I4ZWY2OA==
4
+ YjMxNjA4MWVlMjgwYjM3Yjg2MjlmMGRhNDU5MTRjZmYzZDEyMGZhYw==
5
5
  data.tar.gz: !binary |-
6
- ZmVkMzc4NmNjNDgwZDM2OTE1YTZjOGJhYzM5ZmM4MTVmOTI1OWMwYg==
6
+ YzM5NTQ3YTEwODQ4MDJiMjczYWI1ZDI5MmYwM2ZkNzVjMWYzOWFhNg==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- YzNhNjg4ZmJjNTE0NWY1MjgxMjY2YzM0ZmE1ZGI4NDYzNmIyNzc5MTYxMzhk
10
- OGZkYmI5YTVjMDc1N2VkNjllNDZiNzE0MjNlMDgyNGU1ZDExZDQ3MGQyMjE4
11
- NzM0ZmM5MDk2MGQ3OWJlYzRhNjRhOTVmZDY3NGE3NmEyMWMwMGY=
9
+ ZTM5NzZhZjA2YzZjYjI1MzdiYWMxYTEzM2RkZTBlNzg0NjYxNTcyYjU1M2Ey
10
+ N2JmNzNlYTQxYmRlMTA2NzAzMTJkNWI0NmZlMTQ1YTlhNWExZDdlYzJjN2Uz
11
+ OTEzMjljMDQ0NGI2NDg3NTNkYTc3NWU1MDVmYTBlMDcwM2ViYjc=
12
12
  data.tar.gz: !binary |-
13
- N2E1MGUxYzc4YzRjNjZiMjU1OWUyZWVlYWNiNzEzOTZkYzBmNzJhOWNiZTc4
14
- OTMxY2U2YTU2MmJmZmJjZTAxNjg4YWI2ZjEwYTUzZDE1NzRlYjc2N2Q1NzBh
15
- ZjQ4NmY5OWU1ZDBmYjM4NjZmNjFjNzc1OTI3ZjhhMmUyYTg3ODM=
13
+ ZWU4ZDZjNjg2ODUyNjA5ODc1OGIzODA5NzA3NzAzYzJjNjBhMjQxMTA2ZDcw
14
+ Mjg0ODI2ODE2MDBlOGQ0ZjA4ZjEwZDI2ZjJlNjU5Yzc2N2QwM2VhZjFkOWFi
15
+ OGU3N2UwZGE3ZDMwYTU1YzJmNjQzMmFiMDY4YmE2Mjg4MjYzZmU=
@@ -6,11 +6,7 @@ class TestTrack::Fake::SplitRegistry
6
6
  end
7
7
 
8
8
  def to_h
9
- if test_track_schema_yml.present?
10
- test_track_schema_yml[:splits]
11
- else
12
- {}
13
- end
9
+ @to_h ||= splits_with_deterministic_weights
14
10
  end
15
11
 
16
12
  def splits
@@ -21,6 +17,14 @@ class TestTrack::Fake::SplitRegistry
21
17
 
22
18
  private
23
19
 
20
+ def split_hash
21
+ if test_track_schema_yml.present?
22
+ test_track_schema_yml[:splits]
23
+ else
24
+ {}
25
+ end
26
+ end
27
+
24
28
  def test_track_schema_yml
25
29
  unless instance_variable_defined?(:@test_track_schema_yml)
26
30
  @test_track_schema_yml = _test_track_schema_yml
@@ -29,8 +33,25 @@ class TestTrack::Fake::SplitRegistry
29
33
  end
30
34
 
31
35
  def _test_track_schema_yml
32
- YAML.load_file("#{Rails.root}/db/test_track_schema.yml").with_indifferent_access
36
+ YAML.load_file(test_track_schema_yml_path).with_indifferent_access
33
37
  rescue
34
38
  nil
35
39
  end
40
+
41
+ def test_track_schema_yml_path
42
+ ENV["TEST_TRACK_SCHEMA_FILE_PATH"] || "#{Rails.root}/db/test_track_schema.yml"
43
+ end
44
+
45
+ def splits_with_deterministic_weights
46
+ split_hash.each_with_object({}) do |(split_name, weighting_registry), split_registry|
47
+ default_variant = weighting_registry.keys.sort.first
48
+
49
+ adjusted_weights = { default_variant => 100 }
50
+ weighting_registry.except(default_variant).keys.each do |variant|
51
+ adjusted_weights[variant] = 0
52
+ end
53
+
54
+ split_registry[split_name] = adjusted_weights
55
+ end
56
+ end
36
57
  end
@@ -1,5 +1,3 @@
1
- require 'digest'
2
-
3
1
  class TestTrack::Fake::Visitor
4
2
  attr_reader :id
5
3
 
@@ -21,21 +19,16 @@ class TestTrack::Fake::Visitor
21
19
  @assignments ||= _assignments
22
20
  end
23
21
 
22
+ def split_registry
23
+ TestTrack::Fake::SplitRegistry.instance.to_h
24
+ end
25
+
24
26
  private
25
27
 
26
28
  def _assignments
27
- TestTrack::Fake::SplitRegistry.instance.splits.map do |split|
28
- index = hash_fixnum(split.name) % split.registry.keys.size
29
- variant = split.registry.keys[index]
30
- Assignment.new(split.name, variant, false, "the_context")
29
+ split_registry.keys.map do |split_name|
30
+ variant = TestTrack::VariantCalculator.new(visitor: self, split_name: split_name).variant
31
+ Assignment.new(split_name, variant, false, "the_context")
31
32
  end
32
33
  end
33
-
34
- def hash_fixnum(split_name)
35
- split_visitor_hash(split_name).slice(0, 8).to_i(16)
36
- end
37
-
38
- def split_visitor_hash(split_name)
39
- Digest::MD5.new.update(split_name.to_s + id.to_s).hexdigest
40
- end
41
34
  end
@@ -1,13 +1,12 @@
1
1
  module TestTrackRailsClient::AssignmentHelper
2
- def stub_test_track_assignments(assignment_registry) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
2
+ def stub_test_track_assignments(assignment_registry) # rubocop:disable Metrics/AbcSize
3
3
  raise "Cannot stub test track assignments when TestTrack is enabled" if TestTrack.enabled?
4
4
 
5
- split_registry = {}
5
+ split_registry = TestTrack::Fake::SplitRegistry.instance.to_h.dup
6
6
  assignments = []
7
7
 
8
8
  assignment_registry.each do |split_name, variant|
9
- assignment_registry[split_name] = variant.to_s
10
- split_registry[split_name] = { variant => 100 }
9
+ split_registry[split_name] = { variant => 100 } unless split_registry[split_name]
11
10
  assignments << { split_name: split_name.to_s, variant: variant.to_s, unsynced: false }
12
11
  end
13
12
 
@@ -1,3 +1,3 @@
1
1
  module TestTrackRailsClient
2
- VERSION = "0.9.19" # rubocop:disable Style/MutableConstant
2
+ VERSION = "0.9.20" # rubocop:disable Style/MutableConstant
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: test_track_rails_client
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.9.19
4
+ version: 0.9.20
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan O'Neill
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2017-02-22 00:00:00.000000000 Z
16
+ date: 2017-03-04 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: rails