class Demio::Client

Constants

REQUEST_REDIRECT_FOLLOW_LIMIT

Attributes

api_key[R]
api_secret[R]

Public Class Methods

new(options = {}) click to toggle source
# File lib/demio/client.rb, line 25
def initialize(options = {})
  @api_key = options[:api_key]
  @api_secret = options[:api_secret]
end

Public Instance Methods

get(uri) click to toggle source
# File lib/demio/client.rb, line 30
def get(uri)
  make_request(Net::HTTP::Get, uri)
end
ping() click to toggle source
# File lib/demio/client.rb, line 38
def ping
  make_request(
    Net::HTTP::Get,
    "ping/query?api_key=#{api_key}&api_secret=#{api_secret}"
  )
end
put(uri, payload) click to toggle source
# File lib/demio/client.rb, line 34
def put(uri, payload)
  make_request(Net::HTTP::Put, uri, payload)
end

Private Instance Methods

base_uri() click to toggle source
# File lib/demio/client.rb, line 93
def base_uri
  "https://my.demio.com/api/v1/"
end
create_headers(request) click to toggle source
# File lib/demio/client.rb, line 77
def create_headers(request)
  request["Api-Key"] = api_key
  request["Api-Secret"] = api_secret
  request["Content-Type"] = "application/json"
  request["User-Agent"] = "Demio Ruby Client - #{Demio::VERSION}"
  request
end
create_request(verb_klass, uri, payload) click to toggle source
# File lib/demio/client.rb, line 58
def create_request(verb_klass, uri, payload)
  request = verb_klass.new(uri)
  request = create_headers(request)
  request.body = payload.to_json if verb_klass == Net::HTTP::Put
  request
end
format_uri(path) click to toggle source
# File lib/demio/client.rb, line 89
def format_uri(path)
  URI(base_uri + path)
end
handle_response(response, verb_klass, payload, request_limit) click to toggle source
# File lib/demio/client.rb, line 65
def handle_response(response, verb_klass, payload, request_limit)
  case response
  when Net::HTTPSuccess
    response
  when Net::HTTPRedirection
    location = response["Location"]
    make_request(verb_klass, location, payload, request_limit - 1)
  else
    response.value
  end
end
make_request(verb_klass, uri, payload = {}, request_limit = REQUEST_REDIRECT_FOLLOW_LIMIT) click to toggle source
# File lib/demio/client.rb, line 47
def make_request(verb_klass, uri, payload = {}, request_limit = REQUEST_REDIRECT_FOLLOW_LIMIT)
  raise TooManyRedirectsError, "too many HTTP redirects" if request_limit.zero?

  uri = redirected_request?(request_limit) ? URI(uri) : format_uri(uri)

  Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    response = http.request(create_request(verb_klass, uri, payload))
    handle_response(response, verb_klass, payload, request_limit)
  end
end
redirected_request?(request_limit) click to toggle source
# File lib/demio/client.rb, line 85
def redirected_request?(request_limit)
  request_limit < REQUEST_REDIRECT_FOLLOW_LIMIT
end