test_track_rails_client 0.9.20 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,15 +1,15 @@
1
1
  ---
2
2
  !binary "U0hBMQ==":
3
3
  metadata.gz: !binary |-
4
- YjMxNjA4MWVlMjgwYjM3Yjg2MjlmMGRhNDU5MTRjZmYzZDEyMGZhYw==
4
+ YjRkODQyZjM0ODM2YzM0NzFhYTE5YTU4ZWQ4YjhhYjQ0ZTg2OWQxYw==
5
5
  data.tar.gz: !binary |-
6
- YzM5NTQ3YTEwODQ4MDJiMjczYWI1ZDI5MmYwM2ZkNzVjMWYzOWFhNg==
6
+ OGViNGE1Y2NlNTM2NWVhYWI5ZjcxZmIyZGNhYTRjOTA4NTBmMDE0NA==
7
7
  SHA512:
8
8
  metadata.gz: !binary |-
9
- ZTM5NzZhZjA2YzZjYjI1MzdiYWMxYTEzM2RkZTBlNzg0NjYxNTcyYjU1M2Ey
10
- N2JmNzNlYTQxYmRlMTA2NzAzMTJkNWI0NmZlMTQ1YTlhNWExZDdlYzJjN2Uz
11
- OTEzMjljMDQ0NGI2NDg3NTNkYTc3NWU1MDVmYTBlMDcwM2ViYjc=
9
+ OTM5YmZkYTNhNTllZmNhNWNmNzYwODM0ZmNmNzE3NTg1ZDFiYjg1MmY3Mjg2
10
+ Yjk5NGFmZTA0NWM2ZjhlYTFiNmNkNjc4NzA3NWE3YTdlODg3MWU4MDNjNjZj
11
+ YzZhYTMyNzM5NTFkNjMyYzcwZTk2Y2Y4YzdmODJkZDI2OTkwZGU=
12
12
  data.tar.gz: !binary |-
13
- ZWU4ZDZjNjg2ODUyNjA5ODc1OGIzODA5NzA3NzAzYzJjNjBhMjQxMTA2ZDcw
14
- Mjg0ODI2ODE2MDBlOGQ0ZjA4ZjEwZDI2ZjJlNjU5Yzc2N2QwM2VhZjFkOWFi
15
- OGU3N2UwZGE3ZDMwYTU1YzJmNjQzMmFiMDY4YmE2Mjg4MjYzZmU=
13
+ YzMyOWIzYmNiODcwZTI1NzZhYjg0NGY3OWUwZjRjMDExMWIzYTIxZDZhMjZi
14
+ NzAwNjVmYWM1MGQxNzU0MTlkYTBmNzg0ZGQ3ZDRkY2JiNWUxMzk5Y2FhZjAw
15
+ YTEyYjUwMjNhNTM5OTVmMzAwNWZiN2I4ZjE5NjRmYjU3YjlkMDQ=
@@ -0,0 +1,5 @@
1
+ class Tt::Api::V1::SplitDetailsController < Tt::Api::V1::ApplicationController
2
+ def show
3
+ @split_detail = TestTrack::FakeServer.split_details(params[:id])
4
+ end
5
+ end
@@ -0,0 +1,5 @@
1
+ class Tt::Api::V1::VisitorDetailsController < Tt::Api::V1::ApplicationController
2
+ def show
3
+ render json: TestTrack::FakeServer.visitor_details
4
+ end
5
+ end
@@ -0,0 +1,39 @@
1
+ class TestTrack::Fake::SplitDetail
2
+ attr_reader :name
3
+
4
+ def initialize(name)
5
+ @name = name
6
+ end
7
+
8
+ def details
9
+ @details ||= _details
10
+ end
11
+
12
+ private
13
+
14
+ def _details
15
+ {
16
+ name: name,
17
+ hypothesis: "user will interact more with blue banner",
18
+ location: "home screen",
19
+ platform: "mobile",
20
+ owner: "mobile team",
21
+ assignment_criteria: "user has mobile app",
22
+ description: "banner test to see if users will interact more",
23
+ variant_details: variant_details
24
+ }
25
+ end
26
+
27
+ def variant_details
28
+ [
29
+ {
30
+ name: "first variant detail",
31
+ description: "red banner on homepage"
32
+ },
33
+ {
34
+ name: "second variant detail",
35
+ description: "yellow banner on homepage"
36
+ }
37
+ ]
38
+ end
39
+ end
@@ -0,0 +1,24 @@
1
+ class TestTrack::Fake::VisitorDetail
2
+ # rubocop:disable Metrics/MethodLength
3
+ def self.instance
4
+ {
5
+ assignment_details: [
6
+ {
7
+ split_name: 'really_cool_feature',
8
+ split_location: 'Home page',
9
+ variant_name: 'Enabled',
10
+ variant_description: 'The feature is enabled',
11
+ assigned_at: '2017-04-11T00:00:00Z'
12
+ },
13
+ {
14
+ split_name: 'green_button',
15
+ split_location: 'Sign up',
16
+ variant_name: 'Button green',
17
+ variant_description: 'That big button will be green',
18
+ assigned_at: '2017-04-10T00:00:00Z'
19
+ }
20
+ ]
21
+ }
22
+ end
23
+ # rubocop:enable Metrics/MethodLength
24
+ end
@@ -4,10 +4,18 @@ class TestTrack::FakeServer
4
4
  TestTrack::Fake::SplitRegistry.instance.splits
5
5
  end
6
6
 
7
+ def split_details(name)
8
+ TestTrack::Fake::SplitDetail.new(name).details
9
+ end
10
+
7
11
  def visitor
8
12
  TestTrack::Fake::Visitor.instance
9
13
  end
10
14
 
15
+ def visitor_details
16
+ TestTrack::Fake::VisitorDetail.instance
17
+ end
18
+
11
19
  def assignments
12
20
  TestTrack::Fake::Visitor.instance.assignments
13
21
  end
@@ -0,0 +1,24 @@
1
+ class TestTrack::Remote::AssignmentDetail
2
+ include TestTrack::RemoteModel
3
+
4
+ attributes :split_location, :split_name, :variant_name, :variant_description, :assigned_at
5
+
6
+ def assigned_at
7
+ original = super
8
+ if original.blank? || !original.respond_to?(:in_time_zone)
9
+ nil
10
+ else
11
+ original.in_time_zone rescue nil # rubocop:disable Style/RescueModifier
12
+ end
13
+ end
14
+
15
+ def self.fake_instance_attributes(_)
16
+ {
17
+ split_name: 'excellent_feature',
18
+ split_location: 'Sign up',
19
+ variant_name: 'Excellent feature enabled',
20
+ variant_description: 'This feature is on which means something will be different.',
21
+ assigned_at: '2017-04-10T05:00:00Z'
22
+ }
23
+ end
24
+ end
@@ -0,0 +1,42 @@
1
+ class TestTrack::Remote::SplitDetail
2
+ include TestTrack::RemoteModel
3
+
4
+ collection_path '/api/v1/split_details'
5
+
6
+ attributes :name, :hypothesis, :assignment_criteria, :description, :owner, :location, :platform, :variant_details
7
+
8
+ def self.from_name(name)
9
+ # TODO: FakeableHer needs to make this faking a feature of `get`
10
+ if faked?
11
+ new(fake_instance_attributes(name))
12
+ else
13
+ get("/api/v1/split_details/#{name}")
14
+ end
15
+ end
16
+
17
+ def self.fake_instance_attributes(name)
18
+ {
19
+ name: name,
20
+ hypothesis: "fake hypothesis",
21
+ assignment_criteria: "fake criteria for everyone",
22
+ description: "fake but still good description",
23
+ owner: "fake owner",
24
+ location: "fake activity",
25
+ platform: "mobile",
26
+ variant_details: fake_variant_details
27
+ }
28
+ end
29
+
30
+ def self.fake_variant_details
31
+ [
32
+ {
33
+ name: "fake first variant detail",
34
+ description: "There are FAQ links in a sidebar"
35
+ },
36
+ {
37
+ name: "fake second variant detail",
38
+ description: "There are FAQ links in the default footer"
39
+ }
40
+ ]
41
+ end
42
+ end
@@ -0,0 +1,23 @@
1
+ class TestTrack::Remote::VisitorDetail
2
+ include TestTrack::RemoteModel
3
+
4
+ has_many :assignment_details
5
+
6
+ def self.from_identifier(identifier_type, identifier_value)
7
+ # TODO: FakeableHer needs to make this faking a feature of `get`
8
+ if faked?
9
+ new(fake_instance_attributes(nil))
10
+ else
11
+ get("/api/v1/identifier_types/#{identifier_type}/identifiers/#{identifier_value}/visitor_detail")
12
+ end
13
+ end
14
+
15
+ def self.fake_instance_attributes(_)
16
+ {
17
+ assignment_details: [
18
+ TestTrack::Remote::AssignmentDetail.fake_instance_attributes(nil),
19
+ TestTrack::Remote::AssignmentDetail.fake_instance_attributes(nil)
20
+ ]
21
+ }
22
+ end
23
+ end
@@ -0,0 +1 @@
1
+ json.(@split_detail, :name, :hypothesis, :assignment_criteria, :description, :owner, :location, :platform)
data/config/routes.rb CHANGED
@@ -11,9 +11,12 @@ Rails.application.routes.draw do
11
11
 
12
12
  resources :visitors, only: :show
13
13
 
14
+ resource :split_detail, only: :show
15
+
14
16
  resources :identifier_types, only: [], param: :name do
15
17
  resources :identifiers, only: [], param: :value do
16
18
  resource :visitor, only: :show, controller: 'identifier_visitors'
19
+ resource :visitor_details, only: :show
17
20
  end
18
21
  end
19
22
 
@@ -1,3 +1,3 @@
1
1
  module TestTrackRailsClient
2
- VERSION = "0.9.20" # rubocop:disable Style/MutableConstant
2
+ VERSION = "1.0.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: 0.9.20
4
+ version: 1.0.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ryan O'Neill
@@ -13,7 +13,7 @@ authors:
13
13
  autorequire:
14
14
  bindir: bin
15
15
  cert_chain: []
16
- date: 2017-03-04 00:00:00.000000000 Z
16
+ date: 2017-04-12 00:00:00.000000000 Z
17
17
  dependencies:
18
18
  - !ruby/object:Gem::Dependency
19
19
  name: rails
@@ -242,7 +242,9 @@ files:
242
242
  - app/controllers/tt/api/v1/identifiers_controller.rb
243
243
  - app/controllers/tt/api/v1/resets_controller.rb
244
244
  - app/controllers/tt/api/v1/split_configs_controller.rb
245
+ - app/controllers/tt/api/v1/split_details_controller.rb
245
246
  - app/controllers/tt/api/v1/split_registries_controller.rb
247
+ - app/controllers/tt/api/v1/visitor_details_controller.rb
246
248
  - app/controllers/tt/api/v1/visitors_controller.rb
247
249
  - app/helpers/test_track/application_helper.rb
248
250
  - app/models/concerns/test_track/identity.rb
@@ -254,21 +256,26 @@ files:
254
256
  - app/models/test_track/assignment.rb
255
257
  - app/models/test_track/config_updater.rb
256
258
  - app/models/test_track/create_alias_job.rb
259
+ - app/models/test_track/fake/split_detail.rb
257
260
  - app/models/test_track/fake/split_registry.rb
258
261
  - app/models/test_track/fake/visitor.rb
262
+ - app/models/test_track/fake/visitor_detail.rb
259
263
  - app/models/test_track/fake_server.rb
260
264
  - app/models/test_track/identity_session_discriminator.rb
261
265
  - app/models/test_track/misconfiguration_notifier.rb
262
266
  - app/models/test_track/notify_assignment_job.rb
263
267
  - app/models/test_track/offline_session.rb
264
268
  - app/models/test_track/remote/assignment.rb
269
+ - app/models/test_track/remote/assignment_detail.rb
265
270
  - app/models/test_track/remote/assignment_event.rb
266
271
  - app/models/test_track/remote/fake_server.rb
267
272
  - app/models/test_track/remote/identifier.rb
268
273
  - app/models/test_track/remote/identifier_type.rb
269
274
  - app/models/test_track/remote/split_config.rb
275
+ - app/models/test_track/remote/split_detail.rb
270
276
  - app/models/test_track/remote/split_registry.rb
271
277
  - app/models/test_track/remote/visitor.rb
278
+ - app/models/test_track/remote/visitor_detail.rb
272
279
  - app/models/test_track/session.rb
273
280
  - app/models/test_track/unsynced_assignments_notifier.rb
274
281
  - app/models/test_track/variant_calculator.rb
@@ -277,6 +284,7 @@ files:
277
284
  - app/models/test_track/visitor_dsl.rb
278
285
  - app/views/tt/api/v1/identifier_visitors/show.json.jbuilder
279
286
  - app/views/tt/api/v1/identifiers/create.json.jbuilder
287
+ - app/views/tt/api/v1/split_details/show.json.jbuilder
280
288
  - app/views/tt/api/v1/split_registries/show.json.jbuilder
281
289
  - app/views/tt/api/v1/visitors/_show.json.jbuilder
282
290
  - app/views/tt/api/v1/visitors/show.json.jbuilder