class Pina::RestAdapter
Constants
- REQUEST_TIMEOUT
- SERVICE_UNAVAILABLE
Public Class Methods
delete(resource, id = nil)
click to toggle source
# File lib/pina/rest_adapter.rb, line 23 def delete(resource, id = nil) net_http_for(:delete, resource, id) end
get(resource, id_or_params = nil)
click to toggle source
# File lib/pina/rest_adapter.rb, line 11 def get(resource, id_or_params = nil) net_http_for(:get, resource, id_or_params) end
patch(resource, id, payload)
click to toggle source
# File lib/pina/rest_adapter.rb, line 19 def patch(resource, id, payload) net_http_for(:patch, resource, id, payload, multipart: false) end
post(resource, payload, multipart: false)
click to toggle source
# File lib/pina/rest_adapter.rb, line 15 def post(resource, payload, multipart: false) net_http_for(:post, resource, nil, payload, multipart: multipart) end
Private Class Methods
auth_header()
click to toggle source
# File lib/pina/rest_adapter.rb, line 56 def auth_header { 'Authorization' => 'Basic ' + Base64 .strict_encode64("#{Pina.configuration.email}:#{Pina.configuration.api_token}") } end
headers()
click to toggle source
# File lib/pina/rest_adapter.rb, line 63 def headers auth_header.merge('Accept-Encoding' => 'application/json', 'Content-Type' => 'application/json') end
multipart_payload(payload)
click to toggle source
# File lib/pina/rest_adapter.rb, line 85 def multipart_payload(payload) return payload unless payload.is_a? Hash payload.map do |key, val| next unless val.respond_to?(:path) payload[key] = UploadIO.new(val, 'application/pdf', val.path.split('/').last) end payload end
multipart_request(uri, payload)
click to toggle source
# File lib/pina/rest_adapter.rb, line 77 def multipart_request(uri, payload) request = Net::HTTP::Post::Multipart.new uri, multipart_payload(payload) auth_header.each do |k, v| request[k] = v end request end
net_http_class_for(method)
click to toggle source
# File lib/pina/rest_adapter.rb, line 52 def net_http_class_for(method) Kernel.const_get("Net::HTTP::#{method.capitalize}") end
net_http_for(method, resource, id, payload = nil, multipart: false)
click to toggle source
# File lib/pina/rest_adapter.rb, line 29 def net_http_for(method, resource, id, payload = nil, multipart: false) raise ConfigurationNotSet unless Pina.configuration uri = URI(url(resource, id)) request = multipart ? multipart_request(uri, payload) : request(uri, method, payload) begin response = Net::HTTP.start(uri.hostname, uri.port, use_ssl: Pina.configuration.use_ssl) do |http| http.request(request) end rescue SocketError return Pina::Models::Error.new(status_code: SERVICE_UNAVAILABLE, message: "služba nedostupná - #{Pina.configuration.api_host}") rescue Net::ReadTimeout return Pina::Models::Error.new(status_code: REQUEST_TIMEOUT, message: "služba neodpovídá - #{Pina.configuration.api_host}") end Response.new(response.code.to_i, response.body) end
prepare_params_for_request(params)
click to toggle source
# File lib/pina/rest_adapter.rb, line 108 def prepare_params_for_request(params) params.map { |key, value| "#{URI.escape(key.to_s)}=#{URI.escape(value.to_s)}" }.join('&') end
request(uri, method, payload)
click to toggle source
# File lib/pina/rest_adapter.rb, line 68 def request(uri, method, payload) request = net_http_class_for(method).new(uri) headers.each do |k, v| request[k] = v end request.body = payload.to_json if payload request end
resource_with_namespace(*resource)
click to toggle source
# File lib/pina/rest_adapter.rb, line 112 def resource_with_namespace(*resource) resource.join('/') end
url(resource, id_or_params)
click to toggle source
# File lib/pina/rest_adapter.rb, line 97 def url(resource, id_or_params) resource = resource_with_namespace(resource) if id_or_params.is_a? Hash params = prepare_params_for_request(id_or_params) Pina.configuration.base_url + "#{resource}?#{params}" else Pina.configuration.base_url + "#{resource}/#{id_or_params}" end end