test_track_rails_client 0.9.0

Sign up to get free protection for your applications and to get access to all the features.
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: []