fitgem_oauth2 2.2.0 → 3.0.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 +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: []
|