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