Class: Scoreoid::API

Inherits:
Object
  • Object
show all
Defined in:
lib/scoreoid/api.rb

Overview

A singleton class with methods for querying the Scoreoid API.

Class Attribute Summary collapse

Class Method Summary collapse

Class Attribute Details

.default_paramsObject

Default API request parameters used by query

This would normally be set with Scoreoid.configure



15
16
17
# File 'lib/scoreoid/api.rb', line 15

def default_params
  @default_params
end

Class Method Details

.prepare_params(params) ⇒ Hash

Attempt to coerce parameters into formats that the Scoreoid API expects.

Date parameters will be parsed with Chronic, so you can supply dates in natural language such as “may 5th 2012” or “1 year ago”.

Parameters:

  • params (Hash)

    A hash of any parameters you wish to format.

Options Hash (params):

  • :start_date (#to_s, #strftime)
  • :end_date (#to_s, #strftime)

Returns:

  • (Hash)

    The formatted parameters, ready to use in an API query.



83
84
85
86
87
88
89
90
91
92
93
94
95
96
# File 'lib/scoreoid/api.rb', line 83

def prepare_params(params)
	params.each do |key, _|
		if [:start_date, :end_date].include?(key)
			if params[key].respond_to? :to_s
				params[key] = Chronic.parse(params[key].to_s, context: :past)
			end

			if params[key].respond_to? :strftime
				params[key] = params[key].strftime '%Y-%m-%d'
			end
		end
	end
	params
end

.query(api_method, params = {}) ⇒ String

Query a given Scoreoid API method and return the repsonse as a string.

Supplied parameters will be prepared with prepare_params before sending. This is so that you can, for example, supply a Date object for :start_date even though the Scoreoid API expects it to be a string formatted as “YYYY-MM-DD”.

Parameters:

  • api_method (String)

    The Scoreoid API method to query

  • params (Hash) (defaults to: {})

    Parameters to include in the API request

Returns:

  • (String)

    The Scoreoid API response

See Also:



29
30
31
32
33
# File 'lib/scoreoid/api.rb', line 29

def query(api_method, params={})
	params = self.prepare_params(params)
	params.merge!(self.default_params ||= {})
	RestClient.post("https://www.scoreoid.com/api/#{api_method}", params)
end

.query_and_parse(api_method, params = {}) ⇒ Hash

Query a given Scoreoid API method and parse the JSON response.

The response type is set to ‘json’ for you automatically.

Parameters:

  • api_method (String)

    The Scoreoid API method to query

  • params (Hash) (defaults to: {})

    Parameters to include in the API request.

Returns:

  • (Hash)

    The Scoreoid API response parsed into a Hash.

Raises:

  • (Scoreoid::APIError)

    if the Scoreoid API returns an error response.

  • (MultiJson::DecodeError)

    if the Scoreoid API response can’t be parsed (report a bug if this happens!)

See Also:



49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
# File 'lib/scoreoid/api.rb', line 49

def query_and_parse(api_method, params={})
	# We're gonna parse JSON, so ask for JSON
	params = params.merge(response: 'json')

	# Query Scoreoid
	api_response = self.query(api_method, params)

	# Fix for API responses that return arrays (they can't be parsed by MultiJson)
	if api_response =~ /\A\[/ and api_response =~ /\]\Z/
		api_response.sub!(/\A\[/, '') # Remove leading bracket
		api_response.sub!(/\]\Z/, '') # Remove trailing bracket
	end

	# Parse the response
	parsed_result = MultiJson.load(api_response)

	# Raise an error if the response JSON contained one
	raise APIError, parsed_result['error'] if parsed_result.key? 'error'

	# Return the parsed result
	parsed_result
end