test_track_rails_client 1.1.0 → 1.2.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 +5 -13
- data/README.md +28 -1
- data/Rakefile +7 -1
- data/app/models/test_track/offline_session.rb +16 -9
- data/lib/test_track_rails_client/version.rb +1 -1
- metadata +51 -37
checksums.yaml
CHANGED
@@ -1,15 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
|
5
|
-
data.tar.gz: !binary |-
|
6
|
-
OGZmNTJjMGZiYjI2N2YyMzAxNGVhNzg2ZDk0MTRlYzM2YzdkMDA5MA==
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 2e89607653cb61940fedd99d80d61957a0bf57a1
|
4
|
+
data.tar.gz: dd88c45263723f36ac874a066dce626d24b85cc8
|
7
5
|
SHA512:
|
8
|
-
metadata.gz:
|
9
|
-
|
10
|
-
YzFkMTlhZjU5YjA3YzgxMjQ1ODgwODUyNWY3OTEwOGVhOTIyMjJkNjZmNzAx
|
11
|
-
OGQ0ZWIzZjZhN2MwOGNiYTAxODNhYjk3MWQwOGIwZDEzN2YxNjE=
|
12
|
-
data.tar.gz: !binary |-
|
13
|
-
NGM5NzAyNWMyYzc1OWY0NTYzZTE5YjcwYTdkZTk5NDhmMGQyMjA0NWYzYzE1
|
14
|
-
ZGVjZWQzYWVlODgwODlhODkxZGI1MmZmMjg0NThkZTU0YTY0NGYzMmVkZGE4
|
15
|
-
OTFjMTUyMDM5MGM1YjQzODAwYzIxZGUwMzliZDMwZGYzNTIwMTI=
|
6
|
+
metadata.gz: a49693c2afd28427caacc2398673a8dc6442eabfa57bbc00a8d999343b7bf9220c0fd8a0c6dfba72bfb28e1a91009e67d97e7d77e229aee611190b7caa9a20bb
|
7
|
+
data.tar.gz: ea250b67d413d2e3e6acd8b854d5bb9799cce2d2b6105570af3c192813cfcaff655d8e50cfb19218a35007003225005a95f4025bed779d541f9b6bcd91c0325c
|
data/README.md
CHANGED
@@ -32,7 +32,14 @@ development.
|
|
32
32
|
Set up ENV vars in every environment:
|
33
33
|
|
34
34
|
* `MIXPANEL_TOKEN` - By default, TestTrack reports to Mixpanel. If you're using a [custom analytics provider](#custom-analytics) you can omit this.
|
35
|
-
* `TEST_TRACK_API_URL` - Set this to the URL of your TestTrack instance with your app credentials, e.g. `http://[myapp]:[your new app password]@
|
35
|
+
* `TEST_TRACK_API_URL` - Set this to the URL of your TestTrack instance with your app credentials, e.g. `http://[myapp]:[your new app password]@[your-app-domain]/`
|
36
|
+
|
37
|
+
[your-app-domain] can be
|
38
|
+
* `testtrack.dev` ([Pow](pow.cx))
|
39
|
+
* `localhost:PORT`
|
40
|
+
* `example.org`
|
41
|
+
* etc
|
42
|
+
|
36
43
|
|
37
44
|
Mix `TestTrack::Controller` into any controllers needing access to TestTrack:
|
38
45
|
|
@@ -225,6 +232,9 @@ end
|
|
225
232
|
|
226
233
|
The `OfflineSession` class can be used to load a test track visitor when there is no access to browser cookies. It is perfect for use in a process being run from either a job queue or a scheduler. The visitor object that is yielded to the block is the same as the visitor in a controller context; it has both the `vary` and `ab` methods.
|
227
234
|
|
235
|
+
An `OfflineSession` can be established in one of two ways:
|
236
|
+
|
237
|
+
1. with an `identifier_type`:
|
228
238
|
```ruby
|
229
239
|
OfflineSession.with_visitor_for(:myapp_user_id, 1234) do |test_track_visitor|
|
230
240
|
test_track_visitor.vary :name_of_split, context: 'background_job' do |v|
|
@@ -241,6 +251,23 @@ OfflineSession.with_visitor_for(:myapp_user_id, 1234) do |test_track_visitor|
|
|
241
251
|
end
|
242
252
|
```
|
243
253
|
|
254
|
+
2. with a `TestTrack::Visitor#id`:
|
255
|
+
```ruby
|
256
|
+
OfflineSession.with_visitor_id(1234) do |test_track_visitor|
|
257
|
+
test_track_visitor.vary :name_of_split, context: 'background_job' do |v|
|
258
|
+
v.when :variant_1, :variant_2 do
|
259
|
+
# Do something
|
260
|
+
end
|
261
|
+
v.when :variant_3 do
|
262
|
+
# Do another thing
|
263
|
+
end
|
264
|
+
v.default :variant_4 do
|
265
|
+
# Do something else
|
266
|
+
end
|
267
|
+
end
|
268
|
+
end
|
269
|
+
```
|
270
|
+
|
244
271
|
### Varying app behavior from within a model
|
245
272
|
|
246
273
|
The `TestTrack::Identity` concern can be included in a model and it will add two methods to the model: `test_track_vary` and `test_track_ab`. Behind the scenes, these methods check to see if they are being used within a web context of a controller that includes `TestTrack::Controller` or not. If called in a web context they will use the `test_track_visitor` that the controller has and participate in the existing session, if not, they will standup an `OfflineSession`.
|
data/Rakefile
CHANGED
@@ -69,4 +69,10 @@ task :vendor_deps do
|
|
69
69
|
end
|
70
70
|
|
71
71
|
task(:default).clear
|
72
|
-
|
72
|
+
if ENV['APPRAISAL_INITIALIZED'] || ENV['TRAVIS']
|
73
|
+
task default: [:rubocop, :spec]
|
74
|
+
else
|
75
|
+
require 'appraisal'
|
76
|
+
Appraisal::Task.new
|
77
|
+
task default: :appraisal
|
78
|
+
end
|
@@ -1,20 +1,31 @@
|
|
1
1
|
class TestTrack::OfflineSession
|
2
|
-
def initialize(
|
3
|
-
@
|
4
|
-
@identifier_value = identifier_value
|
2
|
+
def initialize(remote_visitor)
|
3
|
+
@remote_visitor = remote_visitor
|
5
4
|
end
|
6
5
|
|
7
6
|
def self.with_visitor_for(identifier_type, identifier_value)
|
8
7
|
raise ArgumentError, "must provide block to `with_visitor_for`" unless block_given?
|
9
8
|
|
10
|
-
|
9
|
+
remote_visitor = TestTrack::Remote::Visitor.from_identifier(identifier_type, identifier_value)
|
10
|
+
|
11
|
+
new(remote_visitor).send :manage do |visitor_dsl|
|
12
|
+
yield visitor_dsl
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.with_visitor_id(visitor_id)
|
17
|
+
raise ArgumentError, "must provide block to `with_visitor_id`" unless block_given?
|
18
|
+
|
19
|
+
remote_visitor = TestTrack::Remote::Visitor.find(visitor_id)
|
20
|
+
|
21
|
+
new(remote_visitor).send :manage do |visitor_dsl|
|
11
22
|
yield visitor_dsl
|
12
23
|
end
|
13
24
|
end
|
14
25
|
|
15
26
|
private
|
16
27
|
|
17
|
-
attr_reader :
|
28
|
+
attr_reader :remote_visitor
|
18
29
|
|
19
30
|
def visitor
|
20
31
|
@visitor ||= TestTrack::Visitor.new(
|
@@ -23,10 +34,6 @@ class TestTrack::OfflineSession
|
|
23
34
|
)
|
24
35
|
end
|
25
36
|
|
26
|
-
def remote_visitor
|
27
|
-
@remote_visitor ||= TestTrack::Remote::Visitor.from_identifier(identifier_type, identifier_value)
|
28
|
-
end
|
29
|
-
|
30
37
|
def manage
|
31
38
|
yield TestTrack::VisitorDSL.new(visitor)
|
32
39
|
ensure
|
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: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryan O'Neill
|
@@ -13,214 +13,228 @@ authors:
|
|
13
13
|
autorequire:
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
|
-
date: 2017-
|
16
|
+
date: 2017-08-01 00:00:00.000000000 Z
|
17
17
|
dependencies:
|
18
18
|
- !ruby/object:Gem::Dependency
|
19
19
|
name: rails
|
20
20
|
requirement: !ruby/object:Gem::Requirement
|
21
21
|
requirements:
|
22
|
-
- -
|
22
|
+
- - ">="
|
23
23
|
- !ruby/object:Gem::Version
|
24
24
|
version: '4.1'
|
25
|
-
- - <
|
25
|
+
- - "<"
|
26
26
|
- !ruby/object:Gem::Version
|
27
27
|
version: '6.0'
|
28
28
|
type: :runtime
|
29
29
|
prerelease: false
|
30
30
|
version_requirements: !ruby/object:Gem::Requirement
|
31
31
|
requirements:
|
32
|
-
- -
|
32
|
+
- - ">="
|
33
33
|
- !ruby/object:Gem::Version
|
34
34
|
version: '4.1'
|
35
|
-
- - <
|
35
|
+
- - "<"
|
36
36
|
- !ruby/object:Gem::Version
|
37
37
|
version: '6.0'
|
38
38
|
- !ruby/object:Gem::Dependency
|
39
39
|
name: faraday
|
40
40
|
requirement: !ruby/object:Gem::Requirement
|
41
41
|
requirements:
|
42
|
-
- -
|
42
|
+
- - ">="
|
43
43
|
- !ruby/object:Gem::Version
|
44
44
|
version: '0.8'
|
45
|
-
- - <
|
45
|
+
- - "<"
|
46
46
|
- !ruby/object:Gem::Version
|
47
47
|
version: '1.0'
|
48
48
|
type: :runtime
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
|
-
- -
|
52
|
+
- - ">="
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '0.8'
|
55
|
-
- - <
|
55
|
+
- - "<"
|
56
56
|
- !ruby/object:Gem::Version
|
57
57
|
version: '1.0'
|
58
58
|
- !ruby/object:Gem::Dependency
|
59
59
|
name: faraday_middleware
|
60
60
|
requirement: !ruby/object:Gem::Requirement
|
61
61
|
requirements:
|
62
|
-
- -
|
62
|
+
- - ">="
|
63
63
|
- !ruby/object:Gem::Version
|
64
64
|
version: '0'
|
65
65
|
type: :runtime
|
66
66
|
prerelease: false
|
67
67
|
version_requirements: !ruby/object:Gem::Requirement
|
68
68
|
requirements:
|
69
|
-
- -
|
69
|
+
- - ">="
|
70
70
|
- !ruby/object:Gem::Version
|
71
71
|
version: '0'
|
72
72
|
- !ruby/object:Gem::Dependency
|
73
73
|
name: public_suffix
|
74
74
|
requirement: !ruby/object:Gem::Requirement
|
75
75
|
requirements:
|
76
|
-
- - ~>
|
76
|
+
- - "~>"
|
77
77
|
- !ruby/object:Gem::Version
|
78
78
|
version: 1.4.6
|
79
79
|
type: :runtime
|
80
80
|
prerelease: false
|
81
81
|
version_requirements: !ruby/object:Gem::Requirement
|
82
82
|
requirements:
|
83
|
-
- - ~>
|
83
|
+
- - "~>"
|
84
84
|
- !ruby/object:Gem::Version
|
85
85
|
version: 1.4.6
|
86
86
|
- !ruby/object:Gem::Dependency
|
87
87
|
name: mixpanel-ruby
|
88
88
|
requirement: !ruby/object:Gem::Requirement
|
89
89
|
requirements:
|
90
|
-
- - ~>
|
90
|
+
- - "~>"
|
91
91
|
- !ruby/object:Gem::Version
|
92
92
|
version: '1.4'
|
93
93
|
type: :runtime
|
94
94
|
prerelease: false
|
95
95
|
version_requirements: !ruby/object:Gem::Requirement
|
96
96
|
requirements:
|
97
|
-
- - ~>
|
97
|
+
- - "~>"
|
98
98
|
- !ruby/object:Gem::Version
|
99
99
|
version: '1.4'
|
100
100
|
- !ruby/object:Gem::Dependency
|
101
101
|
name: delayed_job
|
102
102
|
requirement: !ruby/object:Gem::Requirement
|
103
103
|
requirements:
|
104
|
-
- - ~>
|
104
|
+
- - "~>"
|
105
105
|
- !ruby/object:Gem::Version
|
106
106
|
version: '4.0'
|
107
107
|
type: :runtime
|
108
108
|
prerelease: false
|
109
109
|
version_requirements: !ruby/object:Gem::Requirement
|
110
110
|
requirements:
|
111
|
-
- - ~>
|
111
|
+
- - "~>"
|
112
112
|
- !ruby/object:Gem::Version
|
113
113
|
version: '4.0'
|
114
114
|
- !ruby/object:Gem::Dependency
|
115
115
|
name: delayed_job_active_record
|
116
116
|
requirement: !ruby/object:Gem::Requirement
|
117
117
|
requirements:
|
118
|
-
- -
|
118
|
+
- - ">="
|
119
119
|
- !ruby/object:Gem::Version
|
120
120
|
version: '0'
|
121
121
|
type: :runtime
|
122
122
|
prerelease: false
|
123
123
|
version_requirements: !ruby/object:Gem::Requirement
|
124
124
|
requirements:
|
125
|
-
- -
|
125
|
+
- - ">="
|
126
126
|
- !ruby/object:Gem::Version
|
127
127
|
version: '0'
|
128
128
|
- !ruby/object:Gem::Dependency
|
129
129
|
name: airbrake
|
130
130
|
requirement: !ruby/object:Gem::Requirement
|
131
131
|
requirements:
|
132
|
-
- -
|
132
|
+
- - ">="
|
133
133
|
- !ruby/object:Gem::Version
|
134
134
|
version: '4.1'
|
135
135
|
type: :runtime
|
136
136
|
prerelease: false
|
137
137
|
version_requirements: !ruby/object:Gem::Requirement
|
138
138
|
requirements:
|
139
|
-
- -
|
139
|
+
- - ">="
|
140
140
|
- !ruby/object:Gem::Version
|
141
141
|
version: '4.1'
|
142
142
|
- !ruby/object:Gem::Dependency
|
143
143
|
name: delayed-plugins-airbrake
|
144
144
|
requirement: !ruby/object:Gem::Requirement
|
145
145
|
requirements:
|
146
|
-
- -
|
146
|
+
- - ">="
|
147
147
|
- !ruby/object:Gem::Version
|
148
148
|
version: '0'
|
149
149
|
type: :runtime
|
150
150
|
prerelease: false
|
151
151
|
version_requirements: !ruby/object:Gem::Requirement
|
152
152
|
requirements:
|
153
|
-
- -
|
153
|
+
- - ">="
|
154
154
|
- !ruby/object:Gem::Version
|
155
155
|
version: '0'
|
156
156
|
- !ruby/object:Gem::Dependency
|
157
157
|
name: request_store
|
158
158
|
requirement: !ruby/object:Gem::Requirement
|
159
159
|
requirements:
|
160
|
-
- - ~>
|
160
|
+
- - "~>"
|
161
161
|
- !ruby/object:Gem::Version
|
162
162
|
version: '1.3'
|
163
163
|
type: :runtime
|
164
164
|
prerelease: false
|
165
165
|
version_requirements: !ruby/object:Gem::Requirement
|
166
166
|
requirements:
|
167
|
-
- - ~>
|
167
|
+
- - "~>"
|
168
168
|
- !ruby/object:Gem::Version
|
169
169
|
version: '1.3'
|
170
|
+
- !ruby/object:Gem::Dependency
|
171
|
+
name: appraisal
|
172
|
+
requirement: !ruby/object:Gem::Requirement
|
173
|
+
requirements:
|
174
|
+
- - "~>"
|
175
|
+
- !ruby/object:Gem::Version
|
176
|
+
version: 2.2.0
|
177
|
+
type: :development
|
178
|
+
prerelease: false
|
179
|
+
version_requirements: !ruby/object:Gem::Requirement
|
180
|
+
requirements:
|
181
|
+
- - "~>"
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
version: 2.2.0
|
170
184
|
- !ruby/object:Gem::Dependency
|
171
185
|
name: pry-rails
|
172
186
|
requirement: !ruby/object:Gem::Requirement
|
173
187
|
requirements:
|
174
|
-
- -
|
188
|
+
- - ">="
|
175
189
|
- !ruby/object:Gem::Version
|
176
190
|
version: '0'
|
177
191
|
type: :development
|
178
192
|
prerelease: false
|
179
193
|
version_requirements: !ruby/object:Gem::Requirement
|
180
194
|
requirements:
|
181
|
-
- -
|
195
|
+
- - ">="
|
182
196
|
- !ruby/object:Gem::Version
|
183
197
|
version: '0'
|
184
198
|
- !ruby/object:Gem::Dependency
|
185
199
|
name: timecop
|
186
200
|
requirement: !ruby/object:Gem::Requirement
|
187
201
|
requirements:
|
188
|
-
- -
|
202
|
+
- - ">="
|
189
203
|
- !ruby/object:Gem::Version
|
190
204
|
version: '0'
|
191
205
|
type: :development
|
192
206
|
prerelease: false
|
193
207
|
version_requirements: !ruby/object:Gem::Requirement
|
194
208
|
requirements:
|
195
|
-
- -
|
209
|
+
- - ">="
|
196
210
|
- !ruby/object:Gem::Version
|
197
211
|
version: '0'
|
198
212
|
- !ruby/object:Gem::Dependency
|
199
213
|
name: rubocop
|
200
214
|
requirement: !ruby/object:Gem::Requirement
|
201
215
|
requirements:
|
202
|
-
- -
|
216
|
+
- - ">="
|
203
217
|
- !ruby/object:Gem::Version
|
204
218
|
version: '0.36'
|
205
219
|
type: :development
|
206
220
|
prerelease: false
|
207
221
|
version_requirements: !ruby/object:Gem::Requirement
|
208
222
|
requirements:
|
209
|
-
- -
|
223
|
+
- - ">="
|
210
224
|
- !ruby/object:Gem::Version
|
211
225
|
version: '0.36'
|
212
226
|
- !ruby/object:Gem::Dependency
|
213
227
|
name: webmock
|
214
228
|
requirement: !ruby/object:Gem::Requirement
|
215
229
|
requirements:
|
216
|
-
- - ~>
|
230
|
+
- - "~>"
|
217
231
|
- !ruby/object:Gem::Version
|
218
232
|
version: 2.1.0
|
219
233
|
type: :development
|
220
234
|
prerelease: false
|
221
235
|
version_requirements: !ruby/object:Gem::Requirement
|
222
236
|
requirements:
|
223
|
-
- - ~>
|
237
|
+
- - "~>"
|
224
238
|
- !ruby/object:Gem::Version
|
225
239
|
version: 2.1.0
|
226
240
|
description: Easy split testing and feature flagging for Rails with TestTrack server
|
@@ -417,17 +431,17 @@ require_paths:
|
|
417
431
|
- lib
|
418
432
|
required_ruby_version: !ruby/object:Gem::Requirement
|
419
433
|
requirements:
|
420
|
-
- -
|
434
|
+
- - ">="
|
421
435
|
- !ruby/object:Gem::Version
|
422
436
|
version: 1.9.3
|
423
437
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
424
438
|
requirements:
|
425
|
-
- -
|
439
|
+
- - ">="
|
426
440
|
- !ruby/object:Gem::Version
|
427
441
|
version: '0'
|
428
442
|
requirements: []
|
429
443
|
rubyforge_project:
|
430
|
-
rubygems_version: 2.
|
444
|
+
rubygems_version: 2.5.1
|
431
445
|
signing_key:
|
432
446
|
specification_version: 4
|
433
447
|
summary: Rails client for TestTrack
|