fitgem_oauth2 1.2.0 → 1.3.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +5 -5
- data/lib/fitgem_oauth2.rb +1 -0
- data/lib/fitgem_oauth2/activity.rb +10 -3
- data/lib/fitgem_oauth2/food.rb +7 -176
- data/lib/fitgem_oauth2/food/collection.rb +51 -0
- data/lib/fitgem_oauth2/food/metadata.rb +63 -0
- data/lib/fitgem_oauth2/food/series.rb +55 -0
- data/lib/fitgem_oauth2/heartrate.rb +10 -22
- data/lib/fitgem_oauth2/sleep.rb +8 -4
- data/lib/fitgem_oauth2/subscriptions.rb +5 -5
- data/lib/fitgem_oauth2/users.rb +1 -1
- data/lib/fitgem_oauth2/utils.rb +11 -16
- data/lib/fitgem_oauth2/version.rb +1 -1
- metadata +5 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: fd9d0f60ab3531d3ee135513c6e6ef7bf584978ee2aa760112ae317528bce9f4
|
4
|
+
data.tar.gz: a65d59a4e239ae99f068d1886166fbc81c04d544bcf1cc03acda2703d1e7497c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 0a747382a12149b6aa73fab4df12672fde5be3a35ce1c33ab8bd9ee969146c2ca6368b5667f7c94cfbd0ae7c09a30a0d051870c766149afaf37f7658fd0e33b7
|
7
|
+
data.tar.gz: 3400e8170f577dd2414bce4cea863ee02a97d68c49e2dff03ba1af3c8f1616634d4c35acf5e4111dce08692c87d96bd4427cc6d8408ec9bf45e98bd471f245dd
|
data/lib/fitgem_oauth2.rb
CHANGED
@@ -1,9 +1,16 @@
|
|
1
1
|
module FitgemOauth2
|
2
2
|
class Client
|
3
3
|
|
4
|
-
ACTIVITY_RESOURCES = %w
|
5
|
-
|
6
|
-
|
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
|
7
14
|
|
8
15
|
# retrieves daily activity summary for a date
|
9
16
|
# @param date the date for which the summary is retrieved
|
data/lib/fitgem_oauth2/food.rb
CHANGED
@@ -1,190 +1,21 @@
|
|
1
|
+
require 'fitgem_oauth2/food/collection.rb'
|
2
|
+
require 'fitgem_oauth2/food/series.rb'
|
3
|
+
require 'fitgem_oauth2/food/metadata.rb'
|
4
|
+
|
1
5
|
module FitgemOauth2
|
2
6
|
class Client
|
3
7
|
|
4
|
-
FOOD_SERIES_RESOURCES = %w
|
5
|
-
FOOD_SERIES_PERIODS = %w
|
6
|
-
|
7
|
-
|
8
|
-
# ==================================
|
9
|
-
# Food or Water Series
|
10
|
-
# ==================================
|
11
|
-
|
12
|
-
def food_series_for_date_range(start_date, end_date)
|
13
|
-
validate_start_date(start_date)
|
14
|
-
validate_end_date(end_date)
|
15
|
-
get_call(food_series_url(user_id, format_date(start_date), format_date(end_date)))
|
16
|
-
end
|
17
|
-
|
18
|
-
def food_series_for_period(start_date, period)
|
19
|
-
validate_start_date(start_date)
|
20
|
-
validate_food_series_period(period)
|
21
|
-
get_call(food_series_url(user_id, format_date(start_date), period))
|
22
|
-
end
|
23
|
-
|
24
|
-
def water_series_for_date_range(start_date, end_date)
|
25
|
-
validate_start_date(start_date)
|
26
|
-
validate_end_date(end_date)
|
27
|
-
get_call(water_series_url(user_id, format_date(start_date), format_date(end_date)))
|
28
|
-
end
|
29
|
-
|
30
|
-
def water_series_for_period(start_date, period)
|
31
|
-
validate_start_date(start_date)
|
32
|
-
validate_food_series_period(period)
|
33
|
-
get_call(water_series_url(user_id, format_date(start_date), period))
|
34
|
-
end
|
35
|
-
|
36
|
-
def food_series(resource: nil, start_date: nil, end_date: nil, period: nil)
|
37
|
-
warn '[DEPRECATED] use `food_series_for_date_range`, `food_series_for_period`, `water_series_for_date_range`, or `water_series_for_period` instead.'
|
38
|
-
unless FOOD_SERIES_RESOURCES.include?(resource)
|
39
|
-
raise FitgemOauth2::InvalidArgumentError, "Invalid resource: #{resource}. Specify a valid resource from #{FOOD_SERIES_RESOURCES}"
|
40
|
-
end
|
41
|
-
|
42
|
-
if end_date && period
|
43
|
-
raise FitgemOauth2::InvalidArgumentError, 'Provide only one of end_date and period.'
|
44
|
-
end
|
45
|
-
|
46
|
-
if !end_date && !period
|
47
|
-
raise FitgemOauth2::InvalidArgumentError, 'Provide at least one of end_date and period.'
|
48
|
-
end
|
49
|
-
|
50
|
-
url = ['user', user_id, 'foods/log', resource, 'date', start_date].join('/')
|
51
|
-
|
52
|
-
if period
|
53
|
-
unless FOOD_SERIES_PERIODS.include?(period)
|
54
|
-
raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Specify a valid period from #{FOOD_SERIES_PERIODS}"
|
55
|
-
end
|
56
|
-
end
|
57
|
-
|
58
|
-
second = period || format_date(end_date)
|
59
|
-
url = [url, second].join('/')
|
60
|
-
|
61
|
-
get_call(url + '.json')
|
62
|
-
end
|
63
|
-
|
64
|
-
# ==================================
|
65
|
-
# Collection data
|
66
|
-
# ==================================
|
67
|
-
|
68
|
-
def food_goals
|
69
|
-
get_call("user/#{user_id}/foods/log/goal.json")
|
70
|
-
end
|
71
|
-
|
72
|
-
def food_logs(date)
|
73
|
-
get_call("user/#{user_id}/foods/log/date/#{format_date(date)}.json")
|
74
|
-
end
|
75
|
-
|
76
|
-
def water_logs(date)
|
77
|
-
get_call("user/#{user_id}/foods/log/water/date/#{format_date(date)}.json")
|
78
|
-
end
|
79
|
-
|
80
|
-
def water_goal
|
81
|
-
get_call("user/#{user_id}/foods/log/water/goal.json")
|
82
|
-
end
|
83
|
-
|
84
|
-
def log_food(params)
|
85
|
-
post_call("user/#{user_id}/foods/log.json", params)
|
86
|
-
end
|
87
|
-
|
88
|
-
def update_food_log(food_log_id, params)
|
89
|
-
post_call("user/#{user_id}/foods/log/#{food_log_id}.json", params)
|
90
|
-
end
|
91
|
-
|
92
|
-
def log_water(params)
|
93
|
-
post_call("user/#{user_id}/foods/log/water.json", params)
|
94
|
-
end
|
95
|
-
|
96
|
-
def update_food_goal(params)
|
97
|
-
post_call("user/#{user_id}/foods/log/goal.json", params)
|
98
|
-
end
|
99
|
-
|
100
|
-
def update_water_goal(params)
|
101
|
-
post_call("user/#{user_id}/foods/log/water/goal.json", params)
|
102
|
-
end
|
103
|
-
|
104
|
-
def delete_food_log(food_log_id)
|
105
|
-
delete_call("user/#{user_id}/foods/log/#{food_log_id}.json")
|
106
|
-
end
|
107
|
-
|
108
|
-
def update_water_log(water_log_id, params)
|
109
|
-
post_call("user/#{user_id}/foods/log/water/#{water_log_id}.json", params)
|
110
|
-
end
|
111
|
-
|
112
|
-
def delete_water_log(water_log_id)
|
113
|
-
delete_call("user/#{user_id}/foods/log/water/#{water_log_id}.json")
|
114
|
-
end
|
115
|
-
|
116
|
-
# ==================================
|
117
|
-
# Collection Metadata
|
118
|
-
# ==================================
|
119
|
-
|
120
|
-
def add_favorite_food(food_id)
|
121
|
-
post_call("user/#{user_id}/foods/log/favorite/#{food_id}.json")
|
122
|
-
end
|
123
|
-
|
124
|
-
def delete_favorite_food(food_id)
|
125
|
-
delete_call("user/#{user_id}/foods/log/favorite/#{food_id}.json")
|
126
|
-
end
|
127
|
-
|
128
|
-
def recent_foods
|
129
|
-
get_call("user/#{user_id}/foods/recent.json")
|
130
|
-
end
|
131
|
-
|
132
|
-
def favorite_foods
|
133
|
-
get_call("user/#{user_id}/foods/log/favorite.json")
|
134
|
-
end
|
135
|
-
|
136
|
-
def frequent_foods
|
137
|
-
get_call("user/#{user_id}/foods/log/frequent.json")
|
138
|
-
end
|
139
|
-
|
140
|
-
def meals
|
141
|
-
get_call("user/#{user_id}/meals.json")
|
142
|
-
end
|
143
|
-
|
144
|
-
def create_meal(params)
|
145
|
-
post_call("user/#{user_id}/meals.json", params)
|
146
|
-
end
|
147
|
-
|
148
|
-
def meal(meal_id)
|
149
|
-
get_call("user/#{user_id}/meals/#{meal_id}.json")
|
150
|
-
end
|
151
|
-
|
152
|
-
def update_meal(meal_id, params)
|
153
|
-
post_call("user/#{user_id}/meals/#{meal_id}.json", params)
|
154
|
-
end
|
155
|
-
|
156
|
-
def delete_meal(meal_id)
|
157
|
-
delete_call("user/#{user_id}/meals/#{meal_id}.json")
|
158
|
-
end
|
159
|
-
|
160
|
-
def create_food(params)
|
161
|
-
post_call("user/#{user_id}/foods.json", params)
|
162
|
-
end
|
163
|
-
|
164
|
-
def delete_food(food_id)
|
165
|
-
delete_call("user/#{user_id}/foods/#{food_id}.json")
|
166
|
-
end
|
167
|
-
|
168
|
-
def food(id)
|
169
|
-
get_call("foods/#{id}.json")
|
170
|
-
end
|
171
|
-
|
172
|
-
def food_units
|
173
|
-
get_call('foods/units.json')
|
174
|
-
end
|
175
|
-
|
176
|
-
def search_foods(params)
|
177
|
-
post_call('foods/search.json', params)
|
178
|
-
end
|
8
|
+
FOOD_SERIES_RESOURCES = %w[caloriesIn water].freeze
|
9
|
+
FOOD_SERIES_PERIODS = %w[1d 7d 30d 1w 1m 3m 6m 1y max].freeze
|
179
10
|
|
180
11
|
private
|
12
|
+
|
181
13
|
def validate_food_series_period(period)
|
182
14
|
unless FOOD_SERIES_PERIODS.include?(period)
|
183
15
|
raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Specify a valid period from #{FOOD_SERIES_PERIODS}"
|
184
16
|
end
|
185
17
|
end
|
186
18
|
|
187
|
-
|
188
19
|
def food_series_url(user_id, start_date, end_date_or_period)
|
189
20
|
['user', user_id, 'foods/log/caloriesIn', 'date', start_date, end_date_or_period].join('/') + '.json'
|
190
21
|
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
module FitgemOauth2
|
2
|
+
class Client
|
3
|
+
def food_goals
|
4
|
+
get_call("user/#{user_id}/foods/log/goal.json")
|
5
|
+
end
|
6
|
+
|
7
|
+
def food_logs(date)
|
8
|
+
get_call("user/#{user_id}/foods/log/date/#{format_date(date)}.json")
|
9
|
+
end
|
10
|
+
|
11
|
+
def water_logs(date)
|
12
|
+
get_call("user/#{user_id}/foods/log/water/date/#{format_date(date)}.json")
|
13
|
+
end
|
14
|
+
|
15
|
+
def water_goal
|
16
|
+
get_call("user/#{user_id}/foods/log/water/goal.json")
|
17
|
+
end
|
18
|
+
|
19
|
+
def log_food(params)
|
20
|
+
post_call("user/#{user_id}/foods/log.json", params)
|
21
|
+
end
|
22
|
+
|
23
|
+
def update_food_log(food_log_id, params)
|
24
|
+
post_call("user/#{user_id}/foods/log/#{food_log_id}.json", params)
|
25
|
+
end
|
26
|
+
|
27
|
+
def log_water(params)
|
28
|
+
post_call("user/#{user_id}/foods/log/water.json", params)
|
29
|
+
end
|
30
|
+
|
31
|
+
def update_food_goal(params)
|
32
|
+
post_call("user/#{user_id}/foods/log/goal.json", params)
|
33
|
+
end
|
34
|
+
|
35
|
+
def update_water_goal(params)
|
36
|
+
post_call("user/#{user_id}/foods/log/water/goal.json", params)
|
37
|
+
end
|
38
|
+
|
39
|
+
def delete_food_log(food_log_id)
|
40
|
+
delete_call("user/#{user_id}/foods/log/#{food_log_id}.json")
|
41
|
+
end
|
42
|
+
|
43
|
+
def update_water_log(water_log_id, params)
|
44
|
+
post_call("user/#{user_id}/foods/log/water/#{water_log_id}.json", params)
|
45
|
+
end
|
46
|
+
|
47
|
+
def delete_water_log(water_log_id)
|
48
|
+
delete_call("user/#{user_id}/foods/log/water/#{water_log_id}.json")
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,63 @@
|
|
1
|
+
module FitgemOauth2
|
2
|
+
class Client
|
3
|
+
def add_favorite_food(food_id)
|
4
|
+
post_call("user/#{user_id}/foods/log/favorite/#{food_id}.json")
|
5
|
+
end
|
6
|
+
|
7
|
+
def delete_favorite_food(food_id)
|
8
|
+
delete_call("user/#{user_id}/foods/log/favorite/#{food_id}.json")
|
9
|
+
end
|
10
|
+
|
11
|
+
def recent_foods
|
12
|
+
get_call("user/#{user_id}/foods/recent.json")
|
13
|
+
end
|
14
|
+
|
15
|
+
def favorite_foods
|
16
|
+
get_call("user/#{user_id}/foods/log/favorite.json")
|
17
|
+
end
|
18
|
+
|
19
|
+
def frequent_foods
|
20
|
+
get_call("user/#{user_id}/foods/log/frequent.json")
|
21
|
+
end
|
22
|
+
|
23
|
+
def meals
|
24
|
+
get_call("user/#{user_id}/meals.json")
|
25
|
+
end
|
26
|
+
|
27
|
+
def create_meal(params)
|
28
|
+
post_call("user/#{user_id}/meals.json", params)
|
29
|
+
end
|
30
|
+
|
31
|
+
def meal(meal_id)
|
32
|
+
get_call("user/#{user_id}/meals/#{meal_id}.json")
|
33
|
+
end
|
34
|
+
|
35
|
+
def update_meal(meal_id, params)
|
36
|
+
post_call("user/#{user_id}/meals/#{meal_id}.json", params)
|
37
|
+
end
|
38
|
+
|
39
|
+
def delete_meal(meal_id)
|
40
|
+
delete_call("user/#{user_id}/meals/#{meal_id}.json")
|
41
|
+
end
|
42
|
+
|
43
|
+
def create_food(params)
|
44
|
+
post_call("user/#{user_id}/foods.json", params)
|
45
|
+
end
|
46
|
+
|
47
|
+
def delete_food(food_id)
|
48
|
+
delete_call("user/#{user_id}/foods/#{food_id}.json")
|
49
|
+
end
|
50
|
+
|
51
|
+
def food(id)
|
52
|
+
get_call("foods/#{id}.json")
|
53
|
+
end
|
54
|
+
|
55
|
+
def food_units
|
56
|
+
get_call('foods/units.json')
|
57
|
+
end
|
58
|
+
|
59
|
+
def search_foods(params)
|
60
|
+
post_call('foods/search.json', params)
|
61
|
+
end
|
62
|
+
end
|
63
|
+
end
|
@@ -0,0 +1,55 @@
|
|
1
|
+
module FitgemOauth2
|
2
|
+
class Client
|
3
|
+
def food_series_for_date_range(start_date, end_date)
|
4
|
+
validate_start_date(start_date)
|
5
|
+
validate_end_date(end_date)
|
6
|
+
get_call(food_series_url(user_id, format_date(start_date), format_date(end_date)))
|
7
|
+
end
|
8
|
+
|
9
|
+
def food_series_for_period(start_date, period)
|
10
|
+
validate_start_date(start_date)
|
11
|
+
validate_food_series_period(period)
|
12
|
+
get_call(food_series_url(user_id, format_date(start_date), period))
|
13
|
+
end
|
14
|
+
|
15
|
+
def water_series_for_date_range(start_date, end_date)
|
16
|
+
validate_start_date(start_date)
|
17
|
+
validate_end_date(end_date)
|
18
|
+
get_call(water_series_url(user_id, format_date(start_date), format_date(end_date)))
|
19
|
+
end
|
20
|
+
|
21
|
+
def water_series_for_period(start_date, period)
|
22
|
+
validate_start_date(start_date)
|
23
|
+
validate_food_series_period(period)
|
24
|
+
get_call(water_series_url(user_id, format_date(start_date), period))
|
25
|
+
end
|
26
|
+
|
27
|
+
def food_series(resource: nil, start_date: nil, end_date: nil, period: nil)
|
28
|
+
warn '[DEPRECATED] use `food_series_for_date_range`, `food_series_for_period`, `water_series_for_date_range`, or `water_series_for_period` instead.'
|
29
|
+
unless FOOD_SERIES_RESOURCES.include?(resource)
|
30
|
+
raise FitgemOauth2::InvalidArgumentError, "Invalid resource: #{resource}. Specify a valid resource from #{FOOD_SERIES_RESOURCES}"
|
31
|
+
end
|
32
|
+
|
33
|
+
if end_date && period
|
34
|
+
raise FitgemOauth2::InvalidArgumentError, 'Provide only one of end_date and period.'
|
35
|
+
end
|
36
|
+
|
37
|
+
if !end_date && !period
|
38
|
+
raise FitgemOauth2::InvalidArgumentError, 'Provide at least one of end_date and period.'
|
39
|
+
end
|
40
|
+
|
41
|
+
url = ['user', user_id, 'foods/log', resource, 'date', start_date].join('/')
|
42
|
+
|
43
|
+
if period
|
44
|
+
unless FOOD_SERIES_PERIODS.include?(period)
|
45
|
+
raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Specify a valid period from #{FOOD_SERIES_PERIODS}"
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
second = period || format_date(end_date)
|
50
|
+
url = [url, second].join('/')
|
51
|
+
|
52
|
+
get_call(url + '.json')
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module FitgemOauth2
|
2
2
|
class Client
|
3
3
|
|
4
|
-
HR_PERIODS = %w
|
5
|
-
HR_DETAIL_LEVELS = %w
|
4
|
+
HR_PERIODS = %w[1d 7d 30d 1w 1m].freeze
|
5
|
+
HR_DETAIL_LEVELS = %w[1sec 1min].freeze
|
6
6
|
|
7
7
|
def hr_series_for_date_range(start_date, end_date)
|
8
8
|
validate_start_date(start_date)
|
@@ -22,7 +22,7 @@ module FitgemOauth2
|
|
22
22
|
|
23
23
|
# retrieve heartrate time series
|
24
24
|
def heartrate_time_series(start_date: nil, end_date: nil, period: nil)
|
25
|
-
warn
|
25
|
+
warn '[DEPRECATION] `heartrate_time_series` is deprecated. Please use `hr_series_for_date_range` or `hr_series_for_period` instead.'
|
26
26
|
|
27
27
|
regular_time_series_guard(
|
28
28
|
start_date: start_date,
|
@@ -59,39 +59,27 @@ module FitgemOauth2
|
|
59
59
|
end
|
60
60
|
|
61
61
|
private
|
62
|
+
|
62
63
|
def validate_hr_period(period)
|
63
|
-
unless period && HR_PERIODS.include?(period)
|
64
|
-
raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Valid periods are #{HR_PERIODS}."
|
65
|
-
end
|
64
|
+
raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Valid periods are #{HR_PERIODS}." unless period && HR_PERIODS.include?(period)
|
66
65
|
end
|
67
66
|
|
68
67
|
def regular_time_series_guard(start_date:, end_date:, period:)
|
69
68
|
validate_start_date(start_date)
|
70
69
|
|
71
|
-
if end_date && period
|
72
|
-
raise FitgemOauth2::InvalidArgumentError, 'Both end_date and period specified. Specify only one.'
|
73
|
-
end
|
70
|
+
raise FitgemOauth2::InvalidArgumentError, 'Both end_date and period specified. Specify only one.' if end_date && period
|
74
71
|
|
75
|
-
if !end_date && !period
|
76
|
-
raise FitgemOauth2::InvalidArgumentError, 'Neither end_date nor period specified. Specify at least one.'
|
77
|
-
end
|
72
|
+
raise FitgemOauth2::InvalidArgumentError, 'Neither end_date nor period specified. Specify at least one.' if !end_date && !period
|
78
73
|
|
79
74
|
validate_hr_period(period) if period
|
80
75
|
end
|
81
76
|
|
82
|
-
|
83
77
|
def intraday_series_guard(start_date:, end_date:, detail_level:, start_time:, end_time:)
|
84
|
-
unless
|
85
|
-
raise FitgemOauth2::InvalidArgumentError, 'Start date not provided.'
|
86
|
-
end
|
78
|
+
raise FitgemOauth2::InvalidArgumentError, 'Start date not provided.' unless start_date
|
87
79
|
|
88
|
-
unless detail_level && HR_DETAIL_LEVELS.include?(detail_level)
|
89
|
-
raise FitgemOauth2::InvalidArgumentError, "Please specify the defail level. Detail level should be one of #{HR_DETAIL_LEVELS}."
|
90
|
-
end
|
80
|
+
raise FitgemOauth2::InvalidArgumentError, "Please specify the defail level. Detail level should be one of #{HR_DETAIL_LEVELS}." unless detail_level && HR_DETAIL_LEVELS.include?(detail_level)
|
91
81
|
|
92
|
-
if (start_time && !end_time) || (end_time && !start_time)
|
93
|
-
raise FitgemOauth2::InvalidArgumentError, 'Either specify both the start_time and end_time or specify neither.'
|
94
|
-
end
|
82
|
+
raise FitgemOauth2::InvalidArgumentError, 'Either specify both the start_time and end_time or specify neither.' if (start_time && !end_time) || (end_time && !start_time)
|
95
83
|
end
|
96
84
|
end
|
97
85
|
end
|
data/lib/fitgem_oauth2/sleep.rb
CHANGED
@@ -2,8 +2,12 @@ module FitgemOauth2
|
|
2
2
|
|
3
3
|
class Client
|
4
4
|
|
5
|
-
SLEEP_RESOURCES = %w
|
6
|
-
|
5
|
+
SLEEP_RESOURCES = %w[
|
6
|
+
startTime timeInBed minutesAsleep awakeningsCount minutesAwake
|
7
|
+
minutesToFallAsleep minutesAfterWakeup efficiency
|
8
|
+
].freeze
|
9
|
+
|
10
|
+
SLEEP_PERIODS = %w[1d 7d 30d 1w 1m 3m 6m 1y max].freeze
|
7
11
|
|
8
12
|
# retrieve sleep logs for a date
|
9
13
|
# @param date date for which sleep logs needs to be accessed
|
@@ -17,9 +21,9 @@ module FitgemOauth2
|
|
17
21
|
|
18
22
|
def sleep_logs_list(date, sort, limit)
|
19
23
|
date_param = format_date(date)
|
20
|
-
if sort ==
|
24
|
+
if sort == 'asc'
|
21
25
|
date_param = "afterDate=#{date_param}"
|
22
|
-
elsif sort ==
|
26
|
+
elsif sort == 'desc'
|
23
27
|
date_param = "beforeDate=#{date_param}"
|
24
28
|
else
|
25
29
|
raise FitgemOauth2::InvalidArgumentError, "sort can either be asc or desc"
|
@@ -1,7 +1,7 @@
|
|
1
1
|
module FitgemOauth2
|
2
2
|
class Client
|
3
3
|
|
4
|
-
SUBSCRIBABLE_TYPES = [
|
4
|
+
SUBSCRIBABLE_TYPES = %i[sleep body activities foods all].freeze
|
5
5
|
|
6
6
|
def subscriptions(opts)
|
7
7
|
get_call(subscription_url(opts))
|
@@ -18,15 +18,15 @@ module FitgemOauth2
|
|
18
18
|
protected
|
19
19
|
|
20
20
|
def subscription_url(opts)
|
21
|
-
type = opts[
|
21
|
+
type = opts[:type] || :all
|
22
22
|
subscription_id = opts[:subscription_id]
|
23
23
|
|
24
|
-
url = [
|
24
|
+
url = ['user', user_id]
|
25
25
|
url << type unless type == :all
|
26
26
|
url << 'apiSubscriptions'
|
27
27
|
url << subscription_id if subscription_id
|
28
28
|
|
29
|
-
|
29
|
+
url.join('/') + '.json'
|
30
30
|
end
|
31
31
|
end
|
32
|
-
end
|
32
|
+
end
|
data/lib/fitgem_oauth2/users.rb
CHANGED
data/lib/fitgem_oauth2/utils.rb
CHANGED
@@ -1,18 +1,16 @@
|
|
1
1
|
module FitgemOauth2
|
2
2
|
class Client
|
3
|
-
|
4
3
|
def format_date(date)
|
5
|
-
if !date
|
6
|
-
return nil
|
7
|
-
end
|
8
4
|
|
9
|
-
|
10
|
-
|
5
|
+
return nil if date.nil?
|
6
|
+
|
7
|
+
valid_semantic_date = %w[today yesterday].include? date
|
8
|
+
valid_date_string = (date =~ /\d{4}\-\d{2}\-\d{2}/) == 0
|
11
9
|
if valid_date_string
|
12
10
|
date
|
13
11
|
elsif valid_semantic_date
|
14
12
|
date_from_semantic(date)
|
15
|
-
elsif Date
|
13
|
+
elsif date.is_a?(Date) || date.is_a?(Time) || date.is_a?(DateTime)
|
16
14
|
date.strftime('%Y-%m-%d')
|
17
15
|
else
|
18
16
|
raise FitgemOauth2::InvalidDateArgument, "Date used must be a date/time object or a string in the format YYYY-MM-DD; supplied argument is a #{date.class}"
|
@@ -20,9 +18,9 @@ module FitgemOauth2
|
|
20
18
|
end
|
21
19
|
|
22
20
|
def format_time(time)
|
23
|
-
if (
|
21
|
+
if (time =~ /\d{2}:\d{2}/) == 0
|
24
22
|
time
|
25
|
-
elsif DateTime
|
23
|
+
elsif time.is_a?(DateTime) || time.is_a?(Time)
|
26
24
|
time.strftime('%H:%M')
|
27
25
|
else
|
28
26
|
raise FitgemOauth2::InvalidTimeArgument, "Time used must be a DateTime/Time object or a string in the format hh:mm; supplied argument is a #{time.class}"
|
@@ -30,21 +28,18 @@ module FitgemOauth2
|
|
30
28
|
end
|
31
29
|
|
32
30
|
def validate_start_date(start_date)
|
33
|
-
unless start_date
|
34
|
-
raise FitgemOauth2::InvalidArgumentError, 'Please specify a valid start date.'
|
35
|
-
end
|
31
|
+
raise FitgemOauth2::InvalidArgumentError, 'Please specify a valid start date.' unless start_date
|
36
32
|
end
|
37
33
|
|
38
34
|
def validate_end_date(end_date)
|
39
|
-
unless end_date
|
40
|
-
raise FitgemOauth2::InvalidArgumentError, 'Please specify a valid end date.'
|
41
|
-
end
|
35
|
+
raise FitgemOauth2::InvalidArgumentError, 'Please specify a valid end date.' unless end_date
|
42
36
|
end
|
43
37
|
|
44
38
|
private
|
39
|
+
|
45
40
|
def date_from_semantic(semantic)
|
46
41
|
if semantic === 'yesterday'
|
47
|
-
(Date.today-1).strftime('%Y-%m-%d')
|
42
|
+
(Date.today - 1).strftime('%Y-%m-%d')
|
48
43
|
elsif semantic == 'today'
|
49
44
|
Date.today.strftime('%Y-%m-%d')
|
50
45
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fitgem_oauth2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ankit Gupta
|
@@ -80,6 +80,9 @@ files:
|
|
80
80
|
- lib/fitgem_oauth2/devices.rb
|
81
81
|
- lib/fitgem_oauth2/errors.rb
|
82
82
|
- lib/fitgem_oauth2/food.rb
|
83
|
+
- lib/fitgem_oauth2/food/collection.rb
|
84
|
+
- lib/fitgem_oauth2/food/metadata.rb
|
85
|
+
- lib/fitgem_oauth2/food/series.rb
|
83
86
|
- lib/fitgem_oauth2/friends.rb
|
84
87
|
- lib/fitgem_oauth2/heartrate.rb
|
85
88
|
- lib/fitgem_oauth2/sleep.rb
|
@@ -107,7 +110,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
107
110
|
version: '0'
|
108
111
|
requirements: []
|
109
112
|
rubyforge_project:
|
110
|
-
rubygems_version: 2.
|
113
|
+
rubygems_version: 2.7.7
|
111
114
|
signing_key:
|
112
115
|
specification_version: 4
|
113
116
|
summary: Fitbit API client library
|