test_track_rails_client 0.9.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.
Files changed (62) hide show
  1. data/LICENSE +19 -0
  2. data/README.md +246 -0
  3. data/Rakefile +30 -0
  4. data/app/assets/javascripts/testTrack.bundle.min.js +1 -0
  5. data/app/controllers/concerns/test_track/controller.rb +26 -0
  6. data/app/controllers/tt/api/v1/application_controller.rb +9 -0
  7. data/app/controllers/tt/api/v1/assignments_controller.rb +5 -0
  8. data/app/controllers/tt/api/v1/identifier_types_controller.rb +5 -0
  9. data/app/controllers/tt/api/v1/identifier_visitors_controller.rb +5 -0
  10. data/app/controllers/tt/api/v1/identifiers_controller.rb +5 -0
  11. data/app/controllers/tt/api/v1/resets_controller.rb +12 -0
  12. data/app/controllers/tt/api/v1/split_configs_controller.rb +9 -0
  13. data/app/controllers/tt/api/v1/split_registries_controller.rb +5 -0
  14. data/app/controllers/tt/api/v1/visitors_controller.rb +5 -0
  15. data/app/helpers/test_track/application_helper.rb +6 -0
  16. data/app/models/concerns/test_track/identity.rb +53 -0
  17. data/app/models/concerns/test_track/remote_model.rb +14 -0
  18. data/app/models/concerns/test_track/required_options.rb +11 -0
  19. data/app/models/test_track/ab_configuration.rb +53 -0
  20. data/app/models/test_track/analytics/mixpanel_client.rb +25 -0
  21. data/app/models/test_track/analytics/safe_wrapper.rb +43 -0
  22. data/app/models/test_track/assignment.rb +29 -0
  23. data/app/models/test_track/config_updater.rb +99 -0
  24. data/app/models/test_track/create_alias_job.rb +18 -0
  25. data/app/models/test_track/fake/split_registry.rb +36 -0
  26. data/app/models/test_track/fake/visitor.rb +41 -0
  27. data/app/models/test_track/fake_server.rb +24 -0
  28. data/app/models/test_track/identity_session_discriminator.rb +34 -0
  29. data/app/models/test_track/notify_assignment_job.rb +31 -0
  30. data/app/models/test_track/offline_session.rb +46 -0
  31. data/app/models/test_track/remote/assignment.rb +20 -0
  32. data/app/models/test_track/remote/assignment_event.rb +15 -0
  33. data/app/models/test_track/remote/fake_server.rb +8 -0
  34. data/app/models/test_track/remote/identifier.rb +26 -0
  35. data/app/models/test_track/remote/identifier_type.rb +13 -0
  36. data/app/models/test_track/remote/split_config.rb +13 -0
  37. data/app/models/test_track/remote/split_registry.rb +36 -0
  38. data/app/models/test_track/remote/visitor.rb +29 -0
  39. data/app/models/test_track/session.rb +167 -0
  40. data/app/models/test_track/unsynced_assignments_notifier.rb +36 -0
  41. data/app/models/test_track/variant_calculator.rb +48 -0
  42. data/app/models/test_track/vary_dsl.rb +88 -0
  43. data/app/models/test_track/visitor.rb +129 -0
  44. data/app/models/test_track/visitor_dsl.rb +11 -0
  45. data/app/views/tt/api/v1/identifier_visitors/show.json.jbuilder +1 -0
  46. data/app/views/tt/api/v1/identifiers/create.json.jbuilder +3 -0
  47. data/app/views/tt/api/v1/split_registries/show.json.jbuilder +3 -0
  48. data/app/views/tt/api/v1/visitors/_show.json.jbuilder +2 -0
  49. data/app/views/tt/api/v1/visitors/show.json.jbuilder +1 -0
  50. data/config/initializers/test_track_api.rb +15 -0
  51. data/config/routes.rb +28 -0
  52. data/lib/generators/test_track/migration_generator.rb +39 -0
  53. data/lib/tasks/pull_in_js_client.rake +7 -0
  54. data/lib/tasks/test_track_rails_client_tasks.rake +15 -0
  55. data/lib/tasks/vendor_deps.rake +36 -0
  56. data/lib/test_track.rb +64 -0
  57. data/lib/test_track_rails_client.rb +5 -0
  58. data/lib/test_track_rails_client/assignment_helper.rb +19 -0
  59. data/lib/test_track_rails_client/engine.rb +14 -0
  60. data/lib/test_track_rails_client/rspec_helpers.rb +5 -0
  61. data/lib/test_track_rails_client/version.rb +3 -0
  62. metadata +345 -0
@@ -0,0 +1,5 @@
1
+ require 'test_track'
2
+ require "test_track_rails_client/engine"
3
+
4
+ module TestTrackRailsClient
5
+ end
@@ -0,0 +1,19 @@
1
+ module TestTrackRailsClient::AssignmentHelper
2
+ def stub_test_track_assignments(assignment_registry) # rubocop:disable Metrics/AbcSize, Metrics/MethodLength
3
+ raise "Cannot stub test track assignments when TestTrack is enabled" if TestTrack.enabled?
4
+
5
+ split_registry = {}
6
+ assignments = []
7
+
8
+ assignment_registry.each do |split_name, variant|
9
+ assignment_registry[split_name] = variant.to_s
10
+ split_registry[split_name] = { variant => 100 }
11
+ assignments << { split_name: split_name.to_s, variant: variant.to_s, unsynced: false }
12
+ end
13
+
14
+ visitor_attributes = { id: "fake_visitor_id", assignments: assignments }
15
+
16
+ allow(TestTrack::Remote::Visitor).to receive(:fake_instance_attributes).and_return(visitor_attributes)
17
+ allow(TestTrack::Remote::SplitRegistry).to receive(:fake_instance_attributes).and_return(split_registry)
18
+ end
19
+ end
@@ -0,0 +1,14 @@
1
+ require 'airbrake'
2
+ require 'delayed_job'
3
+ require 'delayed-plugins-airbrake'
4
+ require 'test_track'
5
+
6
+ module TestTrackRailsClient
7
+ class Engine < ::Rails::Engine
8
+ isolate_namespace TestTrack
9
+
10
+ config.generators do |g|
11
+ g.test_framework :rspec
12
+ end
13
+ end
14
+ end
@@ -0,0 +1,5 @@
1
+ require 'test_track_rails_client/assignment_helper'
2
+
3
+ RSpec.configure do |config|
4
+ config.include TestTrackRailsClient::AssignmentHelper
5
+ end
@@ -0,0 +1,3 @@
1
+ module TestTrackRailsClient
2
+ VERSION = "0.9.0" # rubocop:disable Style/MutableConstant
3
+ end
metadata ADDED
@@ -0,0 +1,345 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: test_track_rails_client
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.9.0
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Ryan O'Neill
9
+ - Alex Burgel
10
+ - Adam Langsner
11
+ - John Mileham
12
+ - Alan Norton
13
+ - Sam Moore
14
+ autorequire:
15
+ bindir: bin
16
+ cert_chain: []
17
+ date: 2016-10-18 00:00:00.000000000 Z
18
+ dependencies:
19
+ - !ruby/object:Gem::Dependency
20
+ name: rails
21
+ requirement: !ruby/object:Gem::Requirement
22
+ none: false
23
+ requirements:
24
+ - - ~>
25
+ - !ruby/object:Gem::Version
26
+ version: '4.1'
27
+ type: :runtime
28
+ prerelease: false
29
+ version_requirements: !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: '4.1'
35
+ - !ruby/object:Gem::Dependency
36
+ name: faraday
37
+ requirement: !ruby/object:Gem::Requirement
38
+ none: false
39
+ requirements:
40
+ - - ! '>='
41
+ - !ruby/object:Gem::Version
42
+ version: '0.8'
43
+ - - <
44
+ - !ruby/object:Gem::Version
45
+ version: '1.0'
46
+ type: :runtime
47
+ prerelease: false
48
+ version_requirements: !ruby/object:Gem::Requirement
49
+ none: false
50
+ requirements:
51
+ - - ! '>='
52
+ - !ruby/object:Gem::Version
53
+ version: '0.8'
54
+ - - <
55
+ - !ruby/object:Gem::Version
56
+ version: '1.0'
57
+ - !ruby/object:Gem::Dependency
58
+ name: faraday_middleware
59
+ requirement: !ruby/object:Gem::Requirement
60
+ none: false
61
+ requirements:
62
+ - - ! '>='
63
+ - !ruby/object:Gem::Version
64
+ version: '0'
65
+ type: :runtime
66
+ prerelease: false
67
+ version_requirements: !ruby/object:Gem::Requirement
68
+ none: false
69
+ requirements:
70
+ - - ! '>='
71
+ - !ruby/object:Gem::Version
72
+ version: '0'
73
+ - !ruby/object:Gem::Dependency
74
+ name: public_suffix
75
+ requirement: !ruby/object:Gem::Requirement
76
+ none: false
77
+ requirements:
78
+ - - ~>
79
+ - !ruby/object:Gem::Version
80
+ version: 1.4.6
81
+ type: :runtime
82
+ prerelease: false
83
+ version_requirements: !ruby/object:Gem::Requirement
84
+ none: false
85
+ requirements:
86
+ - - ~>
87
+ - !ruby/object:Gem::Version
88
+ version: 1.4.6
89
+ - !ruby/object:Gem::Dependency
90
+ name: mixpanel-ruby
91
+ requirement: !ruby/object:Gem::Requirement
92
+ none: false
93
+ requirements:
94
+ - - ~>
95
+ - !ruby/object:Gem::Version
96
+ version: '1.4'
97
+ type: :runtime
98
+ prerelease: false
99
+ version_requirements: !ruby/object:Gem::Requirement
100
+ none: false
101
+ requirements:
102
+ - - ~>
103
+ - !ruby/object:Gem::Version
104
+ version: '1.4'
105
+ - !ruby/object:Gem::Dependency
106
+ name: delayed_job
107
+ requirement: !ruby/object:Gem::Requirement
108
+ none: false
109
+ requirements:
110
+ - - ~>
111
+ - !ruby/object:Gem::Version
112
+ version: '4.0'
113
+ type: :runtime
114
+ prerelease: false
115
+ version_requirements: !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ~>
119
+ - !ruby/object:Gem::Version
120
+ version: '4.0'
121
+ - !ruby/object:Gem::Dependency
122
+ name: delayed_job_active_record
123
+ requirement: !ruby/object:Gem::Requirement
124
+ none: false
125
+ requirements:
126
+ - - ! '>='
127
+ - !ruby/object:Gem::Version
128
+ version: '0'
129
+ type: :runtime
130
+ prerelease: false
131
+ version_requirements: !ruby/object:Gem::Requirement
132
+ none: false
133
+ requirements:
134
+ - - ! '>='
135
+ - !ruby/object:Gem::Version
136
+ version: '0'
137
+ - !ruby/object:Gem::Dependency
138
+ name: airbrake
139
+ requirement: !ruby/object:Gem::Requirement
140
+ none: false
141
+ requirements:
142
+ - - ~>
143
+ - !ruby/object:Gem::Version
144
+ version: '4.1'
145
+ type: :runtime
146
+ prerelease: false
147
+ version_requirements: !ruby/object:Gem::Requirement
148
+ none: false
149
+ requirements:
150
+ - - ~>
151
+ - !ruby/object:Gem::Version
152
+ version: '4.1'
153
+ - !ruby/object:Gem::Dependency
154
+ name: delayed-plugins-airbrake
155
+ requirement: !ruby/object:Gem::Requirement
156
+ none: false
157
+ requirements:
158
+ - - ! '>='
159
+ - !ruby/object:Gem::Version
160
+ version: '0'
161
+ type: :runtime
162
+ prerelease: false
163
+ version_requirements: !ruby/object:Gem::Requirement
164
+ none: false
165
+ requirements:
166
+ - - ! '>='
167
+ - !ruby/object:Gem::Version
168
+ version: '0'
169
+ - !ruby/object:Gem::Dependency
170
+ name: request_store
171
+ requirement: !ruby/object:Gem::Requirement
172
+ none: false
173
+ requirements:
174
+ - - ~>
175
+ - !ruby/object:Gem::Version
176
+ version: '1.3'
177
+ type: :runtime
178
+ prerelease: false
179
+ version_requirements: !ruby/object:Gem::Requirement
180
+ none: false
181
+ requirements:
182
+ - - ~>
183
+ - !ruby/object:Gem::Version
184
+ version: '1.3'
185
+ - !ruby/object:Gem::Dependency
186
+ name: pry-rails
187
+ requirement: !ruby/object:Gem::Requirement
188
+ none: false
189
+ requirements:
190
+ - - ! '>='
191
+ - !ruby/object:Gem::Version
192
+ version: '0'
193
+ type: :development
194
+ prerelease: false
195
+ version_requirements: !ruby/object:Gem::Requirement
196
+ none: false
197
+ requirements:
198
+ - - ! '>='
199
+ - !ruby/object:Gem::Version
200
+ version: '0'
201
+ - !ruby/object:Gem::Dependency
202
+ name: timecop
203
+ requirement: !ruby/object:Gem::Requirement
204
+ none: false
205
+ requirements:
206
+ - - ! '>='
207
+ - !ruby/object:Gem::Version
208
+ version: '0'
209
+ type: :development
210
+ prerelease: false
211
+ version_requirements: !ruby/object:Gem::Requirement
212
+ none: false
213
+ requirements:
214
+ - - ! '>='
215
+ - !ruby/object:Gem::Version
216
+ version: '0'
217
+ - !ruby/object:Gem::Dependency
218
+ name: rubocop
219
+ requirement: !ruby/object:Gem::Requirement
220
+ none: false
221
+ requirements:
222
+ - - ! '>='
223
+ - !ruby/object:Gem::Version
224
+ version: '0.36'
225
+ type: :development
226
+ prerelease: false
227
+ version_requirements: !ruby/object:Gem::Requirement
228
+ none: false
229
+ requirements:
230
+ - - ! '>='
231
+ - !ruby/object:Gem::Version
232
+ version: '0.36'
233
+ - !ruby/object:Gem::Dependency
234
+ name: webmock
235
+ requirement: !ruby/object:Gem::Requirement
236
+ none: false
237
+ requirements:
238
+ - - ! '>='
239
+ - !ruby/object:Gem::Version
240
+ version: 2.0.0
241
+ type: :development
242
+ prerelease: false
243
+ version_requirements: !ruby/object:Gem::Requirement
244
+ none: false
245
+ requirements:
246
+ - - ! '>='
247
+ - !ruby/object:Gem::Version
248
+ version: 2.0.0
249
+ description: Easy split testing and feature flagging for Rails with TestTrack server
250
+ email:
251
+ - ryan@betterment.com
252
+ executables: []
253
+ extensions: []
254
+ extra_rdoc_files: []
255
+ files:
256
+ - app/assets/javascripts/testTrack.bundle.min.js
257
+ - app/controllers/concerns/test_track/controller.rb
258
+ - app/controllers/tt/api/v1/application_controller.rb
259
+ - app/controllers/tt/api/v1/assignments_controller.rb
260
+ - app/controllers/tt/api/v1/identifier_types_controller.rb
261
+ - app/controllers/tt/api/v1/identifier_visitors_controller.rb
262
+ - app/controllers/tt/api/v1/identifiers_controller.rb
263
+ - app/controllers/tt/api/v1/resets_controller.rb
264
+ - app/controllers/tt/api/v1/split_configs_controller.rb
265
+ - app/controllers/tt/api/v1/split_registries_controller.rb
266
+ - app/controllers/tt/api/v1/visitors_controller.rb
267
+ - app/helpers/test_track/application_helper.rb
268
+ - app/models/concerns/test_track/identity.rb
269
+ - app/models/concerns/test_track/remote_model.rb
270
+ - app/models/concerns/test_track/required_options.rb
271
+ - app/models/test_track/ab_configuration.rb
272
+ - app/models/test_track/analytics/mixpanel_client.rb
273
+ - app/models/test_track/analytics/safe_wrapper.rb
274
+ - app/models/test_track/assignment.rb
275
+ - app/models/test_track/config_updater.rb
276
+ - app/models/test_track/create_alias_job.rb
277
+ - app/models/test_track/fake/split_registry.rb
278
+ - app/models/test_track/fake/visitor.rb
279
+ - app/models/test_track/fake_server.rb
280
+ - app/models/test_track/identity_session_discriminator.rb
281
+ - app/models/test_track/notify_assignment_job.rb
282
+ - app/models/test_track/offline_session.rb
283
+ - app/models/test_track/remote/assignment.rb
284
+ - app/models/test_track/remote/assignment_event.rb
285
+ - app/models/test_track/remote/fake_server.rb
286
+ - app/models/test_track/remote/identifier.rb
287
+ - app/models/test_track/remote/identifier_type.rb
288
+ - app/models/test_track/remote/split_config.rb
289
+ - app/models/test_track/remote/split_registry.rb
290
+ - app/models/test_track/remote/visitor.rb
291
+ - app/models/test_track/session.rb
292
+ - app/models/test_track/unsynced_assignments_notifier.rb
293
+ - app/models/test_track/variant_calculator.rb
294
+ - app/models/test_track/vary_dsl.rb
295
+ - app/models/test_track/visitor.rb
296
+ - app/models/test_track/visitor_dsl.rb
297
+ - app/views/tt/api/v1/identifier_visitors/show.json.jbuilder
298
+ - app/views/tt/api/v1/identifiers/create.json.jbuilder
299
+ - app/views/tt/api/v1/split_registries/show.json.jbuilder
300
+ - app/views/tt/api/v1/visitors/_show.json.jbuilder
301
+ - app/views/tt/api/v1/visitors/show.json.jbuilder
302
+ - config/initializers/test_track_api.rb
303
+ - config/routes.rb
304
+ - lib/generators/test_track/migration_generator.rb
305
+ - lib/tasks/pull_in_js_client.rake
306
+ - lib/tasks/test_track_rails_client_tasks.rake
307
+ - lib/tasks/vendor_deps.rake
308
+ - lib/test_track.rb
309
+ - lib/test_track_rails_client/assignment_helper.rb
310
+ - lib/test_track_rails_client/engine.rb
311
+ - lib/test_track_rails_client/rspec_helpers.rb
312
+ - lib/test_track_rails_client/version.rb
313
+ - lib/test_track_rails_client.rb
314
+ - LICENSE
315
+ - Rakefile
316
+ - README.md
317
+ homepage: https://github.com/Betterment
318
+ licenses:
319
+ - MIT
320
+ post_install_message:
321
+ rdoc_options: []
322
+ require_paths:
323
+ - lib
324
+ required_ruby_version: !ruby/object:Gem::Requirement
325
+ none: false
326
+ requirements:
327
+ - - ! '>='
328
+ - !ruby/object:Gem::Version
329
+ version: 1.9.3
330
+ required_rubygems_version: !ruby/object:Gem::Requirement
331
+ none: false
332
+ requirements:
333
+ - - ! '>='
334
+ - !ruby/object:Gem::Version
335
+ version: '0'
336
+ segments:
337
+ - 0
338
+ hash: -2502608086353966253
339
+ requirements: []
340
+ rubyforge_project:
341
+ rubygems_version: 1.8.23.2
342
+ signing_key:
343
+ specification_version: 3
344
+ summary: Rails client for TestTrack
345
+ test_files: []