class Fitbit::Api
Public Class Methods
get_fitbit_methods()
click to toggle source
# File lib/api/fitbit_api.rb, line 17 def get_fitbit_methods @@fitbit_methods end
request(consumer_key, consumer_secret, params, auth_token=nil, auth_secret=nil)
click to toggle source
# File lib/api/fitbit_api.rb, line 6 def request consumer_key, consumer_secret, params, auth_token=nil, auth_secret=nil begin fitbit_api_method = get_api_method(params['api-method']) verify_api_call(params, fitbit_api_method, auth_token, auth_secret) rescue => e raise e end access_token = build_request(consumer_key, consumer_secret, auth_token, auth_secret) send_api_request(params, fitbit_api_method, access_token) end
Private Class Methods
build_request(consumer_key, consumer_secret, auth_token, auth_secret)
click to toggle source
# File lib/api/fitbit_api.rb, line 148 def build_request consumer_key, consumer_secret, auth_token, auth_secret fitbit = Fitbit::Api.new :fitbit, consumer_key, consumer_secret OAuth::AccessToken.new fitbit.consumer, auth_token, auth_secret end
build_url(params, fitbit_api_method, http_method)
click to toggle source
# File lib/api/fitbit_api.rb, line 209 def build_url params, fitbit_api_method, http_method api = { :version => params['api_version'] ? params['api_version'] : @@api_version, :url_resources => get_url_resources(params, fitbit_api_method), :response_format => params['response-format'] ? params['response-format'].downcase : 'xml', :post_parameters => get_post_parameters(params, fitbit_api_method, http_method), :query => uri_encode_query(params['query']), } "/#{api[:version]}/#{api[:url_resources]}.#{api[:response_format]}#{api[:query]}#{api[:post_parameters]}" end
get_api_method(api_method)
click to toggle source
# File lib/api/fitbit_api.rb, line 23 def get_api_method api_method api_method.downcase! if api_method.is_a? String @@fitbit_methods[api_method] end
get_dynamic_url_error(required, supplied)
click to toggle source
# File lib/api/fitbit_api.rb, line 118 def get_dynamic_url_error required, supplied if missing_dynamic_url_parameters?(required, supplied) required = required.select { |k,v| k != 'optional' } options = required.keys.map.with_index(1) { |x,i| "(#{i}) #{get_url_parameters_variables(required[x])}" }.join(' ') "requires 1 of #{required.length} options: #{options}. You supplied: #{supplied}." else nil end end
get_dynamic_url_parameters(required, supplied)
click to toggle source
# File lib/api/fitbit_api.rb, line 134 def get_dynamic_url_parameters required, supplied optional = get_optional_url_parameters(required, supplied) required.keys.each { |k| return required[k] + optional if supplied.include? k } nil end
get_error_message(params_keys, fitbit_api_method, auth_token, auth_secret)
click to toggle source
# File lib/api/fitbit_api.rb, line 33 def get_error_message params_keys, fitbit_api_method, auth_token, auth_secret error_types = [:post_parameters, :url_parameters, :auth_required] if !fitbit_api_method "is not a valid Fitbit API method." else error_types.each do |x| case x when :post_parameters error = missing_post_parameters_error(fitbit_api_method[x], params_keys) when :url_parameters error = missing_url_parameters_error(fitbit_api_method[x], params_keys) when :auth_required error = missing_auth_tokens_error(fitbit_api_method[x], params_keys, auth_token, auth_secret) end return error if error end nil end end
get_optional_url_parameters(required, supplied)
click to toggle source
# File lib/api/fitbit_api.rb, line 157 def get_optional_url_parameters required, supplied optional = [] unless required['optional'] optional ? optional : required['optional'].select { |k,v| supplied.include? k }.values.flatten end
get_post_parameters(params, fitbit, http_method)
click to toggle source
# File lib/api/fitbit_api.rb, line 228 def get_post_parameters params, fitbit, http_method if http_method == 'post' and !is_subscription? params['api-method'] post_parameters = params.select { |k,v| fitbit[:post_parameters].values.flatten.include? k } "?#{OAuth::Helper.normalize(post_parameters)}" else nil end end
get_request_headers(params, request_headers)
click to toggle source
# File lib/api/fitbit_api.rb, line 205 def get_request_headers params, request_headers request_headers ? params.select { |k,v| request_headers.include? k } : nil end
get_url_parameters(required, supplied)
click to toggle source
# File lib/api/fitbit_api.rb, line 153 def get_url_parameters required, supplied required.is_a?(Hash) ? get_dynamic_url_parameters(required, supplied) : required end
get_url_parameters_variables(url_parameters)
click to toggle source
# File lib/api/fitbit_api.rb, line 140 def get_url_parameters_variables url_parameters url_parameters.select { |x| x.include? "<" }.map { |x| x.delete "<>" } if has_url_variables? url_parameters end
get_url_resources(params, fitbit_api_method)
click to toggle source
# File lib/api/fitbit_api.rb, line 220 def get_url_resources params, fitbit_api_method url_parameters = get_url_parameters(fitbit_api_method[:url_parameters], params.keys) if has_url_variables? url_parameters or params['user-id'] url_parameters = insert_dynamic_url_parameters(params, url_parameters, fitbit_api_method[:auth_required]) end url_parameters.join("/") end
has_url_variables?(url_parameters)
click to toggle source
# File lib/api/fitbit_api.rb, line 144 def has_url_variables? url_parameters url_parameters.each{ |x| return true if x.include? "<" } end
insert_dynamic_url_parameters(params, url_parameters, auth_required)
click to toggle source
# File lib/api/fitbit_api.rb, line 162 def insert_dynamic_url_parameters params, url_parameters, auth_required url_parameters.map do |x| url_variable = x.delete "<>" if x == '-' insert_user_id(auth_required, params['user-id']) elsif params.include? url_variable and !params.include? x is_subscription_variable?(url_variable) ? insert_subscription_variable(params, url_variable) : params[url_variable] else x end end - [nil] end
insert_subscription_variable(params, url_variable)
click to toggle source
# File lib/api/fitbit_api.rb, line 185 def insert_subscription_variable params, url_variable if url_variable == 'subscription-id' params['collection-path'] == 'all' ? params[url_variable] : "#{params[url_variable]}-#{params['collection-path']}" else params['collection-path'] != 'all' ? params[url_variable] : nil end end
insert_user_id(auth_required, user_id)
click to toggle source
# File lib/api/fitbit_api.rb, line 176 def insert_user_id auth_required, user_id (auth_required == 'user-id' and user_id) ? user_id : '-' end
is_subscription?(api_method)
click to toggle source
# File lib/api/fitbit_api.rb, line 241 def is_subscription? api_method api_method == 'api-create-subscription' or api_method == 'api-delete-subscription' end
is_subscription_variable?(url_variable)
click to toggle source
# File lib/api/fitbit_api.rb, line 180 def is_subscription_variable? url_variable subscription_variables = ['subscription-id', 'collection-path'] subscription_variables.include? url_variable end
missing_auth_tokens_error(auth_required, params_keys, auth_token, auth_secret)
click to toggle source
# File lib/api/fitbit_api.rb, line 97 def missing_auth_tokens_error auth_required, params_keys, auth_token, auth_secret error = "requires user auth_token and auth_secret" no_auth_tokens = !auth_token or !auth_secret if !auth_required nil elsif no_auth_tokens and auth_required != 'user-id' "#{error}." elsif no_auth_tokens and auth_required == 'user-id' !params_keys.include?('user-id') ? "#{error}, unless you include [\"user-id\"]." : nil end end
missing_dynamic_url_parameters?(required, supplied)
click to toggle source
# File lib/api/fitbit_api.rb, line 128 def missing_dynamic_url_parameters? required, supplied required = get_dynamic_url_parameters(required, supplied) required = get_url_parameters_variables(required) if required required & supplied != required end
missing_exclusive_post_parameters_error(required, supplied_required)
click to toggle source
# File lib/api/fitbit_api.rb, line 76 def missing_exclusive_post_parameters_error required, supplied_required total_supplied = supplied_required.length if total_supplied < 1 "requires one of these POST parameters: #{required}." elsif total_supplied > 1 "allows only one of these POST parameters: #{required}. You used #{supplied_required.join(' AND ')}." else nil end end
missing_one_required_post_parameters_error(required, supplied_required)
click to toggle source
# File lib/api/fitbit_api.rb, line 87 def missing_one_required_post_parameters_error required, supplied_required "requires at least one of the following POST parameters: #{required}." if supplied_required.length < 1 end
missing_post_parameters_error(required, supplied)
click to toggle source
# File lib/api/fitbit_api.rb, line 53 def missing_post_parameters_error required, supplied required = {} unless required.is_a? Hash required.each do |k,v| supplied_required = v & supplied unless k == 'required_if' case k when 'required' error = missing_required_post_parameters_error(v, supplied, supplied_required) when 'exclusive' error = missing_exclusive_post_parameters_error(v, supplied_required) when 'one_required' error = missing_one_required_post_parameters_error(v, supplied_required) when 'required_if' error = missing_required_if_post_parameters_error(v, supplied) end return error if error end nil end
missing_required_if_post_parameters_error(required, supplied)
click to toggle source
# File lib/api/fitbit_api.rb, line 91 def missing_required_if_post_parameters_error required, supplied required.each do |k,v| return "requires POST parameter #{v} when you use POST parameter #{k}." if supplied.include? k and !supplied.include? v end end
missing_required_post_parameters_error(required, supplied, supplied_required)
click to toggle source
# File lib/api/fitbit_api.rb, line 72 def missing_required_post_parameters_error required, supplied, supplied_required "requires POST parameters #{required}. You're missing #{required-supplied}." if supplied_required != required end
missing_url_parameters_error(required, supplied)
click to toggle source
# File lib/api/fitbit_api.rb, line 109 def missing_url_parameters_error required, supplied if required.is_a? Hash get_dynamic_url_error(required, supplied) else required = get_url_parameters_variables(required) required - supplied != [] ? "requires #{required}. You're missing #{required-supplied}." : nil end end
send_api_request(params, fitbit, access_token)
click to toggle source
# File lib/api/fitbit_api.rb, line 193 def send_api_request params, fitbit, access_token http_method = fitbit[:http_method] request_headers = get_request_headers(params, fitbit[:request_headers]) request_url = build_url(params, fitbit, http_method) if http_method == 'get' or http_method == 'delete' access_token.request( http_method, "http://api.fitbit.com#{request_url}", request_headers ) else access_token.request( http_method, "http://api.fitbit.com#{request_url}", "", request_headers ) end end
uri_encode_query(query)
click to toggle source
# File lib/api/fitbit_api.rb, line 237 def uri_encode_query query query ? "?#{OAuth::Helper.normalize({ 'query' => query })}" : "" end
verify_api_call(params, fitbit_api_method, auth_token, auth_secret)
click to toggle source
# File lib/api/fitbit_api.rb, line 28 def verify_api_call params, fitbit_api_method, auth_token, auth_secret error = get_error_message(params.keys, fitbit_api_method, auth_token, auth_secret) raise "#{params['api-method']} #{error}" if error end