Skip to content

Commit 3dac3a6

Browse files
committed
Separate models from HTTP
1 parent f066053 commit 3dac3a6

File tree

12 files changed

+51
-60
lines changed

12 files changed

+51
-60
lines changed

app/models/concerns/test_track/resource.rb

Lines changed: 0 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -1,54 +1,9 @@
1-
require 'faraday'
2-
require 'faraday/request/json'
3-
require 'faraday/response/json'
4-
require 'faraday/response/raise_error'
5-
61
module TestTrack::Resource
72
extend ActiveSupport::Concern
83

94
include ActiveModel::API
105
include ActiveModel::Attributes
116

12-
class << self
13-
attr_writer :connection
14-
15-
# FIXME: Raise UnrecoverableConnectivityError when we have a server error
16-
# FIXME: Remove `content_type` option and respect `Content-Type` header
17-
def connection
18-
@connection ||= Faraday.new(url: ENV['TEST_TRACK_API_URL']) do |conn|
19-
conn.use Faraday::Request::Json
20-
conn.use Faraday::Response::Json, content_type: []
21-
conn.use Faraday::Response::RaiseError
22-
# Number of seconds to wait for the connection to open.
23-
conn.options[:open_timeout] = (ENV['TEST_TRACK_OPEN_TIMEOUT'] || 2).to_i
24-
# Number of seconds to wait for one block to be read (via one read(2) call).
25-
conn.options[:timeout] = (ENV['TEST_TRACK_TIMEOUT'] || 4).to_i
26-
end
27-
end
28-
end
29-
30-
module Helpers
31-
private
32-
33-
def fake_requests?
34-
!TestTrack.enabled?
35-
end
36-
37-
def request(method:, path:, fake:, body: nil, headers: nil)
38-
# Ensure that fake responses are consistent with real responses
39-
return JSON.parse(JSON.generate(fake)) if fake_requests?
40-
41-
response = TestTrack::Resource.connection.run_request(method, path, body, headers)
42-
response.body
43-
end
44-
end
45-
46-
include Helpers
47-
48-
module ClassMethods
49-
include Helpers
50-
end
51-
527
private
538

549
def _assign_attribute(name, value)

app/models/test_track/client.rb

Lines changed: 36 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,36 @@
1+
require 'faraday'
2+
require 'faraday/request/json'
3+
require 'faraday/response/json'
4+
require 'faraday/response/raise_error'
5+
6+
module TestTrack::Client
7+
extend self
8+
9+
attr_writer :connection
10+
11+
def fake?
12+
!TestTrack.enabled?
13+
end
14+
15+
def request(method:, path:, fake:, body: nil, headers: nil)
16+
# Ensure that fake responses are consistent with real responses
17+
return JSON.parse(JSON.generate(fake)) if fake?
18+
19+
response = connection.run_request(method, path, body, headers)
20+
response.body
21+
end
22+
23+
# FIXME: Raise UnrecoverableConnectivityError when we have a server error
24+
# FIXME: Remove `content_type` option and respect `Content-Type` header
25+
def connection
26+
@connection ||= Faraday.new(url: ENV['TEST_TRACK_API_URL']) do |conn|
27+
conn.use Faraday::Request::Json
28+
conn.use Faraday::Response::Json, content_type: []
29+
conn.use Faraday::Response::RaiseError
30+
# Number of seconds to wait for the connection to open.
31+
conn.options[:open_timeout] = (ENV['TEST_TRACK_OPEN_TIMEOUT'] || 2).to_i
32+
# Number of seconds to wait for one block to be read (via one read(2) call).
33+
conn.options[:timeout] = (ENV['TEST_TRACK_TIMEOUT'] || 4).to_i
34+
end
35+
end
36+
end

app/models/test_track/remote/assignment_event.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -21,7 +21,7 @@ def self.create!(attributes)
2121
def save
2222
return false unless valid?
2323

24-
request(
24+
TestTrack::Client.request(
2525
method: :post,
2626
path: 'api/v1/assignment_event',
2727
body: { context: context, visitor_id: visitor_id, split_name: split_name, mixpanel_result: mixpanel_result },

app/models/test_track/remote/fake_server.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,6 @@ class TestTrack::Remote::FakeServer
22
def self.reset!(seed)
33
raise('Cannot reset FakeServer if TestTrack is enabled.') if TestTrack.enabled?
44

5-
TestTrack::Resource.connection.put('api/v1/reset', seed: seed)
5+
TestTrack::Client.connection.put('api/v1/reset', seed: seed)
66
end
77
end

app/models/test_track/remote/identifier.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,7 @@ def visitor=(value)
2525
def save
2626
return false unless valid?
2727

28-
result = request(
28+
result = TestTrack::Client.request(
2929
method: :post,
3030
path: 'api/v1/identifier',
3131
body: { identifier_type: identifier_type, visitor_id: visitor_id, value: value },

app/models/test_track/remote/identifier_type.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ class TestTrack::Remote::IdentifierType
88
def save
99
return false unless valid?
1010

11-
request(
11+
TestTrack::Client.request(
1212
method: :post,
1313
path: 'api/v1/identifier_type',
1414
body: { name: name },

app/models/test_track/remote/split_config.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,7 +7,7 @@ class TestTrack::Remote::SplitConfig
77
validates :name, :weighting_registry, presence: true
88

99
def self.destroy_existing(id)
10-
request(
10+
TestTrack::Client.request(
1111
method: :delete,
1212
path: "api/v1/split_configs/#{id}",
1313
fake: nil
@@ -19,7 +19,7 @@ def self.destroy_existing(id)
1919
def save
2020
return false unless valid?
2121

22-
request(
22+
TestTrack::Client.request(
2323
method: :post,
2424
path: 'api/v1/split_configs',
2525
body: { name: name, weighting_registry: weighting_registry },

app/models/test_track/remote/split_detail.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ class TestTrack::Remote::SplitDetail
1212
attr_reader :variant_details
1313

1414
def self.from_name(name)
15-
result = request(
15+
result = TestTrack::Client.request(
1616
method: :get,
1717
path: "api/v1/split_details/#{name}",
1818
fake: fake_instance_attributes(name)

app/models/test_track/remote/split_registry.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ def fake_instance_attributes(_)
1212
end
1313

1414
def instance
15-
result = request(
15+
result = TestTrack::Client.request(
1616
method: :get,
1717
path: "api/v3/builds/#{TestTrack.build_timestamp}/split_registry",
1818
fake: fake_instance_attributes(nil)
@@ -26,7 +26,7 @@ def reset
2626
end
2727

2828
def to_hash
29-
if fake_requests?
29+
if TestTrack::Client.fake?
3030
instance.attributes.freeze
3131
else
3232
fetch_cache { instance.attributes }.freeze

app/models/test_track/remote/visitor.rb

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@ class TestTrack::Remote::Visitor
66
attr_reader :assignments
77

88
def self.find(id)
9-
result = request(
9+
result = TestTrack::Client.request(
1010
method: :get,
1111
path: "api/v1/visitors/#{id}",
1212
fake: fake_instance_attributes(nil)
@@ -19,7 +19,7 @@ def self.from_identifier(identifier_type, identifier_value)
1919
raise "must provide an identifier_type" if identifier_type.blank?
2020
raise "must provide an identifier_value" if identifier_value.blank?
2121

22-
result = request(
22+
result = TestTrack::Client.request(
2323
method: :get,
2424
path: "api/v1/identifier_types/#{identifier_type}/identifiers/#{identifier_value}/visitor",
2525
fake: fake_instance_attributes(nil)

0 commit comments

Comments
 (0)