fitgem 0.12.0 → 0.12.1

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
2
  SHA1:
3
- metadata.gz: a534f6ac957147e5bb9500d25b9271834cebc5c4
4
- data.tar.gz: b5134949fe7c2c08d6eb3382daba3f6e59fb6a7d
3
+ metadata.gz: 526686b046dd456463dcd774bd631ef2d31ff0e8
4
+ data.tar.gz: d05e4df2c5744761cc928d74a66218faf4acda4c
5
5
  SHA512:
6
- metadata.gz: 0b83e502cbaa924a6a21c4030d8711ffa23d8fb8afc3165110a84c51e3de43467d9125484b9ce3b78ba4ac16aaf2965fd7b8bd782a04a6935b988b83b5d36629
7
- data.tar.gz: 780a27f9d646dbbe230dc8a92711da02ebf6f4bbccc0897b166fc937e217fd500d94455bb0273d3acaf0e58f6a16832b1b47be52742120d9e8512c8c3d5e274f
6
+ metadata.gz: ad678e020cad7b396ee91eaf12be483142226d746b04ea0c877c6feda74b5690920692cc63032c889f931a5bf3f22f803331f84afb4269a6356207bfeb4e3d01
7
+ data.tar.gz: 84860dde2891a70d144998d47a3dfa2c14f717cddebc972bcefa4b7e96ff0cb7667d391d6dcf2b7a5f6cfc0542eb3e47a98c1e5e4c092d5e72a52dfaff0a5b4b
@@ -22,52 +22,6 @@ Gem::Specification.new do |s|
22
22
  s.add_development_dependency 'yard'
23
23
  s.add_development_dependency 'rdiscount'
24
24
 
25
- s.files = [
26
- '.gitignore',
27
- # '.rvmrc',
28
- '.yardopts',
29
- '.travis.yml',
30
- 'Gemfile',
31
- 'Guardfile',
32
- 'LICENSE',
33
- 'README.md',
34
- 'Rakefile',
35
- 'changelog.md',
36
- 'fitgem.gemspec',
37
- 'lib/fitgem.rb',
38
- 'lib/fitgem/version.rb',
39
- 'lib/fitgem/activities.rb',
40
- 'lib/fitgem/alarms.rb',
41
- 'lib/fitgem/badges.rb',
42
- 'lib/fitgem/body_measurements.rb',
43
- 'lib/fitgem/client.rb',
44
- 'lib/fitgem/devices.rb',
45
- 'lib/fitgem/errors.rb',
46
- 'lib/fitgem/food_form.rb',
47
- 'lib/fitgem/foods.rb',
48
- 'lib/fitgem/friends.rb',
49
- 'lib/fitgem/helpers.rb',
50
- 'lib/fitgem/notifications.rb',
51
- 'lib/fitgem/sleep.rb',
52
- 'lib/fitgem/time_range.rb',
53
- 'lib/fitgem/units.rb',
54
- 'lib/fitgem/users.rb',
55
- 'lib/fitgem/water.rb',
56
- 'lib/fitgem/blood_pressure.rb',
57
- 'lib/fitgem/glucose.rb',
58
- 'lib/fitgem/heart_rate.rb',
59
- 'spec/fitgem_spec.rb',
60
- 'spec/spec_helper.rb',
61
- 'spec/fitgem_notifications_spec.rb',
62
- 'spec/fitgem_helper_spec.rb',
63
- 'spec/fitgem_constructor_spec.rb'
64
- ]
65
- s.test_files = [
66
- 'spec/fitgem_spec.rb',
67
- 'spec/spec_helper.rb',
68
- 'spec/fitgem_notifications_spec.rb',
69
- 'spec/fitgem_helper_spec.rb',
70
- 'spec/fitgem_constructor_spec.rb'
71
- ]
25
+ s.files = %w(LICENSE README.md fitgem.gemspec) + `git ls-files -z`.split("\x0").select { |f| f.start_with?("lib/") }
72
26
  s.require_paths = ['lib']
73
27
  end
@@ -0,0 +1,69 @@
1
+ module Fitgem
2
+ # Enumeration of valid locales that can be sent to fitbit
3
+ #
4
+ # Set the {Fitgem::Client#api_locale} property to one of
5
+ # these values to set the locale used for all subsequent
6
+ # API calls.
7
+ #
8
+ # See {https://wiki.fitbit.com/display/API/API+Localization} for
9
+ # more information on how the various locales are used.
10
+ class ApiLocale
11
+ # US Locale
12
+ #
13
+ # Used by default in fitgem
14
+ #
15
+ # @return [String]
16
+ def self.US
17
+ "en_US"
18
+ end
19
+
20
+ # Australia Locale
21
+ #
22
+ # @return [String]
23
+ def self.AU
24
+ "en_AU"
25
+ end
26
+
27
+ # France Locale
28
+ #
29
+ # @return [String]
30
+ def self.FR
31
+ "fr_FR"
32
+ end
33
+
34
+ # Germany Locale
35
+ #
36
+ # @return [String]
37
+ def self.DE
38
+ "de_DE"
39
+ end
40
+
41
+ # Japan Locale
42
+ #
43
+ # @return [String]
44
+ def self.JP
45
+ "ja_JP"
46
+ end
47
+
48
+ # New Zealand Locale
49
+ #
50
+ # @return [String]
51
+ def self.NZ
52
+ "en_NZ"
53
+ end
54
+
55
+ # Spain Locale
56
+ #
57
+ # @return [String]
58
+ def self.ES
59
+ "es_ES"
60
+ end
61
+
62
+ # UK Locale
63
+ #
64
+ # @return [String]
65
+ def self.UK
66
+ "en_GB"
67
+ end
68
+ end
69
+ end
@@ -1,3 +1,3 @@
1
1
  module Fitgem
2
- VERSION = '0.12.0'
2
+ VERSION = '0.12.1'
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: fitgem
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.12.0
4
+ version: 0.12.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zachery Moneypenny
@@ -88,15 +88,8 @@ executables: []
88
88
  extensions: []
89
89
  extra_rdoc_files: []
90
90
  files:
91
- - ".gitignore"
92
- - ".travis.yml"
93
- - ".yardopts"
94
- - Gemfile
95
- - Guardfile
96
91
  - LICENSE
97
92
  - README.md
98
- - Rakefile
99
- - changelog.md
100
93
  - fitgem.gemspec
101
94
  - lib/fitgem.rb
102
95
  - lib/fitgem/activities.rb
@@ -113,6 +106,7 @@ files:
113
106
  - lib/fitgem/glucose.rb
114
107
  - lib/fitgem/heart_rate.rb
115
108
  - lib/fitgem/helpers.rb
109
+ - lib/fitgem/locales.rb
116
110
  - lib/fitgem/notifications.rb
117
111
  - lib/fitgem/sleep.rb
118
112
  - lib/fitgem/time_range.rb
@@ -120,11 +114,6 @@ files:
120
114
  - lib/fitgem/users.rb
121
115
  - lib/fitgem/version.rb
122
116
  - lib/fitgem/water.rb
123
- - spec/fitgem_constructor_spec.rb
124
- - spec/fitgem_helper_spec.rb
125
- - spec/fitgem_notifications_spec.rb
126
- - spec/fitgem_spec.rb
127
- - spec/spec_helper.rb
128
117
  homepage: http://github.com/whazzmaster/fitgem
129
118
  licenses: []
130
119
  metadata: {}
@@ -148,10 +137,5 @@ rubygems_version: 2.4.5
148
137
  signing_key:
149
138
  specification_version: 4
150
139
  summary: OAuth client library to the data on fitbit.com
151
- test_files:
152
- - spec/fitgem_spec.rb
153
- - spec/spec_helper.rb
154
- - spec/fitgem_notifications_spec.rb
155
- - spec/fitgem_helper_spec.rb
156
- - spec/fitgem_constructor_spec.rb
140
+ test_files: []
157
141
  has_rdoc:
data/.gitignore DELETED
@@ -1,12 +0,0 @@
1
- *.gem
2
- .bundle
3
- Gemfile.lock
4
- pkg/*
5
- .yardoc/*
6
- test*.rb
7
- *.dmp
8
- .fitgem.yml
9
- .idea
10
- .rvmrc
11
- .ruby-version
12
- .ruby-gemset
@@ -1,3 +0,0 @@
1
- rvm:
2
- - 1.9.3
3
- - 2.0.0
data/.yardopts DELETED
@@ -1,7 +0,0 @@
1
- --no-private
2
- --protected
3
- --exclude /spec
4
- --exclude /pkg
5
- -
6
- changelog.md
7
- LICENSE
data/Gemfile DELETED
@@ -1,13 +0,0 @@
1
- source "http://rubygems.org"
2
-
3
- # Specify your gem's dependencies in fitgem.gemspec
4
- gemspec
5
-
6
- group :test do
7
- gem 'guard-rspec'
8
- gem 'fuubar'
9
- gem 'rb-inotify', :require => false
10
- gem 'rb-fsevent', :require => false
11
- gem 'rb-fchange', :require => false
12
- gem 'terminal-notifier-guard'
13
- end
data/Guardfile DELETED
@@ -1,15 +0,0 @@
1
- # A sample Guardfile
2
- # More info at https://github.com/guard/guard#readme
3
-
4
- guard 'rspec', :cli => "--color --format Fuubar --fail-fast", :version => 2 do
5
- watch(%r{^spec/.+_spec\.rb$})
6
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
7
- watch('spec/spec_helper.rb') { "spec" }
8
-
9
- # Rails example
10
- watch(%r{^spec/.+_spec\.rb$})
11
- watch(%r{^app/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
12
- watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
13
- watch(%r{^spec/support/(.+)\.rb$}) { "spec" }
14
- watch('spec/spec_helper.rb') { "spec" }
15
- end
data/Rakefile DELETED
@@ -1,13 +0,0 @@
1
- require 'bundler'
2
- require 'rspec/core/rake_task'
3
-
4
- Bundler::GemHelper.install_tasks
5
-
6
- desc 'Default: run specs.'
7
- task :default => :spec
8
-
9
- desc "Run specs"
10
- RSpec::Core::RakeTask.new do |t|
11
- t.pattern = "./spec/**/*_spec.rb" # don't need this, it's default.
12
- # Put spec opts in a file named .rspec in root
13
- end
@@ -1,166 +0,0 @@
1
- # @markup markdown
2
- # @author Zachery Moneypenny
3
-
4
- # fitgem changelog
5
-
6
- ## v0.10.0
7
-
8
- #### 2014-08-08 Zachery Moneypenny <fitgem@whazzmaster.com>
9
-
10
- * Updates default test framework to RSpec 3
11
- * Updates library to use SSL exclusively when hitting the Fitbit REST API. Fitbit is restricting access to its API via https only on November 3rd, 2014. See [issue #30](https://github.com/whazzmaster/fitgem/issues/30) for more information. This should be transparent to end users of fitgem, as the library simply ignores the :ssl option in the Client constructor and defaults to https everywhere.
12
- * The previously-deprecated `weekly_leaderboard` and `monthly_leaderboard` methods have now been updated to throw a `DeprecatedApiError` rather than warning about deprecation. These methods will be removed in v1.0.
13
-
14
- ## v0.9.0
15
-
16
- #### 2014-02-11 Zachery Moneypenny <fitgem@whazzmaster.com>
17
-
18
- The v0.9.0 release adds a number of new methods to match new functionality available through the Fitbit REST API. It
19
- also removes support for concepts (monthly leaderboards) that have been removed from the Fitbit REST API.
20
-
21
- There's a big change to **leaderboard support** in this update; please read the notes below if you're currently using
22
- `monthly_leaderboard` or `weekly_leaderboard` -- you should update your code to use the new method before v1.0 is
23
- released.
24
-
25
- * Add ability to target SSL Fitbit REST endpoints
26
- * Add `activity_on_date_range` method
27
- * Condense existing `weekly_leaderboard` and (no longer available) `monthly_leaderboard` into a simple `leaderboard`
28
- method. There is now only one leaderboard (weekly) so no need to differentiate in the API. The previous leaderboard
29
- methods are now deprecated and **will be removed** in v1.0.
30
- * Add `create_or_update_weekly_goal` method and specs
31
- * Add `create_or_update_daily_goal` method and specs
32
- * Add `daily_goals` method and update documentation
33
- * Add `delete_body_fat_log` method
34
- * Add `delete_body_weight_log` method
35
- * Add `create_or_update_body_fat_goal` method
36
- * Add `create_or_update_body_weight_goal` method
37
- * Add `log_body_fat` method to push a body fat measurement to Fitbit
38
- * Add `body_fat_goal` method to fetch the current body fat goal
39
- * Add `body_fat` method to fetch body fat measurements
40
- * Add `body_weight` method to fetch body fat measurements
41
- * For the `body_weight` and `body_fat` methods, determine a URI based on the base URI and provided options
42
-
43
- ## v0.8.0
44
-
45
- #### 2013-08-03 Zachery Moneypenny <fitgem@whazzmaster.com>
46
-
47
- * Add support for weekly goals
48
- * Add support for silent alarms (including updates)
49
- * Add support for intraday distance
50
- * Add time zone support for usage of times
51
- * Add support for badges
52
-
53
- ## v0.7.0
54
-
55
- #### 2013-05-17 Zachery Moneypenny <fitgem@whazzmaster.com>
56
-
57
- * Add support for intraday time series retrieval of various resources
58
- * Removed rvmrc from project- use whatever ruby you want!
59
- * Updated Travis CI configuration
60
-
61
- ## v0.6.1
62
-
63
- #### 2013-02-28 Zachery Moneypenny <fitgem@whazzmaster.com>
64
-
65
- * More unit tests
66
- * Fix an issue where we weren't applying the `format_date` helper when constructing a date range fragment
67
-
68
- ## v0.6.0
69
-
70
- * Streamline the README; add contributors link
71
- * Removed FAQs from README
72
- * Added support for daily activity goals
73
- * Moved testing-focused gemspec dependencies to the Gemfile
74
-
75
- #### 2013-02-13 Zachery Moneypenny <fitgem@whazzmaster.com>
76
-
77
- ## v0.5.2
78
-
79
- #### 2012-03-04 Zachery Moneypenny <fitgem@whazzmaster.com>
80
-
81
- * Added new <tt>symbolize_keys</tt> helper method for turning the string-key based return hashes into symbol-key based ones
82
- * Added new <tt>label_for_measurement</tt> helper method to get the correct unit measurement label given a measurement type and the current user's ApiUnitSystem setting
83
- * Added specs
84
- * Added new <tt>connected?</tt> method on Fitgem::Client that will report whether API calls may be made
85
- * Added <tt>InvalidUnitSystem</tt> error and <tt>InvalidMeasurementType</tt> error
86
- * Fixed a small issue where date values were not being formatted correctly in calls to <tt>log_body_measurements</tt>
87
-
88
- ## v0.5.1
89
-
90
- #### 2012-01-24 Zachery Moneypenny <fitgem@whazzmaster.com>
91
-
92
- * Fix for creating and removing data subscriptions
93
- * Updated specs
94
-
95
- ## v0.5.0
96
-
97
- #### 2012-01-22 Zachery Moneypenny <fitgem@whazzmaster.com>
98
-
99
- * Added view/log/delete access for blood pressure data
100
- * Added view/log/delete access for glucose data
101
- * Added view/log/delete access for heart rate data
102
- * Added updated time series documentation for new endpoints
103
- * Updated temporal information in the readme
104
- * Added unit tests for <tt>format_time</tt> method
105
- * Updated copyright date
106
-
107
- ## v0.4.0
108
-
109
- #### 2011-11-29 Zachery Moneypenny <fitgem@whazzmaster.com>
110
-
111
- * Added YARD documentation to thoroughly document code
112
- * DEPRECATED: <tt>Fitgem::Client#log_weight</tt> method, use <tt>Fitgem::Client#log_body_measurements</tt> instead.
113
- The new method allows you to log more than weight (bicep size, body fat %, etc.)
114
- * Added <tt>Fitgem::FoodFormType</tt> to be used in calls to <tt>Fitgem::Client#create_food</tt>
115
- * Added <tt>Fitgem::Client#log_sleep</tt> to log sleep data to fitbit
116
- * Added <tt>Fitgem::Client#delete_sleep_log</tt> to delete previously logged sleep data
117
- * Added <tt>Fitgem::Client#activities</tt> method to get a list of all activities
118
- * Added <tt>Fitgem::Client#activity_statistics</tt> method to get statistics for all logged activities
119
- * Added to documentation of supported endpoints for <tt>Fitgem::Client#data_by_time_range</tt>
120
- * Added unit tests for parameter validation for many methods
121
- * Overhauled notifications methods, including extensive documentation,
122
- unit tests, refactoring, and a couple of bug fixes. These methods now
123
- return both the HTTP status code and the JSON response body. See https://wiki.fitbit.com/display/API/Subscriptions-API
124
- for information on how to interpret each of the error codes.
125
- * Added fitgem to travis-ci for continuous integration (http://travis-ci.org/#!/whazzmaster/fitgem)
126
- * Added fitgem to rubydoc.info (http://rubydoc.info/github/whazzmaster/fitgem/master/frames)
127
- * Updated README
128
- * Moved OAuth documentation from the README to the [fitgem wiki](https://github.com/whazzmaster/fitgem/wiki/The-OAuth-Process)
129
-
130
- ## v0.3.6
131
-
132
- #### 2011-07-12 Zachery Moneypenny <fitgem@whazzmaster.com>
133
-
134
- * Added friends support (get friends, friend leaderboard, create invites, accept/reject invites)
135
- * Added water support (get water data per date)
136
- * Added sleep support (get sleep data per date)
137
- * Added ability to update user profile information
138
-
139
- ## Previous Releases
140
-
141
- #### 2011-05-11 Zachery Moneypenny <fitgem@whazzmaster.com>
142
-
143
- * Changed name and all references of this project from 'fitbit' to 'fitgem'
144
-
145
- #### 2011-04-11 Zachery Moneypenny <fitgem@whazzmaster.com>
146
-
147
- * Fixed an issue where blank user id's are used and an error is thrown.
148
- * Added support for creating/removing subscriptions (this support is experimental for now, more tests coming)
149
-
150
- #### 2011-03-24 Zachery Moneypenny <fitgem@whazzmaster.com>
151
-
152
- * Added logging of activities and foods
153
- * Added ability to add favorite activities and foods
154
- * Added ability to delete logged activities and foods, and remove favorite activities and foods
155
- * Refactored data_by_time_range for more testability
156
- * Added ability to query devices
157
-
158
- #### 2011-03-19 Zachery Moneypenny <fitgem@whazzmaster.com>
159
-
160
- * Updated auth client to support first-time auth and reconnections (if you have previously been authorized and received token/secret).
161
- * Added 'named' retrieval of activities and foods (recent_, favorite_, frequent_)
162
- * Added ability to log weight back to the site using the API
163
-
164
- #### 2011-03-18 Zachery Moneypenny <fitgem@whazzmaster.com>
165
-
166
- * First revision. Supports the auth process via oauth, and retrieval of user info and activities.
@@ -1,19 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Fitgem::Client do
4
- describe "constructor" do
5
- it "requires consumer_key" do
6
- expect {
7
- opts = { :consumer_secret => "12345" }
8
- client = Fitgem::Client.new(opts)
9
- }.to raise_error(Fitgem::InvalidArgumentError, "Missing required options: consumer_key")
10
- end
11
-
12
- it "requires consumer_secret" do
13
- expect {
14
- opts = { :consumer_key => "12345" }
15
- client = Fitgem::Client.new(opts)
16
- }.to raise_error(Fitgem::InvalidArgumentError, "Missing required options: consumer_secret")
17
- end
18
- end
19
- end
@@ -1,244 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Fitgem::Client do
4
- before(:each) do
5
- @client = Fitgem::Client.new({
6
- :consumer_key => '12345',
7
- :consumer_secret => '67890'
8
- })
9
- end
10
-
11
- describe "#construct_date_range_fragment" do
12
- it 'should format the correct URI fragment based on a base date and end date' do
13
- frag = @client.construct_date_range_fragment({:base_date => '2011-03-07', :end_date => '2011-03-14'})
14
- expect(frag).to eq 'date/2011-03-07/2011-03-14'
15
- end
16
-
17
- it 'should format the correct URI fragment based on a base date and period' do
18
- frag = @client.construct_date_range_fragment({:base_date => '2011-03-07', :period => '7d'})
19
- expect(frag).to eq 'date/2011-03-07/7d'
20
- end
21
-
22
- it 'should raise an error unless there is a base date AND either a period or an end date' do
23
- expect {
24
- @client.construct_date_range_fragment({:base_date => '2011-03-07'})
25
- }.to raise_error(Fitgem::InvalidTimeRange)
26
-
27
- expect {
28
- @client.construct_date_range_fragment({:period => '1y'})
29
- }.to raise_error(Fitgem::InvalidTimeRange)
30
-
31
- expect {
32
- @client.construct_date_range_fragment({:end_date => '2011-03-07', :period => '7d'})
33
- }.to raise_error(Fitgem::InvalidTimeRange)
34
- end
35
-
36
- it 'formats DateTime objects to the required date format' do
37
- span_start = DateTime.new(1997, 4, 18, 9, 30, 30)
38
- span_end = DateTime.new(1999, 10, 3, 15, 30, 30)
39
- frag = @client.construct_date_range_fragment base_date: span_start, end_date: span_end
40
- expect(frag).to eq 'date/1997-04-18/1999-10-03'
41
- end
42
- end
43
-
44
- describe "#format_date" do
45
- it "accepts DateTime objects" do
46
- date = DateTime.strptime('2011-03-19','%Y-%m-%d')
47
- expect(@client.format_date(date)).to eq '2011-03-19'
48
- end
49
-
50
- it "accepts strings in YYYY-MM-DD format" do
51
- expect(@client.format_date('2011-03-19')).to eq '2011-03-19'
52
- end
53
-
54
- it "accepts the string 'today' to denote the current date" do
55
- today = Date.today.strftime("%Y-%m-%d")
56
- expect(@client.format_date('today')).to eq today
57
- end
58
-
59
- it "accepts the string 'yesterday' to denote the day previous to today" do
60
- yesterday = (Date.today-1).strftime("%Y-%m-%d")
61
- expect(@client.format_date('yesterday')).to eq yesterday
62
- end
63
-
64
- it "rejects strings that are not in YYY-MM-DD format" do
65
- date = "2011-3-2"
66
- expect {
67
- @client.format_date(date)
68
- }.to raise_error Fitgem::InvalidDateArgument, "Invalid date (2011-3-2), must be in yyyy-MM-dd format"
69
- end
70
-
71
- it "rejects strings are formatted correctly but include non-numeric elements" do
72
- date = "2011-aa-20"
73
- expect {
74
- @client.format_date(date)
75
- }.to raise_error Fitgem::InvalidDateArgument, "Invalid date (2011-aa-20), must be in yyyy-MM-dd format"
76
- end
77
-
78
- it "rejects arguments that are not a Date, Time, DateTime, or String" do
79
- date = 200
80
- expect {
81
- @client.format_date(date)
82
- }.to raise_error Fitgem::InvalidDateArgument, "Date used must be a date/time object or a string in the format YYYY-MM-DD; supplied argument is a Fixnum"
83
- end
84
- end
85
-
86
- describe "#format_time" do
87
- context "without a timezone" do
88
- it "accepts DateTime objects" do
89
- time = DateTime.parse("3rd Feb 2001 04:05:06 PM")
90
- expect(@client.format_time(time)).to eq "16:05"
91
- end
92
-
93
- it "accepts Time objects" do
94
- time = Time.mktime 2012, 1, 20, 13, 33, 30
95
- expect(@client.format_time(time)).to eq "13:33"
96
- end
97
-
98
- it "accepts the string 'now' to denote the current localtime" do
99
- now = DateTime.now
100
- expect(@client.format_time('now')).to eq now.strftime("%H:%M")
101
- end
102
-
103
- it "accepts strings in HH:mm format" do
104
- time = "04:20"
105
- expect(@client.format_time(time)).to eq "04:20"
106
- end
107
- end
108
-
109
- context "with a timezone" do
110
- it "accepts DateTime objects" do
111
- time = DateTime.parse("3rd Feb 2001 04:05:06 PM UTC")
112
- expect(@client.format_time(time, include_timezone: true)).to eq "16:05+00:00"
113
- end
114
-
115
- it "accepts Time objects" do
116
- time = Time.new 2012, 1, 20, 13, 33, 30, "+00:00"
117
- expect(@client.format_time(time, include_timezone: true)).to eq "13:33+00:00"
118
- end
119
-
120
- it "accepts the string 'now' to denote the current localtime" do
121
- now = DateTime.now
122
- expect(@client.format_time('now', include_timezone: true)).to eq now.strftime("%H:%M%:z")
123
- end
124
-
125
- it "accepts strings in HH:mm format" do
126
- datetime = DateTime.parse("26th Apr 2000 09:27:00 +08:00")
127
- allow(DateTime).to receive(:now).and_return datetime
128
-
129
- time = "04:20"
130
- expect(@client.format_time(time, include_timezone: true)).to eq "04:20+08:00"
131
- end
132
- end
133
-
134
- it "rejects Date objects" do
135
- date = Date.today
136
- expect {
137
- @client.format_time(date)
138
- }.to raise_error Fitgem::InvalidTimeArgument
139
- end
140
-
141
- it "rejects strings that are not in HH:mm format" do
142
- time = "4:20pm"
143
- expect {
144
- @client.format_time(time)
145
- }.to raise_error Fitgem::InvalidTimeArgument
146
- end
147
-
148
- it "rejects strings that are formatted correctly but include non-numeric elements" do
149
- time = "4a:33"
150
- expect {
151
- @client.format_time(time)
152
- }.to raise_error Fitgem::InvalidTimeArgument
153
- end
154
-
155
- it "rejects arguments that do not conform to accepted types" do
156
- expect {
157
- @client.format_time(200)
158
- }.to raise_error Fitgem::InvalidTimeArgument
159
- end
160
- end
161
-
162
- describe "#label_for_measurement" do
163
- it "accepts the supported Fitgem::ApiUnitSystem values" do
164
- @client.api_unit_system = Fitgem::ApiUnitSystem.US
165
- @client.label_for_measurement :duration, false
166
- @client.api_unit_system = Fitgem::ApiUnitSystem.UK
167
- @client.label_for_measurement :duration, false
168
- @client.api_unit_system = Fitgem::ApiUnitSystem.METRIC
169
- @client.label_for_measurement :duration, false
170
- end
171
-
172
- it "raises an InvalidUnitSystem error if the Fitgem::Client.api_unit_system value is invalid" do
173
- expect {
174
- @client.api_unit_system = "something else entirely"
175
- @client.label_for_measurement :duration, false
176
- }.to raise_error Fitgem::InvalidUnitSystem
177
- end
178
-
179
- it "accepts the supported values for the measurement_type parameter" do
180
- @client.label_for_measurement :duration, false
181
- @client.label_for_measurement :distance, false
182
- @client.label_for_measurement :elevation, false
183
- @client.label_for_measurement :height, false
184
- @client.label_for_measurement :weight, false
185
- @client.label_for_measurement :measurements, false
186
- @client.label_for_measurement :liquids, false
187
- @client.label_for_measurement :blood_glucose, false
188
- end
189
-
190
- it "raises an InvalidMeasurementType error if the measurement_type parameter is invalid" do
191
- expect {
192
- @client.label_for_measurement :homina, false
193
- }.to raise_error Fitgem::InvalidMeasurementType
194
- end
195
-
196
- it "returns the correct values when the unit system is Fitgem::ApiUnitSystem.US" do
197
- @client.api_unit_system = Fitgem::ApiUnitSystem.US
198
- expect(@client.label_for_measurement(:duration, false)).to eq "milliseconds"
199
- expect(@client.label_for_measurement(:distance, false)).to eq "miles"
200
- expect(@client.label_for_measurement(:elevation, false)).to eq "feet"
201
- expect(@client.label_for_measurement(:height, false)).to eq "inches"
202
- expect(@client.label_for_measurement(:weight, false)).to eq "pounds"
203
- expect(@client.label_for_measurement(:measurements, false)).to eq "inches"
204
- expect(@client.label_for_measurement(:liquids, false)).to eq "fl oz"
205
- expect(@client.label_for_measurement(:blood_glucose, false)).to eq "mg/dL"
206
- end
207
-
208
- it "returns the correct values when the unit system is Fitgem::ApiUnitSystem.UK" do
209
- @client.api_unit_system = Fitgem::ApiUnitSystem.UK
210
- expect(@client.label_for_measurement(:duration, false)).to eq "milliseconds"
211
- expect(@client.label_for_measurement(:distance, false)).to eq "kilometers"
212
- expect(@client.label_for_measurement(:elevation, false)).to eq "meters"
213
- expect(@client.label_for_measurement(:height, false)).to eq "centimeters"
214
- expect(@client.label_for_measurement(:weight, false)).to eq "stone"
215
- expect(@client.label_for_measurement(:measurements, false)).to eq "centimeters"
216
- expect(@client.label_for_measurement(:liquids, false)).to eq "mL"
217
- expect(@client.label_for_measurement(:blood_glucose, false)).to eq "mmol/l"
218
- end
219
-
220
- it "returns the correct values when the unit system is Fitgem::ApiUnitSystem.METRIC" do
221
- @client.api_unit_system = Fitgem::ApiUnitSystem.METRIC
222
- expect(@client.label_for_measurement(:duration, false)).to eq "milliseconds"
223
- expect(@client.label_for_measurement(:distance, false)).to eq "kilometers"
224
- expect(@client.label_for_measurement(:elevation, false)).to eq "meters"
225
- expect(@client.label_for_measurement(:height, false)).to eq "centimeters"
226
- expect(@client.label_for_measurement(:weight, false)).to eq "kilograms"
227
- expect(@client.label_for_measurement(:measurements, false)).to eq "centimeters"
228
- expect(@client.label_for_measurement(:liquids, false)).to eq "mL"
229
- expect(@client.label_for_measurement(:blood_glucose, false)).to eq "mmol/l"
230
- end
231
-
232
- context "when respecting the user's unit measurement preferences" do
233
- before(:each) do
234
- allow(@client).to receive(:connected?).and_return(true)
235
- allow(@client).to receive(:user_info).and_return({"user" => {"distanceUnit"=>"en_GB", "glucoseUnit"=>"en_GB", "heightUnit"=>"en_GB", "waterUnit"=>"METRIC", "weightUnit"=>"en_GB"}})
236
- end
237
-
238
- it "returns the correct overridden measurement label" do
239
- @client.api_unit_system = Fitgem::ApiUnitSystem.US
240
- expect(@client.label_for_measurement(:distance)).to eq "kilometers"
241
- end
242
- end
243
- end
244
- end
@@ -1,173 +0,0 @@
1
- require 'spec_helper'
2
- require 'ostruct'
3
-
4
- describe Fitgem::Client do
5
- before(:each) do
6
- @client = Fitgem::Client.new({:consumer_key => '12345', :consumer_secret => '56789'})
7
- end
8
-
9
- describe "#subscriptions" do
10
- before(:each) do
11
- allow(@client).to receive(:get)
12
- end
13
-
14
- it "calls #make_headers to create the headers for the API call" do
15
- opts = { :subscriber_id => "5555", :type => :all }
16
- expect(@client).to receive(:make_headers).with({:type=>:all, :subscriber_id=>"5555"})
17
- @client.subscriptions(opts)
18
- end
19
-
20
- it "calls #get with the correct url and headers" do
21
- opts = { :subscriber_id => "5555", :type => :all }
22
- expect(@client).to receive(:get).with("/user/-/apiSubscriptions.json", {"X-Fitbit-Subscriber-Id"=>"5555"})
23
- @client.subscriptions(opts)
24
- end
25
- end
26
-
27
- describe "#create_subscription" do
28
- before(:each) do
29
- @resp = OpenStruct.new
30
- allow(@client).to receive(:raw_post).and_return(@resp)
31
- end
32
-
33
- it "adds the :use_subscription_id flag and calls #make_headers" do
34
- opts = { :subscriber_id => "5555", :type => :all, :subscription_id => "320" }
35
- expect(@client).to receive(:make_headers).with({ :subscriber_id => "5555", :type => :all, :subscription_id => "320"})
36
- @client.create_subscription(opts)
37
- end
38
-
39
- it "calls #raw_post with the correct url and headers for :all collection type" do
40
- opts = { :subscriber_id => "5555", :type => :all, :subscription_id => "320", :use_subscription_id => true }
41
- expect(@client).to receive(:raw_post).once.with("/user/-/apiSubscriptions/320.json", "", {"X-Fitbit-Subscriber-Id"=>"5555"})
42
- @client.create_subscription(opts)
43
- end
44
-
45
- it "calls #raw_post with the correct url and headers for :sleep collection type" do
46
- opts = { :subscriber_id => "5555", :type => :sleep, :subscription_id => "320", :use_subscription_id => true }
47
- expect(@client).to receive(:raw_post).once.with("/user/-/sleep/apiSubscriptions/320.json", "", {"X-Fitbit-Subscriber-Id"=>"5555"})
48
- @client.create_subscription(opts)
49
- end
50
-
51
- it "calls #extract_response_body to get the JSON body" do
52
- opts = { :subscriber_id => "5555", :type => :all, :subscription_id => "320", :use_subscription_id => true }
53
- expect(@client).to receive(:extract_response_body)
54
- @client.create_subscription(opts)
55
- end
56
-
57
- it "returns the code and the JSON body in an array" do
58
- opts = { :subscriber_id => "5555", :type => :all, :subscription_id => "320", :use_subscription_id => true }
59
- expect(@resp).to receive(:code).twice
60
- expect(@client.create_subscription(opts)).to be_a(Array)
61
- end
62
- end
63
-
64
- describe "#remove_subscription" do
65
- before(:each) do
66
- @resp = OpenStruct.new
67
- allow(@client).to receive(:raw_delete).and_return(@resp)
68
- end
69
-
70
- it "adds the :use_subscription_id flag and calls #make_headers" do
71
- opts = { :subscriber_id => "5555", :type => :all, :subscription_id => "320" }
72
- expect(@client).to receive(:make_headers).with({ :subscriber_id => "5555", :type => :all, :subscription_id => "320" })
73
- @client.remove_subscription(opts)
74
- end
75
-
76
- it "calls #raw_delete with the correct url and headers for :all collection type" do
77
- opts = { :subscriber_id => "5555", :type => :all, :subscription_id => "320", :use_subscription_id => true }
78
- expect(@client).to receive(:raw_delete).once.with("/user/-/apiSubscriptions/320.json", {"X-Fitbit-Subscriber-Id"=>"5555"})
79
- @client.remove_subscription(opts)
80
- end
81
-
82
- it "calls #extract_response_body to get the JSON body" do
83
- opts = { :subscriber_id => "5555", :type => :all, :subscription_id => "320", :use_subscription_id => true }
84
- expect(@client).to receive(:extract_response_body)
85
- @client.remove_subscription(opts)
86
- end
87
-
88
- it "returns the code and the JSON body in an array" do
89
- opts = { :subscriber_id => "5555", :type => :all, :subscription_id => "320", :use_subscription_id => true }
90
- expect(@resp).to receive(:code).twice
91
- expect(@client.remove_subscription(opts)).to be_a(Array)
92
- end
93
- end
94
-
95
- describe "#validate_subscription_types" do
96
- it "raises an exception if an invalid type is passed in" do
97
- expect {
98
- @client.send(:validate_subscription_type, :every_single_thing)
99
- }.to raise_error Fitgem::InvalidArgumentError, "Invalid subscription type (valid values are sleep, body, activities, foods, all)"
100
- end
101
-
102
- it "raises an exception if no type is supplied" do
103
- opts = { :opt1 => 'hello!' }
104
- expect {
105
- @client.send(:validate_subscription_type, opts[:type])
106
- }.to raise_error Fitgem::InvalidArgumentError
107
- end
108
- end
109
-
110
- describe "#make_headers" do
111
- it "adds the subscriber id header" do
112
- opts = { :subscriber_id => '5555', :subscription_id => '320-activity' }
113
- headers = @client.send(:make_headers, opts)
114
- expect(headers.size).to eq 1
115
- expect(headers['X-Fitbit-Subscriber-Id']).to eq "5555"
116
- end
117
- end
118
-
119
- describe "#make_subscription_url" do
120
- it "creates the correct URL when no specific subscription id is used" do
121
- opts = { :subscription_id => "320", :type => :all }
122
- expect(@client.send(:make_subscription_url, opts)).to eq "/user/-/apiSubscriptions.json"
123
- end
124
-
125
- it "creates the correct URL for :all collection types" do
126
- opts = { :subscription_id => "320", :type => :all, :use_subscription_id => true }
127
- expect(@client.send(:make_subscription_url, opts)).to eq "/user/-/apiSubscriptions/320.json"
128
- end
129
-
130
- it "creates the correct URL for the :sleep collection type" do
131
- opts = { :subscription_id => "320", :type => :sleep, :use_subscription_id => true }
132
- expect(@client.send(:make_subscription_url, opts)).to eq "/user/-/sleep/apiSubscriptions/320.json"
133
- end
134
-
135
- it "creates the correct URL for the :body collection type" do
136
- opts = { :subscription_id => "320", :type => :body, :use_subscription_id => true }
137
- expect(@client.send(:make_subscription_url, opts)).to eq "/user/-/body/apiSubscriptions/320.json"
138
- end
139
-
140
- it "creates the correct URL for the :activities collection type" do
141
- opts = { :subscription_id => "320", :type => :activities, :use_subscription_id => true }
142
- expect(@client.send(:make_subscription_url, opts)).to eq "/user/-/activities/apiSubscriptions/320.json"
143
- end
144
-
145
- it "creates the correct URL for the :foods collection type" do
146
- opts = { :subscription_id => "320", :type => :foods, :use_subscription_id => true }
147
- expect(@client.send(:make_subscription_url, opts)).to eq "/user/-/foods/apiSubscriptions/320.json"
148
- end
149
-
150
- it "validates the supplied subscription type" do
151
- opts = { :subscription_id => "320" }
152
- expect { @client.send(:make_subscription_url, opts) }.to raise_error Fitgem::InvalidArgumentError
153
-
154
- opts[:type] = nil
155
- expect { @client.send(:make_subscription_url, opts) }.to raise_error Fitgem::InvalidArgumentError
156
-
157
- opts[:type] = :all
158
- expect { @client.send(:make_subscription_url, opts) }.not_to raise_error
159
-
160
- opts[:type] = :activities
161
- expect { @client.send(:make_subscription_url, opts) }.not_to raise_error
162
-
163
- opts[:type] = :sleep
164
- expect { @client.send(:make_subscription_url, opts) }.not_to raise_error
165
-
166
- opts[:type] = :foods
167
- expect { @client.send(:make_subscription_url, opts) }.not_to raise_error
168
-
169
- opts[:type] = :body
170
- expect { @client.send(:make_subscription_url, opts) }.not_to raise_error
171
- end
172
- end
173
- end
@@ -1,69 +0,0 @@
1
- require 'spec_helper'
2
-
3
- describe Fitgem do
4
- before do
5
- @client = Fitgem::Client.new({
6
- :consumer_key => '12345',
7
- :consumer_secret => '67890'
8
- })
9
- end
10
-
11
- describe 'global settings' do
12
- it 'should expose the api_version' do
13
- expect(@client.api_version).to eq "1"
14
- end
15
-
16
- it 'should all clients to set a new api version' do
17
- @client.api_version = "2"
18
- expect(@client.api_version).to eq "2"
19
- end
20
-
21
- it 'should default to the US unit system' do
22
- expect(@client.api_unit_system).to eq Fitgem::ApiUnitSystem.US
23
- end
24
-
25
- it 'should allow the unit system to be set to other types' do
26
- @client.api_unit_system = Fitgem::ApiUnitSystem.UK
27
- expect(@client.api_unit_system).to eq Fitgem::ApiUnitSystem.UK
28
- @client.api_unit_system = Fitgem::ApiUnitSystem.METRIC
29
- expect(@client.api_unit_system).to eq Fitgem::ApiUnitSystem.METRIC
30
- end
31
-
32
- it 'should default to a user id of \'-\', the currently-logged in user' do
33
- expect(@client.user_id).to eq '-'
34
- end
35
-
36
- it 'should default to the US locale' do
37
- expect(@client.api_locale).to eq Fitgem::ApiLocale.US
38
- end
39
-
40
- it 'should allow the locale to be set to other types' do
41
- @client.api_locale = Fitgem::ApiLocale.AU
42
- expect(@client.api_locale).to eq Fitgem::ApiLocale.AU
43
- @client.api_locale = Fitgem::ApiLocale.FR
44
- expect(@client.api_locale).to eq Fitgem::ApiLocale.FR
45
- @client.api_locale = Fitgem::ApiLocale.DE
46
- expect(@client.api_locale).to eq Fitgem::ApiLocale.DE
47
- @client.api_locale = Fitgem::ApiLocale.JP
48
- expect(@client.api_locale).to eq Fitgem::ApiLocale.JP
49
- @client.api_locale = Fitgem::ApiLocale.NZ
50
- expect(@client.api_locale).to eq Fitgem::ApiLocale.NZ
51
- @client.api_locale = Fitgem::ApiLocale.ES
52
- expect(@client.api_locale).to eq Fitgem::ApiLocale.ES
53
- @client.api_locale = Fitgem::ApiLocale.UK
54
- expect(@client.api_locale).to eq Fitgem::ApiLocale.UK
55
- end
56
- end
57
-
58
- describe '#reconnect' do
59
- it 'resets the access token' do
60
- access_token = @client.reconnect('abc', '123')
61
- expect(access_token.token).to eq('abc')
62
- expect(access_token.secret).to eq('123')
63
-
64
- access_token = @client.reconnect('def', '456')
65
- expect(access_token.token).to eq('def')
66
- expect(access_token.secret).to eq('456')
67
- end
68
- end
69
- end
@@ -1,8 +0,0 @@
1
- $LOAD_PATH.unshift(File.join(File.dirname(__FILE__), '..', 'lib'))
2
- $LOAD_PATH.unshift(File.dirname(__FILE__))
3
-
4
- require 'fitgem'
5
-
6
- RSpec.configure do |config|
7
- config.mock_with :rspec
8
- end