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?