fitgem_oauth2 1.1.2 → 2.2.0

Sign up to get free protection for your applications and to get access to all the features.
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: