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 CHANGED
@@ -1,15 +1,7 @@
1
1
  ---
2
- !binary "U0hBMQ==":
3
- metadata.gz: !binary |-
4
- ZWRlMmZlOWFkYmQwZmJiMWE5YzAyZDdmYjBkOTIwYTRlZDM2MmZjYg==
5
- data.tar.gz: !binary |-
6
- OGZmNTJjMGZiYjI2N2YyMzAxNGVhNzg2ZDk0MTRlYzM2YzdkMDA5MA==
2
+ SHA1:
3
+ metadata.gz: 2e89607653cb61940fedd99d80d61957a0bf57a1
4
+ data.tar.gz: dd88c45263723f36ac874a066dce626d24b85cc8
7
5
  SHA512:
8
- metadata.gz: !binary |-
9
- NWI4NGRhMzI4OTcwMzBlNWI1NmM0MDJhOWE5YWEzNzk5ODI3ZjM3OGFhNzZj
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]@testtrack.dev/`
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
- task default: [:rubocop, :spec]
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(identifier_type, identifier_value)
3
- @identifier_type = identifier_type
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
- new(identifier_type, identifier_value).send :manage do |visitor_dsl|
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 :identifier_type, :identifier_value
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
@@ -1,3 +1,3 @@
1
1
  module TestTrackRailsClient
2
- VERSION = "1.1.0" # rubocop:disable Style/MutableConstant
2
+ VERSION = "1.2.0" # rubocop:disable Style/MutableConstant
3
3
  end
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.1.0
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-05-30 00:00:00.000000000 Z
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.6.8
444
+ rubygems_version: 2.5.1
431
445
  signing_key:
432
446
  specification_version: 4
433
447
  summary: Rails client for TestTrack