Skip to content

Commit a74bb91

Browse files
authored
Merge pull request #39 from DripEmail/remove-faraday
Remove Faraday
2 parents f4a0c0c + a4fa357 commit a74bb91

20 files changed

Lines changed: 240 additions & 350 deletions

drip-ruby.gemspec

Lines changed: 1 addition & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -25,7 +25,5 @@ Gem::Specification.new do |spec|
2525
spec.add_development_dependency "shoulda-context", "~> 1.0"
2626
spec.add_development_dependency "mocha", "~> 1.1"
2727
spec.add_development_dependency "minitest", "~> 5.0"
28-
29-
spec.add_runtime_dependency "faraday", "~> 0.13"
30-
spec.add_runtime_dependency "faraday_middleware", "~> 0.12"
28+
spec.add_development_dependency "webmock", "~> 3.4"
3129
end

lib/drip/client.rb

Lines changed: 43 additions & 31 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
require "drip/errors"
12
require "drip/response"
23
require "drip/client/accounts"
34
require "drip/client/broadcasts"
@@ -14,8 +15,8 @@
1415
require "drip/client/webhooks"
1516
require "drip/client/workflows"
1617
require "drip/client/workflow_triggers"
17-
require "faraday"
18-
require "faraday_middleware"
18+
require "net/http"
19+
require "uri"
1920
require "json"
2021

2122
module Drip
@@ -36,6 +37,8 @@ class Client
3637
include Workflows
3738
include WorkflowTriggers
3839

40+
REDIRECT_LIMIT = 10
41+
3942
attr_accessor :access_token, :api_key, :account_id, :url_prefix
4043

4144
def initialize(options = {})
@@ -55,56 +58,65 @@ def content_type
5558
end
5659

5760
def get(url, options = {})
58-
make_request(:get, url, options)
61+
make_request(Net::HTTP::Get, make_uri(url), options)
5962
end
6063

6164
def post(url, options = {})
62-
make_request(:post, url, options)
65+
make_request(Net::HTTP::Post, make_uri(url), options)
6366
end
6467

6568
def put(url, options = {})
66-
make_request(:put, url, options)
69+
make_request(Net::HTTP::Put, make_uri(url), options)
6770
end
6871

6972
def delete(url, options = {})
70-
make_request(:delete, url, options)
73+
make_request(Net::HTTP::Delete, make_uri(url), options)
7174
end
7275

73-
def make_request(verb, url, options)
76+
private
77+
78+
def make_uri(path)
79+
URI(url_prefix) + URI(path)
80+
end
81+
82+
def make_request(verb_klass, uri, options, step = 0)
83+
raise TooManyRedirectsError, 'too many HTTP redirects' if step >= REDIRECT_LIMIT
84+
7485
build_response do
75-
connection.send(verb) do |req|
76-
req.url url
86+
Net::HTTP.start(uri.host, uri.port, use_ssl: uri.scheme == "https") do |http|
87+
if verb_klass.is_a? Net::HTTP::Get
88+
uri.query = URI.encode_www_form(options)
89+
end
90+
91+
request = verb_klass.new uri
92+
93+
unless verb_klass.is_a? Net::HTTP::Get
94+
request.body = options.to_json
95+
end
7796

78-
if verb == :get
79-
req.params = options
97+
request['User-Agent'] = "Drip Ruby v#{Drip::VERSION}"
98+
request['Content-Type'] = content_type
99+
request['Accept'] = "*/*"
100+
101+
if access_token
102+
request['Authorization'] = "Bearer #{access_token}"
80103
else
81-
req.body = options.to_json
104+
request.basic_auth api_key, ""
105+
end
106+
107+
response = http.request request
108+
if response.is_a?(Net::HTTPRedirection)
109+
return make_request(verb_klass, URI(response["Location"]), options, step + 1)
110+
else
111+
response
82112
end
83113
end
84114
end
85115
end
86116

87117
def build_response(&block)
88118
response = yield
89-
Drip::Response.new(response.status, response.body)
90-
end
91-
92-
def connection
93-
@connection ||= Faraday.new do |f|
94-
f.url_prefix = url_prefix
95-
f.headers['User-Agent'] = "Drip Ruby v#{Drip::VERSION}"
96-
f.headers['Content-Type'] = content_type
97-
f.headers['Accept'] = "*/*"
98-
99-
if access_token
100-
f.headers['Authorization'] = "Bearer #{access_token}"
101-
else
102-
f.basic_auth api_key, ""
103-
end
104-
105-
f.response :json, content_type: /\bjson$/
106-
f.adapter :net_http
107-
end
119+
Drip::Response.new(response.code.to_i, response.body)
108120
end
109121
end
110122
end

lib/drip/errors.rb

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
module Drip
2+
class TooManyRedirectsError < StandardError; end
3+
end

test/drip/client/accounts_test.rb

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,16 @@
22

33
class Drip::Client::AccountsTest < Drip::TestCase
44
def setup
5-
@stubs = Faraday::Adapter::Test::Stubs.new
6-
7-
@connection = Faraday.new do |builder|
8-
builder.adapter :test, @stubs
9-
end
10-
115
@client = Drip::Client.new
12-
@client.expects(:connection).at_least_once.returns(@connection)
136
end
147

158
context "#accounts" do
169
setup do
1710
@response_status = 200
18-
@response_body = stub
11+
@response_body = "stub"
1912

20-
@stubs.get "accounts" do
21-
[@response_status, {}, @response_body]
22-
end
13+
stub_request(:get, "https://api.getdrip.com/v2/accounts").
14+
to_return(status: @response_status, body: @response_body, headers: {})
2315
end
2416

2517
should "send the right request" do
@@ -31,12 +23,11 @@ def setup
3123
context "#account" do
3224
setup do
3325
@response_status = 200
34-
@response_body = stub
26+
@response_body = "stub"
3527
@id = 9999999
3628

37-
@stubs.get "accounts/#{@id}" do
38-
[@response_status, {}, @response_body]
39-
end
29+
stub_request(:get, "https://api.getdrip.com/v2/accounts/#{@id}").
30+
to_return(status: @response_status, body: @response_body, headers: {})
4031
end
4132

4233
should "send the right request" do

test/drip/client/broadcasts_test.rb

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,16 @@
22

33
class Drip::Client::BroadcastsTest < Drip::TestCase
44
def setup
5-
@stubs = Faraday::Adapter::Test::Stubs.new
6-
7-
@connection = Faraday.new do |builder|
8-
builder.adapter :test, @stubs
9-
end
10-
115
@client = Drip::Client.new { |c| c.account_id = "12345" }
12-
@client.expects(:connection).at_least_once.returns(@connection)
136
end
147

158
context "#broadcasts" do
169
setup do
1710
@response_status = 200
18-
@response_body = stub
11+
@response_body = "stub"
1912

20-
@stubs.get "12345/broadcasts" do
21-
[@response_status, {}, @response_body]
22-
end
13+
stub_request(:get, "https://api.getdrip.com/v2/12345/broadcasts").
14+
to_return(status: @response_status, body: @response_body, headers: {})
2315
end
2416

2517
should "send the correct request" do
@@ -31,12 +23,11 @@ def setup
3123
context "#broadcast" do
3224
setup do
3325
@response_status = 200
34-
@response_body = stub
26+
@response_body = "stub"
3527
@id = 99999
3628

37-
@stubs.get "12345/broadcasts/#{@id}" do
38-
[@response_status, {}, @response_body]
39-
end
29+
stub_request(:get, "https://api.getdrip.com/v2/12345/broadcasts/#{@id}").
30+
to_return(status: @response_status, body: @response_body, headers: {})
4031
end
4132

4233
should "send the correct request" do

test/drip/client/campaign_subscriptions_test.rb

Lines changed: 3 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -2,25 +2,17 @@
22

33
class Drip::Client::CampaignSubscriptionsTest < Drip::TestCase
44
def setup
5-
@stubs = Faraday::Adapter::Test::Stubs.new
6-
7-
@connection = Faraday.new do |builder|
8-
builder.adapter :test, @stubs
9-
end
10-
115
@client = Drip::Client.new { |c| c.account_id = "12345" }
12-
@client.expects(:connection).at_least_once.returns(@connection)
136
end
147

158
context "#campaign_subscriptions" do
169
setup do
1710
@response_status = 200
18-
@response_body = stub
11+
@response_body = "stub"
1912
@subscriber_id = "abc123"
2013

21-
@stubs.get "12345/subscribers/#{@subscriber_id}/campaign_subscriptions" do
22-
[@response_status, {}, @response_body]
23-
end
14+
stub_request(:get, "https://api.getdrip.com/v2/12345/subscribers/#{@subscriber_id}/campaign_subscriptions").
15+
to_return(status: @response_status, body: @response_body, headers: {})
2416
end
2517

2618
should "send the right request" do

test/drip/client/campaigns_test.rb

Lines changed: 15 additions & 27 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,16 @@
22

33
class Drip::Client::CampaignsTest < Drip::TestCase
44
def setup
5-
@stubs = Faraday::Adapter::Test::Stubs.new
6-
7-
@connection = Faraday.new do |builder|
8-
builder.adapter :test, @stubs
9-
end
10-
115
@client = Drip::Client.new { |c| c.account_id = "12345" }
12-
@client.expects(:connection).at_least_once.returns(@connection)
136
end
147

158
context "#campaigns" do
169
setup do
1710
@response_status = 200
18-
@response_body = stub
11+
@response_body = "stub"
1912

20-
@stubs.get "12345/campaigns" do
21-
[@response_status, {}, @response_body]
22-
end
13+
stub_request(:get, "https://api.getdrip.com/v2/12345/campaigns").
14+
to_return(status: @response_status, body: @response_body, headers: {})
2315
end
2416

2517
should "send the right request" do
@@ -31,12 +23,11 @@ def setup
3123
context "#campaign" do
3224
setup do
3325
@response_status = 200
34-
@response_body = stub
26+
@response_body = "stub"
3527
@id = 9999999
3628

37-
@stubs.get "12345/campaigns/#{@id}" do
38-
[@response_status, {}, @response_body]
39-
end
29+
stub_request(:get, "https://api.getdrip.com/v2/12345/campaigns/#{@id}").
30+
to_return(status: @response_status, body: @response_body, headers: {})
4031
end
4132

4233
should "send the right request" do
@@ -48,12 +39,11 @@ def setup
4839
context "#activate_campaign" do
4940
setup do
5041
@response_status = 204
51-
@response_body = stub
42+
@response_body = nil
5243
@id = 9999999
5344

54-
@stubs.post "12345/campaigns/#{@id}/activate" do
55-
[@response_status, {}, @response_body]
56-
end
45+
stub_request(:post, "https://api.getdrip.com/v2/12345/campaigns/#{@id}/activate").
46+
to_return(status: @response_status, body: @response_body, headers: {})
5747
end
5848

5949
should "send the right request" do
@@ -65,12 +55,11 @@ def setup
6555
context "#pause_campaign" do
6656
setup do
6757
@response_status = 204
68-
@response_body = stub
58+
@response_body = nil
6959
@id = 9999999
7060

71-
@stubs.post "12345/campaigns/#{@id}/pause" do
72-
[@response_status, {}, @response_body]
73-
end
61+
stub_request(:post, "https://api.getdrip.com/v2/12345/campaigns/#{@id}/pause").
62+
to_return(status: @response_status, body: @response_body, headers: {})
7463
end
7564

7665
should "send the right request" do
@@ -82,12 +71,11 @@ def setup
8271
context "#campaign_subscribers" do
8372
setup do
8473
@response_status = 200
85-
@response_body = stub
74+
@response_body = "stub"
8675
@id = 9999999
8776

88-
@stubs.get "12345/campaigns/#{@id}/subscribers" do
89-
[@response_status, {}, @response_body]
90-
end
77+
stub_request(:get, "https://api.getdrip.com/v2/12345/campaigns/#{@id}/subscribers").
78+
to_return(status: @response_status, body: @response_body, headers: {})
9179
end
9280

9381
should "send the right request" do

test/drip/client/conversions_test.rb

Lines changed: 6 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -2,24 +2,16 @@
22

33
class Drip::Client::ConversionsTest < Drip::TestCase
44
def setup
5-
@stubs = Faraday::Adapter::Test::Stubs.new
6-
7-
@connection = Faraday.new do |builder|
8-
builder.adapter :test, @stubs
9-
end
10-
115
@client = Drip::Client.new { |c| c.account_id = "12345" }
12-
@client.expects(:connection).at_least_once.returns(@connection)
136
end
147

158
context "#conversions" do
169
setup do
1710
@response_status = 200
18-
@response_body = stub
11+
@response_body = "stub"
1912

20-
@stubs.get "12345/goals" do
21-
[@response_status, {}, @response_body]
22-
end
13+
stub_request(:get, "https://api.getdrip.com/v2/12345/goals").
14+
to_return(status: @response_status, body: @response_body, headers: {})
2315
end
2416

2517
should "send the right request" do
@@ -31,12 +23,11 @@ def setup
3123
context "#conversion" do
3224
setup do
3325
@response_status = 200
34-
@response_body = stub
26+
@response_body = "stub"
3527
@id = 9999999
3628

37-
@stubs.get "12345/goals/#{@id}" do
38-
[@response_status, {}, @response_body]
39-
end
29+
stub_request(:get, "https://api.getdrip.com/v2/12345/goals/#{@id}").
30+
to_return(status: @response_status, body: @response_body, headers: {})
4031
end
4132

4233
should "send the right request" do

0 commit comments

Comments
 (0)