1+ require "drip/errors"
12require "drip/response"
23require "drip/client/accounts"
34require "drip/client/broadcasts"
1415require "drip/client/webhooks"
1516require "drip/client/workflows"
1617require "drip/client/workflow_triggers"
17- require "faraday "
18- require "faraday_middleware "
18+ require "net/http "
19+ require "uri "
1920require "json"
2021
2122module 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 : /\b json$/
106- f . adapter :net_http
107- end
119+ Drip ::Response . new ( response . code . to_i , response . body )
108120 end
109121 end
110122end
0 commit comments