test_track_rails_client 7.1.2 → 8.1.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 -44
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 22a09ce0733fcb557b0360e49bc13076c4f697fc1f6d91d6dabf9debbf90dbef
|
4
|
+
data.tar.gz: dd1c212c68b7575e26c55d68c3abd2ba77ccbe9732c9450e22f0a89d107b5d42
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 28798ccf0163307ef362c76d7d9d74ef2c69dca3ab9d198e495362af393483ed62ee33e92e944201a31234aabd957e5e6d055a73261fd6a7d742216fd866b169
|
7
|
+
data.tar.gz: 98feb2a15aec301983be61d62e3bb3c22e0979d682c1162ab735c55f7af86d45402be6a5cbc9d974c592b1fc102091cb0a6269fb629a5913ac4e3d05af6398d9
|
@@ -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.1.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan O'Neill
|
@@ -10,10 +10,9 @@ authors:
|
|
10
10
|
- John Mileham
|
11
11
|
- Alan Norton
|
12
12
|
- Sam Moore
|
13
|
-
autorequire:
|
14
13
|
bindir: bin
|
15
14
|
cert_chain: []
|
16
|
-
date:
|
15
|
+
date: 2025-03-14 00:00:00.000000000 Z
|
17
16
|
dependencies:
|
18
17
|
- !ruby/object:Gem::Dependency
|
19
18
|
name: activejob
|
@@ -21,28 +20,40 @@ dependencies:
|
|
21
20
|
requirements:
|
22
21
|
- - ">="
|
23
22
|
- !ruby/object:Gem::Version
|
24
|
-
version: '
|
23
|
+
version: '7.0'
|
24
|
+
- - "<"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '8.1'
|
25
27
|
type: :runtime
|
26
28
|
prerelease: false
|
27
29
|
version_requirements: !ruby/object:Gem::Requirement
|
28
30
|
requirements:
|
29
31
|
- - ">="
|
30
32
|
- !ruby/object:Gem::Version
|
31
|
-
version: '
|
33
|
+
version: '7.0'
|
34
|
+
- - "<"
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: '8.1'
|
32
37
|
- !ruby/object:Gem::Dependency
|
33
38
|
name: activemodel
|
34
39
|
requirement: !ruby/object:Gem::Requirement
|
35
40
|
requirements:
|
36
41
|
- - ">="
|
37
42
|
- !ruby/object:Gem::Version
|
38
|
-
version: '
|
43
|
+
version: '7.0'
|
44
|
+
- - "<"
|
45
|
+
- !ruby/object:Gem::Version
|
46
|
+
version: '8.1'
|
39
47
|
type: :runtime
|
40
48
|
prerelease: false
|
41
49
|
version_requirements: !ruby/object:Gem::Requirement
|
42
50
|
requirements:
|
43
51
|
- - ">="
|
44
52
|
- !ruby/object:Gem::Version
|
45
|
-
version: '
|
53
|
+
version: '7.0'
|
54
|
+
- - "<"
|
55
|
+
- !ruby/object:Gem::Version
|
56
|
+
version: '8.1'
|
46
57
|
- !ruby/object:Gem::Dependency
|
47
58
|
name: faraday
|
48
59
|
requirement: !ruby/object:Gem::Requirement
|
@@ -119,14 +130,20 @@ dependencies:
|
|
119
130
|
requirements:
|
120
131
|
- - ">="
|
121
132
|
- !ruby/object:Gem::Version
|
122
|
-
version: '
|
133
|
+
version: '7.0'
|
134
|
+
- - "<"
|
135
|
+
- !ruby/object:Gem::Version
|
136
|
+
version: '8.1'
|
123
137
|
type: :runtime
|
124
138
|
prerelease: false
|
125
139
|
version_requirements: !ruby/object:Gem::Requirement
|
126
140
|
requirements:
|
127
141
|
- - ">="
|
128
142
|
- !ruby/object:Gem::Version
|
129
|
-
version: '
|
143
|
+
version: '7.0'
|
144
|
+
- - "<"
|
145
|
+
- !ruby/object:Gem::Version
|
146
|
+
version: '8.1'
|
130
147
|
- !ruby/object:Gem::Dependency
|
131
148
|
name: request_store
|
132
149
|
requirement: !ruby/object:Gem::Requirement
|
@@ -142,13 +159,13 @@ dependencies:
|
|
142
159
|
- !ruby/object:Gem::Version
|
143
160
|
version: '1.3'
|
144
161
|
- !ruby/object:Gem::Dependency
|
145
|
-
name:
|
162
|
+
name: appraisal
|
146
163
|
requirement: !ruby/object:Gem::Requirement
|
147
164
|
requirements:
|
148
165
|
- - ">="
|
149
166
|
- !ruby/object:Gem::Version
|
150
167
|
version: '0'
|
151
|
-
type: :
|
168
|
+
type: :development
|
152
169
|
prerelease: false
|
153
170
|
version_requirements: !ruby/object:Gem::Requirement
|
154
171
|
requirements:
|
@@ -156,7 +173,7 @@ dependencies:
|
|
156
173
|
- !ruby/object:Gem::Version
|
157
174
|
version: '0'
|
158
175
|
- !ruby/object:Gem::Dependency
|
159
|
-
name:
|
176
|
+
name: betterlint
|
160
177
|
requirement: !ruby/object:Gem::Requirement
|
161
178
|
requirements:
|
162
179
|
- - ">="
|
@@ -212,35 +229,21 @@ dependencies:
|
|
212
229
|
- !ruby/object:Gem::Version
|
213
230
|
version: '0'
|
214
231
|
- !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
|
232
|
+
name: shoulda-matchers
|
230
233
|
requirement: !ruby/object:Gem::Requirement
|
231
234
|
requirements:
|
232
235
|
- - ">="
|
233
236
|
- !ruby/object:Gem::Version
|
234
|
-
version: '
|
237
|
+
version: '2.8'
|
235
238
|
type: :development
|
236
239
|
prerelease: false
|
237
240
|
version_requirements: !ruby/object:Gem::Requirement
|
238
241
|
requirements:
|
239
242
|
- - ">="
|
240
243
|
- !ruby/object:Gem::Version
|
241
|
-
version: '
|
244
|
+
version: '2.8'
|
242
245
|
- !ruby/object:Gem::Dependency
|
243
|
-
name:
|
246
|
+
name: simplecov
|
244
247
|
requirement: !ruby/object:Gem::Requirement
|
245
248
|
requirements:
|
246
249
|
- - ">="
|
@@ -254,21 +257,21 @@ dependencies:
|
|
254
257
|
- !ruby/object:Gem::Version
|
255
258
|
version: '0'
|
256
259
|
- !ruby/object:Gem::Dependency
|
257
|
-
name:
|
260
|
+
name: sprockets-rails
|
258
261
|
requirement: !ruby/object:Gem::Requirement
|
259
262
|
requirements:
|
260
263
|
- - ">="
|
261
264
|
- !ruby/object:Gem::Version
|
262
|
-
version: '
|
265
|
+
version: '0'
|
263
266
|
type: :development
|
264
267
|
prerelease: false
|
265
268
|
version_requirements: !ruby/object:Gem::Requirement
|
266
269
|
requirements:
|
267
270
|
- - ">="
|
268
271
|
- !ruby/object:Gem::Version
|
269
|
-
version: '
|
272
|
+
version: '0'
|
270
273
|
- !ruby/object:Gem::Dependency
|
271
|
-
name:
|
274
|
+
name: timecop
|
272
275
|
requirement: !ruby/object:Gem::Requirement
|
273
276
|
requirements:
|
274
277
|
- - ">="
|
@@ -282,7 +285,7 @@ dependencies:
|
|
282
285
|
- !ruby/object:Gem::Version
|
283
286
|
version: '0'
|
284
287
|
- !ruby/object:Gem::Dependency
|
285
|
-
name:
|
288
|
+
name: webmock
|
286
289
|
requirement: !ruby/object:Gem::Requirement
|
287
290
|
requirements:
|
288
291
|
- - ">="
|
@@ -296,19 +299,19 @@ dependencies:
|
|
296
299
|
- !ruby/object:Gem::Version
|
297
300
|
version: '0'
|
298
301
|
- !ruby/object:Gem::Dependency
|
299
|
-
name:
|
302
|
+
name: zeitwerk
|
300
303
|
requirement: !ruby/object:Gem::Requirement
|
301
304
|
requirements:
|
302
|
-
- - "
|
305
|
+
- - "<"
|
303
306
|
- !ruby/object:Gem::Version
|
304
|
-
version: '
|
307
|
+
version: '2.7'
|
305
308
|
type: :development
|
306
309
|
prerelease: false
|
307
310
|
version_requirements: !ruby/object:Gem::Requirement
|
308
311
|
requirements:
|
309
|
-
- - "
|
312
|
+
- - "<"
|
310
313
|
- !ruby/object:Gem::Version
|
311
|
-
version: '
|
314
|
+
version: '2.7'
|
312
315
|
description: Easy split testing and feature flagging for Rails with TestTrack server
|
313
316
|
email:
|
314
317
|
- ryan.oneill@betterment.com
|
@@ -438,7 +441,6 @@ homepage: https://github.com/Betterment
|
|
438
441
|
licenses:
|
439
442
|
- MIT
|
440
443
|
metadata: {}
|
441
|
-
post_install_message:
|
442
444
|
rdoc_options: []
|
443
445
|
require_paths:
|
444
446
|
- lib
|
@@ -446,15 +448,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
446
448
|
requirements:
|
447
449
|
- - ">="
|
448
450
|
- !ruby/object:Gem::Version
|
449
|
-
version: '3.
|
451
|
+
version: '3.1'
|
450
452
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
451
453
|
requirements:
|
452
454
|
- - ">="
|
453
455
|
- !ruby/object:Gem::Version
|
454
456
|
version: '0'
|
455
457
|
requirements: []
|
456
|
-
rubygems_version: 3.5
|
457
|
-
signing_key:
|
458
|
+
rubygems_version: 3.6.5
|
458
459
|
specification_version: 4
|
459
460
|
summary: Rails client for TestTrack
|
460
461
|
test_files: []
|