fitgem_oauth2 3.0.0 → 4.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a4195903df9731ae5176aa7577c7320322e4adbaa9f7ac68234a36716a536c85
4
- data.tar.gz: 28b46788c80bd68e8a16c14caadbbe2d9a961640c67fb3a1011c6fc7977db51b
3
+ metadata.gz: cb6abab3890862d921de4c7f36128afc601bbb2579382f67164929cbd4deba3e
4
+ data.tar.gz: 740cb87e8fdfdae9a3437b59d63486e85bb58567cdad1d22cdb5a90e7daa2b55
5
5
  SHA512:
6
- metadata.gz: e44efb1b76d77d3bdf42d44709ec7c3683e95060e3387cb896ac9ca9317920880bd530421418cde9995cbd6a08e756828c07bc244f2a5c5dc3cc33b10ff91c8e
7
- data.tar.gz: c012c4d7f421ddfd44ac782de4294bc5ea94d96f154ae7b1f1dc1dedae5db07ad2821f9576a2bea6af7667f995d9e507db94c47808393e0cef643997399128dc
6
+ metadata.gz: 94a1a3f44eef697b5de5a67a992322995e3184fd5142b9896b8e2827d97abf5949aaa5bd07dd88503787bc13defad8ae1215460bfd3a026bcbf3cb41504fd2b8
7
+ data.tar.gz: c85fab5f3b82b37fca9302fcf55f36c1e0f0b83be4f00a743919caafe879d97a1dd9d5df94c4336de221d063b2bd5923ccd08b654a6a01b30f4fa41d6ca9ab8b
@@ -13,10 +13,13 @@ Gem::Specification.new do |s|
13
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
+ s.metadata = {'rubygems_mfa_required' => 'true'}
16
17
 
17
- s.add_runtime_dependency 'faraday', '~> 1.0.1'
18
+ s.required_ruby_version = '>= 3.2.0'
18
19
 
19
- s.add_development_dependency 'factory_bot', '~> 4.5'
20
- s.add_development_dependency 'rake', '~> 13.0.1'
20
+ s.add_dependency 'faraday', '~> 2.0'
21
+
22
+ s.add_development_dependency 'factory_bot', '~> 6.0'
23
+ s.add_development_dependency 'rake', '~> 13.0'
21
24
  s.add_development_dependency 'rspec', '~> 3.4'
22
25
  end
@@ -26,12 +26,13 @@ module FitgemOauth2
26
26
  # retrieves activity time series, based on the arguments provided
27
27
  # @param resource the resource for which the series needs to be retrieved. one of ALLOWED_RESOURCES
28
28
  # @param start_date the start date for the series
29
- # @param end_date the end date for the series. If specifying end_date, do not specify period
30
- # @param period the period starting from start_date for which the series needs to be retrieved. If specifying period,
31
- # do not use end_date
29
+ # @param end_date the end date for the series. do not specify period
30
+ # @param period the period starting from start_date for which the series
31
+ # needs to be retrieved. If specifying period, do not use end_date
32
32
  def activity_time_series(resource: nil, start_date: nil, end_date: nil, period: nil)
33
33
  unless resource && ACTIVITY_RESOURCES.include?(resource)
34
- raise FitgemOauth2::InvalidArgumentError, "Invalid resource: #{resource}. Valid resources are #{ACTIVITY_RESOURCES}."
34
+ raise FitgemOauth2::InvalidArgumentError,
35
+ "Invalid resource: #{resource}. Valid resources are #{ACTIVITY_RESOURCES}."
35
36
  end
36
37
 
37
38
  raise FitgemOauth2::InvalidArgumentError, 'Start date must be specified.' unless start_date
@@ -47,26 +48,27 @@ module FitgemOauth2
47
48
  first = format_date(start_date)
48
49
  second = period || format_date(end_date)
49
50
  url = ['user', user_id, 'activities', resource, 'date', first, second].join('/')
50
- get_call(url + '.json')
51
+ get_call("#{url}.json")
51
52
  end
52
53
 
53
54
  # retrieves intraday activity time series.
54
- # @param resource (required) for which the intrady series is retrieved. one of 'calories', 'steps', 'distance', 'floors', 'elevation'
55
+ # @param resource (required) for which the intrady series is retrieved.
56
+ # one of 'calories', 'steps', 'distance', 'floors', 'elevation'
55
57
  # @param start_date (required) start date for the series
56
58
  # @param end_date (optional) end date for the series, if not specified, the series is for 1 day
57
59
  # @param detail_level (required) level of detail for the series
58
60
  # @param start_time (optional)start time for the series
59
61
  # @param end_time the (optional)end time for the series. specify both start_time and end_time, if using either
62
+ # rubocop:disable Metrics/ParameterLists
60
63
  def intraday_activity_time_series(resource: nil, start_date: nil, end_date: nil, detail_level: nil,
61
64
  start_time: nil, end_time: nil)
62
-
63
65
  # converting to symbol to allow developer to use either 'calories' or :calories
64
66
  resource = resource.to_sym
65
67
 
66
68
  unless %i[calories steps distance floors elevation].include?(resource)
67
69
  raise FitgemOauth2::InvalidArgumentError,
68
- 'Must specify resource to fetch intraday time series data for.'\
69
- ' One of (:calories, :steps, :distance, :floors, or :elevation) is required.'
70
+ 'Must specify resource to fetch intraday time series data for. ' \
71
+ 'One of (:calories, :steps, :distance, :floors, or :elevation) is required.'
70
72
  end
71
73
 
72
74
  unless start_date
@@ -78,8 +80,8 @@ module FitgemOauth2
78
80
 
79
81
  unless detail_level && %w[1min 15min].include?(detail_level)
80
82
  raise FitgemOauth2::InvalidArgumentError,
81
- 'Must specify the data resolution to fetch intraday time series data for.'\
82
- ' One of (\"1d\" or \"15min\") is required.'
83
+ 'Must specify the data resolution to fetch intraday time series data for. ' \
84
+ 'One of (\"1d\" or \"15min\") is required.'
83
85
  end
84
86
 
85
87
  resource_path = [
@@ -95,6 +97,7 @@ module FitgemOauth2
95
97
  end
96
98
  get_call("#{resource_path}.json")
97
99
  end
100
+ # rubocop:enable Metrics/ParameterLists
98
101
 
99
102
  # ======================================
100
103
  # Activity Logging Methods
@@ -23,11 +23,12 @@ module FitgemOauth2
23
23
  url = [url, format_date(end_date)].join('/') if end_date
24
24
 
25
25
  if period
26
- if FAT_PERIODS.include?(period)
27
- url = [url, period].join('/')
28
- else
26
+ unless FAT_PERIODS.include?(period)
29
27
  raise FitgemOauth2::InvalidArgumentError, "period must be one in #{FAT_PERIODS}"
30
28
  end
29
+
30
+ url = [url, period].join('/')
31
+
31
32
  end
32
33
 
33
34
  url += '.json'
@@ -58,7 +59,8 @@ module FitgemOauth2
58
59
  # @param period (optional)period for the time series. valid periods are BODY_TIME_SERIES_PERIODS
59
60
  def body_time_series(resource: nil, start_date: nil, end_date: nil, period: nil)
60
61
  unless resource && start_date
61
- raise FitgemOauth2::InvalidArgumentError, 'resource and start_date are required parameters. Please specify both.'
62
+ raise FitgemOauth2::InvalidArgumentError,
63
+ 'resource and start_date are required parameters. Please specify both.'
62
64
  end
63
65
 
64
66
  url = ['user', user_id, 'body', resource, 'date', format_date(start_date)].join('/')
@@ -72,7 +74,8 @@ module FitgemOauth2
72
74
  if BODY_TIME_SERIES_PERIODS.include?(period)
73
75
  second = period
74
76
  else
75
- raise FitgemOauth2::InvalidArgumentError, "Invalid Period. Body time series period must be in #{BODY_TIME_SERIES_PERIODS}"
77
+ raise FitgemOauth2::InvalidArgumentError,
78
+ "Invalid Period. Body time series period must be in #{BODY_TIME_SERIES_PERIODS}"
76
79
  end
77
80
  end
78
81
 
@@ -80,7 +83,7 @@ module FitgemOauth2
80
83
 
81
84
  url = [url, second].join('/')
82
85
 
83
- get_call(url + '.json')
86
+ get_call("#{url}.json")
84
87
  end
85
88
 
86
89
  # ======================================
@@ -90,11 +93,11 @@ module FitgemOauth2
90
93
  # retrieves body goals based on the type specified
91
94
  # @param type 'fat' or 'weight'
92
95
  def body_goals(type)
93
- if type && BODY_GOALS.include?(type)
94
- get_call("user/#{user_id}/body/log/#{type}/goal.json")
95
- else
96
+ unless type && BODY_GOALS.include?(type)
96
97
  raise FitgemOauth2::InvalidArgumentError, "invalid goal type : #{type}. must be one of #{BODY_GOALS}"
97
98
  end
99
+
100
+ get_call("user/#{user_id}/body/log/#{type}/goal.json")
98
101
  end
99
102
 
100
103
  # update body fat goal
@@ -124,10 +127,9 @@ module FitgemOauth2
124
127
  raise FitgemOauth2::InvalidArgumentError, 'both end_date and period specified. please provide only one.'
125
128
  end
126
129
 
127
- if period
128
- unless WEIGHT_PERIODS.include?(period)
129
- raise FitgemOauth2::InvalidArgumentError, "valid period not specified. please choose a period from #{WEIGHT_PERIODS}"
130
- end
130
+ if period && !WEIGHT_PERIODS.include?(period)
131
+ raise FitgemOauth2::InvalidArgumentError,
132
+ "valid period not specified. please choose a period from #{WEIGHT_PERIODS}"
131
133
  end
132
134
 
133
135
  first = format_date(start_date)
@@ -137,7 +139,7 @@ module FitgemOauth2
137
139
  url = [url, second].join('/')
138
140
  end
139
141
 
140
- get_call(url + '.json')
142
+ get_call("#{url}.json")
141
143
  end
142
144
 
143
145
  # logs weight for the user
@@ -1,17 +1,17 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fitgem_oauth2/activity.rb'
4
- require 'fitgem_oauth2/body_measurements.rb'
5
- require 'fitgem_oauth2/devices.rb'
6
- require 'fitgem_oauth2/errors.rb'
7
- require 'fitgem_oauth2/food.rb'
8
- require 'fitgem_oauth2/friends.rb'
9
- require 'fitgem_oauth2/heartrate.rb'
10
- require 'fitgem_oauth2/sleep.rb'
11
- require 'fitgem_oauth2/subscriptions.rb'
12
- require 'fitgem_oauth2/users.rb'
13
- require 'fitgem_oauth2/utils.rb'
14
- require 'fitgem_oauth2/version.rb'
3
+ require 'fitgem_oauth2/activity'
4
+ require 'fitgem_oauth2/body_measurements'
5
+ require 'fitgem_oauth2/devices'
6
+ require 'fitgem_oauth2/errors'
7
+ require 'fitgem_oauth2/food'
8
+ require 'fitgem_oauth2/friends'
9
+ require 'fitgem_oauth2/heartrate'
10
+ require 'fitgem_oauth2/sleep'
11
+ require 'fitgem_oauth2/subscriptions'
12
+ require 'fitgem_oauth2/users'
13
+ require 'fitgem_oauth2/utils'
14
+ require 'fitgem_oauth2/version'
15
15
 
16
16
  require 'base64'
17
17
  require 'faraday'
@@ -21,11 +21,7 @@ module FitgemOauth2
21
21
  DEFAULT_USER_ID = '-'
22
22
  API_VERSION = '1'
23
23
 
24
- attr_reader :client_id
25
- attr_reader :client_secret
26
- attr_reader :token
27
- attr_reader :user_id
28
- attr_reader :unit_system
24
+ attr_reader :client_id, :client_secret, :token, :user_id, :unit_system
29
25
 
30
26
  def initialize(opts)
31
27
  missing = %i[client_id client_secret token] - opts.keys
@@ -34,7 +30,7 @@ module FitgemOauth2
34
30
  @client_id = opts[:client_id]
35
31
  @client_secret = opts[:client_secret]
36
32
  @token = opts[:token]
37
- @user_id = (opts[:user_id] || DEFAULT_USER_ID)
33
+ @user_id = opts[:user_id] || DEFAULT_USER_ID
38
34
  @unit_system = opts[:unit_system]
39
35
  @connection = Faraday.new('https://api.fitbit.com')
40
36
  end
@@ -50,6 +46,16 @@ module FitgemOauth2
50
46
  JSON.parse(response.body)
51
47
  end
52
48
 
49
+ def revoke_token(token)
50
+ response = connection.post('/oauth2/revoke') do |request|
51
+ encoded = Base64.strict_encode64("#{@client_id}:#{@client_secret}")
52
+ request.headers['Authorization'] = "Basic #{encoded}"
53
+ request.headers['Content-Type'] = 'application/x-www-form-urlencoded'
54
+ request.params['token'] = token
55
+ end
56
+ JSON.parse(response.body)
57
+ end
58
+
53
59
  def get_call(url)
54
60
  url = "#{API_VERSION}/#{url}"
55
61
  response = connection.get(url) {|request| set_headers(request) }
@@ -59,7 +65,7 @@ module FitgemOauth2
59
65
  # This method is a helper method (like get_call) for 1.2 version of the API_VERSION
60
66
  # This method is needed because Fitbit API supports both versions as of current
61
67
  # date (Nov 5, 2017)
62
- def get_call_1_2(url)
68
+ def get_call12(url)
63
69
  url = "1.2/#{url}"
64
70
  response = connection.get(url) {|request| set_headers(request) }
65
71
  parse_response(response)
@@ -71,7 +77,7 @@ module FitgemOauth2
71
77
  parse_response(response)
72
78
  end
73
79
 
74
- def post_call_1_2(url, params={})
80
+ def post_call12(url, params={})
75
81
  url = "1.2/#{url}"
76
82
  response = connection.post(url, params) {|request| set_headers(request) }
77
83
  parse_response(response)
@@ -87,11 +93,13 @@ module FitgemOauth2
87
93
 
88
94
  attr_reader :connection
89
95
 
96
+ # rubocop:disable Naming/AccessorMethodName
90
97
  def set_headers(request)
91
98
  request.headers['Authorization'] = "Bearer #{token}"
92
99
  request.headers['Content-Type'] = 'application/x-www-form-urlencoded'
93
100
  request.headers['Accept-Language'] = unit_system unless unit_system.nil?
94
101
  end
102
+ # rubocop:enable Naming/AccessorMethodName
95
103
 
96
104
  def parse_response(response)
97
105
  headers_to_keep = %w[fitbit-rate-limit-limit fitbit-rate-limit-remaining fitbit-rate-limit-reset]
@@ -115,12 +123,10 @@ module FitgemOauth2
115
123
  500..599 => -> { raise FitgemOauth2::ServerError }
116
124
  }
117
125
 
118
- fn = error_handler.find {|k, _| k === response.status }
119
- if fn.nil?
120
- raise StandardError, "Unexpected response status #{response.status}"
121
- else
122
- fn.last.call
123
- end
126
+ fn = error_handler.find {|k, _| k == response.status }
127
+ raise StandardError, "Unexpected response status #{response.status}" if fn.nil?
128
+
129
+ fn.last.call
124
130
  end
125
131
  end
126
132
  end
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fitgem_oauth2/food/collection.rb'
4
- require 'fitgem_oauth2/food/series.rb'
5
- require 'fitgem_oauth2/food/metadata.rb'
3
+ require 'fitgem_oauth2/food/collection'
4
+ require 'fitgem_oauth2/food/series'
5
+ require 'fitgem_oauth2/food/metadata'
6
6
 
7
7
  module FitgemOauth2
8
8
  class Client
@@ -12,17 +12,18 @@ module FitgemOauth2
12
12
  private
13
13
 
14
14
  def validate_food_series_period(period)
15
- unless FOOD_SERIES_PERIODS.include?(period)
16
- raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Specify a valid period from #{FOOD_SERIES_PERIODS}"
17
- end
15
+ return if FOOD_SERIES_PERIODS.include?(period)
16
+
17
+ raise FitgemOauth2::InvalidArgumentError,
18
+ "Invalid period: #{period}. Specify a valid period from #{FOOD_SERIES_PERIODS}"
18
19
  end
19
20
 
20
21
  def food_series_url(user_id, start_date, end_date_or_period)
21
- ['user', user_id, 'foods/log/caloriesIn', 'date', start_date, end_date_or_period].join('/') + '.json'
22
+ "#{['user', user_id, 'foods/log/caloriesIn', 'date', start_date, end_date_or_period].join('/')}.json"
22
23
  end
23
24
 
24
25
  def water_series_url(user_id, start_date, end_date_or_period)
25
- ['user', user_id, 'foods/log/water', 'date', start_date, end_date_or_period].join('/') + '.json'
26
+ "#{['user', user_id, 'foods/log/water', 'date', start_date, end_date_or_period].join('/')}.json"
26
27
  end
27
28
  end
28
29
  end
@@ -10,7 +10,7 @@ module FitgemOauth2
10
10
  validate_end_date(end_date)
11
11
 
12
12
  url = ['user', user_id, 'activities/heart/date', format_date(start_date), format_date(end_date)].join('/')
13
- get_call(url + '.json')
13
+ get_call("#{url}.json")
14
14
  end
15
15
 
16
16
  def hr_series_for_period(start_date, period)
@@ -18,14 +18,14 @@ module FitgemOauth2
18
18
  validate_hr_period(period)
19
19
 
20
20
  url = ['user', user_id, 'activities/heart/date', format_date(start_date), period].join('/')
21
- get_call(url + '.json')
21
+ get_call("#{url}.json")
22
22
  end
23
23
 
24
24
  # retrieve intraday series for heartrate
25
- def intraday_heartrate_time_series(start_date: nil, end_date: nil, detail_level: nil, start_time: nil, end_time: nil)
25
+ def intraday_heartrate_time_series(start_date: nil, end_date: nil, detail_level: nil, start_time: nil,
26
+ end_time: nil)
26
27
  intraday_series_guard(
27
28
  start_date: start_date,
28
- end_date: end_date,
29
29
  detail_level: detail_level,
30
30
  start_time: start_time,
31
31
  end_time: end_time
@@ -37,27 +37,28 @@ module FitgemOauth2
37
37
 
38
38
  url = [url, 'time', format_time(start_time), format_time(end_time)].join('/') if start_time && end_time
39
39
 
40
- get_call(url + '.json')
40
+ get_call("#{url}.json")
41
41
  end
42
42
 
43
43
  private
44
44
 
45
45
  def validate_hr_period(period)
46
- unless period && HR_PERIODS.include?(period)
47
- raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Valid periods are #{HR_PERIODS}."
48
- end
46
+ return if period && HR_PERIODS.include?(period)
47
+
48
+ raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Valid periods are #{HR_PERIODS}."
49
49
  end
50
50
 
51
- def intraday_series_guard(start_date:, end_date:, detail_level:, start_time:, end_time:)
51
+ def intraday_series_guard(start_date:, detail_level:, start_time:, end_time:)
52
52
  raise FitgemOauth2::InvalidArgumentError, 'Start date not provided.' unless start_date
53
53
 
54
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}."
55
+ raise FitgemOauth2::InvalidArgumentError,
56
+ "Please specify the defail level. Detail level should be one of #{HR_DETAIL_LEVELS}."
56
57
  end
57
58
 
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
59
+ return unless (start_time && !end_time) || (end_time && !start_time)
60
+
61
+ raise FitgemOauth2::InvalidArgumentError, 'Either specify both the start_time and end_time or specify neither.'
61
62
  end
62
63
  end
63
64
  end
@@ -12,11 +12,11 @@ module FitgemOauth2
12
12
  # retrieve sleep logs for a date
13
13
  # @param date date for which sleep logs needs to be accessed
14
14
  def sleep_logs(date)
15
- get_call_1_2("user/#{user_id}/sleep/date/#{format_date(date)}.json")
15
+ get_call12("user/#{user_id}/sleep/date/#{format_date(date)}.json")
16
16
  end
17
17
 
18
18
  def sleep_logs_by_date_range(start_date, end_date)
19
- get_call_1_2("user/#{user_id}/sleep/date/#{format_date(start_date)}/#{format_date(end_date)}.json")
19
+ get_call12("user/#{user_id}/sleep/date/#{format_date(start_date)}/#{format_date(end_date)}.json")
20
20
  end
21
21
 
22
22
  def sleep_logs_list(date, sort, limit)
@@ -28,7 +28,7 @@ module FitgemOauth2
28
28
  else
29
29
  raise FitgemOauth2::InvalidArgumentError, 'sort can either be asc or desc'
30
30
  end
31
- get_call_1_2("user/#{user_id}/sleep/list.json?#{date_param}&offset=0&sort=#{sort}&limit=#{limit}")
31
+ get_call12("user/#{user_id}/sleep/list.json?#{date_param}&offset=0&sort=#{sort}&limit=#{limit}")
32
32
  end
33
33
 
34
34
  # retrieve sleep goal for the user
@@ -51,7 +51,8 @@ module FitgemOauth2
51
51
  raise FitgemOauth2::InvalidArgumentError, 'Start date not provided.' unless start_date
52
52
 
53
53
  unless resource && SLEEP_RESOURCES.include?(resource)
54
- raise FitgemOauth2::InvalidArgumentError, "Invalid resource: #{resource}. Valid resources are #{SLEEP_RESOURCES}."
54
+ raise FitgemOauth2::InvalidArgumentError,
55
+ "Invalid resource: #{resource}. Valid resources are #{SLEEP_RESOURCES}."
55
56
  end
56
57
 
57
58
  if period && end_date
@@ -66,13 +67,13 @@ module FitgemOauth2
66
67
 
67
68
  url = ['user', user_id, 'sleep', resource, 'date', format_date(start_date), second].join('/')
68
69
 
69
- get_call(url + '.json')
70
+ get_call("#{url}.json")
70
71
  end
71
72
 
72
73
  # log sleep
73
74
  # @param params POST params for creating sleep log
74
75
  def log_sleep(params)
75
- post_call_1_2("user/#{user_id}/sleep.json", params)
76
+ post_call12("user/#{user_id}/sleep.json", params)
76
77
  end
77
78
 
78
79
  # deleted sleep log
@@ -27,7 +27,7 @@ module FitgemOauth2
27
27
  url << 'apiSubscriptions'
28
28
  url << subscription_id if subscription_id
29
29
 
30
- url.join('/') + '.json'
30
+ "#{url.join('/')}.json"
31
31
  end
32
32
  end
33
33
  end
@@ -5,26 +5,28 @@ module FitgemOauth2
5
5
  def format_date(date)
6
6
  return nil if date.nil?
7
7
 
8
- valid_semantic_date = %w[today yesterday].include? date
9
- valid_date_string = (date =~ /\d{4}\-\d{2}\-\d{2}/) == 0
10
- if valid_date_string
8
+ if date.is_a?(String) && date.match?(/\A\d{4}-\d{2}-\d{2}\z/)
11
9
  date
12
- elsif valid_semantic_date
10
+ elsif date.is_a?(String) && %w[today yesterday].include?(date)
13
11
  date_from_semantic(date)
14
12
  elsif date.is_a?(Date) || date.is_a?(Time) || date.is_a?(DateTime)
15
13
  date.strftime('%Y-%m-%d')
16
14
  else
17
- 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}"
15
+ raise FitgemOauth2::InvalidDateArgument,
16
+ 'Date used must be a date/time object or a string in the format YYYY-MM-DD; ' \
17
+ "supplied argument is a #{date.class}"
18
18
  end
19
19
  end
20
20
 
21
21
  def format_time(time)
22
- if (time =~ /\d{2}:\d{2}/) == 0
22
+ if time.is_a?(String) && time.match?(/\A\d{2}:\d{2}\z/)
23
23
  time
24
24
  elsif time.is_a?(DateTime) || time.is_a?(Time)
25
25
  time.strftime('%H:%M')
26
26
  else
27
- 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}"
27
+ raise FitgemOauth2::InvalidTimeArgument,
28
+ 'Time used must be a DateTime/Time object or a string in the format hh:mm; ' \
29
+ "supplied argument is a #{time.class}"
28
30
  end
29
31
  end
30
32
 
@@ -39,7 +41,7 @@ module FitgemOauth2
39
41
  private
40
42
 
41
43
  def date_from_semantic(semantic)
42
- if semantic === 'yesterday'
44
+ if semantic == 'yesterday'
43
45
  (Date.today - 1).strftime('%Y-%m-%d')
44
46
  elsif semantic == 'today'
45
47
  Date.today.strftime('%Y-%m-%d')
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module FitgemOauth2
4
- VERSION = '3.0.0'
4
+ VERSION = '4.0.0'
5
5
  end
data/lib/fitgem_oauth2.rb CHANGED
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fitgem_oauth2/client.rb'
3
+ require 'fitgem_oauth2/client'
4
4
 
5
5
  # Top level module for the classes for this gem
6
6
  module FitgemOauth2
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: 3.0.0
4
+ version: 4.0.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: 2021-04-04 00:00:00.000000000 Z
11
+ date: 2026-02-16 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: faraday
@@ -16,42 +16,42 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.0.1
19
+ version: '2.0'
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: 1.0.1
26
+ version: '2.0'
27
27
  - !ruby/object:Gem::Dependency
28
28
  name: factory_bot
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '4.5'
33
+ version: '6.0'
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: '4.5'
40
+ version: '6.0'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: rake
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - "~>"
46
46
  - !ruby/object:Gem::Version
47
- version: 13.0.1
47
+ version: '13.0'
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: 13.0.1
54
+ version: '13.0'
55
55
  - !ruby/object:Gem::Dependency
56
56
  name: rspec
57
57
  requirement: !ruby/object:Gem::Requirement
@@ -93,7 +93,8 @@ files:
93
93
  homepage: http://rubygems.org/gems/fitgem_oauth2
94
94
  licenses:
95
95
  - MIT
96
- metadata: {}
96
+ metadata:
97
+ rubygems_mfa_required: 'true'
97
98
  post_install_message:
98
99
  rdoc_options: []
99
100
  require_paths:
@@ -102,14 +103,14 @@ required_ruby_version: !ruby/object:Gem::Requirement
102
103
  requirements:
103
104
  - - ">="
104
105
  - !ruby/object:Gem::Version
105
- version: '0'
106
+ version: 3.2.0
106
107
  required_rubygems_version: !ruby/object:Gem::Requirement
107
108
  requirements:
108
109
  - - ">="
109
110
  - !ruby/object:Gem::Version
110
111
  version: '0'
111
112
  requirements: []
112
- rubygems_version: 3.2.3
113
+ rubygems_version: 3.4.10
113
114
  signing_key:
114
115
  specification_version: 4
115
116
  summary: Fitbit API client library