test_track_rails_client 0.9.19 → 0.9.20

Sign up to get free protection for your applications and to get access to all the features.
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