class Spage::Client

HTTP client for making requests to statuspage.io

Public Class Methods

new() click to toggle source
# File lib/spage/client.rb, line 12
def initialize
  @api_key = Spage.config.api_key
  @api_version = Spage.config.api_version
end

Public Instance Methods

delete(resource, id) click to toggle source
# File lib/spage/client.rb, line 29
def delete(resource, id)
  make_request(Net::HTTP::Delete, resource, id)
end
get(resource, id = nil) click to toggle source
# File lib/spage/client.rb, line 17
def get(resource, id = nil)
  make_request(Net::HTTP::Get, resource, id)
end
make_request(http_method, resource, id, body = nil) { |res| ... } click to toggle source

rubocop: disable Metrics/MethodLength, Metrics/AbcSize

# File lib/spage/client.rb, line 34
def make_request(http_method, resource, id, body = nil)
  path = [@api_version, resource, id].compact.join('/')
  uri = URI::HTTP.build(host: BASE_URL, path: "/#{path}")

  request = http_method.new(uri)
  request.add_field('Authorization', "OAuth #{@api_key}")
  request.add_field('Content-Type', 'application/json')

  request.body = body if request.request_body_permitted?

  res = Net::HTTP.start(uri.hostname, use_ssl: true) do |http|
    response = http.request(request)

    response.body = JSON.parse(response.body) if response.body
    response
  end

  yield(res) if block_given?
  res
end
post(resource, body) click to toggle source
# File lib/spage/client.rb, line 25
def post(resource, body)
  make_request(Net::HTTP::Post, resource, nil, body)
end
put(resource, id, body) click to toggle source
# File lib/spage/client.rb, line 21
def put(resource, id, body)
  make_request(Net::HTTP::Put, resource, id, body)
end