fitgem_oauth2 2.2.0 → 3.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/fitgem_oauth2.gemspec +4 -4
- data/lib/fitgem_oauth2.rb +2 -1
- data/lib/fitgem_oauth2/activity.rb +16 -17
- data/lib/fitgem_oauth2/body_measurements.rb +12 -20
- data/lib/fitgem_oauth2/client.rb +32 -32
- data/lib/fitgem_oauth2/devices.rb +2 -1
- data/lib/fitgem_oauth2/errors.rb +2 -1
- data/lib/fitgem_oauth2/food.rb +2 -1
- data/lib/fitgem_oauth2/food/collection.rb +2 -0
- data/lib/fitgem_oauth2/food/metadata.rb +2 -0
- data/lib/fitgem_oauth2/food/series.rb +2 -28
- data/lib/fitgem_oauth2/friends.rb +2 -0
- data/lib/fitgem_oauth2/heartrate.rb +13 -35
- data/lib/fitgem_oauth2/sleep.rb +4 -6
- data/lib/fitgem_oauth2/subscriptions.rb +2 -1
- data/lib/fitgem_oauth2/users.rb +2 -0
- data/lib/fitgem_oauth2/utils.rb +2 -1
- data/lib/fitgem_oauth2/version.rb +3 -1
- metadata +15 -15
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: a4195903df9731ae5176aa7577c7320322e4adbaa9f7ac68234a36716a536c85
|
4
|
+
data.tar.gz: 28b46788c80bd68e8a16c14caadbbe2d9a961640c67fb3a1011c6fc7977db51b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e44efb1b76d77d3bdf42d44709ec7c3683e95060e3387cb896ac9ca9317920880bd530421418cde9995cbd6a08e756828c07bc244f2a5c5dc3cc33b10ff91c8e
|
7
|
+
data.tar.gz: c012c4d7f421ddfd44ac782de4294bc5ea94d96f154ae7b1f1dc1dedae5db07ad2821f9576a2bea6af7667f995d9e507db94c47808393e0cef643997399128dc
|
data/fitgem_oauth2.gemspec
CHANGED
@@ -1,6 +1,6 @@
|
|
1
|
-
#
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
$LOAD_PATH.unshift File.expand_path('lib', __dir__)
|
4
4
|
require 'fitgem_oauth2/version'
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
@@ -10,13 +10,13 @@ Gem::Specification.new do |s|
|
|
10
10
|
s.description = 'This gem allows requesting data from Fitbit API using OAuth2'
|
11
11
|
s.authors = ['Ankit Gupta']
|
12
12
|
s.email = 'ankit.gupta2801@gmail.com'
|
13
|
-
s.files = %w
|
13
|
+
s.files = %w[fitgem_oauth2.gemspec] + `git ls-files -z`.split("\x0").select {|f| f.start_with?('lib/') }
|
14
14
|
s.homepage = 'http://rubygems.org/gems/fitgem_oauth2'
|
15
15
|
s.license = 'MIT'
|
16
16
|
|
17
17
|
s.add_runtime_dependency 'faraday', '~> 1.0.1'
|
18
18
|
|
19
|
+
s.add_development_dependency 'factory_bot', '~> 4.5'
|
19
20
|
s.add_development_dependency 'rake', '~> 13.0.1'
|
20
21
|
s.add_development_dependency 'rspec', '~> 3.4'
|
21
|
-
s.add_development_dependency 'factory_girl', '~> 4.5'
|
22
22
|
end
|
data/lib/fitgem_oauth2.rb
CHANGED
@@ -1,6 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module FitgemOauth2
|
2
4
|
class Client
|
3
|
-
|
4
5
|
ACTIVITY_RESOURCES = %w[
|
5
6
|
calories caloriesBMR steps distance floors elevation minutesSedentary
|
6
7
|
minutesLightlyActive minutesFairlyActive minutesVeryActive
|
@@ -29,14 +30,11 @@ module FitgemOauth2
|
|
29
30
|
# @param period the period starting from start_date for which the series needs to be retrieved. If specifying period,
|
30
31
|
# do not use end_date
|
31
32
|
def activity_time_series(resource: nil, start_date: nil, end_date: nil, period: nil)
|
32
|
-
|
33
33
|
unless resource && ACTIVITY_RESOURCES.include?(resource)
|
34
34
|
raise FitgemOauth2::InvalidArgumentError, "Invalid resource: #{resource}. Valid resources are #{ACTIVITY_RESOURCES}."
|
35
35
|
end
|
36
36
|
|
37
|
-
unless start_date
|
38
|
-
raise FitgemOauth2::InvalidArgumentError, 'Start date must be specified.'
|
39
|
-
end
|
37
|
+
raise FitgemOauth2::InvalidArgumentError, 'Start date must be specified.' unless start_date
|
40
38
|
|
41
39
|
if period && end_date
|
42
40
|
raise FitgemOauth2::InvalidArgumentError, 'Both period and end_date are specified. Please specify only one.'
|
@@ -78,22 +76,22 @@ module FitgemOauth2
|
|
78
76
|
|
79
77
|
end_date ||= '1d'
|
80
78
|
|
81
|
-
unless detail_level && %w
|
79
|
+
unless detail_level && %w[1min 15min].include?(detail_level)
|
82
80
|
raise FitgemOauth2::InvalidArgumentError,
|
83
81
|
'Must specify the data resolution to fetch intraday time series data for.'\
|
84
82
|
' One of (\"1d\" or \"15min\") is required.'
|
85
83
|
end
|
86
84
|
|
87
85
|
resource_path = [
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
86
|
+
'user', @user_id,
|
87
|
+
'activities', resource,
|
88
|
+
'date', format_date(start_date),
|
89
|
+
end_date, detail_level
|
92
90
|
].join('/')
|
93
91
|
|
94
92
|
if start_time || end_time
|
95
93
|
resource_path =
|
96
|
-
|
94
|
+
[resource_path, 'time', format_time(start_time), format_time(end_time)].join('/')
|
97
95
|
end
|
98
96
|
get_call("#{resource_path}.json")
|
99
97
|
end
|
@@ -118,12 +116,12 @@ module FitgemOauth2
|
|
118
116
|
# retrieves activity list for the user
|
119
117
|
def activity_list(date, sort, limit)
|
120
118
|
date_param = format_date(date)
|
121
|
-
if sort ==
|
119
|
+
if sort == 'asc'
|
122
120
|
date_param = "afterDate=#{date_param}"
|
123
|
-
elsif sort ==
|
121
|
+
elsif sort == 'desc'
|
124
122
|
date_param = "beforeDate=#{date_param}"
|
125
123
|
else
|
126
|
-
raise FitgemOauth2::InvalidArgumentError,
|
124
|
+
raise FitgemOauth2::InvalidArgumentError, 'sort can either be asc or desc'
|
127
125
|
end
|
128
126
|
get_call("user/#{user_id}/activities/list.json?offset=0&limit=#{limit}&sort=#{sort}&#{date_param}")
|
129
127
|
end
|
@@ -133,7 +131,6 @@ module FitgemOauth2
|
|
133
131
|
get_call("user/#{user_id}/activities/#{id}.tcx")
|
134
132
|
end
|
135
133
|
|
136
|
-
|
137
134
|
# ======================================
|
138
135
|
# Activity Types
|
139
136
|
# ======================================
|
@@ -185,9 +182,10 @@ module FitgemOauth2
|
|
185
182
|
# retrieve activity goals for a period
|
186
183
|
# @period the period for which the goals need to be retrieved. either 'weekly' or 'daily'
|
187
184
|
def goals(period)
|
188
|
-
unless period && %w
|
185
|
+
unless period && %w[daily weekly].include?(period)
|
189
186
|
raise FitgemOauth2::InvalidArgumentError, "Goal period should either be 'daily' or 'weekly'"
|
190
187
|
end
|
188
|
+
|
191
189
|
get_call("user/#{user_id}/activities/goals/#{period}.json")
|
192
190
|
end
|
193
191
|
|
@@ -195,9 +193,10 @@ module FitgemOauth2
|
|
195
193
|
# @param period period for the goal ('weekly' or 'daily')
|
196
194
|
# @param params the POST params for the request. Refer to Fitbit documentation for accepted format
|
197
195
|
def update_activity_goals(period, params)
|
198
|
-
unless period && %w
|
196
|
+
unless period && %w[daily weekly].include?(period)
|
199
197
|
raise FitgemOauth2::InvalidArgumentError, "Goal period should either be 'daily' or 'weekly'"
|
200
198
|
end
|
199
|
+
|
201
200
|
post_call("user/#{user_id}/activities/goals/#{period}.json", params)
|
202
201
|
end
|
203
202
|
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module FitgemOauth2
|
2
4
|
class Client
|
3
|
-
FAT_PERIODS = %w
|
4
|
-
WEIGHT_PERIODS = %w
|
5
|
-
BODY_GOALS = %w
|
6
|
-
BODY_TIME_SERIES_PERIODS = %w
|
5
|
+
FAT_PERIODS = %w[1d 7d 1w 1m].freeze
|
6
|
+
WEIGHT_PERIODS = %w[1d 7d 30d 1w 1m].freeze
|
7
|
+
BODY_GOALS = %w[fat weight].freeze
|
8
|
+
BODY_TIME_SERIES_PERIODS = %w[1d 7d 30d 1w 1m 3m 6m 1y max].freeze
|
7
9
|
|
8
10
|
# ======================================
|
9
11
|
# Boday Fat
|
@@ -15,13 +17,10 @@ module FitgemOauth2
|
|
15
17
|
# @param end_date (optional)end date for the logs
|
16
18
|
# @param period (optional) period for the logs
|
17
19
|
def body_fat_logs(start_date: nil, end_date: nil, period: nil)
|
18
|
-
unless start_date
|
19
|
-
|
20
|
-
end
|
20
|
+
raise FitgemOauth2::InvalidArgumentError, 'must specify start_date' unless start_date
|
21
|
+
|
21
22
|
url = ['user', user_id, 'body/log/fat/date', format_date(start_date)].join('/')
|
22
|
-
if end_date
|
23
|
-
url = [url, format_date(end_date)].join('/')
|
24
|
-
end
|
23
|
+
url = [url, format_date(end_date)].join('/') if end_date
|
25
24
|
|
26
25
|
if period
|
27
26
|
if FAT_PERIODS.include?(period)
|
@@ -31,7 +30,7 @@ module FitgemOauth2
|
|
31
30
|
end
|
32
31
|
end
|
33
32
|
|
34
|
-
url
|
33
|
+
url += '.json'
|
35
34
|
|
36
35
|
get_call(url)
|
37
36
|
end
|
@@ -48,7 +47,6 @@ module FitgemOauth2
|
|
48
47
|
delete_call("user/#{user_id}/body/log/fat/#{id}.json")
|
49
48
|
end
|
50
49
|
|
51
|
-
|
52
50
|
# ==================================
|
53
51
|
# Body Time Series
|
54
52
|
# ==================================
|
@@ -78,16 +76,13 @@ module FitgemOauth2
|
|
78
76
|
end
|
79
77
|
end
|
80
78
|
|
81
|
-
if end_date
|
82
|
-
second = format_date(end_date)
|
83
|
-
end
|
79
|
+
second = format_date(end_date) if end_date
|
84
80
|
|
85
81
|
url = [url, second].join('/')
|
86
82
|
|
87
83
|
get_call(url + '.json')
|
88
84
|
end
|
89
85
|
|
90
|
-
|
91
86
|
# ======================================
|
92
87
|
# Body Goals
|
93
88
|
# ======================================
|
@@ -123,9 +118,7 @@ module FitgemOauth2
|
|
123
118
|
# @param end_date (optional)end_date for the logs
|
124
119
|
# @param period (optional)period for the logs
|
125
120
|
def weight_logs(start_date: nil, end_date: nil, period: nil)
|
126
|
-
unless start_date
|
127
|
-
raise FitgemOauth2::InvalidArgumentError, 'start_date not specified.'
|
128
|
-
end
|
121
|
+
raise FitgemOauth2::InvalidArgumentError, 'start_date not specified.' unless start_date
|
129
122
|
|
130
123
|
if period && end_date
|
131
124
|
raise FitgemOauth2::InvalidArgumentError, 'both end_date and period specified. please provide only one.'
|
@@ -158,6 +151,5 @@ module FitgemOauth2
|
|
158
151
|
def delete_logged_weight(id)
|
159
152
|
delete_call("user/#{user_id}/body/log/weight/#{id}.json")
|
160
153
|
end
|
161
|
-
|
162
154
|
end
|
163
155
|
end
|
data/lib/fitgem_oauth2/client.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'fitgem_oauth2/activity.rb'
|
2
4
|
require 'fitgem_oauth2/body_measurements.rb'
|
3
5
|
require 'fitgem_oauth2/devices.rb'
|
@@ -16,7 +18,6 @@ require 'faraday'
|
|
16
18
|
|
17
19
|
module FitgemOauth2
|
18
20
|
class Client
|
19
|
-
|
20
21
|
DEFAULT_USER_ID = '-'
|
21
22
|
API_VERSION = '1'
|
22
23
|
|
@@ -27,10 +28,8 @@ module FitgemOauth2
|
|
27
28
|
attr_reader :unit_system
|
28
29
|
|
29
30
|
def initialize(opts)
|
30
|
-
missing = [
|
31
|
-
|
32
|
-
raise FitgemOauth2::InvalidArgumentError, "Missing required options: #{missing.join(',')}"
|
33
|
-
end
|
31
|
+
missing = %i[client_id client_secret token] - opts.keys
|
32
|
+
raise FitgemOauth2::InvalidArgumentError, "Missing required options: #{missing.join(',')}" unless missing.empty?
|
34
33
|
|
35
34
|
@client_id = opts[:client_id]
|
36
35
|
@client_secret = opts[:client_secret]
|
@@ -53,7 +52,7 @@ module FitgemOauth2
|
|
53
52
|
|
54
53
|
def get_call(url)
|
55
54
|
url = "#{API_VERSION}/#{url}"
|
56
|
-
response = connection.get(url) {
|
55
|
+
response = connection.get(url) {|request| set_headers(request) }
|
57
56
|
parse_response(response)
|
58
57
|
end
|
59
58
|
|
@@ -62,61 +61,62 @@ module FitgemOauth2
|
|
62
61
|
# date (Nov 5, 2017)
|
63
62
|
def get_call_1_2(url)
|
64
63
|
url = "1.2/#{url}"
|
65
|
-
response = connection.get(url) {|request| set_headers(request)}
|
64
|
+
response = connection.get(url) {|request| set_headers(request) }
|
66
65
|
parse_response(response)
|
67
66
|
end
|
68
67
|
|
69
|
-
def post_call(url, params
|
68
|
+
def post_call(url, params={})
|
70
69
|
url = "#{API_VERSION}/#{url}"
|
71
|
-
response = connection.post(url, params) {
|
70
|
+
response = connection.post(url, params) {|request| set_headers(request) }
|
72
71
|
parse_response(response)
|
73
72
|
end
|
74
73
|
|
75
|
-
def post_call_1_2(url, params
|
74
|
+
def post_call_1_2(url, params={})
|
76
75
|
url = "1.2/#{url}"
|
77
|
-
response = connection.post(url, params) {
|
76
|
+
response = connection.post(url, params) {|request| set_headers(request) }
|
78
77
|
parse_response(response)
|
79
78
|
end
|
80
79
|
|
81
80
|
def delete_call(url)
|
82
81
|
url = "#{API_VERSION}/#{url}"
|
83
|
-
response = connection.delete(url) {
|
82
|
+
response = connection.delete(url) {|request| set_headers(request) }
|
84
83
|
parse_response(response)
|
85
84
|
end
|
86
85
|
|
87
86
|
private
|
87
|
+
|
88
88
|
attr_reader :connection
|
89
89
|
|
90
90
|
def set_headers(request)
|
91
91
|
request.headers['Authorization'] = "Bearer #{token}"
|
92
92
|
request.headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
93
|
-
request.headers['Accept-Language'] = unit_system unless unit_system
|
93
|
+
request.headers['Accept-Language'] = unit_system unless unit_system.nil?
|
94
94
|
end
|
95
95
|
|
96
96
|
def parse_response(response)
|
97
|
-
headers_to_keep = %w
|
97
|
+
headers_to_keep = %w[fitbit-rate-limit-limit fitbit-rate-limit-remaining fitbit-rate-limit-reset]
|
98
98
|
|
99
99
|
error_handler = {
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
|
110
|
-
|
111
|
-
|
112
|
-
|
113
|
-
|
114
|
-
|
115
|
-
|
100
|
+
200 => lambda {
|
101
|
+
body = JSON.parse(response.body)
|
102
|
+
body = {body: body} if body.is_a?(Array)
|
103
|
+
headers = response.headers.to_hash.keep_if do |k, _v|
|
104
|
+
headers_to_keep.include? k
|
105
|
+
end
|
106
|
+
body.merge!(headers)
|
107
|
+
},
|
108
|
+
201 => -> {},
|
109
|
+
204 => -> {},
|
110
|
+
400 => -> { raise FitgemOauth2::BadRequestError },
|
111
|
+
401 => -> { raise FitgemOauth2::UnauthorizedError },
|
112
|
+
403 => -> { raise FitgemOauth2::ForbiddenError },
|
113
|
+
404 => -> { raise FitgemOauth2::NotFoundError },
|
114
|
+
429 => -> { raise FitgemOauth2::ApiLimitError },
|
115
|
+
500..599 => -> { raise FitgemOauth2::ServerError }
|
116
116
|
}
|
117
117
|
|
118
|
-
fn = error_handler.
|
119
|
-
if fn
|
118
|
+
fn = error_handler.find {|k, _| k === response.status }
|
119
|
+
if fn.nil?
|
120
120
|
raise StandardError, "Unexpected response status #{response.status}"
|
121
121
|
else
|
122
122
|
fn.last.call
|
data/lib/fitgem_oauth2/errors.rb
CHANGED
data/lib/fitgem_oauth2/food.rb
CHANGED
@@ -1,10 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'fitgem_oauth2/food/collection.rb'
|
2
4
|
require 'fitgem_oauth2/food/series.rb'
|
3
5
|
require 'fitgem_oauth2/food/metadata.rb'
|
4
6
|
|
5
7
|
module FitgemOauth2
|
6
8
|
class Client
|
7
|
-
|
8
9
|
FOOD_SERIES_RESOURCES = %w[caloriesIn water].freeze
|
9
10
|
FOOD_SERIES_PERIODS = %w[1d 7d 30d 1w 1m 3m 6m 1y max].freeze
|
10
11
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module FitgemOauth2
|
2
4
|
class Client
|
3
5
|
def food_series_for_date_range(start_date, end_date)
|
@@ -23,33 +25,5 @@ module FitgemOauth2
|
|
23
25
|
validate_food_series_period(period)
|
24
26
|
get_call(water_series_url(user_id, format_date(start_date), period))
|
25
27
|
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
28
|
end
|
55
29
|
end
|
@@ -1,6 +1,7 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module FitgemOauth2
|
2
4
|
class Client
|
3
|
-
|
4
5
|
HR_PERIODS = %w[1d 7d 30d 1w 1m].freeze
|
5
6
|
HR_DETAIL_LEVELS = %w[1sec 1min].freeze
|
6
7
|
|
@@ -20,23 +21,6 @@ module FitgemOauth2
|
|
20
21
|
get_call(url + '.json')
|
21
22
|
end
|
22
23
|
|
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
|
-
)
|
32
|
-
|
33
|
-
second = period || format_date(end_date)
|
34
|
-
|
35
|
-
url = ['user', user_id, 'activities/heart/date', format_date(start_date), second].join('/')
|
36
|
-
|
37
|
-
get_call(url + '.json')
|
38
|
-
end
|
39
|
-
|
40
24
|
# retrieve intraday series for heartrate
|
41
25
|
def intraday_heartrate_time_series(start_date: nil, end_date: nil, detail_level: nil, start_time: nil, end_time: nil)
|
42
26
|
intraday_series_guard(
|
@@ -51,9 +35,7 @@ module FitgemOauth2
|
|
51
35
|
|
52
36
|
url = ['user', user_id, 'activities/heart/date', format_date(start_date), end_date, detail_level].join('/')
|
53
37
|
|
54
|
-
if start_time && end_time
|
55
|
-
url = [url, 'time', format_time(start_time), format_time(end_time)].join('/')
|
56
|
-
end
|
38
|
+
url = [url, 'time', format_time(start_time), format_time(end_time)].join('/') if start_time && end_time
|
57
39
|
|
58
40
|
get_call(url + '.json')
|
59
41
|
end
|
@@ -61,25 +43,21 @@ module FitgemOauth2
|
|
61
43
|
private
|
62
44
|
|
63
45
|
def validate_hr_period(period)
|
64
|
-
|
65
|
-
|
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
|
46
|
+
unless period && HR_PERIODS.include?(period)
|
47
|
+
raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Valid periods are #{HR_PERIODS}."
|
48
|
+
end
|
75
49
|
end
|
76
50
|
|
77
51
|
def intraday_series_guard(start_date:, end_date:, detail_level:, start_time:, end_time:)
|
78
|
-
raise FitgemOauth2::InvalidArgumentError, 'Start date not provided.' unless
|
52
|
+
raise FitgemOauth2::InvalidArgumentError, 'Start date not provided.' unless start_date
|
79
53
|
|
80
|
-
|
54
|
+
unless detail_level && HR_DETAIL_LEVELS.include?(detail_level)
|
55
|
+
raise FitgemOauth2::InvalidArgumentError, "Please specify the defail level. Detail level should be one of #{HR_DETAIL_LEVELS}."
|
56
|
+
end
|
81
57
|
|
82
|
-
|
58
|
+
if (start_time && !end_time) || (end_time && !start_time)
|
59
|
+
raise FitgemOauth2::InvalidArgumentError, 'Either specify both the start_time and end_time or specify neither.'
|
60
|
+
end
|
83
61
|
end
|
84
62
|
end
|
85
63
|
end
|
data/lib/fitgem_oauth2/sleep.rb
CHANGED
@@ -1,7 +1,7 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
+
module FitgemOauth2
|
3
4
|
class Client
|
4
|
-
|
5
5
|
SLEEP_RESOURCES = %w[
|
6
6
|
startTime timeInBed minutesAsleep awakeningsCount minutesAwake
|
7
7
|
minutesToFallAsleep minutesAfterWakeup efficiency
|
@@ -26,7 +26,7 @@ module FitgemOauth2
|
|
26
26
|
elsif sort == 'desc'
|
27
27
|
date_param = "beforeDate=#{date_param}"
|
28
28
|
else
|
29
|
-
raise FitgemOauth2::InvalidArgumentError,
|
29
|
+
raise FitgemOauth2::InvalidArgumentError, 'sort can either be asc or desc'
|
30
30
|
end
|
31
31
|
get_call_1_2("user/#{user_id}/sleep/list.json?#{date_param}&offset=0&sort=#{sort}&limit=#{limit}")
|
32
32
|
end
|
@@ -48,9 +48,7 @@ module FitgemOauth2
|
|
48
48
|
# @param end_date ending date for sleep time series
|
49
49
|
# @param period period for sleep time series
|
50
50
|
def sleep_time_series(resource: nil, start_date: nil, end_date: nil, period: nil)
|
51
|
-
unless start_date
|
52
|
-
raise FitgemOauth2::InvalidArgumentError, 'Start date not provided.'
|
53
|
-
end
|
51
|
+
raise FitgemOauth2::InvalidArgumentError, 'Start date not provided.' unless start_date
|
54
52
|
|
55
53
|
unless resource && SLEEP_RESOURCES.include?(resource)
|
56
54
|
raise FitgemOauth2::InvalidArgumentError, "Invalid resource: #{resource}. Valid resources are #{SLEEP_RESOURCES}."
|
data/lib/fitgem_oauth2/users.rb
CHANGED
data/lib/fitgem_oauth2/utils.rb
CHANGED
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: 3.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ankit Gupta
|
8
|
-
autorequire:
|
8
|
+
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-04-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -25,47 +25,47 @@ dependencies:
|
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: 1.0.1
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: factory_bot
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
31
|
- - "~>"
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
33
|
+
version: '4.5'
|
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: '4.5'
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: rake
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - "~>"
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version:
|
47
|
+
version: 13.0.1
|
48
48
|
type: :development
|
49
49
|
prerelease: false
|
50
50
|
version_requirements: !ruby/object:Gem::Requirement
|
51
51
|
requirements:
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
|
-
version:
|
54
|
+
version: 13.0.1
|
55
55
|
- !ruby/object:Gem::Dependency
|
56
|
-
name:
|
56
|
+
name: rspec
|
57
57
|
requirement: !ruby/object:Gem::Requirement
|
58
58
|
requirements:
|
59
59
|
- - "~>"
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: '4
|
61
|
+
version: '3.4'
|
62
62
|
type: :development
|
63
63
|
prerelease: false
|
64
64
|
version_requirements: !ruby/object:Gem::Requirement
|
65
65
|
requirements:
|
66
66
|
- - "~>"
|
67
67
|
- !ruby/object:Gem::Version
|
68
|
-
version: '4
|
68
|
+
version: '3.4'
|
69
69
|
description: This gem allows requesting data from Fitbit API using OAuth2
|
70
70
|
email: ankit.gupta2801@gmail.com
|
71
71
|
executables: []
|
@@ -94,7 +94,7 @@ homepage: http://rubygems.org/gems/fitgem_oauth2
|
|
94
94
|
licenses:
|
95
95
|
- MIT
|
96
96
|
metadata: {}
|
97
|
-
post_install_message:
|
97
|
+
post_install_message:
|
98
98
|
rdoc_options: []
|
99
99
|
require_paths:
|
100
100
|
- lib
|
@@ -109,8 +109,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
109
109
|
- !ruby/object:Gem::Version
|
110
110
|
version: '0'
|
111
111
|
requirements: []
|
112
|
-
rubygems_version: 3.
|
113
|
-
signing_key:
|
112
|
+
rubygems_version: 3.2.3
|
113
|
+
signing_key:
|
114
114
|
specification_version: 4
|
115
115
|
summary: Fitbit API client library
|
116
116
|
test_files: []
|