test_track_rails_client 4.0.0.alpha26 → 4.0.0.alpha27
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 +4 -4
- data/README.md +18 -0
- data/Rakefile +1 -1
- data/app/controllers/tt/api/{v1/application_controller.rb → application_controller.rb} +1 -1
- data/app/controllers/tt/api/v1/assignments_controller.rb +1 -1
- data/app/controllers/tt/api/v1/identifier_types_controller.rb +1 -1
- data/app/controllers/tt/api/v1/identifier_visitors_controller.rb +1 -1
- data/app/controllers/tt/api/v1/identifiers_controller.rb +1 -1
- data/app/controllers/tt/api/v1/resets_controller.rb +1 -1
- data/app/controllers/tt/api/v1/split_configs_controller.rb +1 -1
- data/app/controllers/tt/api/v1/split_details_controller.rb +1 -1
- data/app/controllers/tt/api/v1/visitor_details_controller.rb +1 -1
- data/app/controllers/tt/api/v1/visitors_controller.rb +1 -1
- data/app/models/test_track/ab_configuration.rb +2 -2
- data/app/models/test_track/fake/split_registry.rb +11 -6
- data/app/models/test_track/fake/visitor.rb +2 -1
- data/app/models/test_track/fake_server.rb +0 -4
- data/app/models/test_track/misconfiguration_notifier.rb +27 -8
- data/app/models/test_track/notify_assignment_job.rb +23 -2
- data/app/models/test_track/remote/split_registry.rb +34 -24
- data/app/models/test_track/session.rb +1 -1
- data/app/models/test_track/variant_calculator.rb +2 -1
- data/app/models/test_track/vary_dsl.rb +2 -2
- data/app/models/test_track/visitor.rb +7 -1
- data/config/routes.rb +0 -2
- data/lib/test_track.rb +23 -3
- data/lib/test_track_rails_client/assignment_helper.rb +5 -3
- data/lib/test_track_rails_client/engine.rb +11 -2
- data/lib/test_track_rails_client/version.rb +1 -1
- data/vendor/bin/testtrack-cli/testtrack.darwin +0 -0
- data/vendor/bin/testtrack-cli/testtrack.linux +0 -0
- metadata +3 -33
- data/app/controllers/tt/api/v1/split_registries_controller.rb +0 -5
- data/app/views/tt/api/v1/split_registries/show.json.jbuilder +0 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 25d6337d0be0cd4ab5f7bb3206ac57abcf4751a9
|
4
|
+
data.tar.gz: 607743ae3522be134d2842a65e854e0ea698efd1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f3580d4074be4b74748b652abb5559b7147fb26bc1e65e81ee012a3524df94452d68d7283440f56a2b566e597507febff35bed687e34383a6c7653a4a8e33398
|
7
|
+
data.tar.gz: 940014bb4d6506d5f1dabf26924a5d76239b7924f153565170a3444862a8e40651fe5a7962769030c150feef132cc43dfe701cbe14ddc220ae431772b75062b2
|
data/README.md
CHANGED
@@ -369,6 +369,24 @@ mixpanel.init('YOUR MIXPANEL TOKEN', {
|
|
369
369
|
});
|
370
370
|
```
|
371
371
|
|
372
|
+
## Misconfiguration notifications
|
373
|
+
|
374
|
+
TestTrack provides hooks to easily integrate with your preferred error catching tool to receive notifications when we detect a misconfiguration in split usage. TestTrack has built-in support for `Airbrake`. By default, if you've included the `airbrake` gem, TestTrack will use `Airbrake` as a misconfiguration notifier backend. If you wish to use another tool, you can set the `misconfiguration_notifier` attribute on `TestTrack` with your custom client. You should do this in a Rails initializer.
|
375
|
+
|
376
|
+
```ruby
|
377
|
+
# config/initializers/test_track.rb
|
378
|
+
TestTrack.misconfiguration_notifier = MyCustomMisconfigurationNotifier.new
|
379
|
+
```
|
380
|
+
|
381
|
+
Your client must implement the following methods:
|
382
|
+
|
383
|
+
```ruby
|
384
|
+
# Called when a Split misconfiguration is detected
|
385
|
+
#
|
386
|
+
# @param string message describing the misconfiguration
|
387
|
+
def notify(message)
|
388
|
+
```
|
389
|
+
|
372
390
|
## Upgrading
|
373
391
|
|
374
392
|
### From 3.0 to 4.0
|
data/Rakefile
CHANGED
@@ -33,7 +33,7 @@ task :vendor_deps do
|
|
33
33
|
sh 'cp', 'bower_components/test_track_js_client/dist/testTrack.bundle.min.js', 'app/assets/javascripts'
|
34
34
|
|
35
35
|
# Download testtrack-cli
|
36
|
-
TEST_TRACK_CLI_VERSION = '
|
36
|
+
TEST_TRACK_CLI_VERSION = 'v1.0.0'.freeze
|
37
37
|
|
38
38
|
FileUtils.module_eval do
|
39
39
|
mkdir_p 'vendor/bin/testtrack-cli'
|
@@ -42,7 +42,7 @@ class TestTrack::ABConfiguration
|
|
42
42
|
end
|
43
43
|
|
44
44
|
def split
|
45
|
-
split_registry && split_registry[split_name]
|
45
|
+
split_registry && split_registry['splits'][split_name] && split_registry['splits'][split_name]['weights']
|
46
46
|
end
|
47
47
|
|
48
48
|
def split_variants
|
@@ -58,6 +58,6 @@ class TestTrack::ABConfiguration
|
|
58
58
|
end
|
59
59
|
|
60
60
|
def misconfiguration_notifier
|
61
|
-
@misconfiguration_notifier ||= TestTrack
|
61
|
+
@misconfiguration_notifier ||= TestTrack.misconfiguration_notifier
|
62
62
|
end
|
63
63
|
end
|
@@ -5,13 +5,17 @@ class TestTrack::Fake::SplitRegistry
|
|
5
5
|
@instance ||= new
|
6
6
|
end
|
7
7
|
|
8
|
+
def self.reset!
|
9
|
+
@instance = nil
|
10
|
+
end
|
11
|
+
|
8
12
|
def to_h
|
9
|
-
@to_h ||=
|
13
|
+
@to_h ||= split_registry_with_deterministic_weights
|
10
14
|
end
|
11
15
|
|
12
16
|
def splits
|
13
|
-
to_h.map do |
|
14
|
-
Split.new(
|
17
|
+
to_h['splits'].map do |split_name, registry|
|
18
|
+
Split.new(split_name, registry['weights'])
|
15
19
|
end
|
16
20
|
end
|
17
21
|
|
@@ -63,8 +67,8 @@ class TestTrack::Fake::SplitRegistry
|
|
63
67
|
ENV["TEST_TRACK_SCHEMA_FILE_PATH"] || Rails.root.join('db', 'test_track_schema.yml').to_s
|
64
68
|
end
|
65
69
|
|
66
|
-
def
|
67
|
-
split_hash.each_with_object({}) do |(split_name, weighting_registry),
|
70
|
+
def split_registry_with_deterministic_weights
|
71
|
+
splits = split_hash.each_with_object({}) do |(split_name, weighting_registry), result|
|
68
72
|
default_variant = weighting_registry.keys.sort.first
|
69
73
|
|
70
74
|
adjusted_weights = { default_variant => 100 }
|
@@ -72,7 +76,8 @@ class TestTrack::Fake::SplitRegistry
|
|
72
76
|
adjusted_weights[variant] = 0
|
73
77
|
end
|
74
78
|
|
75
|
-
|
79
|
+
result[split_name] = { 'weights' => adjusted_weights, 'feature_gate' => split_name.end_with?('_enabled') }
|
76
80
|
end
|
81
|
+
{ 'splits' => splits, 'experience_sampling_weight' => 1 }
|
77
82
|
end
|
78
83
|
end
|
@@ -9,6 +9,7 @@ class TestTrack::Fake::Visitor
|
|
9
9
|
|
10
10
|
def self.reset!
|
11
11
|
@instance = nil
|
12
|
+
TestTrack::Fake::SplitRegistry.reset!
|
12
13
|
end
|
13
14
|
|
14
15
|
def initialize(id)
|
@@ -26,7 +27,7 @@ class TestTrack::Fake::Visitor
|
|
26
27
|
private
|
27
28
|
|
28
29
|
def _assignments
|
29
|
-
split_registry.keys.map do |split_name|
|
30
|
+
split_registry['splits'].keys.map do |split_name|
|
30
31
|
variant = TestTrack::VariantCalculator.new(visitor: self, split_name: split_name).variant
|
31
32
|
Assignment.new(split_name, variant, false, "the_context")
|
32
33
|
end
|
@@ -1,13 +1,32 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
module TestTrack::MisconfigurationNotifier
|
2
|
+
class Wrapper
|
3
|
+
attr_reader :underlying
|
4
4
|
|
5
|
-
|
5
|
+
def initialize(underlying = Null.new)
|
6
|
+
@underlying = underlying
|
7
|
+
end
|
8
|
+
|
9
|
+
def notify(msg)
|
10
|
+
raise msg if Rails.env.development?
|
11
|
+
|
12
|
+
Rails.logger.error(msg)
|
13
|
+
|
14
|
+
underlying.notify(msg)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
class Null
|
19
|
+
def notify(_); end
|
20
|
+
end
|
6
21
|
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
Airbrake.
|
22
|
+
class Airbrake
|
23
|
+
def notify(msg)
|
24
|
+
raise "Aibrake was configured but not found" unless defined?(::Airbrake)
|
25
|
+
if ::Airbrake.respond_to?(:notify_or_ignore)
|
26
|
+
::Airbrake.notify_or_ignore(StandardError.new, error_message: msg)
|
27
|
+
else
|
28
|
+
::Airbrake.notify(StandardError.new, error_message: msg)
|
29
|
+
end
|
11
30
|
end
|
12
31
|
end
|
13
32
|
end
|
@@ -12,7 +12,7 @@ class TestTrack::NotifyAssignmentJob
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def perform
|
15
|
-
tracking_result =
|
15
|
+
tracking_result = maybe_track
|
16
16
|
unless assignment.feature_gate?
|
17
17
|
TestTrack::Remote::AssignmentEvent.create!(
|
18
18
|
visitor_id: visitor_id,
|
@@ -25,9 +25,30 @@ class TestTrack::NotifyAssignmentJob
|
|
25
25
|
|
26
26
|
private
|
27
27
|
|
28
|
-
def
|
28
|
+
def maybe_track
|
29
29
|
return "failure" unless TestTrack.enabled?
|
30
|
+
return "success" if skip_analytics_event?
|
30
31
|
result = TestTrack.analytics.track(TestTrack::AnalyticsEvent.new(visitor_id, assignment))
|
31
32
|
result ? "success" : "failure"
|
32
33
|
end
|
34
|
+
|
35
|
+
def skip_analytics_event?
|
36
|
+
assignment.feature_gate? && skip_experience_event?
|
37
|
+
end
|
38
|
+
|
39
|
+
def skip_experience_event?
|
40
|
+
skip_all_experience_events? || !sample_event?
|
41
|
+
end
|
42
|
+
|
43
|
+
def skip_all_experience_events?
|
44
|
+
experience_sampling_weight.zero?
|
45
|
+
end
|
46
|
+
|
47
|
+
def experience_sampling_weight
|
48
|
+
@experience_sampling_weight ||= TestTrack::Remote::SplitRegistry.experience_sampling_weight
|
49
|
+
end
|
50
|
+
|
51
|
+
def sample_event?
|
52
|
+
Kernel.rand(experience_sampling_weight).zero?
|
53
|
+
end
|
33
54
|
end
|
@@ -3,35 +3,45 @@ class TestTrack::Remote::SplitRegistry
|
|
3
3
|
|
4
4
|
CACHE_KEY = 'test_track_split_registry'.freeze
|
5
5
|
|
6
|
-
collection_path '/api/
|
6
|
+
collection_path '/api/v2/split_registry'
|
7
7
|
|
8
|
-
|
9
|
-
|
10
|
-
|
8
|
+
class << self
|
9
|
+
def fake_instance_attributes(_)
|
10
|
+
::TestTrack::Fake::SplitRegistry.instance.to_h
|
11
|
+
end
|
11
12
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
13
|
+
def instance
|
14
|
+
# TODO: FakeableHer needs to make this faking a feature of `get`
|
15
|
+
if faked?
|
16
|
+
new(fake_instance_attributes(nil))
|
17
|
+
else
|
18
|
+
get('/api/v2/split_registry')
|
19
|
+
end
|
18
20
|
end
|
19
|
-
end
|
20
21
|
|
21
|
-
|
22
|
-
|
23
|
-
|
22
|
+
def reset
|
23
|
+
Rails.cache.delete(CACHE_KEY)
|
24
|
+
end
|
25
|
+
|
26
|
+
def to_hash
|
27
|
+
if faked?
|
28
|
+
instance.attributes.freeze
|
29
|
+
else
|
30
|
+
fetch_cache { instance.attributes }.freeze
|
31
|
+
end
|
32
|
+
rescue *TestTrack::SERVER_ERRORS => e
|
33
|
+
Rails.logger.error "TestTrack failed to load split registry. #{e}"
|
34
|
+
fetch_cache { nil } # cache the missing registry for 5 seconds if we can't get one
|
35
|
+
end
|
36
|
+
|
37
|
+
def experience_sampling_weight
|
38
|
+
to_hash.fetch('experience_sampling_weight')
|
39
|
+
end
|
40
|
+
|
41
|
+
private
|
24
42
|
|
25
|
-
|
26
|
-
|
27
|
-
instance.attributes.freeze
|
28
|
-
else
|
29
|
-
Rails.cache.fetch(CACHE_KEY, expires_in: 5.seconds) {
|
30
|
-
instance.attributes
|
31
|
-
}.freeze
|
43
|
+
def fetch_cache(&block)
|
44
|
+
Rails.cache.fetch(CACHE_KEY, expires_in: 5.seconds, &block)
|
32
45
|
end
|
33
|
-
rescue *TestTrack::SERVER_ERRORS => e
|
34
|
-
Rails.logger.error "TestTrack failed to load split registry. #{e}"
|
35
|
-
nil # if we can't get a split registry
|
36
46
|
end
|
37
47
|
end
|
@@ -31,7 +31,7 @@ class TestTrack::Session
|
|
31
31
|
url: TestTrack.url,
|
32
32
|
cookieDomain: cookie_domain,
|
33
33
|
cookieName: visitor_cookie_name,
|
34
|
-
registry: current_visitor.
|
34
|
+
registry: current_visitor.v1_split_registry,
|
35
35
|
assignments: current_visitor.assignment_json
|
36
36
|
}
|
37
37
|
end
|
@@ -31,7 +31,8 @@ class TestTrack::VariantCalculator
|
|
31
31
|
end
|
32
32
|
|
33
33
|
def weighting
|
34
|
-
@weighting ||= split_registry[split_name]
|
34
|
+
@weighting ||= (split_registry['splits'][split_name] && split_registry['splits'][split_name]['weights']) ||
|
35
|
+
raise("TestTrack split '#{split_name}' not found. Need to write/run a migration?")
|
35
36
|
end
|
36
37
|
|
37
38
|
def assignment_bucket
|
@@ -34,7 +34,7 @@ class TestTrack::VaryDSL
|
|
34
34
|
delegate :split_name, to: :assignment
|
35
35
|
|
36
36
|
def split
|
37
|
-
split_registry && split_registry[split_name]
|
37
|
+
split_registry && split_registry['splits'][split_name] && split_registry['splits'][split_name]['weights']
|
38
38
|
end
|
39
39
|
|
40
40
|
def split_variants
|
@@ -46,7 +46,7 @@ class TestTrack::VaryDSL
|
|
46
46
|
end
|
47
47
|
|
48
48
|
def misconfiguration_notifier
|
49
|
-
@misconfiguration_notifier ||= TestTrack
|
49
|
+
@misconfiguration_notifier ||= TestTrack.misconfiguration_notifier
|
50
50
|
end
|
51
51
|
|
52
52
|
def variant_behaviors
|
@@ -67,6 +67,12 @@ class TestTrack::Visitor
|
|
67
67
|
@split_registry ||= TestTrack::Remote::SplitRegistry.to_hash
|
68
68
|
end
|
69
69
|
|
70
|
+
def v1_split_registry
|
71
|
+
@v1_split_registry ||= split_registry && split_registry['splits'].each_with_object({}) do |(k, v), result|
|
72
|
+
result[k] = v['weights']
|
73
|
+
end
|
74
|
+
end
|
75
|
+
|
70
76
|
def link_identity!(identity)
|
71
77
|
opts = identifier_opts(identity)
|
72
78
|
begin
|
@@ -154,6 +160,6 @@ class TestTrack::Visitor
|
|
154
160
|
app_name = URI.parse(TestTrack.private_url).user
|
155
161
|
split_name = split_name.to_s
|
156
162
|
prefixed = "#{app_name}.#{split_name}"
|
157
|
-
split_registry.key?(prefixed) ? prefixed : split_name
|
163
|
+
split_registry['splits'].key?(prefixed) ? prefixed : split_name
|
158
164
|
end
|
159
165
|
end
|
data/config/routes.rb
CHANGED
data/lib/test_track.rb
CHANGED
@@ -21,16 +21,36 @@ module TestTrack
|
|
21
21
|
|
22
22
|
class << self
|
23
23
|
def analytics
|
24
|
-
@analytics ||=
|
24
|
+
@analytics ||= analytics_wrapper(mixpanel)
|
25
25
|
end
|
26
26
|
|
27
27
|
def analytics=(client)
|
28
|
-
@analytics = client.is_a?(TestTrack::Analytics::SafeWrapper) ? client :
|
28
|
+
@analytics = client.is_a?(TestTrack::Analytics::SafeWrapper) ? client : analytics_wrapper(client)
|
29
|
+
end
|
30
|
+
|
31
|
+
def misconfiguration_notifier
|
32
|
+
@misconfiguration_notifier ||= TestTrack::MisconfigurationNotifier::Wrapper.new(default_notifier)
|
33
|
+
end
|
34
|
+
|
35
|
+
def misconfiguration_notifier=(notifier)
|
36
|
+
@misconfiguration_notifier = if notifier.is_a?(TestTrack::MisconfigurationNotifier::Wrapper)
|
37
|
+
notifier
|
38
|
+
else
|
39
|
+
TestTrack::MisconfigurationNotifier::Wrapper.new(notifier)
|
40
|
+
end
|
29
41
|
end
|
30
42
|
|
31
43
|
private
|
32
44
|
|
33
|
-
def
|
45
|
+
def default_notifier
|
46
|
+
if defined?(::Airbrake)
|
47
|
+
TestTrack::MisconfigurationNotifier::Airbrake.new
|
48
|
+
else
|
49
|
+
TestTrack::MisconfigurationNotifier::Null.new
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
53
|
+
def analytics_wrapper(client)
|
34
54
|
TestTrack::Analytics::SafeWrapper.new(client)
|
35
55
|
end
|
36
56
|
|
@@ -2,16 +2,18 @@ module TestTrackRailsClient::AssignmentHelper
|
|
2
2
|
def stub_test_track_assignments(assignment_registry) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
|
3
3
|
raise "Cannot stub test track assignments when TestTrack is enabled" if TestTrack.enabled?
|
4
4
|
|
5
|
-
split_registry = TestTrack::Fake::SplitRegistry.instance.to_h.
|
5
|
+
split_registry = TestTrack::Fake::SplitRegistry.instance.to_h.deep_dup
|
6
6
|
assignments = []
|
7
7
|
app_name = URI.parse(TestTrack.private_url).user
|
8
8
|
|
9
9
|
assignment_registry.each do |split_name, variant|
|
10
10
|
prefixed_split_name = "#{app_name}.#{split_name}"
|
11
|
-
if split_registry.key?(prefixed_split_name)
|
11
|
+
if split_registry['splits'].key?(prefixed_split_name)
|
12
12
|
assignments << { split_name: prefixed_split_name, variant: variant.to_s, unsynced: false }
|
13
13
|
else
|
14
|
-
|
14
|
+
unless split_registry['splits'][split_name]
|
15
|
+
split_registry['splits'][split_name.to_s] = { weights: { variant.to_s => 100 }, feature_gate: false }
|
16
|
+
end
|
15
17
|
assignments << { split_name: split_name.to_s, variant: variant.to_s, unsynced: false }
|
16
18
|
end
|
17
19
|
end
|
@@ -1,8 +1,17 @@
|
|
1
1
|
require 'delayed_job'
|
2
|
-
|
2
|
+
|
3
|
+
begin
|
4
|
+
require 'airbrake'
|
5
|
+
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
6
|
+
end
|
7
|
+
|
3
8
|
unless defined?(Delayed::Plugins::Airbrake) && Delayed::Worker.plugins.include?(Delayed::Plugins::Airbrake)
|
4
|
-
|
9
|
+
begin
|
10
|
+
require 'delayed-plugins-airbrake'
|
11
|
+
rescue LoadError # rubocop:disable Lint/HandleExceptions
|
12
|
+
end
|
5
13
|
end
|
14
|
+
|
6
15
|
require 'test_track'
|
7
16
|
|
8
17
|
module TestTrackRailsClient
|
Binary file
|
Binary file
|
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: 4.0.0.
|
4
|
+
version: 4.0.0.alpha27
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan O'Neill
|
@@ -13,36 +13,8 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2019-
|
16
|
+
date: 2019-06-21 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
|
-
- !ruby/object:Gem::Dependency
|
19
|
-
name: airbrake
|
20
|
-
requirement: !ruby/object:Gem::Requirement
|
21
|
-
requirements:
|
22
|
-
- - ">="
|
23
|
-
- !ruby/object:Gem::Version
|
24
|
-
version: '4.1'
|
25
|
-
type: :runtime
|
26
|
-
prerelease: false
|
27
|
-
version_requirements: !ruby/object:Gem::Requirement
|
28
|
-
requirements:
|
29
|
-
- - ">="
|
30
|
-
- !ruby/object:Gem::Version
|
31
|
-
version: '4.1'
|
32
|
-
- !ruby/object:Gem::Dependency
|
33
|
-
name: delayed-plugins-airbrake
|
34
|
-
requirement: !ruby/object:Gem::Requirement
|
35
|
-
requirements:
|
36
|
-
- - ">="
|
37
|
-
- !ruby/object:Gem::Version
|
38
|
-
version: '0'
|
39
|
-
type: :runtime
|
40
|
-
prerelease: false
|
41
|
-
version_requirements: !ruby/object:Gem::Requirement
|
42
|
-
requirements:
|
43
|
-
- - ">="
|
44
|
-
- !ruby/object:Gem::Version
|
45
|
-
version: '0'
|
46
18
|
- !ruby/object:Gem::Dependency
|
47
19
|
name: delayed_job
|
48
20
|
requirement: !ruby/object:Gem::Requirement
|
@@ -255,7 +227,7 @@ files:
|
|
255
227
|
- Rakefile
|
256
228
|
- app/assets/javascripts/testTrack.bundle.min.js
|
257
229
|
- app/controllers/concerns/test_track/controller.rb
|
258
|
-
- app/controllers/tt/api/
|
230
|
+
- app/controllers/tt/api/application_controller.rb
|
259
231
|
- app/controllers/tt/api/v1/assignments_controller.rb
|
260
232
|
- app/controllers/tt/api/v1/identifier_types_controller.rb
|
261
233
|
- app/controllers/tt/api/v1/identifier_visitors_controller.rb
|
@@ -263,7 +235,6 @@ files:
|
|
263
235
|
- app/controllers/tt/api/v1/resets_controller.rb
|
264
236
|
- app/controllers/tt/api/v1/split_configs_controller.rb
|
265
237
|
- app/controllers/tt/api/v1/split_details_controller.rb
|
266
|
-
- app/controllers/tt/api/v1/split_registries_controller.rb
|
267
238
|
- app/controllers/tt/api/v1/visitor_details_controller.rb
|
268
239
|
- app/controllers/tt/api/v1/visitors_controller.rb
|
269
240
|
- app/helpers/test_track/application_helper.rb
|
@@ -310,7 +281,6 @@ files:
|
|
310
281
|
- app/views/tt/api/v1/identifier_visitors/show.json.jbuilder
|
311
282
|
- app/views/tt/api/v1/identifiers/create.json.jbuilder
|
312
283
|
- app/views/tt/api/v1/split_details/show.json.jbuilder
|
313
|
-
- app/views/tt/api/v1/split_registries/show.json.jbuilder
|
314
284
|
- app/views/tt/api/v1/visitors/_show.json.jbuilder
|
315
285
|
- app/views/tt/api/v1/visitors/show.json.jbuilder
|
316
286
|
- config/initializers/test_track_api.rb
|