fitgem_oauth2 0.0.7 → 0.0.8
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/fitgem_oauth2.gemspec +2 -1
- data/lib/fitgem_oauth2/client.rb +42 -38
- data/lib/fitgem_oauth2/subscriptions.rb +32 -0
- data/lib/fitgem_oauth2/version.rb +1 -1
- metadata +18 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 72e05988ee7b5c090becafe9dfd9345e1bee4aaa
|
4
|
+
data.tar.gz: 7ee833ab3f11ab43816a506bb722bc19a1d51945
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 749bf116d19bf60c1f06aa7d95b7e4ec3783efa00a0653b2f26e8afac548a90d25bb266b20bebf81b57e135abfdf59993e3449d1dcfe799f763fc293f23971a2
|
7
|
+
data.tar.gz: 8aaefdea1dc62867bf2b9e13a1a68ac37cce7ab5eab36349fe0e524c7557318e0cd017c8c7ffcd96d6d1b6eaa15a009cb40ebbb026fa1ac7e2d7f06bc26a50d9
|
data/fitgem_oauth2.gemspec
CHANGED
@@ -6,7 +6,6 @@ require 'fitgem_oauth2/version'
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = 'fitgem_oauth2'
|
8
8
|
s.version = FitgemOauth2::VERSION
|
9
|
-
s.date = Date.today.to_s
|
10
9
|
s.summary = "Fitbit API client library"
|
11
10
|
s.description = "This gem allows requesting data from Fitbit API using OAuth2"
|
12
11
|
s.authors = ["Ankit Gupta"]
|
@@ -16,6 +15,8 @@ Gem::Specification.new do |s|
|
|
16
15
|
s.license = 'MIT'
|
17
16
|
|
18
17
|
s.add_runtime_dependency 'faraday', '~> 0.9'
|
18
|
+
|
19
19
|
s.add_development_dependency "rspec", '~> 3.4'
|
20
|
+
s.add_development_dependency "factory_girl", '~> 4.5'
|
20
21
|
s.add_development_dependency "dotenv", '~> 2.1'
|
21
22
|
end
|
data/lib/fitgem_oauth2/client.rb
CHANGED
@@ -7,6 +7,7 @@ require 'fitgem_oauth2/friends.rb'
|
|
7
7
|
require 'fitgem_oauth2/heartrate.rb'
|
8
8
|
require 'fitgem_oauth2/sleep.rb'
|
9
9
|
require 'fitgem_oauth2/steps.rb'
|
10
|
+
require 'fitgem_oauth2/subscriptions.rb'
|
10
11
|
require 'fitgem_oauth2/users.rb'
|
11
12
|
require 'fitgem_oauth2/utils.rb'
|
12
13
|
require 'fitgem_oauth2/version.rb'
|
@@ -17,57 +18,27 @@ require 'faraday'
|
|
17
18
|
module FitgemOauth2
|
18
19
|
class Client
|
19
20
|
|
20
|
-
|
21
|
-
|
22
|
-
attr_reader :user_id
|
21
|
+
DEFAULT_USER_ID = '-'
|
23
22
|
|
24
23
|
attr_reader :client_id
|
25
|
-
|
26
24
|
attr_reader :client_secret
|
25
|
+
attr_reader :token
|
26
|
+
attr_reader :user_id
|
27
27
|
|
28
28
|
def initialize(opts)
|
29
|
-
|
30
|
-
if
|
31
|
-
|
29
|
+
missing = [:client_id, :client_secret, :token] - opts.keys
|
30
|
+
if missing.size > 0
|
31
|
+
raise FitgemOauth2::InvalidArgumentError, "Missing required options: #{missing.join(',')}"
|
32
32
|
end
|
33
33
|
|
34
|
+
@client_id = opts[:client_id]
|
34
35
|
@client_secret = opts[:client_secret]
|
35
|
-
if @client_secret.nil?
|
36
|
-
puts "TODO. Raise an exception due to missing client secret"
|
37
|
-
end
|
38
|
-
|
39
36
|
@token = opts[:token]
|
40
|
-
|
41
|
-
puts "TODO. Raise an exception due to missing token"
|
42
|
-
end
|
43
|
-
|
44
|
-
@user_id = opts[:user_id]
|
45
|
-
if @user_id.nil?
|
46
|
-
@user_id = "-"
|
47
|
-
end
|
37
|
+
@user_id = (opts[:user_id] || DEFAULT_USER_ID)
|
48
38
|
|
49
39
|
@connection = Faraday.new("https://api.fitbit.com")
|
50
40
|
end
|
51
41
|
|
52
|
-
def get_call(url)
|
53
|
-
response = connection.get(url) do |request|
|
54
|
-
request.headers['Authorization'] = "Bearer #{token}"
|
55
|
-
request.headers['Content-Type'] = "application/x-www-form-urlencoded"
|
56
|
-
end
|
57
|
-
|
58
|
-
headers_to_keep = ["fitbit-rate-limit-limit","fitbit-rate-limit-remaining","fitbit-rate-limit-reset"]
|
59
|
-
|
60
|
-
case response.status
|
61
|
-
when 200; return JSON.parse(response.body).merge!(response.headers.slice(*headers_to_keep))
|
62
|
-
when 400; raise FitgemOauth2::BadRequestError
|
63
|
-
when 401; raise FitgemOauth2::UnauthorizedError
|
64
|
-
when 403; raise FitgemOauth2::ForbiddenError
|
65
|
-
when 404; raise FitgemOauth2::NotFoundError
|
66
|
-
when 500..599; raise FitgemOauth2::ServerError
|
67
|
-
end
|
68
|
-
end
|
69
|
-
|
70
|
-
|
71
42
|
def refresh_access_token(refresh_token)
|
72
43
|
response = connection.post('/oauth2/token') do |request|
|
73
44
|
encoded = Base64.strict_encode64("#{@client_id}:#{@client_secret}")
|
@@ -79,8 +50,41 @@ module FitgemOauth2
|
|
79
50
|
return JSON.parse(response.body)
|
80
51
|
end
|
81
52
|
|
53
|
+
def get_call(url)
|
54
|
+
response = connection.get(url) { |request| set_headers(request) }
|
55
|
+
return parse_response(response)
|
56
|
+
end
|
57
|
+
|
58
|
+
def post_call(url, params = {})
|
59
|
+
response = connection.post(url, params) { |request| set_headers(request) }
|
60
|
+
return parse_response(response)
|
61
|
+
end
|
62
|
+
|
63
|
+
def delete_call(url)
|
64
|
+
response = connection.delete(url) { |request| set_headers(request) }
|
65
|
+
return parse_response(response)
|
66
|
+
end
|
67
|
+
|
82
68
|
private
|
83
69
|
attr_reader :connection
|
84
70
|
|
71
|
+
def set_headers(request)
|
72
|
+
request.headers['Authorization'] = "Bearer #{token}"
|
73
|
+
request.headers['Content-Type'] = "application/x-www-form-urlencoded"
|
74
|
+
end
|
75
|
+
|
76
|
+
def parse_response(response)
|
77
|
+
headers_to_keep = ["fitbit-rate-limit-limit","fitbit-rate-limit-remaining","fitbit-rate-limit-reset"]
|
78
|
+
|
79
|
+
case response.status
|
80
|
+
when 200; return JSON.parse(response.body).merge!(response.headers.slice(*headers_to_keep))
|
81
|
+
when 400; raise FitgemOauth2::BadRequestError
|
82
|
+
when 401; raise FitgemOauth2::UnauthorizedError
|
83
|
+
when 403; raise FitgemOauth2::ForbiddenError
|
84
|
+
when 404; raise FitgemOauth2::NotFoundError
|
85
|
+
when 500..599; raise FitgemOauth2::ServerError
|
86
|
+
end
|
87
|
+
end
|
88
|
+
|
85
89
|
end
|
86
90
|
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module FitgemOauth2
|
2
|
+
class Client
|
3
|
+
|
4
|
+
SUBSCRIBABLE_TYPES = [:sleep, :body, :activities, :foods, :all]
|
5
|
+
|
6
|
+
def subscriptions(opts)
|
7
|
+
get_call(subscription_url(opts))
|
8
|
+
end
|
9
|
+
|
10
|
+
def create_subscription(opts)
|
11
|
+
post_call(subscription_url(opts))
|
12
|
+
end
|
13
|
+
|
14
|
+
def remove_subscription(opts)
|
15
|
+
delete_call(subscription_url(opts))
|
16
|
+
end
|
17
|
+
|
18
|
+
protected
|
19
|
+
|
20
|
+
def subscription_url(opts)
|
21
|
+
type = opts[ :type ] || :all
|
22
|
+
subscription_id = opts[:subscription_id]
|
23
|
+
|
24
|
+
url = [ '1', 'user', user_id ]
|
25
|
+
url << type unless type == :all
|
26
|
+
url << 'apiSubscriptions'
|
27
|
+
url << subscription_id if subscription_id
|
28
|
+
|
29
|
+
return url.join('/') + '.json'
|
30
|
+
end
|
31
|
+
end
|
32
|
+
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: 0.0.
|
4
|
+
version: 0.0.8
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ankit Gupta
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-03-
|
11
|
+
date: 2016-03-31 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -38,6 +38,20 @@ dependencies:
|
|
38
38
|
- - "~>"
|
39
39
|
- !ruby/object:Gem::Version
|
40
40
|
version: '3.4'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: factory_girl
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '4.5'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '4.5'
|
41
55
|
- !ruby/object:Gem::Dependency
|
42
56
|
name: dotenv
|
43
57
|
requirement: !ruby/object:Gem::Requirement
|
@@ -70,6 +84,7 @@ files:
|
|
70
84
|
- lib/fitgem_oauth2/heartrate.rb
|
71
85
|
- lib/fitgem_oauth2/sleep.rb
|
72
86
|
- lib/fitgem_oauth2/steps.rb
|
87
|
+
- lib/fitgem_oauth2/subscriptions.rb
|
73
88
|
- lib/fitgem_oauth2/users.rb
|
74
89
|
- lib/fitgem_oauth2/utils.rb
|
75
90
|
- lib/fitgem_oauth2/version.rb
|
@@ -98,3 +113,4 @@ signing_key:
|
|
98
113
|
specification_version: 4
|
99
114
|
summary: Fitbit API client library
|
100
115
|
test_files: []
|
116
|
+
has_rdoc:
|