class Swapir

Public Class Methods

api_available?() click to toggle source
# File lib/swapir.rb, line 25
def self.api_available?
  # allow an exception to be raised if the request fails
  # handle the raised exception
  begin
    RestClient.get(api_base_url).code == 200
  rescue RestClient::ExceptionWithResponse => e
    false
  end
end
api_base_url() click to toggle source
# File lib/swapir.rb, line 20
def self.api_base_url
  # base Star Wars public api url
  "http://swapi.co/api/"
end
decode(response) click to toggle source
# File lib/swapir.rb, line 46
def self.decode(response)
  # convert the Star Wars Api response body for a single resource
  # return the data in a Ruby Hash
  JSON.parse(response.body)
end
decode_results(response) click to toggle source
# File lib/swapir.rb, line 52
def self.decode_results(response)
  # convert the Star Wars Api response body collection
  # return the data collection in a Ruby Hash
  JSON.parse(response.body)["results"]
end
paginated_request(resource) click to toggle source
# File lib/swapir.rb, line 58
def self.paginated_request(resource)
  next_url = api_base_url + resource
  total_records = nil
  collection = []

  loop do
    response = RestClient.get(next_url)
    break if response.code != 200

    total_records = decode(response)["count"]
    data = decode_results(response)
    collection += data

    break if (data.empty? || collection.length >= total_records)
    next_url = decode(response)["next"]
  end

  collection
end
request(resource) click to toggle source
# File lib/swapir.rb, line 35
def self.request(resource)
  return "Star Wars API is not available" unless self.api_available?
  # rest-client returns the swapi response with status 200
  # it does not raise an exception when the request fails
  begin
    RestClient.get(api_base_url + resource)
  rescue RestClient::ExceptionWithResponse => e
    e.response
  end
end