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