fitgem_oauth2 1.1.2 → 2.2.0
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 +5 -5
- data/fitgem_oauth2.gemspec +2 -2
- data/lib/fitgem_oauth2.rb +1 -0
- data/lib/fitgem_oauth2/activity.rb +10 -3
- data/lib/fitgem_oauth2/body_measurements.rb +0 -0
- data/lib/fitgem_oauth2/client.rb +5 -4
- data/lib/fitgem_oauth2/devices.rb +0 -0
- data/lib/fitgem_oauth2/errors.rb +3 -0
- data/lib/fitgem_oauth2/food.rb +14 -144
- 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/friends.rb +0 -0
- data/lib/fitgem_oauth2/heartrate.rb +55 -27
- 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 +16 -10
- data/lib/fitgem_oauth2/version.rb +1 -1
- metadata +10 -9
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: d549d93c4f0c6e8c6c217f6d18ad69b11f5b90ed3ee42e39fe19ed25ca12a27a
|
4
|
+
data.tar.gz: 0d5d8ecf9c0bb6563cd1ecba8d65f1458076113f2ba79d2e3d98b54fc5b0ed3c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 13211f94cbf789323aa48718019c6831022dd099e8926c20f3cd5c1fcb1382b61e111d3403253399bbce0d8a75b2f69ce8860c2002f810f9e95095fac44186b8
|
7
|
+
data.tar.gz: 26ef31364d04f7fc7c8c218ffd669952712271204d415492d5d72650ada09a5cf3ba2542eb011c71f6cbec06a66a7d1603813f374da1612e9b655796f90ef1b5
|
data/fitgem_oauth2.gemspec
CHANGED
@@ -14,9 +14,9 @@ Gem::Specification.new do |s|
|
|
14
14
|
s.homepage = 'http://rubygems.org/gems/fitgem_oauth2'
|
15
15
|
s.license = 'MIT'
|
16
16
|
|
17
|
-
s.add_runtime_dependency 'faraday', '~> 0.
|
17
|
+
s.add_runtime_dependency 'faraday', '~> 1.0.1'
|
18
18
|
|
19
|
-
s.add_development_dependency 'rake', '~>
|
19
|
+
s.add_development_dependency 'rake', '~> 13.0.1'
|
20
20
|
s.add_development_dependency 'rspec', '~> 3.4'
|
21
21
|
s.add_development_dependency 'factory_girl', '~> 4.5'
|
22
22
|
end
|
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
|
File without changes
|
data/lib/fitgem_oauth2/client.rb
CHANGED
@@ -107,10 +107,11 @@ module FitgemOauth2
|
|
107
107
|
},
|
108
108
|
201 => lambda { },
|
109
109
|
204 => lambda { },
|
110
|
-
400 => lambda { raise FitgemOauth2::BadRequestError
|
111
|
-
401 => lambda { raise FitgemOauth2::UnauthorizedError
|
112
|
-
403 => lambda { raise FitgemOauth2::ForbiddenError
|
113
|
-
404 => lambda { raise FitgemOauth2::NotFoundError
|
110
|
+
400 => lambda { raise FitgemOauth2::BadRequestError },
|
111
|
+
401 => lambda { raise FitgemOauth2::UnauthorizedError },
|
112
|
+
403 => lambda { raise FitgemOauth2::ForbiddenError },
|
113
|
+
404 => lambda { raise FitgemOauth2::NotFoundError },
|
114
|
+
429 => lambda { raise FitgemOauth2::ApiLimitError },
|
114
115
|
500..599 => lambda { raise FitgemOauth2::ServerError }
|
115
116
|
}
|
116
117
|
|
File without changes
|
data/lib/fitgem_oauth2/errors.rb
CHANGED
data/lib/fitgem_oauth2/food.rb
CHANGED
@@ -1,157 +1,27 @@
|
|
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
|
-
# ==================================
|
8
|
+
FOOD_SERIES_RESOURCES = %w[caloriesIn water].freeze
|
9
|
+
FOOD_SERIES_PERIODS = %w[1d 7d 30d 1w 1m 3m 6m 1y max].freeze
|
11
10
|
|
11
|
+
private
|
12
12
|
|
13
|
-
def
|
14
|
-
|
15
|
-
|
16
|
-
raise FitgemOauth2::InvalidArgumentError, "Invalid resource: #{resource}. Specify a valid resource from #{FOOD_SERIES_RESOURCES}"
|
13
|
+
def validate_food_series_period(period)
|
14
|
+
unless FOOD_SERIES_PERIODS.include?(period)
|
15
|
+
raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Specify a valid period from #{FOOD_SERIES_PERIODS}"
|
17
16
|
end
|
18
|
-
|
19
|
-
if end_date && period
|
20
|
-
raise FitgemOauth2::InvalidArgumentError, 'Provide only one of end_date and period.'
|
21
|
-
end
|
22
|
-
|
23
|
-
if !end_date && !period
|
24
|
-
raise FitgemOauth2::InvalidArgumentError, 'Provide at least one of end_date and period.'
|
25
|
-
end
|
26
|
-
|
27
|
-
url = ['user', user_id, 'foods/log', resource, 'date', start_date].join('/')
|
28
|
-
|
29
|
-
if period
|
30
|
-
unless FOOD_SERIES_PERIODS.include?(period)
|
31
|
-
raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Specify a valid period from #{FOOD_SERIES_PERIODS}"
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
second = period || format_date(end_date)
|
36
|
-
url = [url, second].join('/')
|
37
|
-
|
38
|
-
get_call(url + '.json')
|
39
|
-
end
|
40
|
-
|
41
|
-
# ==================================
|
42
|
-
# Collection data
|
43
|
-
# ==================================
|
44
|
-
|
45
|
-
def food_goals
|
46
|
-
get_call("user/#{user_id}/foods/log/goal.json")
|
47
|
-
end
|
48
|
-
|
49
|
-
def food_logs(date)
|
50
|
-
get_call("user/#{user_id}/foods/log/date/#{format_date(date)}.json")
|
51
|
-
end
|
52
|
-
|
53
|
-
def water_logs(date)
|
54
|
-
get_call("user/#{user_id}/foods/log/water/date/#{format_date(date)}.json")
|
55
|
-
end
|
56
|
-
|
57
|
-
def water_goal
|
58
|
-
get_call("user/#{user_id}/foods/log/water/goal.json")
|
59
|
-
end
|
60
|
-
|
61
|
-
def log_food(params)
|
62
|
-
post_call("user/#{user_id}/foods/log.json", params)
|
63
|
-
end
|
64
|
-
|
65
|
-
def update_food_log(food_log_id, params)
|
66
|
-
post_call("user/#{user_id}/foods/log/#{food_log_id}.json", params)
|
67
|
-
end
|
68
|
-
|
69
|
-
def log_water(params)
|
70
|
-
post_call("user/#{user_id}/foods/log/water.json", params)
|
71
|
-
end
|
72
|
-
|
73
|
-
def update_food_goal(params)
|
74
|
-
post_call("user/#{user_id}/foods/log/goal.json", params)
|
75
|
-
end
|
76
|
-
|
77
|
-
def update_water_goal(params)
|
78
|
-
post_call("user/#{user_id}/foods/log/water/goal.json", params)
|
79
|
-
end
|
80
|
-
|
81
|
-
def delete_food_log(food_log_id)
|
82
|
-
delete_call("user/#{user_id}/foods/log/#{food_log_id}.json")
|
83
|
-
end
|
84
|
-
|
85
|
-
def update_water_log(water_log_id, params)
|
86
|
-
post_call("user/#{user_id}/foods/log/water/#{water_log_id}.json", params)
|
87
|
-
end
|
88
|
-
|
89
|
-
def delete_water_log(water_log_id)
|
90
|
-
delete_call("user/#{user_id}/foods/log/water/#{water_log_id}.json")
|
91
|
-
end
|
92
|
-
|
93
|
-
# ==================================
|
94
|
-
# Collection Metadata
|
95
|
-
# ==================================
|
96
|
-
|
97
|
-
def add_favorite_food(food_id)
|
98
|
-
post_call("user/#{user_id}/foods/log/favorite/#{food_id}.json")
|
99
|
-
end
|
100
|
-
|
101
|
-
def delete_favorite_food(food_id)
|
102
|
-
delete_call("user/#{user_id}/foods/log/favorite/#{food_id}.json")
|
103
|
-
end
|
104
|
-
|
105
|
-
def recent_foods
|
106
|
-
get_call("user/#{user_id}/foods/recent.json")
|
107
|
-
end
|
108
|
-
|
109
|
-
def favorite_foods
|
110
|
-
get_call("user/#{user_id}/foods/log/favorite.json")
|
111
|
-
end
|
112
|
-
|
113
|
-
def frequent_foods
|
114
|
-
get_call("user/#{user_id}/foods/log/frequent.json")
|
115
|
-
end
|
116
|
-
|
117
|
-
def meals
|
118
|
-
get_call("user/#{user_id}/meals.json")
|
119
|
-
end
|
120
|
-
|
121
|
-
def create_meal(params)
|
122
|
-
post_call("user/#{user_id}/meals.json", params)
|
123
|
-
end
|
124
|
-
|
125
|
-
def meal(meal_id)
|
126
|
-
get_call("user/#{user_id}/meals/#{meal_id}.json")
|
127
|
-
end
|
128
|
-
|
129
|
-
def update_meal(meal_id, params)
|
130
|
-
post_call("user/#{user_id}/meals/#{meal_id}.json", params)
|
131
|
-
end
|
132
|
-
|
133
|
-
def delete_meal(meal_id)
|
134
|
-
delete_call("user/#{user_id}/meals/#{meal_id}.json")
|
135
|
-
end
|
136
|
-
|
137
|
-
def create_food(params)
|
138
|
-
post_call("user/#{user_id}/foods.json", params)
|
139
|
-
end
|
140
|
-
|
141
|
-
def delete_food(food_id)
|
142
|
-
delete_call("user/#{user_id}/foods/#{food_id}.json")
|
143
|
-
end
|
144
|
-
|
145
|
-
def food(id)
|
146
|
-
get_call("foods/#{id}.json")
|
147
17
|
end
|
148
18
|
|
149
|
-
def
|
150
|
-
|
19
|
+
def food_series_url(user_id, start_date, end_date_or_period)
|
20
|
+
['user', user_id, 'foods/log/caloriesIn', 'date', start_date, end_date_or_period].join('/') + '.json'
|
151
21
|
end
|
152
22
|
|
153
|
-
def
|
154
|
-
|
23
|
+
def water_series_url(user_id, start_date, end_date_or_period)
|
24
|
+
['user', user_id, 'foods/log/water', 'date', start_date, end_date_or_period].join('/') + '.json'
|
155
25
|
end
|
156
26
|
end
|
157
27
|
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
|
File without changes
|
@@ -1,26 +1,34 @@
|
|
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
|
-
|
8
|
-
|
9
|
-
|
10
|
-
raise FitgemOauth2::InvalidArgumentError, 'Start date not provided.'
|
11
|
-
end
|
7
|
+
def hr_series_for_date_range(start_date, end_date)
|
8
|
+
validate_start_date(start_date)
|
9
|
+
validate_end_date(end_date)
|
12
10
|
|
13
|
-
|
14
|
-
|
15
|
-
|
11
|
+
url = ['user', user_id, 'activities/heart/date', format_date(start_date), format_date(end_date)].join('/')
|
12
|
+
get_call(url + '.json')
|
13
|
+
end
|
16
14
|
|
17
|
-
|
18
|
-
|
19
|
-
|
15
|
+
def hr_series_for_period(start_date, period)
|
16
|
+
validate_start_date(start_date)
|
17
|
+
validate_hr_period(period)
|
20
18
|
|
21
|
-
|
22
|
-
|
23
|
-
|
19
|
+
url = ['user', user_id, 'activities/heart/date', format_date(start_date), period].join('/')
|
20
|
+
get_call(url + '.json')
|
21
|
+
end
|
22
|
+
|
23
|
+
# retrieve heartrate time series
|
24
|
+
def heartrate_time_series(start_date: nil, end_date: nil, period: nil)
|
25
|
+
warn '[DEPRECATION] `heartrate_time_series` is deprecated. Please use `hr_series_for_date_range` or `hr_series_for_period` instead.'
|
26
|
+
|
27
|
+
regular_time_series_guard(
|
28
|
+
start_date: start_date,
|
29
|
+
end_date: end_date,
|
30
|
+
period: period
|
31
|
+
)
|
24
32
|
|
25
33
|
second = period || format_date(end_date)
|
26
34
|
|
@@ -31,27 +39,47 @@ module FitgemOauth2
|
|
31
39
|
|
32
40
|
# retrieve intraday series for heartrate
|
33
41
|
def intraday_heartrate_time_series(start_date: nil, end_date: nil, detail_level: nil, start_time: nil, end_time: nil)
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
42
|
+
intraday_series_guard(
|
43
|
+
start_date: start_date,
|
44
|
+
end_date: end_date,
|
45
|
+
detail_level: detail_level,
|
46
|
+
start_time: start_time,
|
47
|
+
end_time: end_time
|
48
|
+
)
|
41
49
|
|
42
50
|
end_date = format_date(end_date) || '1d'
|
43
51
|
|
44
52
|
url = ['user', user_id, 'activities/heart/date', format_date(start_date), end_date, detail_level].join('/')
|
45
53
|
|
46
|
-
if (start_time && !end_time) || (end_time && !start_time)
|
47
|
-
raise FitgemOauth2::InvalidArgumentError, 'Either specify both the start_time and end_time or specify neither.'
|
48
|
-
end
|
49
|
-
|
50
54
|
if start_time && end_time
|
51
55
|
url = [url, 'time', format_time(start_time), format_time(end_time)].join('/')
|
52
56
|
end
|
53
57
|
|
54
58
|
get_call(url + '.json')
|
55
59
|
end
|
60
|
+
|
61
|
+
private
|
62
|
+
|
63
|
+
def validate_hr_period(period)
|
64
|
+
raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Valid periods are #{HR_PERIODS}." unless period && HR_PERIODS.include?(period)
|
65
|
+
end
|
66
|
+
|
67
|
+
def regular_time_series_guard(start_date:, end_date:, period:)
|
68
|
+
validate_start_date(start_date)
|
69
|
+
|
70
|
+
raise FitgemOauth2::InvalidArgumentError, 'Both end_date and period specified. Specify only one.' if end_date && period
|
71
|
+
|
72
|
+
raise FitgemOauth2::InvalidArgumentError, 'Neither end_date nor period specified. Specify at least one.' if !end_date && !period
|
73
|
+
|
74
|
+
validate_hr_period(period) if period
|
75
|
+
end
|
76
|
+
|
77
|
+
def intraday_series_guard(start_date:, end_date:, detail_level:, start_time:, end_time:)
|
78
|
+
raise FitgemOauth2::InvalidArgumentError, 'Start date not provided.' unless start_date
|
79
|
+
|
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)
|
81
|
+
|
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)
|
83
|
+
end
|
56
84
|
end
|
57
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,19 +1,16 @@
|
|
1
1
|
module FitgemOauth2
|
2
2
|
class Client
|
3
|
-
|
4
3
|
def format_date(date)
|
5
4
|
|
6
|
-
if
|
7
|
-
return nil
|
8
|
-
end
|
5
|
+
return nil if date.nil?
|
9
6
|
|
10
|
-
valid_semantic_date = %w
|
11
|
-
valid_date_string = (
|
7
|
+
valid_semantic_date = %w[today yesterday].include? date
|
8
|
+
valid_date_string = (date =~ /\d{4}\-\d{2}\-\d{2}/) == 0
|
12
9
|
if valid_date_string
|
13
10
|
date
|
14
11
|
elsif valid_semantic_date
|
15
12
|
date_from_semantic(date)
|
16
|
-
elsif Date
|
13
|
+
elsif date.is_a?(Date) || date.is_a?(Time) || date.is_a?(DateTime)
|
17
14
|
date.strftime('%Y-%m-%d')
|
18
15
|
else
|
19
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}"
|
@@ -21,19 +18,28 @@ module FitgemOauth2
|
|
21
18
|
end
|
22
19
|
|
23
20
|
def format_time(time)
|
24
|
-
if (
|
21
|
+
if (time =~ /\d{2}:\d{2}/) == 0
|
25
22
|
time
|
26
|
-
elsif DateTime
|
23
|
+
elsif time.is_a?(DateTime) || time.is_a?(Time)
|
27
24
|
time.strftime('%H:%M')
|
28
25
|
else
|
29
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
27
|
end
|
31
28
|
end
|
32
29
|
|
30
|
+
def validate_start_date(start_date)
|
31
|
+
raise FitgemOauth2::InvalidArgumentError, 'Please specify a valid start date.' unless start_date
|
32
|
+
end
|
33
|
+
|
34
|
+
def validate_end_date(end_date)
|
35
|
+
raise FitgemOauth2::InvalidArgumentError, 'Please specify a valid end date.' unless end_date
|
36
|
+
end
|
37
|
+
|
33
38
|
private
|
39
|
+
|
34
40
|
def date_from_semantic(semantic)
|
35
41
|
if semantic === 'yesterday'
|
36
|
-
(Date.today-1).strftime('%Y-%m-%d')
|
42
|
+
(Date.today - 1).strftime('%Y-%m-%d')
|
37
43
|
elsif semantic == 'today'
|
38
44
|
Date.today.strftime('%Y-%m-%d')
|
39
45
|
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: fitgem_oauth2
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version:
|
4
|
+
version: 2.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ankit Gupta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2020-08-26 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -16,28 +16,28 @@ dependencies:
|
|
16
16
|
requirements:
|
17
17
|
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
19
|
+
version: 1.0.1
|
20
20
|
type: :runtime
|
21
21
|
prerelease: false
|
22
22
|
version_requirements: !ruby/object:Gem::Requirement
|
23
23
|
requirements:
|
24
24
|
- - "~>"
|
25
25
|
- !ruby/object:Gem::Version
|
26
|
-
version:
|
26
|
+
version: 1.0.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
28
|
name: rake
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: 13.0.1
|
34
34
|
type: :development
|
35
35
|
prerelease: false
|
36
36
|
version_requirements: !ruby/object:Gem::Requirement
|
37
37
|
requirements:
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
|
-
version:
|
40
|
+
version: 13.0.1
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
42
|
name: rspec
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -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
|
@@ -106,10 +109,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
106
109
|
- !ruby/object:Gem::Version
|
107
110
|
version: '0'
|
108
111
|
requirements: []
|
109
|
-
|
110
|
-
rubygems_version: 2.4.6
|
112
|
+
rubygems_version: 3.0.3
|
111
113
|
signing_key:
|
112
114
|
specification_version: 4
|
113
115
|
summary: Fitbit API client library
|
114
116
|
test_files: []
|
115
|
-
has_rdoc:
|