class MtbProjectApi::Client

Constants

API_ENDPOINT

Public Class Methods

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

Public Instance Methods

get_conditions(params = {}) click to toggle source

Returns conditions for given trail IDs.

Required Arguments: ids - one or array of trail IDs

# File lib/mtb_project_api/client.rb, line 48
def get_conditions(params = {})
  request_by_ids("get-conditions", params)
end
get_local_trails(params = {}) click to toggle source

Returns trails for a given query.

Required Arguments: lat - Latitude for a given area lon - Longitude for a given area

Optional Arguments: maxDistance - Max distance, in miles, from lat, lon. Default: 30. Max: 200. maxResults - Max number of trails to return. Default: 10. Max: 500. sort - Values can be 'quality', 'distance'. Default: quality. minLength - Min trail length, in miles. Default: 0 (no minimum). minStars - Min star rating, 0-4. Default: 0.

# File lib/mtb_project_api/client.rb, line 25
def get_local_trails(params = {})
  allowed_keys = [:lat, :lon, :maxDistance, :maxResults, :sort, :minLength, :minStars]
  request_params = params.select { |k| allowed_keys.include?(k) }.merge(key: @private_key)

  request(
    http_method: :get,
    endpoint: "get-trails",
    params: request_params
  )
end
get_to_dos(params = {}) click to toggle source

Returns up to 200 of the user's to-do trail IDs.

Optional Arguments: startPos - The starting index of the list to return. Defaults to 0.

# File lib/mtb_project_api/client.rb, line 56
def get_to_dos(params = {})
  request_params = params.merge({
    email: @email,
    key: @private_key
  })

  request(
      http_method: :get,
      endpoint: "get-to-dos",
      params: request_params
    )
end
get_trails_by_id(params = {}) click to toggle source

Returns trails for given trail IDs.

Required Arguments: ids - one or array of trail IDs

# File lib/mtb_project_api/client.rb, line 40
def get_trails_by_id(params = {})
  request_by_ids("get-trails-by-id", params)
end

Private Instance Methods

client() click to toggle source
# File lib/mtb_project_api/client.rb, line 71
def client
  @_client ||= Faraday.new(API_ENDPOINT) do |client|
    client.request :url_encoded
    client.adapter Faraday.default_adapter
  end
end
request(http_method:, endpoint:, params: {}) click to toggle source
# File lib/mtb_project_api/client.rb, line 78
def request(http_method:, endpoint:, params: {})
  response = client.public_send(http_method, endpoint, params)
  Oj.load(response.body)
end
request_by_ids(endpoint, params) click to toggle source
# File lib/mtb_project_api/client.rb, line 83
def request_by_ids(endpoint, params)
  request_params = request_by_ids_params(params)

  request(
    http_method: :get,
    endpoint: endpoint,
    params: request_params
  )
end
request_by_ids_params(params) click to toggle source
# File lib/mtb_project_api/client.rb, line 93
def request_by_ids_params(params)
  ids = Array(params[:ids]).join(',')

  {
    ids: ids,
    key: @private_key
  }
end