lib/pina/rest_adapter.rb in pina-0.10.1 vs lib/pina/rest_adapter.rb in pina-0.11.0
- old
+ new
@@ -1,56 +1,57 @@
module Pina
class RestAdapter
class << self
def get(resource, id_or_params = nil)
- fail ConfigurationNotSet unless Pina.configuration
-
- request = Typhoeus.get(url(resource, id_or_params), headers: auth)
- Response.new(request.response_code, request.body)
+ net_http_for(:get, resource, id_or_params)
end
def post(resource, payload)
- fail ConfigurationNotSet unless Pina.configuration
+ net_http_for(:post, resource, nil, payload)
+ end
- request = Typhoeus.post(url(resource, nil), headers: auth
- .merge(content_type), body: ActiveSupport::JSON.encode(payload))
+ def patch(resource, id, payload)
+ net_http_for(:patch, resource, id, payload)
+ end
- Response.new(request.response_code, request.body)
+ def delete(resource, id = nil)
+ net_http_for(:delete, resource, id)
end
- def patch(resource, id, payload)
+ private
+
+ def net_http_for(method, resource, id, payload = nil)
fail ConfigurationNotSet unless Pina.configuration
- request = Typhoeus.patch(url(resource, id), headers: auth
- .merge(content_type), body: ActiveSupport::JSON.encode(payload))
+ uri = URI(url(resource, id))
- Response.new(request.response_code, request.body)
- end
+ request = net_http_class_for(method).new(uri)
+ headers.each do |k, v|
+ request[k] = v
+ end
+ request.set_form_data(payload.to_h) if payload
- def delete(resource, id = nil)
- fail ConfigurationNotSet unless Pina.configuration
+ response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: true) do |http|
+ http.request(request)
+ end
- request = Typhoeus.delete(url(resource, id), headers: auth)
- Response.new(request.response_code, request.body)
+ Response.new(response.code.to_i, response.body)
end
- private
+ def net_http_class_for(method)
+ Kernel.const_get("Net::HTTP::#{method.capitalize}")
+ end
- def content_type
+ def headers
{
+ 'Authorization' => 'Basic ' + Base64
+ .strict_encode64("#{Pina.configuration.email}:#{Pina.configuration.api_token}"),
'Accept-Encoding' => 'application/json',
'Content-Type' => 'application/json'
}
end
- def auth
- { 'Authorization' => 'Basic ' + Base64
- .strict_encode64("#{Pina.configuration.email}:"\
- "#{Pina.configuration.api_token}")
- }
- end
-
def url(resource, id_or_params)
if id_or_params.is_a? Hash
params = prepare_params_for_request(id_or_params)
Pina.configuration.base_url + "#{resource}?#{params}"
else
@@ -65,11 +66,9 @@
class Response
attr_accessor :body, :status_code
def initialize(status_code, body)
- raise Pina::ConnectionError if status_code == 0
-
@status_code = status_code
@body = body
end
def ok?