test_track_rails_client 7.1.2 → 8.0.0
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/app/jobs/test_track/assignment_event_job.rb +2 -2
- data/app/jobs/test_track/identifier_creation_job.rb +3 -3
- data/app/models/test_track/assignment.rb +1 -1
- data/app/models/test_track/config_updater.rb +2 -2
- data/app/models/test_track/fake/split_detail.rb +2 -2
- data/app/models/test_track/fake/visitor.rb +1 -1
- data/app/models/test_track/notify_assignment_job.rb +1 -1
- data/app/models/test_track/remote/fake_server.rb +1 -1
- data/app/models/test_track/remote/split_detail.rb +1 -1
- data/app/models/test_track/unsynced_assignments_notifier.rb +1 -1
- data/app/models/test_track/visitor.rb +4 -4
- data/app/models/test_track/web_session.rb +3 -3
- data/lib/test_track.rb +1 -1
- data/lib/test_track_rails_client/assignment_helper.rb +2 -2
- data/lib/test_track_rails_client/version.rb +1 -1
- data/vendor/gems/her/lib/her/model/associations/association_proxy.rb +8 -1
- metadata +45 -41
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: af3ebf6b69530ee8c1d9e40532e955e09742b00cc0b64aeca8f8870900bc9370
|
|
4
|
+
data.tar.gz: 0fd103511d0c119a12828295eded55430d60c0c3c5b23f0005f72a858aacf5d9
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 3abe63765a18e31c033b2b48971424607b876506c02a895db4dd03c7486c2dbab4ffe9cf61c5dce33f0d89fd575b2fb5a389c9588a1eaa3d8c277228257a5b82
|
|
7
|
+
data.tar.gz: 91df67b0b5d2347db5d903ed7934b05097dc9ac88e813d08f84cfd4d33c0647e3b973c8afa3b540234c7e88515ee6cb51039993431489ac8550a5072ee2f1480
|
|
@@ -17,7 +17,7 @@ module TestTrack
|
|
|
17
17
|
def build_assignment(visitor_id, split_name, variant, context)
|
|
18
18
|
assignment = Assignment.new(
|
|
19
19
|
visitor: Visitor.new(id: visitor_id),
|
|
20
|
-
split_name:
|
|
20
|
+
split_name:
|
|
21
21
|
)
|
|
22
22
|
assignment.variant = variant
|
|
23
23
|
assignment.context = context
|
|
@@ -28,7 +28,7 @@ module TestTrack
|
|
|
28
28
|
tracking_result = maybe_track
|
|
29
29
|
unless assignment.feature_gate?
|
|
30
30
|
Remote::AssignmentEvent.create!(
|
|
31
|
-
visitor_id
|
|
31
|
+
visitor_id:,
|
|
32
32
|
split_name: assignment.split_name,
|
|
33
33
|
context: assignment.context,
|
|
34
34
|
mixpanel_result: tracking_result
|
|
@@ -2,9 +2,9 @@ module TestTrack
|
|
|
2
2
|
class IdentifierCreationJob < ApplicationJob
|
|
3
3
|
def perform(identifier_type:, visitor_id:, value:)
|
|
4
4
|
Remote::Identifier.create!(
|
|
5
|
-
identifier_type
|
|
6
|
-
visitor_id
|
|
7
|
-
value:
|
|
5
|
+
identifier_type:,
|
|
6
|
+
visitor_id:,
|
|
7
|
+
value:
|
|
8
8
|
)
|
|
9
9
|
end
|
|
10
10
|
end
|
|
@@ -28,7 +28,7 @@ class TestTrack::Assignment
|
|
|
28
28
|
def _variant
|
|
29
29
|
return if visitor.offline?
|
|
30
30
|
|
|
31
|
-
variant = TestTrack::VariantCalculator.new(visitor
|
|
31
|
+
variant = TestTrack::VariantCalculator.new(visitor:, split_name:).variant
|
|
32
32
|
variant&.to_s
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -45,13 +45,13 @@ class TestTrack::ConfigUpdater
|
|
|
45
45
|
attr_reader :schema_file_path
|
|
46
46
|
|
|
47
47
|
def create_split(name, weighting_registry)
|
|
48
|
-
TestTrack::Remote::SplitConfig.new(name
|
|
48
|
+
TestTrack::Remote::SplitConfig.new(name:, weighting_registry:).tap do |split_config|
|
|
49
49
|
raise split_config.errors.full_messages.join("\n") unless split_config.save
|
|
50
50
|
end
|
|
51
51
|
end
|
|
52
52
|
|
|
53
53
|
def create_identifier_type(name)
|
|
54
|
-
TestTrack::Remote::IdentifierType.new(name:
|
|
54
|
+
TestTrack::Remote::IdentifierType.new(name:).tap do |identifier_type|
|
|
55
55
|
raise identifier_type.errors.full_messages.join("\n") unless identifier_type.save
|
|
56
56
|
end
|
|
57
57
|
end
|
|
@@ -13,14 +13,14 @@ class TestTrack::Fake::SplitDetail
|
|
|
13
13
|
|
|
14
14
|
def _details
|
|
15
15
|
{
|
|
16
|
-
name
|
|
16
|
+
name:,
|
|
17
17
|
hypothesis: "user will interact more with blue banner",
|
|
18
18
|
location: "home screen",
|
|
19
19
|
platform: "mobile",
|
|
20
20
|
owner: "mobile team",
|
|
21
21
|
assignment_criteria: "user has mobile app",
|
|
22
22
|
description: "banner test to see if users will interact more",
|
|
23
|
-
variant_details:
|
|
23
|
+
variant_details:
|
|
24
24
|
}
|
|
25
25
|
end
|
|
26
26
|
|
|
@@ -28,7 +28,7 @@ class TestTrack::Fake::Visitor
|
|
|
28
28
|
|
|
29
29
|
def _assignments
|
|
30
30
|
split_registry.split_names.map do |split_name|
|
|
31
|
-
variant = TestTrack::VariantCalculator.new(visitor: self, split_name:
|
|
31
|
+
variant = TestTrack::VariantCalculator.new(visitor: self, split_name:).variant
|
|
32
32
|
Assignment.new(split_name, variant, false, "the_context")
|
|
33
33
|
end
|
|
34
34
|
end
|
|
@@ -15,7 +15,7 @@ class TestTrack::NotifyAssignmentJob
|
|
|
15
15
|
tracking_result = maybe_track
|
|
16
16
|
unless assignment.feature_gate?
|
|
17
17
|
TestTrack::Remote::AssignmentEvent.create!(
|
|
18
|
-
visitor_id
|
|
18
|
+
visitor_id:,
|
|
19
19
|
split_name: assignment.split_name,
|
|
20
20
|
context: assignment.context,
|
|
21
21
|
mixpanel_result: tracking_result
|
|
@@ -24,7 +24,7 @@ class TestTrack::Visitor
|
|
|
24
24
|
|
|
25
25
|
raise ArgumentError, "must provide block to `vary` for #{split_name}" unless block_given?
|
|
26
26
|
|
|
27
|
-
v = TestTrack::VaryDsl.new(assignment: assignment_for(split_name), context
|
|
27
|
+
v = TestTrack::VaryDsl.new(assignment: assignment_for(split_name), context:, split_registry:)
|
|
28
28
|
yield v
|
|
29
29
|
v.send :run
|
|
30
30
|
end
|
|
@@ -36,9 +36,9 @@ class TestTrack::Visitor
|
|
|
36
36
|
context = require_option!(opts, :context)
|
|
37
37
|
raise "unknown opts: #{opts.keys.to_sentence}" if opts.present?
|
|
38
38
|
|
|
39
|
-
ab_configuration = TestTrack::AbConfiguration.new
|
|
39
|
+
ab_configuration = TestTrack::AbConfiguration.new(split_name:, true_variant:, split_registry:)
|
|
40
40
|
|
|
41
|
-
vary(split_name, context:
|
|
41
|
+
vary(split_name, context:) do |v|
|
|
42
42
|
v.when ab_configuration.variants[:true] do # rubocop:disable Lint/BooleanSymbol
|
|
43
43
|
true
|
|
44
44
|
end
|
|
@@ -148,7 +148,7 @@ class TestTrack::Visitor
|
|
|
148
148
|
end
|
|
149
149
|
|
|
150
150
|
def generate_assignment_for(split_name)
|
|
151
|
-
assignment_registry[split_name] = TestTrack::Assignment.new(visitor: self, split_name:
|
|
151
|
+
assignment_registry[split_name] = TestTrack::Assignment.new(visitor: self, split_name:)
|
|
152
152
|
end
|
|
153
153
|
|
|
154
154
|
def maybe_prefix(split_name)
|
|
@@ -70,8 +70,8 @@ class TestTrack::WebSession
|
|
|
70
70
|
|
|
71
71
|
def visitors
|
|
72
72
|
@visitors ||= TestTrack::WebSessionVisitorRepository.new(
|
|
73
|
-
current_identity
|
|
74
|
-
unauthenticated_visitor_id:
|
|
73
|
+
current_identity:,
|
|
74
|
+
unauthenticated_visitor_id:
|
|
75
75
|
)
|
|
76
76
|
end
|
|
77
77
|
|
|
@@ -81,7 +81,7 @@ class TestTrack::WebSession
|
|
|
81
81
|
|
|
82
82
|
def set_cookie(name, value)
|
|
83
83
|
cookies[name] = {
|
|
84
|
-
value
|
|
84
|
+
value:,
|
|
85
85
|
domain: cookie_domain,
|
|
86
86
|
secure: request.ssl?,
|
|
87
87
|
httponly: false,
|
data/lib/test_track.rb
CHANGED
|
@@ -18,10 +18,10 @@ module TestTrackRailsClient::AssignmentHelper
|
|
|
18
18
|
weights: { variant.to_s => 100 },
|
|
19
19
|
feature_gate: split_name.end_with?('_enabled')
|
|
20
20
|
}
|
|
21
|
-
assignments << { split_name
|
|
21
|
+
assignments << { split_name:, variant: variant.to_s, unsynced: false }
|
|
22
22
|
end
|
|
23
23
|
|
|
24
|
-
visitor_attributes = { id: "fake_visitor_id", assignments:
|
|
24
|
+
visitor_attributes = { id: "fake_visitor_id", assignments: }
|
|
25
25
|
|
|
26
26
|
allow(TestTrack::Remote::Visitor).to receive(:fake_instance_attributes).and_return(visitor_attributes)
|
|
27
27
|
allow(TestTrack::Remote::SplitRegistry).to receive(:fake_instance_attributes).and_return(split_registry)
|
|
@@ -1,8 +1,11 @@
|
|
|
1
1
|
module Her
|
|
2
2
|
module Model
|
|
3
3
|
module Associations
|
|
4
|
-
class AssociationProxy <
|
|
4
|
+
class AssociationProxy < BasicObject
|
|
5
5
|
|
|
6
|
+
undef_method :==
|
|
7
|
+
undef_method :equal?
|
|
8
|
+
|
|
6
9
|
# @private
|
|
7
10
|
def self.install_proxy_methods(target_name, *names)
|
|
8
11
|
names.each do |name|
|
|
@@ -26,6 +29,10 @@ module Her
|
|
|
26
29
|
@_her_association
|
|
27
30
|
end
|
|
28
31
|
|
|
32
|
+
def raise(*args)
|
|
33
|
+
::Object.send(:raise, *args)
|
|
34
|
+
end
|
|
35
|
+
|
|
29
36
|
# @private
|
|
30
37
|
def method_missing(name, *args, &block)
|
|
31
38
|
if name == :object_id # avoid redefining object_id
|
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
|
+
version: 8.0.0
|
|
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:
|
|
16
|
+
date: 2025-01-24 00:00:00.000000000 Z
|
|
17
17
|
dependencies:
|
|
18
18
|
- !ruby/object:Gem::Dependency
|
|
19
19
|
name: activejob
|
|
@@ -21,28 +21,40 @@ dependencies:
|
|
|
21
21
|
requirements:
|
|
22
22
|
- - ">="
|
|
23
23
|
- !ruby/object:Gem::Version
|
|
24
|
-
version: '
|
|
24
|
+
version: '7.0'
|
|
25
|
+
- - "<"
|
|
26
|
+
- !ruby/object:Gem::Version
|
|
27
|
+
version: '8.1'
|
|
25
28
|
type: :runtime
|
|
26
29
|
prerelease: false
|
|
27
30
|
version_requirements: !ruby/object:Gem::Requirement
|
|
28
31
|
requirements:
|
|
29
32
|
- - ">="
|
|
30
33
|
- !ruby/object:Gem::Version
|
|
31
|
-
version: '
|
|
34
|
+
version: '7.0'
|
|
35
|
+
- - "<"
|
|
36
|
+
- !ruby/object:Gem::Version
|
|
37
|
+
version: '8.1'
|
|
32
38
|
- !ruby/object:Gem::Dependency
|
|
33
39
|
name: activemodel
|
|
34
40
|
requirement: !ruby/object:Gem::Requirement
|
|
35
41
|
requirements:
|
|
36
42
|
- - ">="
|
|
37
43
|
- !ruby/object:Gem::Version
|
|
38
|
-
version: '
|
|
44
|
+
version: '7.0'
|
|
45
|
+
- - "<"
|
|
46
|
+
- !ruby/object:Gem::Version
|
|
47
|
+
version: '8.1'
|
|
39
48
|
type: :runtime
|
|
40
49
|
prerelease: false
|
|
41
50
|
version_requirements: !ruby/object:Gem::Requirement
|
|
42
51
|
requirements:
|
|
43
52
|
- - ">="
|
|
44
53
|
- !ruby/object:Gem::Version
|
|
45
|
-
version: '
|
|
54
|
+
version: '7.0'
|
|
55
|
+
- - "<"
|
|
56
|
+
- !ruby/object:Gem::Version
|
|
57
|
+
version: '8.1'
|
|
46
58
|
- !ruby/object:Gem::Dependency
|
|
47
59
|
name: faraday
|
|
48
60
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -119,14 +131,20 @@ dependencies:
|
|
|
119
131
|
requirements:
|
|
120
132
|
- - ">="
|
|
121
133
|
- !ruby/object:Gem::Version
|
|
122
|
-
version: '
|
|
134
|
+
version: '7.0'
|
|
135
|
+
- - "<"
|
|
136
|
+
- !ruby/object:Gem::Version
|
|
137
|
+
version: '8.1'
|
|
123
138
|
type: :runtime
|
|
124
139
|
prerelease: false
|
|
125
140
|
version_requirements: !ruby/object:Gem::Requirement
|
|
126
141
|
requirements:
|
|
127
142
|
- - ">="
|
|
128
143
|
- !ruby/object:Gem::Version
|
|
129
|
-
version: '
|
|
144
|
+
version: '7.0'
|
|
145
|
+
- - "<"
|
|
146
|
+
- !ruby/object:Gem::Version
|
|
147
|
+
version: '8.1'
|
|
130
148
|
- !ruby/object:Gem::Dependency
|
|
131
149
|
name: request_store
|
|
132
150
|
requirement: !ruby/object:Gem::Requirement
|
|
@@ -170,7 +188,7 @@ dependencies:
|
|
|
170
188
|
- !ruby/object:Gem::Version
|
|
171
189
|
version: '0'
|
|
172
190
|
- !ruby/object:Gem::Dependency
|
|
173
|
-
name:
|
|
191
|
+
name: betterlint
|
|
174
192
|
requirement: !ruby/object:Gem::Requirement
|
|
175
193
|
requirements:
|
|
176
194
|
- - ">="
|
|
@@ -184,7 +202,7 @@ dependencies:
|
|
|
184
202
|
- !ruby/object:Gem::Version
|
|
185
203
|
version: '0'
|
|
186
204
|
- !ruby/object:Gem::Dependency
|
|
187
|
-
name: rails
|
|
205
|
+
name: pry-rails
|
|
188
206
|
requirement: !ruby/object:Gem::Requirement
|
|
189
207
|
requirements:
|
|
190
208
|
- - ">="
|
|
@@ -198,7 +216,7 @@ dependencies:
|
|
|
198
216
|
- !ruby/object:Gem::Version
|
|
199
217
|
version: '0'
|
|
200
218
|
- !ruby/object:Gem::Dependency
|
|
201
|
-
name:
|
|
219
|
+
name: rails-controller-testing
|
|
202
220
|
requirement: !ruby/object:Gem::Requirement
|
|
203
221
|
requirements:
|
|
204
222
|
- - ">="
|
|
@@ -212,21 +230,7 @@ dependencies:
|
|
|
212
230
|
- !ruby/object:Gem::Version
|
|
213
231
|
version: '0'
|
|
214
232
|
- !ruby/object:Gem::Dependency
|
|
215
|
-
name:
|
|
216
|
-
requirement: !ruby/object:Gem::Requirement
|
|
217
|
-
requirements:
|
|
218
|
-
- - "~>"
|
|
219
|
-
- !ruby/object:Gem::Version
|
|
220
|
-
version: 1.48.0
|
|
221
|
-
type: :development
|
|
222
|
-
prerelease: false
|
|
223
|
-
version_requirements: !ruby/object:Gem::Requirement
|
|
224
|
-
requirements:
|
|
225
|
-
- - "~>"
|
|
226
|
-
- !ruby/object:Gem::Version
|
|
227
|
-
version: 1.48.0
|
|
228
|
-
- !ruby/object:Gem::Dependency
|
|
229
|
-
name: rubocop-performance
|
|
233
|
+
name: rspec-rails
|
|
230
234
|
requirement: !ruby/object:Gem::Requirement
|
|
231
235
|
requirements:
|
|
232
236
|
- - ">="
|
|
@@ -240,35 +244,35 @@ dependencies:
|
|
|
240
244
|
- !ruby/object:Gem::Version
|
|
241
245
|
version: '0'
|
|
242
246
|
- !ruby/object:Gem::Dependency
|
|
243
|
-
name:
|
|
247
|
+
name: shoulda-matchers
|
|
244
248
|
requirement: !ruby/object:Gem::Requirement
|
|
245
249
|
requirements:
|
|
246
250
|
- - ">="
|
|
247
251
|
- !ruby/object:Gem::Version
|
|
248
|
-
version: '
|
|
252
|
+
version: '2.8'
|
|
249
253
|
type: :development
|
|
250
254
|
prerelease: false
|
|
251
255
|
version_requirements: !ruby/object:Gem::Requirement
|
|
252
256
|
requirements:
|
|
253
257
|
- - ">="
|
|
254
258
|
- !ruby/object:Gem::Version
|
|
255
|
-
version: '
|
|
259
|
+
version: '2.8'
|
|
256
260
|
- !ruby/object:Gem::Dependency
|
|
257
|
-
name:
|
|
261
|
+
name: simplecov
|
|
258
262
|
requirement: !ruby/object:Gem::Requirement
|
|
259
263
|
requirements:
|
|
260
264
|
- - ">="
|
|
261
265
|
- !ruby/object:Gem::Version
|
|
262
|
-
version: '
|
|
266
|
+
version: '0'
|
|
263
267
|
type: :development
|
|
264
268
|
prerelease: false
|
|
265
269
|
version_requirements: !ruby/object:Gem::Requirement
|
|
266
270
|
requirements:
|
|
267
271
|
- - ">="
|
|
268
272
|
- !ruby/object:Gem::Version
|
|
269
|
-
version: '
|
|
273
|
+
version: '0'
|
|
270
274
|
- !ruby/object:Gem::Dependency
|
|
271
|
-
name:
|
|
275
|
+
name: timecop
|
|
272
276
|
requirement: !ruby/object:Gem::Requirement
|
|
273
277
|
requirements:
|
|
274
278
|
- - ">="
|
|
@@ -282,7 +286,7 @@ dependencies:
|
|
|
282
286
|
- !ruby/object:Gem::Version
|
|
283
287
|
version: '0'
|
|
284
288
|
- !ruby/object:Gem::Dependency
|
|
285
|
-
name:
|
|
289
|
+
name: webmock
|
|
286
290
|
requirement: !ruby/object:Gem::Requirement
|
|
287
291
|
requirements:
|
|
288
292
|
- - ">="
|
|
@@ -296,19 +300,19 @@ dependencies:
|
|
|
296
300
|
- !ruby/object:Gem::Version
|
|
297
301
|
version: '0'
|
|
298
302
|
- !ruby/object:Gem::Dependency
|
|
299
|
-
name:
|
|
303
|
+
name: zeitwerk
|
|
300
304
|
requirement: !ruby/object:Gem::Requirement
|
|
301
305
|
requirements:
|
|
302
|
-
- - "
|
|
306
|
+
- - "<"
|
|
303
307
|
- !ruby/object:Gem::Version
|
|
304
|
-
version: '
|
|
308
|
+
version: '2.7'
|
|
305
309
|
type: :development
|
|
306
310
|
prerelease: false
|
|
307
311
|
version_requirements: !ruby/object:Gem::Requirement
|
|
308
312
|
requirements:
|
|
309
|
-
- - "
|
|
313
|
+
- - "<"
|
|
310
314
|
- !ruby/object:Gem::Version
|
|
311
|
-
version: '
|
|
315
|
+
version: '2.7'
|
|
312
316
|
description: Easy split testing and feature flagging for Rails with TestTrack server
|
|
313
317
|
email:
|
|
314
318
|
- ryan.oneill@betterment.com
|
|
@@ -446,14 +450,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
|
446
450
|
requirements:
|
|
447
451
|
- - ">="
|
|
448
452
|
- !ruby/object:Gem::Version
|
|
449
|
-
version: '3.
|
|
453
|
+
version: '3.1'
|
|
450
454
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
|
451
455
|
requirements:
|
|
452
456
|
- - ">="
|
|
453
457
|
- !ruby/object:Gem::Version
|
|
454
458
|
version: '0'
|
|
455
459
|
requirements: []
|
|
456
|
-
rubygems_version: 3.5.
|
|
460
|
+
rubygems_version: 3.5.23
|
|
457
461
|
signing_key:
|
|
458
462
|
specification_version: 4
|
|
459
463
|
summary: Rails client for TestTrack
|