module Spyke::Http::ClassMethods

Public Instance Methods

new_collection_from_result(result) click to toggle source
# File lib/spyke/http.rb, line 36
def new_collection_from_result(result)
  Collection.new Array(result.data).map { |record| new_or_return(record) }, result.metadata
end
new_instance_from_result(result) click to toggle source
# File lib/spyke/http.rb, line 32
def new_instance_from_result(result)
  new_or_return result.data if result.data
end
request(method, path, params = {}) click to toggle source
# File lib/spyke/http.rb, line 24
def request(method, path, params = {})
  ActiveSupport::Notifications.instrument('request.spyke', method: method) do |payload|
    response = send_request(method, path, params)
    payload[:url], payload[:status] = response.env.url, response.status
    Result.new_from_response(response)
  end
end
uri(uri_template = nil) click to toggle source
# File lib/spyke/http.rb, line 40
def uri(uri_template = nil)
  @uri ||= uri_template || default_uri
end

Private Instance Methods

default_uri() click to toggle source
# File lib/spyke/http.rb, line 81
def default_uri
  "#{model_name.element.pluralize}(/:#{primary_key})"
end
new_instance_or_collection_from_result(result) click to toggle source
# File lib/spyke/http.rb, line 65
def new_instance_or_collection_from_result(result)
  if result.data.is_a?(Array)
    new_collection_from_result(result)
  else
    new_instance_from_result(result)
  end
end
new_or_return(attributes_or_object) click to toggle source
# File lib/spyke/http.rb, line 73
def new_or_return(attributes_or_object)
  if attributes_or_object.is_a?(Spyke::Base)
    attributes_or_object
  else
    new attributes_or_object
  end
end
scoped_request(method) click to toggle source
# File lib/spyke/http.rb, line 59
def scoped_request(method)
  uri = new.uri
  params = current_scope.params.except(*uri.variables)
  request(method, uri, params)
end
send_request(method, path, params) click to toggle source
# File lib/spyke/http.rb, line 46
def send_request(method, path, params)
  connection.send(method) do |request|
    if method == :get
      request.url path.to_s, params
    else
      request.url path.to_s
      request.body = params
    end
  end
rescue Faraday::ConnectionFailed, Faraday::TimeoutError
  raise ConnectionError
end