class RickAndMorty::Client

Attributes

base_url[R]

def post(path, data = {})

request(path) do |uri|
  Net::HTTP::Post.new(uri)
end

end

def put(path, data = {})

request(path) do |uri|
  Net::HTTP::Put.new(uri)
end

end

def delete(path)

request(path) do |uri|
  Net::HTTP::Delete.new(uri)
end

end

Public Class Methods

new(base_url) click to toggle source
# File lib/rick_and_morty/client.rb, line 8
def initialize(base_url)
  @base_url = base_url
end

Public Instance Methods

get(path, **args) click to toggle source
# File lib/rick_and_morty/client.rb, line 12
def get(path, **args)
  request(path, **args) do |uri|
    Net::HTTP::Get.new(uri)
  end
end

Private Instance Methods

build_uri(path, **args) click to toggle source
# File lib/rick_and_morty/client.rb, line 65
def build_uri(path, **args)
  query_items = args.fetch(:query, {}).compact

  uri = URI.join(base_url, path)
  uri.query = URI.encode_www_form(query_items)
  uri
end
handle(request) click to toggle source
# File lib/rick_and_morty/client.rb, line 48
def handle(request)
  case request
  when Net::HTTPSuccess
    parse_json(request.body)
  when Net::HTTPClientError
    raise ClientError, "[#{request.code}]#{request.class}"
  when Net::HTTPServerError
    raise ServerError, "[#{request.code}]#{request.class}"
  end
end
parse_json(content) click to toggle source
# File lib/rick_and_morty/client.rb, line 59
def parse_json(content)
  JSON.parse(content, symbolize_names: true)
rescue JSON::ParserError
  nil
end
request(path, **args) { |uri| ... } click to toggle source
# File lib/rick_and_morty/client.rb, line 40
def request(path, **args)
  uri = build_uri(path, **args)
  Net::HTTP.start(uri.host, uri.port, use_ssl: true) do |http|
    request = yield(uri)
    handle(http.request(request))
  end
end