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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: a44729eac25ad59456fd80349a81601d3cfb0b1d
4
- data.tar.gz: e25cdbdb1aa13afbee75be71346cedd79017f5e2
2
+ SHA256:
3
+ metadata.gz: d549d93c4f0c6e8c6c217f6d18ad69b11f5b90ed3ee42e39fe19ed25ca12a27a
4
+ data.tar.gz: 0d5d8ecf9c0bb6563cd1ecba8d65f1458076113f2ba79d2e3d98b54fc5b0ed3c
5
5
  SHA512:
6
- metadata.gz: 57e3f6d902486eb0cccdd97287679ada85f37292a23d919c2609e8b8d25b2e094208db0787c0ef848f6f764fd22d976ad266494f31fd4b687150f1f7297b1d05
7
- data.tar.gz: b78b7552f6cff0b355d6a90a9d7fc349a2499a9a195066d7ae744158b1906d948518438285070fa5a9c163ce6b5c163330d248aaaca059e6178ff333ba7f87ba
6
+ metadata.gz: 13211f94cbf789323aa48718019c6831022dd099e8926c20f3cd5c1fcb1382b61e111d3403253399bbce0d8a75b2f69ce8860c2002f810f9e95095fac44186b8
7
+ data.tar.gz: 26ef31364d04f7fc7c8c218ffd669952712271204d415492d5d72650ada09a5cf3ba2542eb011c71f6cbec06a66a7d1603813f374da1612e9b655796f90ef1b5
@@ -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.9'
17
+ s.add_runtime_dependency 'faraday', '~> 1.0.1'
18
18
 
19
- s.add_development_dependency 'rake', '~> 10.5'
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
@@ -1,5 +1,6 @@
1
1
  require 'fitgem_oauth2/client.rb'
2
2
 
3
+ # Top level module for the classes for this gem
3
4
  module FitgemOauth2
4
5
 
5
6
  end
@@ -1,9 +1,16 @@
1
1
  module FitgemOauth2
2
2
  class Client
3
3
 
4
- ACTIVITY_RESOURCES = %w(calories caloriesBMR steps distance floors elevation minutesSedentary minutesLightlyActive minutesFairlyActive minutesVeryActive activityCaloriestracker/calories tracker/steps tracker/distance tracker/floors tracker/elevation tracker/minutesSedentary tracker/minutesLightlyActive tracker/minutesFairlyActive tracker/minutesVeryActive tracker/activityCalories)
5
-
6
- ACTIVITY_PERIODS = %w(1d 7d 30d 1w 1m 3m 6m 1y max)
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
@@ -107,10 +107,11 @@ module FitgemOauth2
107
107
  },
108
108
  201 => lambda { },
109
109
  204 => lambda { },
110
- 400 => lambda { raise FitgemOauth2::BadRequestError, JSON.parse(response.body) },
111
- 401 => lambda { raise FitgemOauth2::UnauthorizedError, JSON.parse(response.body) },
112
- 403 => lambda { raise FitgemOauth2::ForbiddenError, JSON.parse(response.body) },
113
- 404 => lambda { raise FitgemOauth2::NotFoundError, JSON.parse(response.body) },
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
@@ -22,6 +22,9 @@ module FitgemOauth2
22
22
  class NotFoundError < StandardError
23
23
  end
24
24
 
25
+ class ApiLimitError < StandardError
26
+ end
27
+
25
28
  class ServerError < StandardError
26
29
  end
27
30
  end
@@ -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( caloriesIn water )
5
- FOOD_SERIES_PERIODS = %w( 1d 7d 30d 1w 1m 3m 6m 1y max )
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 food_series(resource: nil, start_date: nil, end_date: nil, period: nil)
14
-
15
- unless FOOD_SERIES_RESOURCES.include?(resource)
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 food_units
150
- get_call('foods/units.json')
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 search_foods(params)
154
- post_call('foods/search.json', params)
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(1d 7d 30d 1w 1m)
5
- HR_DETAIL_LEVELS = %w(1sec 1min)
4
+ HR_PERIODS = %w[1d 7d 30d 1w 1m].freeze
5
+ HR_DETAIL_LEVELS = %w[1sec 1min].freeze
6
6
 
7
- # retrieve heartrate time series
8
- def heartrate_time_series(start_date: nil, end_date: nil, period: nil)
9
- unless start_date
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
- if end_date && period
14
- raise FitgemOauth2::InvalidArgumentError, 'Both end_date and period specified. Specify only one.'
15
- end
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
- if !end_date && !period
18
- raise FitgemOauth2::InvalidArgumentError, 'Neither end_date nor period specified. Specify at least one.'
19
- end
15
+ def hr_series_for_period(start_date, period)
16
+ validate_start_date(start_date)
17
+ validate_hr_period(period)
20
18
 
21
- if period && !HR_PERIODS.include?(period)
22
- raise FitgemOauth2::InvalidArgumentError, "Invalid period: #{period}. Valid periods are #{HR_PERIODS}."
23
- end
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
- unless start_date
35
- raise FitgemOauth2::InvalidArgumentError, 'Start date not provided.'
36
- end
37
-
38
- unless detail_level && HR_DETAIL_LEVELS.include?(detail_level)
39
- raise FitgemOauth2::InvalidArgumentError, "Please specify the defail level. Detail level should be one of #{HR_DETAIL_LEVELS}."
40
- end
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
@@ -2,8 +2,12 @@ module FitgemOauth2
2
2
 
3
3
  class Client
4
4
 
5
- SLEEP_RESOURCES = %w(startTime timeInBed minutesAsleep awakeningsCount minutesAwake minutesToFallAsleep minutesAfterWakeup efficiency)
6
- SLEEP_PERIODS = %w(1d 7d 30d 1w 1m 3m 6m 1y max)
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 == "asc"
24
+ if sort == 'asc'
21
25
  date_param = "afterDate=#{date_param}"
22
- elsif sort == "desc"
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 = [:sleep, :body, :activities, :foods, :all]
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[ :type ] || :all
21
+ type = opts[:type] || :all
22
22
  subscription_id = opts[:subscription_id]
23
23
 
24
- url = [ 'user', user_id ]
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
- return url.join('/') + '.json'
29
+ url.join('/') + '.json'
30
30
  end
31
31
  end
32
- end
32
+ end
@@ -1,6 +1,6 @@
1
1
  module FitgemOauth2
2
2
  class Client
3
- def user_info()
3
+ def user_info
4
4
  get_call("user/#{user_id}/profile.json")
5
5
  end
6
6
  end
@@ -1,19 +1,16 @@
1
1
  module FitgemOauth2
2
2
  class Client
3
-
4
3
  def format_date(date)
5
4
 
6
- if !date
7
- return nil
8
- end
5
+ return nil if date.nil?
9
6
 
10
- valid_semantic_date = %w(today yesterday).include? date
11
- valid_date_string = ((date =~ /\d{4}\-\d{2}\-\d{2}/) == 0)
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 === date || Time === date || DateTime === 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 ( (time =~ /\d{2}:\d{2}/) == 0)
21
+ if (time =~ /\d{2}:\d{2}/) == 0
25
22
  time
26
- elsif DateTime === time || Time === time
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
@@ -1,3 +1,3 @@
1
1
  module FitgemOauth2
2
- VERSION = '1.1.2'
2
+ VERSION = '2.2.0'.freeze
3
3
  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: 1.1.2
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: 2017-11-08 00:00:00.000000000 Z
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: '0.9'
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: '0.9'
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: '10.5'
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: '10.5'
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
- rubyforge_project:
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: