fitgem_oauth2 1.3.0 → 2.0.1
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/fitgem_oauth2.gemspec +22 -22
- data/lib/fitgem_oauth2.rb +6 -6
- data/lib/fitgem_oauth2/activity.rb +209 -209
- data/lib/fitgem_oauth2/body_measurements.rb +163 -163
- data/lib/fitgem_oauth2/client.rb +126 -125
- data/lib/fitgem_oauth2/devices.rb +45 -45
- data/lib/fitgem_oauth2/errors.rb +30 -27
- data/lib/fitgem_oauth2/food.rb +27 -27
- data/lib/fitgem_oauth2/food/collection.rb +51 -51
- data/lib/fitgem_oauth2/food/metadata.rb +63 -63
- data/lib/fitgem_oauth2/food/series.rb +55 -55
- data/lib/fitgem_oauth2/friends.rb +44 -44
- data/lib/fitgem_oauth2/heartrate.rb +85 -85
- data/lib/fitgem_oauth2/sleep.rb +86 -86
- data/lib/fitgem_oauth2/subscriptions.rb +32 -32
- data/lib/fitgem_oauth2/users.rb +7 -7
- data/lib/fitgem_oauth2/utils.rb +48 -48
- data/lib/fitgem_oauth2/version.rb +3 -3
- metadata +3 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a0f9bc467cea52fdb75b24bcb633887178a9db1066e0c181ce46ac48779d35f7
|
4
|
+
data.tar.gz: ab134a17a8b3c5ed82400e938dbfe291e12881800e18172d79468b057fa03514
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: a68a72381737351e096ecd8d915d6169c6d64533de31cb60fbea81d18abcca523704ec2ca080ba757e3ed056b5c3db454f246cbede1f456675809d809edfe28e
|
7
|
+
data.tar.gz: 1b69b35ea268ea111d03fb8b9e81605e4229fd48267a7c0172b9d7dd520bc9436e59c8b088a332bb66f1c7dc88e0f957ed7b0634cbd3ab293bf9fd60a4cae7ca
|
data/fitgem_oauth2.gemspec
CHANGED
@@ -1,22 +1,22 @@
|
|
1
|
-
# encoding: utf-8
|
2
|
-
|
3
|
-
$:.unshift File.expand_path('../lib', __FILE__)
|
4
|
-
require 'fitgem_oauth2/version'
|
5
|
-
|
6
|
-
Gem::Specification.new do |s|
|
7
|
-
s.name = 'fitgem_oauth2'
|
8
|
-
s.version = FitgemOauth2::VERSION
|
9
|
-
s.summary = 'Fitbit API client library'
|
10
|
-
s.description = 'This gem allows requesting data from Fitbit API using OAuth2'
|
11
|
-
s.authors = ['Ankit Gupta']
|
12
|
-
s.email = 'ankit.gupta2801@gmail.com'
|
13
|
-
s.files = %w(fitgem_oauth2.gemspec) + `git ls-files -z`.split("\x0").select { |f| f.start_with?('lib/') }
|
14
|
-
s.homepage = 'http://rubygems.org/gems/fitgem_oauth2'
|
15
|
-
s.license = 'MIT'
|
16
|
-
|
17
|
-
s.add_runtime_dependency 'faraday', '~> 0.9'
|
18
|
-
|
19
|
-
s.add_development_dependency 'rake', '~> 10.5'
|
20
|
-
s.add_development_dependency 'rspec', '~> 3.4'
|
21
|
-
s.add_development_dependency 'factory_girl', '~> 4.5'
|
22
|
-
end
|
1
|
+
# encoding: utf-8
|
2
|
+
|
3
|
+
$:.unshift File.expand_path('../lib', __FILE__)
|
4
|
+
require 'fitgem_oauth2/version'
|
5
|
+
|
6
|
+
Gem::Specification.new do |s|
|
7
|
+
s.name = 'fitgem_oauth2'
|
8
|
+
s.version = FitgemOauth2::VERSION
|
9
|
+
s.summary = 'Fitbit API client library'
|
10
|
+
s.description = 'This gem allows requesting data from Fitbit API using OAuth2'
|
11
|
+
s.authors = ['Ankit Gupta']
|
12
|
+
s.email = 'ankit.gupta2801@gmail.com'
|
13
|
+
s.files = %w(fitgem_oauth2.gemspec) + `git ls-files -z`.split("\x0").select { |f| f.start_with?('lib/') }
|
14
|
+
s.homepage = 'http://rubygems.org/gems/fitgem_oauth2'
|
15
|
+
s.license = 'MIT'
|
16
|
+
|
17
|
+
s.add_runtime_dependency 'faraday', '~> 0.9'
|
18
|
+
|
19
|
+
s.add_development_dependency 'rake', '~> 10.5'
|
20
|
+
s.add_development_dependency 'rspec', '~> 3.4'
|
21
|
+
s.add_development_dependency 'factory_girl', '~> 4.5'
|
22
|
+
end
|
data/lib/fitgem_oauth2.rb
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
require 'fitgem_oauth2/client.rb'
|
2
|
-
|
3
|
-
# Top level module for the classes for this gem
|
4
|
-
module FitgemOauth2
|
5
|
-
|
6
|
-
end
|
1
|
+
require 'fitgem_oauth2/client.rb'
|
2
|
+
|
3
|
+
# Top level module for the classes for this gem
|
4
|
+
module FitgemOauth2
|
5
|
+
|
6
|
+
end
|
@@ -1,209 +1,209 @@
|
|
1
|
-
module FitgemOauth2
|
2
|
-
class Client
|
3
|
-
|
4
|
-
ACTIVITY_RESOURCES = %w[
|
5
|
-
calories caloriesBMR steps distance floors elevation minutesSedentary
|
6
|
-
minutesLightlyActive minutesFairlyActive minutesVeryActive
|
7
|
-
activityCaloriestracker/calories tracker/steps tracker/distance
|
8
|
-
tracker/floors tracker/elevation tracker/minutesSedentary
|
9
|
-
tracker/minutesLightlyActive tracker/minutesFairlyActive
|
10
|
-
tracker/minutesVeryActive tracker/activityCalories
|
11
|
-
].freeze
|
12
|
-
|
13
|
-
ACTIVITY_PERIODS = %w[1d 7d 30d 1w 1m 3m 6m 1y max].freeze
|
14
|
-
|
15
|
-
# retrieves daily activity summary for a date
|
16
|
-
# @param date the date for which the summary is retrieved
|
17
|
-
def daily_activity_summary(date)
|
18
|
-
get_call("user/#{user_id}/activities/date/#{format_date(date)}.json")
|
19
|
-
end
|
20
|
-
|
21
|
-
# ==================================
|
22
|
-
# Activity Time Series
|
23
|
-
# ==================================
|
24
|
-
|
25
|
-
# retrieves activity time series, based on the arguments provided
|
26
|
-
# @param resource the resource for which the series needs to be retrieved. one of ALLOWED_RESOURCES
|
27
|
-
# @param start_date the start date for the series
|
28
|
-
# @param end_date the end date for the series. If specifying end_date, do not specify period
|
29
|
-
# @param period the period starting from start_date for which the series needs to be retrieved. If specifying period,
|
30
|
-
# do not use end_date
|
31
|
-
def activity_time_series(resource: nil, start_date: nil, end_date: nil, period: nil)
|
32
|
-
|
33
|
-
unless resource && ACTIVITY_RESOURCES.include?(resource)
|
34
|
-
raise FitgemOauth2::InvalidArgumentError, "Invalid resource: #{resource}. Valid resources are #{ACTIVITY_RESOURCES}."
|
35
|
-
end
|
36
|
-
|
37
|
-
unless start_date
|
38
|
-
raise FitgemOauth2::InvalidArgumentError, 'Start date must be specified.'
|
39
|
-
end
|
40
|
-
|
41
|
-
if period && end_date
|
42
|
-
raise FitgemOauth2::InvalidArgumentError, 'Both period and end_date are specified. Please specify only one.'
|
43
|
-
end
|
44
|
-
|
45
|
-
if period && !ACTIVITY_PERIODS.include?(period)
|
46
|
-
raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Valid periods are #{ACTIVITY_PERIODS}."
|
47
|
-
end
|
48
|
-
|
49
|
-
first = format_date(start_date)
|
50
|
-
second = period || format_date(end_date)
|
51
|
-
url = ['user', user_id, 'activities', resource, 'date', first, second].join('/')
|
52
|
-
get_call(url + '.json')
|
53
|
-
end
|
54
|
-
|
55
|
-
# retrieves intraday activity time series.
|
56
|
-
# @param resource (required) for which the intrady series is retrieved. one of 'calories', 'steps', 'distance', 'floors', 'elevation'
|
57
|
-
# @param start_date (required) start date for the series
|
58
|
-
# @param end_date (optional) end date for the series, if not specified, the series is for 1 day
|
59
|
-
# @param detail_level (required) level of detail for the series
|
60
|
-
# @param start_time (optional)start time for the series
|
61
|
-
# @param end_time the (optional)end time for the series. specify both start_time and end_time, if using either
|
62
|
-
def intraday_activity_time_series(resource: nil, start_date: nil, end_date: nil, detail_level: nil,
|
63
|
-
start_time: nil, end_time: nil)
|
64
|
-
|
65
|
-
# converting to symbol to allow developer to use either 'calories' or :calories
|
66
|
-
resource = resource.to_sym
|
67
|
-
|
68
|
-
unless %i[calories steps distance floors elevation].include?(resource)
|
69
|
-
raise FitgemOauth2::InvalidArgumentError,
|
70
|
-
'Must specify resource to fetch intraday time series data for.'\
|
71
|
-
' One of (:calories, :steps, :distance, :floors, or :elevation) is required.'
|
72
|
-
end
|
73
|
-
|
74
|
-
unless start_date
|
75
|
-
raise FitgemOauth2::InvalidArgumentError,
|
76
|
-
'Must specify the start_date to fetch intraday time series data'
|
77
|
-
end
|
78
|
-
|
79
|
-
end_date ||= '1d'
|
80
|
-
|
81
|
-
unless detail_level && %w(1min 15min).include?(detail_level)
|
82
|
-
raise FitgemOauth2::InvalidArgumentError,
|
83
|
-
'Must specify the data resolution to fetch intraday time series data for.'\
|
84
|
-
' One of (\"1d\" or \"15min\") is required.'
|
85
|
-
end
|
86
|
-
|
87
|
-
resource_path = [
|
88
|
-
'user', @user_id,
|
89
|
-
'activities', resource,
|
90
|
-
'date', format_date(start_date),
|
91
|
-
end_date, detail_level
|
92
|
-
].join('/')
|
93
|
-
|
94
|
-
if start_time || end_time
|
95
|
-
resource_path =
|
96
|
-
[resource_path, 'time', format_time(start_time), format_time(end_time)].join('/')
|
97
|
-
end
|
98
|
-
get_call("#{resource_path}.json")
|
99
|
-
end
|
100
|
-
|
101
|
-
# ======================================
|
102
|
-
# Activity Logging Methods
|
103
|
-
# ======================================
|
104
|
-
|
105
|
-
# logs activity using the params.
|
106
|
-
# @param params Hash to be posted. Refer https://dev.fitbit.com/docs/activity/#activity-logging for accepted
|
107
|
-
# POST parameters
|
108
|
-
def log_activity(params)
|
109
|
-
post_call("user/#{user_id}/activities.json", params)
|
110
|
-
end
|
111
|
-
|
112
|
-
# deletes a logged activity
|
113
|
-
# @param id id of the activity log to be deleted
|
114
|
-
def delete_logged_activity(id)
|
115
|
-
delete_call("user/#{user_id}/activities/#{id}.json")
|
116
|
-
end
|
117
|
-
|
118
|
-
# retrieves activity list for the user
|
119
|
-
def activity_list(date, sort, limit)
|
120
|
-
date_param = format_date(date)
|
121
|
-
if sort == "asc"
|
122
|
-
date_param = "afterDate=#{date_param}"
|
123
|
-
elsif sort == "desc"
|
124
|
-
date_param = "beforeDate=#{date_param}"
|
125
|
-
else
|
126
|
-
raise FitgemOauth2::InvalidArgumentError, "sort can either be asc or desc"
|
127
|
-
end
|
128
|
-
get_call("user/#{user_id}/activities/list.json?offset=0&limit=#{limit}&sort=#{sort}&#{date_param}")
|
129
|
-
end
|
130
|
-
|
131
|
-
# retrieves activity list in the tcx format
|
132
|
-
def activity_tcx(id)
|
133
|
-
get_call("user/#{user_id}/activities/#{id}.tcx")
|
134
|
-
end
|
135
|
-
|
136
|
-
|
137
|
-
# ======================================
|
138
|
-
# Activity Types
|
139
|
-
# ======================================
|
140
|
-
|
141
|
-
# Get a tree of all valid Fitbit public activities from the activities catalog as well
|
142
|
-
# as private custom activities the user created in the format requested. If the activity
|
143
|
-
# has levels, also get a list of activity level details
|
144
|
-
def activities
|
145
|
-
get_call('activities.json')
|
146
|
-
end
|
147
|
-
|
148
|
-
# Returns the details of a specific activity in the Fitbit activities database in the format requested.
|
149
|
-
# @param id id of the activity for which the details need to be retrieved
|
150
|
-
def activity(id)
|
151
|
-
get_call("activities/#{id}.json")
|
152
|
-
end
|
153
|
-
|
154
|
-
# gets frequent activities
|
155
|
-
def frequent_activities
|
156
|
-
get_call("user/#{user_id}/activities/frequent.json")
|
157
|
-
end
|
158
|
-
|
159
|
-
# gets recent activities
|
160
|
-
def recent_activities
|
161
|
-
get_call("user/#{user_id}/activities/recent.json")
|
162
|
-
end
|
163
|
-
|
164
|
-
# gets favorite activities
|
165
|
-
def favorite_activities
|
166
|
-
get_call("user/#{user_id}/activities/favorite.json")
|
167
|
-
end
|
168
|
-
|
169
|
-
# adds the activity with the given ID to user's list of favorite activities.
|
170
|
-
# @param activity_id ID of the activity to be added to the list of favorite activities
|
171
|
-
def add_favorite_activity(activity_id)
|
172
|
-
post_call("user/#{user_id}/activities/log/favorite/#{activity_id}.json")
|
173
|
-
end
|
174
|
-
|
175
|
-
# removes the activity with given ID from list of favorite activities.
|
176
|
-
# @param activity_id ID of the activity to be removed from favorite activity
|
177
|
-
def remove_favorite_activity(activity_id)
|
178
|
-
delete_call("user/#{user_id}/activities/log/favorite/#{activity_id}.json")
|
179
|
-
end
|
180
|
-
|
181
|
-
# ======================================
|
182
|
-
# Activity Goals
|
183
|
-
# ======================================
|
184
|
-
|
185
|
-
# retrieve activity goals for a period
|
186
|
-
# @period the period for which the goals need to be retrieved. either 'weekly' or 'daily'
|
187
|
-
def goals(period)
|
188
|
-
unless period && %w(daily weekly).include?(period)
|
189
|
-
raise FitgemOauth2::InvalidArgumentError, "Goal period should either be 'daily' or 'weekly'"
|
190
|
-
end
|
191
|
-
get_call("user/#{user_id}/activities/goals/#{period}.json")
|
192
|
-
end
|
193
|
-
|
194
|
-
# update activity goals
|
195
|
-
# @param period period for the goal ('weekly' or 'daily')
|
196
|
-
# @param params the POST params for the request. Refer to Fitbit documentation for accepted format
|
197
|
-
def update_activity_goals(period, params)
|
198
|
-
unless period && %w(daily weekly).include?(period)
|
199
|
-
raise FitgemOauth2::InvalidArgumentError, "Goal period should either be 'daily' or 'weekly'"
|
200
|
-
end
|
201
|
-
post_call("user/#{user_id}/activities/goals/#{period}.json", params)
|
202
|
-
end
|
203
|
-
|
204
|
-
# retrieves lifetime statistics for the user
|
205
|
-
def lifetime_stats
|
206
|
-
get_call("user/#{user_id}/activities.json")
|
207
|
-
end
|
208
|
-
end
|
209
|
-
end
|
1
|
+
module FitgemOauth2
|
2
|
+
class Client
|
3
|
+
|
4
|
+
ACTIVITY_RESOURCES = %w[
|
5
|
+
calories caloriesBMR steps distance floors elevation minutesSedentary
|
6
|
+
minutesLightlyActive minutesFairlyActive minutesVeryActive
|
7
|
+
activityCaloriestracker/calories tracker/steps tracker/distance
|
8
|
+
tracker/floors tracker/elevation tracker/minutesSedentary
|
9
|
+
tracker/minutesLightlyActive tracker/minutesFairlyActive
|
10
|
+
tracker/minutesVeryActive tracker/activityCalories
|
11
|
+
].freeze
|
12
|
+
|
13
|
+
ACTIVITY_PERIODS = %w[1d 7d 30d 1w 1m 3m 6m 1y max].freeze
|
14
|
+
|
15
|
+
# retrieves daily activity summary for a date
|
16
|
+
# @param date the date for which the summary is retrieved
|
17
|
+
def daily_activity_summary(date)
|
18
|
+
get_call("user/#{user_id}/activities/date/#{format_date(date)}.json")
|
19
|
+
end
|
20
|
+
|
21
|
+
# ==================================
|
22
|
+
# Activity Time Series
|
23
|
+
# ==================================
|
24
|
+
|
25
|
+
# retrieves activity time series, based on the arguments provided
|
26
|
+
# @param resource the resource for which the series needs to be retrieved. one of ALLOWED_RESOURCES
|
27
|
+
# @param start_date the start date for the series
|
28
|
+
# @param end_date the end date for the series. If specifying end_date, do not specify period
|
29
|
+
# @param period the period starting from start_date for which the series needs to be retrieved. If specifying period,
|
30
|
+
# do not use end_date
|
31
|
+
def activity_time_series(resource: nil, start_date: nil, end_date: nil, period: nil)
|
32
|
+
|
33
|
+
unless resource && ACTIVITY_RESOURCES.include?(resource)
|
34
|
+
raise FitgemOauth2::InvalidArgumentError, "Invalid resource: #{resource}. Valid resources are #{ACTIVITY_RESOURCES}."
|
35
|
+
end
|
36
|
+
|
37
|
+
unless start_date
|
38
|
+
raise FitgemOauth2::InvalidArgumentError, 'Start date must be specified.'
|
39
|
+
end
|
40
|
+
|
41
|
+
if period && end_date
|
42
|
+
raise FitgemOauth2::InvalidArgumentError, 'Both period and end_date are specified. Please specify only one.'
|
43
|
+
end
|
44
|
+
|
45
|
+
if period && !ACTIVITY_PERIODS.include?(period)
|
46
|
+
raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Valid periods are #{ACTIVITY_PERIODS}."
|
47
|
+
end
|
48
|
+
|
49
|
+
first = format_date(start_date)
|
50
|
+
second = period || format_date(end_date)
|
51
|
+
url = ['user', user_id, 'activities', resource, 'date', first, second].join('/')
|
52
|
+
get_call(url + '.json')
|
53
|
+
end
|
54
|
+
|
55
|
+
# retrieves intraday activity time series.
|
56
|
+
# @param resource (required) for which the intrady series is retrieved. one of 'calories', 'steps', 'distance', 'floors', 'elevation'
|
57
|
+
# @param start_date (required) start date for the series
|
58
|
+
# @param end_date (optional) end date for the series, if not specified, the series is for 1 day
|
59
|
+
# @param detail_level (required) level of detail for the series
|
60
|
+
# @param start_time (optional)start time for the series
|
61
|
+
# @param end_time the (optional)end time for the series. specify both start_time and end_time, if using either
|
62
|
+
def intraday_activity_time_series(resource: nil, start_date: nil, end_date: nil, detail_level: nil,
|
63
|
+
start_time: nil, end_time: nil)
|
64
|
+
|
65
|
+
# converting to symbol to allow developer to use either 'calories' or :calories
|
66
|
+
resource = resource.to_sym
|
67
|
+
|
68
|
+
unless %i[calories steps distance floors elevation].include?(resource)
|
69
|
+
raise FitgemOauth2::InvalidArgumentError,
|
70
|
+
'Must specify resource to fetch intraday time series data for.'\
|
71
|
+
' One of (:calories, :steps, :distance, :floors, or :elevation) is required.'
|
72
|
+
end
|
73
|
+
|
74
|
+
unless start_date
|
75
|
+
raise FitgemOauth2::InvalidArgumentError,
|
76
|
+
'Must specify the start_date to fetch intraday time series data'
|
77
|
+
end
|
78
|
+
|
79
|
+
end_date ||= '1d'
|
80
|
+
|
81
|
+
unless detail_level && %w(1min 15min).include?(detail_level)
|
82
|
+
raise FitgemOauth2::InvalidArgumentError,
|
83
|
+
'Must specify the data resolution to fetch intraday time series data for.'\
|
84
|
+
' One of (\"1d\" or \"15min\") is required.'
|
85
|
+
end
|
86
|
+
|
87
|
+
resource_path = [
|
88
|
+
'user', @user_id,
|
89
|
+
'activities', resource,
|
90
|
+
'date', format_date(start_date),
|
91
|
+
end_date, detail_level
|
92
|
+
].join('/')
|
93
|
+
|
94
|
+
if start_time || end_time
|
95
|
+
resource_path =
|
96
|
+
[resource_path, 'time', format_time(start_time), format_time(end_time)].join('/')
|
97
|
+
end
|
98
|
+
get_call("#{resource_path}.json")
|
99
|
+
end
|
100
|
+
|
101
|
+
# ======================================
|
102
|
+
# Activity Logging Methods
|
103
|
+
# ======================================
|
104
|
+
|
105
|
+
# logs activity using the params.
|
106
|
+
# @param params Hash to be posted. Refer https://dev.fitbit.com/docs/activity/#activity-logging for accepted
|
107
|
+
# POST parameters
|
108
|
+
def log_activity(params)
|
109
|
+
post_call("user/#{user_id}/activities.json", params)
|
110
|
+
end
|
111
|
+
|
112
|
+
# deletes a logged activity
|
113
|
+
# @param id id of the activity log to be deleted
|
114
|
+
def delete_logged_activity(id)
|
115
|
+
delete_call("user/#{user_id}/activities/#{id}.json")
|
116
|
+
end
|
117
|
+
|
118
|
+
# retrieves activity list for the user
|
119
|
+
def activity_list(date, sort, limit)
|
120
|
+
date_param = format_date(date)
|
121
|
+
if sort == "asc"
|
122
|
+
date_param = "afterDate=#{date_param}"
|
123
|
+
elsif sort == "desc"
|
124
|
+
date_param = "beforeDate=#{date_param}"
|
125
|
+
else
|
126
|
+
raise FitgemOauth2::InvalidArgumentError, "sort can either be asc or desc"
|
127
|
+
end
|
128
|
+
get_call("user/#{user_id}/activities/list.json?offset=0&limit=#{limit}&sort=#{sort}&#{date_param}")
|
129
|
+
end
|
130
|
+
|
131
|
+
# retrieves activity list in the tcx format
|
132
|
+
def activity_tcx(id)
|
133
|
+
get_call("user/#{user_id}/activities/#{id}.tcx")
|
134
|
+
end
|
135
|
+
|
136
|
+
|
137
|
+
# ======================================
|
138
|
+
# Activity Types
|
139
|
+
# ======================================
|
140
|
+
|
141
|
+
# Get a tree of all valid Fitbit public activities from the activities catalog as well
|
142
|
+
# as private custom activities the user created in the format requested. If the activity
|
143
|
+
# has levels, also get a list of activity level details
|
144
|
+
def activities
|
145
|
+
get_call('activities.json')
|
146
|
+
end
|
147
|
+
|
148
|
+
# Returns the details of a specific activity in the Fitbit activities database in the format requested.
|
149
|
+
# @param id id of the activity for which the details need to be retrieved
|
150
|
+
def activity(id)
|
151
|
+
get_call("activities/#{id}.json")
|
152
|
+
end
|
153
|
+
|
154
|
+
# gets frequent activities
|
155
|
+
def frequent_activities
|
156
|
+
get_call("user/#{user_id}/activities/frequent.json")
|
157
|
+
end
|
158
|
+
|
159
|
+
# gets recent activities
|
160
|
+
def recent_activities
|
161
|
+
get_call("user/#{user_id}/activities/recent.json")
|
162
|
+
end
|
163
|
+
|
164
|
+
# gets favorite activities
|
165
|
+
def favorite_activities
|
166
|
+
get_call("user/#{user_id}/activities/favorite.json")
|
167
|
+
end
|
168
|
+
|
169
|
+
# adds the activity with the given ID to user's list of favorite activities.
|
170
|
+
# @param activity_id ID of the activity to be added to the list of favorite activities
|
171
|
+
def add_favorite_activity(activity_id)
|
172
|
+
post_call("user/#{user_id}/activities/log/favorite/#{activity_id}.json")
|
173
|
+
end
|
174
|
+
|
175
|
+
# removes the activity with given ID from list of favorite activities.
|
176
|
+
# @param activity_id ID of the activity to be removed from favorite activity
|
177
|
+
def remove_favorite_activity(activity_id)
|
178
|
+
delete_call("user/#{user_id}/activities/log/favorite/#{activity_id}.json")
|
179
|
+
end
|
180
|
+
|
181
|
+
# ======================================
|
182
|
+
# Activity Goals
|
183
|
+
# ======================================
|
184
|
+
|
185
|
+
# retrieve activity goals for a period
|
186
|
+
# @period the period for which the goals need to be retrieved. either 'weekly' or 'daily'
|
187
|
+
def goals(period)
|
188
|
+
unless period && %w(daily weekly).include?(period)
|
189
|
+
raise FitgemOauth2::InvalidArgumentError, "Goal period should either be 'daily' or 'weekly'"
|
190
|
+
end
|
191
|
+
get_call("user/#{user_id}/activities/goals/#{period}.json")
|
192
|
+
end
|
193
|
+
|
194
|
+
# update activity goals
|
195
|
+
# @param period period for the goal ('weekly' or 'daily')
|
196
|
+
# @param params the POST params for the request. Refer to Fitbit documentation for accepted format
|
197
|
+
def update_activity_goals(period, params)
|
198
|
+
unless period && %w(daily weekly).include?(period)
|
199
|
+
raise FitgemOauth2::InvalidArgumentError, "Goal period should either be 'daily' or 'weekly'"
|
200
|
+
end
|
201
|
+
post_call("user/#{user_id}/activities/goals/#{period}.json", params)
|
202
|
+
end
|
203
|
+
|
204
|
+
# retrieves lifetime statistics for the user
|
205
|
+
def lifetime_stats
|
206
|
+
get_call("user/#{user_id}/activities.json")
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|