class Galactus::Client
Attributes
api_version[RW]
private_api_key[R]
public_api_key[R]
router[RW]
Public Class Methods
new(settings)
click to toggle source
# File lib/galactus/client.rb, line 17 def initialize(settings) validate_client(settings) @public_api_key = settings[:public_api_key] @private_api_key = settings[:private_api_key] @api_version = settings[:api_version] || 'v1' @router = settings[:router] || Galactus.router(api_version: api_version) provide_endpoint_methods end
Private Instance Methods
api_request_hash()
click to toggle source
# File lib/galactus/client.rb, line 117 def api_request_hash Digest::MD5.hexdigest("#{timestamp}#{private_api_key}#{public_api_key}") end
fetch_resource_id(name, id)
click to toggle source
# File lib/galactus/client.rb, line 73 def fetch_resource_id(name, id) endpoint = name.split('_')[0] + 's' resource = find_by_name_or_title(endpoint.to_sym, :name, id) return false unless resource resource[:id] end
fetch_response(name, params = {}, headers = {})
click to toggle source
# File lib/galactus/client.rb, line 65 def fetch_response(name, params = {}, headers = {}) id = params[:id] options = params[:options] path = find_path(name, id) self.class.get(path, query: marvel_api_params(options), headers: headers) end
find_by_name_or_title(endpoint, column, value)
click to toggle source
# File lib/galactus/client.rb, line 88 def find_by_name_or_title(endpoint, column, value) response = send(endpoint, column.to_sym => value) return false unless response[:data][:count] > 0 response[:id] = response[:data][:results][0][:id] response end
find_path(name, id)
click to toggle source
# File lib/galactus/client.rb, line 95 def find_path(name, id) if id.nil? router.send("#{name}_path".to_sym) else id = fetch_resource_id(name, id) if id.is_a?(String) router.send("#{name}_path".to_sym, id: id) end end
marvel_api_params(params = {})
click to toggle source
# File lib/galactus/client.rb, line 104 def marvel_api_params(params = {}) base_hash = { apikey: public_api_key, ts: timestamp, hash: api_request_hash } params.merge(base_hash) end
process_parameters(*args)
click to toggle source
# File lib/galactus/client.rb, line 47 def process_parameters(*args) id_holder, options_holder = *args if id_holder && id_holder.is_a?(Hash) id = nil options = id_holder || {} elsif id_holder id = id_holder options = options_holder || {} else options = {} end params, headers = pull_headers(options) [{ id: id, options: params }, headers] end
provide_endpoint_methods()
click to toggle source
# File lib/galactus/client.rb, line 36 def provide_endpoint_methods router.routes.each do |_route_path, route_info| name = route_info[:name] self.class.send(:define_method, name) do |*args| params, headers = process_parameters(*args) response = fetch_response(name, params, headers) Response.create(response) end end end
pull_headers(options)
click to toggle source
# File lib/galactus/client.rb, line 80 def pull_headers(options) headers = options.delete(:headers) || {} unless headers['Accept-Encoding'] headers.merge!('Accept-Encoding' => 'gzip') end [options, headers] end
timestamp()
click to toggle source
# File lib/galactus/client.rb, line 113 def timestamp Time.now.to_i end
validate_client(settings)
click to toggle source
# File lib/galactus/client.rb, line 28 def validate_client(settings) [:public_api_key, :private_api_key].each do |param| unless settings[param] raise InvalidClientError, "A :#{param} parameter must be specified." end end end