class MLBStatsAPI::Client
Constants
- DEFAULT_VERSION
Attributes
cache[RW]
logger[RW]
Public Class Methods
new(logger: IO::NULL, cache: nil)
click to toggle source
# File lib/mlb_stats_api/client.rb, line 39 def initialize(logger: IO::NULL, cache: nil) @cache = if cache Moneta.new(cache.class.to_s.to_sym, backend: cache) else Moneta.new(:Null) end @logger = logger.is_a?(::Logger) ? logger : ::Logger.new(logger) end
Public Instance Methods
get(endpoint, query = {})
click to toggle source
# File lib/mlb_stats_api/client.rb, line 49 def get(endpoint, query = {}) url = "/api/v#{query.delete(:version) || DEFAULT_VERSION}#{endpoint}" args = normalize_query_args(query) @logger.info "Fetching URL: #{url} Query: #{args.inspect}" response = self.class.get url, query: args.merge(t: Time.now.to_i) raise_exception(response) unless response.code == 200 response.parsed_response end
load(key, options = {}) { || ... }
click to toggle source
# File lib/mlb_stats_api/client.rb, line 70 def load(key, options = {}) value = @cache.load(key) return value if value value = yield @cache.store(key, value, options) value end
normalize_query_args(query)
click to toggle source
# File lib/mlb_stats_api/client.rb, line 63 def normalize_query_args(query) query .reject { |_, v| v.nil? } .map { |key, val| [key, val.is_a?(Array) ? val.join(',') : val] } .to_h end
Protected Instance Methods
raise_exception(response)
click to toggle source
# File lib/mlb_stats_api/client.rb, line 84 def raise_exception(response) case response.code when 401 raise MLBStatsAPI::UnauthorizedError, response when 403 raise MLBStatsAPI::ForbiddenError, response when 404 raise MLBStatsAPI::NotFoundError, response else raise MLBStatsAPI::Error, response end end