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