oura 0.1.1 → 0.1.2
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/.rubocop.yml +3 -0
- data/CHANGELOG.md +4 -0
- data/README.md +17 -2
- data/lib/oura.rb +2 -0
- data/lib/oura/apis/activity.rb +26 -0
- data/lib/oura/apis/readiness.rb +41 -0
- data/lib/oura/apis/sleep_period.rb +26 -0
- data/lib/oura/apis/user_information.rb +25 -0
- data/lib/oura/client.rb +20 -23
- data/lib/oura/constants.rb +1 -1
- data/lib/oura/model/base.rb +7 -0
- data/lib/oura/utils/api.rb +25 -0
- data/lib/oura/version.rb +1 -1
- data/oura.gemspec +4 -1
- metadata +49 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 2845af3c9e89fbd8e210bbeb5445c34dc7e925564ce9b9ab170010a7b1e2db72
|
4
|
+
data.tar.gz: 1828efd8469eee2115025fb3a34beb60517167bc617a9e28862336cb1017fa04
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 218f859ab28ecb3576267bcb5cebb896fe4f1d8ca8e7f91b32beb31142b1bdef16191510e1a9698ae50c25d11bdf424dea541e0a061651db7ac827e6428f6d3e
|
7
|
+
data.tar.gz: f37c6d6bc9275bcdb86e8dc00986c35c2ebfce1957f13c171ccf8dc406e2ca163630e4ba318faf35dc122aac07ca57795142c977c0744cd055198c46d2af3da7
|
data/.rubocop.yml
CHANGED
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -29,7 +29,7 @@ Or install it yourself as:
|
|
29
29
|
|
30
30
|
```irb
|
31
31
|
$ DEVELOPMENT=true bundle console
|
32
|
-
$ client = Oura::Client.new(access_token: your_token)
|
32
|
+
$ client = ::Oura::Client.new(access_token: your_token)
|
33
33
|
$ # <input your code>
|
34
34
|
$ response = client.user_info # or sleep_period, activity, readiness
|
35
35
|
$ response.body
|
@@ -38,12 +38,27 @@ $ => "{\"weight\": 50, \"age\": 22, \"gender\": \"male\", \"email\": \"oura@exam
|
|
38
38
|
|
39
39
|
### not in develop-mode
|
40
40
|
|
41
|
+
#### Set Environment
|
42
|
+
|
43
|
+
|Environment|Explanation|
|
44
|
+
|:---:|:---:|
|
45
|
+
| `OURA_CLIENT_ID` | client id |
|
46
|
+
| `OURA_CLEINT_SECRET` | client secret |
|
47
|
+
| `AUTHORIZE_HEADER_CODE` | authrize header code |
|
48
|
+
| `OURA_CALLBACK_URI` | callback uri |
|
49
|
+
|
50
|
+
|
41
51
|
```bash
|
42
52
|
$ bundle console
|
43
|
-
$ > client = Oura::Client.new(access_token: <your token>)
|
53
|
+
$ > client = ::Oura::Client.new(access_token: <your token>)
|
44
54
|
$ > client.user_info # or sleep_period, activity, readiness
|
45
55
|
```
|
46
56
|
|
57
|
+
## References
|
58
|
+
|
59
|
+
- [Official Site](https://ouraring.com/)
|
60
|
+
- [API Document](https://cloud.ouraring.com/docs/)
|
61
|
+
|
47
62
|
## Development
|
48
63
|
|
49
64
|
After checking out the repo, run `bin/setup` to install dependencies.
|
data/lib/oura.rb
CHANGED
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'oura/utils/api'
|
4
|
+
|
5
|
+
module Oura
|
6
|
+
module Apis
|
7
|
+
# Activity summary contains daily activity summary values and detailed activity levels.
|
8
|
+
module Activity
|
9
|
+
include ::Oura::Api
|
10
|
+
|
11
|
+
REQUEST_PATH = '/v1/activity'
|
12
|
+
|
13
|
+
# @param [Date] start_date
|
14
|
+
# @param [Date] end_date
|
15
|
+
# @example
|
16
|
+
# {
|
17
|
+
# "activity": [{"summary_date": "2016-10-11", ...}, {"summary_date": "2016-10-12", ...}, ...]
|
18
|
+
# }
|
19
|
+
# @return [OAuth2::Response]
|
20
|
+
def activity(start_date:, end_date:)
|
21
|
+
sdate, edate = [start_date, end_date].map { |date| transform_date(date) }
|
22
|
+
get(REQUEST_PATH, params: { start: sdate, end: edate })
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,41 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'oura/utils/api'
|
4
|
+
|
5
|
+
module Oura
|
6
|
+
module Apis
|
7
|
+
# Readiness tells how ready you are for the day.
|
8
|
+
# example data
|
9
|
+
# {
|
10
|
+
# "readiness": {
|
11
|
+
# "summary_date": "2016-09-03",
|
12
|
+
# "period_id": 0,
|
13
|
+
# "score": 62,
|
14
|
+
# "score_previous_night": 5,
|
15
|
+
# "score_sleep_balance": 75,
|
16
|
+
# "score_previous_day": 61,
|
17
|
+
# "score_activity_balance": 77,
|
18
|
+
# "score_resting_hr": 98,
|
19
|
+
# "score_recovery_index": 45,
|
20
|
+
# "score_temperature": 86
|
21
|
+
# }
|
22
|
+
# }
|
23
|
+
module Readiness
|
24
|
+
include ::Oura::Api
|
25
|
+
|
26
|
+
REQUEST_PATH = '/v1/readiness'
|
27
|
+
|
28
|
+
# @param [Date] start_date
|
29
|
+
# @param [Date] end_date
|
30
|
+
# @example
|
31
|
+
# {
|
32
|
+
# "readiness": [{"summary_date": "2016-10-11", ...}, {"summary_date": "2016-10-12", ...}, ...]
|
33
|
+
# }
|
34
|
+
# @return [OAuth2::Response]
|
35
|
+
def readiness(start_date:, end_date:)
|
36
|
+
sdate, edate = [start_date, end_date].map { |date| transform_date(date) }
|
37
|
+
get(REQUEST_PATH, params: { start: sdate, end: edate })
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'oura/utils/api'
|
4
|
+
|
5
|
+
module Oura
|
6
|
+
module Apis
|
7
|
+
# SleepPeriod is a nearly continuous, longish period of time spent lying down in bed.
|
8
|
+
module SleepPeriod
|
9
|
+
include ::Oura::Api
|
10
|
+
|
11
|
+
REQUEST_PATH = '/v1/sleep'
|
12
|
+
|
13
|
+
# @param [Date] start_date
|
14
|
+
# @param [Date] end_date
|
15
|
+
# example response
|
16
|
+
# {
|
17
|
+
# "sleep": [{"summary_date": "2016-10-11", ...}, {"summary_date": "2016-10-12", ...}, ...]
|
18
|
+
# }
|
19
|
+
# @return [OAuth2::Response]
|
20
|
+
def sleep_period(start_date:, end_date:)
|
21
|
+
sdate, edate = [start_date, end_date].map { |date| transform_date(date) }
|
22
|
+
get(REQUEST_PATH, params: { start: sdate, end: edate })
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'oura/utils/api'
|
4
|
+
|
5
|
+
module Oura
|
6
|
+
module Apis
|
7
|
+
# UserInformation is user information.
|
8
|
+
module UserInformation
|
9
|
+
include ::Oura::Api
|
10
|
+
|
11
|
+
REQUEST_PATH = '/v1/userinfo'
|
12
|
+
# @example
|
13
|
+
# {
|
14
|
+
# "age": 27,
|
15
|
+
# "weight": 80,
|
16
|
+
# "gender": "male",
|
17
|
+
# "email": "john.doe@the.domain"
|
18
|
+
# }
|
19
|
+
# @return [OAuth2::Response]
|
20
|
+
def userinfo
|
21
|
+
get(REQUEST_PATH)
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/oura/client.rb
CHANGED
@@ -1,20 +1,29 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
3
|
require 'oauth2'
|
4
|
+
require 'oura/apis/user_information'
|
5
|
+
require 'oura/apis/activity'
|
6
|
+
require 'oura/apis/sleep_period'
|
7
|
+
require 'oura/apis/readiness'
|
8
|
+
|
4
9
|
module Oura
|
5
|
-
# Oura::Client is client class.
|
10
|
+
# ::Oura::Client is client class.
|
6
11
|
class Client
|
12
|
+
include ::Oura::Apis::UserInformation
|
13
|
+
include ::Oura::Apis::SleepPeriod
|
14
|
+
include ::Oura::Apis::Activity
|
15
|
+
include ::Oura::Apis::Readiness
|
16
|
+
|
7
17
|
attr_reader :access_token, :oauth_client
|
8
18
|
|
19
|
+
# @param [String] access_token
|
20
|
+
# @return [Object<Oura::Client>]
|
9
21
|
def initialize(access_token: nil)
|
10
22
|
@oauth_client = OAuth2::Client.new(
|
11
|
-
ENV['OURA_CLIENT_ID'],
|
12
|
-
ENV['OURA_CLIENT_SECRET'],
|
13
|
-
Oura::Constants::OAUTH_OPTIONS
|
23
|
+
ENV['OURA_CLIENT_ID'], ENV['OURA_CLIENT_SECRET'], ::Oura::Constants::OAUTH_OPTIONS
|
14
24
|
)
|
15
|
-
|
16
25
|
@access_token = if ENV['DEVELOPMENT']
|
17
|
-
puts @oauth_client.auth_code.authorize_url(redirect_uri: ::Oura::Constants::
|
26
|
+
puts @oauth_client.auth_code.authorize_url(redirect_uri: ::Oura::Constants::CALLBACK_URI)
|
18
27
|
puts 'Please, input your secret'
|
19
28
|
code = gets.chomp
|
20
29
|
token(code)
|
@@ -25,28 +34,16 @@ module Oura
|
|
25
34
|
end
|
26
35
|
end
|
27
36
|
|
37
|
+
private
|
38
|
+
|
39
|
+
# @param [String] code
|
40
|
+
# @return [OAuth2::AccessToken]
|
28
41
|
def token(code)
|
29
42
|
@oauth_client.auth_code.get_token(
|
30
43
|
code,
|
31
|
-
redirect_uri: ::Oura::Constants::
|
44
|
+
redirect_uri: ::Oura::Constants::CALLBACK_URI,
|
32
45
|
headers: { 'Authorization' => "Bearer #{ENV['AUTHORIZE_HEADER_CODE']}" }
|
33
46
|
)
|
34
47
|
end
|
35
|
-
|
36
|
-
def user_info
|
37
|
-
@access_token.get('/v1/userinfo')
|
38
|
-
end
|
39
|
-
|
40
|
-
def sleep_period(start_date:, end_date:)
|
41
|
-
@access_token.get('/v1/sleep', params: { start: start_date.to_s, end: end_date.to_s })
|
42
|
-
end
|
43
|
-
|
44
|
-
def activity(start_date:, end_date:)
|
45
|
-
@access_token.get('/v1/activity', params: { start: start_date.to_s, end: end_date.to_s })
|
46
|
-
end
|
47
|
-
|
48
|
-
def readiness(start_date:, end_date:)
|
49
|
-
@access_token.get('/v1/readiness', params: { start: start_date.to_s, end: end_date.to_s })
|
50
|
-
end
|
51
48
|
end
|
52
49
|
end
|
data/lib/oura/constants.rb
CHANGED
@@ -4,7 +4,7 @@ module Oura
|
|
4
4
|
module Constants
|
5
5
|
API_ENDPOINT = 'https://api.ouraring.com'
|
6
6
|
OAUTH_ENDPOINT = 'https://cloud.ouraring.com'
|
7
|
-
|
7
|
+
CALLBACK_URI = ENV['OURA_CALLBACK_URI'] || 'http://localhost:8080/oauth2/callback'
|
8
8
|
OAUTH_OPTIONS = {
|
9
9
|
authorize_url: "#{OAUTH_ENDPOINT}/oauth/authorize",
|
10
10
|
token_url: "#{API_ENDPOINT}/oauth/token",
|
@@ -0,0 +1,25 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Oura
|
4
|
+
# ::Oura::Api is utility api module.
|
5
|
+
module Api
|
6
|
+
private
|
7
|
+
|
8
|
+
# @param [<String>] date
|
9
|
+
# @param [<Date>] date
|
10
|
+
# @return [String] date string
|
11
|
+
def transform_date(date)
|
12
|
+
return Date.parse(date).strftime('%Y-%m-%d') if date.is_a?(String)
|
13
|
+
return date.strftime('%Y-%m-%d') if date.is_a?(Date)
|
14
|
+
|
15
|
+
raise ArgumentError, 'invalid date'
|
16
|
+
end
|
17
|
+
|
18
|
+
# @param [String] path
|
19
|
+
# @param [Hash] params
|
20
|
+
# @return [OAuth2::Response]
|
21
|
+
def get(path, params = {})
|
22
|
+
@access_token.get(path, params)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
data/lib/oura/version.rb
CHANGED
data/oura.gemspec
CHANGED
@@ -6,7 +6,7 @@ require 'oura/version'
|
|
6
6
|
|
7
7
|
Gem::Specification.new do |spec|
|
8
8
|
spec.name = 'oura'
|
9
|
-
spec.version = Oura::VERSION
|
9
|
+
spec.version = ::Oura::VERSION
|
10
10
|
spec.authors = ['Ryota Ikezawa']
|
11
11
|
spec.email = ['pavegy@gmail.com']
|
12
12
|
|
@@ -25,6 +25,7 @@ Gem::Specification.new do |spec|
|
|
25
25
|
spec.require_paths = ['lib']
|
26
26
|
|
27
27
|
spec.add_dependency 'oauth2'
|
28
|
+
spec.add_development_dependency 'activesupport'
|
28
29
|
spec.add_development_dependency 'bundler', '~> 1.17'
|
29
30
|
spec.add_development_dependency 'codecov'
|
30
31
|
spec.add_development_dependency 'danger'
|
@@ -39,4 +40,6 @@ Gem::Specification.new do |spec|
|
|
39
40
|
spec.add_development_dependency 'rubocop'
|
40
41
|
spec.add_development_dependency 'rubocop-rspec'
|
41
42
|
spec.add_development_dependency 'simplecov'
|
43
|
+
spec.add_development_dependency 'vcr'
|
44
|
+
spec.add_development_dependency 'webmock'
|
42
45
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: oura
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.1.
|
4
|
+
version: 0.1.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Ryota Ikezawa
|
@@ -24,6 +24,20 @@ dependencies:
|
|
24
24
|
- - ">="
|
25
25
|
- !ruby/object:Gem::Version
|
26
26
|
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: activesupport
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - ">="
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - ">="
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
27
41
|
- !ruby/object:Gem::Dependency
|
28
42
|
name: bundler
|
29
43
|
requirement: !ruby/object:Gem::Requirement
|
@@ -220,6 +234,34 @@ dependencies:
|
|
220
234
|
- - ">="
|
221
235
|
- !ruby/object:Gem::Version
|
222
236
|
version: '0'
|
237
|
+
- !ruby/object:Gem::Dependency
|
238
|
+
name: vcr
|
239
|
+
requirement: !ruby/object:Gem::Requirement
|
240
|
+
requirements:
|
241
|
+
- - ">="
|
242
|
+
- !ruby/object:Gem::Version
|
243
|
+
version: '0'
|
244
|
+
type: :development
|
245
|
+
prerelease: false
|
246
|
+
version_requirements: !ruby/object:Gem::Requirement
|
247
|
+
requirements:
|
248
|
+
- - ">="
|
249
|
+
- !ruby/object:Gem::Version
|
250
|
+
version: '0'
|
251
|
+
- !ruby/object:Gem::Dependency
|
252
|
+
name: webmock
|
253
|
+
requirement: !ruby/object:Gem::Requirement
|
254
|
+
requirements:
|
255
|
+
- - ">="
|
256
|
+
- !ruby/object:Gem::Version
|
257
|
+
version: '0'
|
258
|
+
type: :development
|
259
|
+
prerelease: false
|
260
|
+
version_requirements: !ruby/object:Gem::Requirement
|
261
|
+
requirements:
|
262
|
+
- - ">="
|
263
|
+
- !ruby/object:Gem::Version
|
264
|
+
version: '0'
|
223
265
|
description: unofficial API client of oura-cloud for ruby.
|
224
266
|
email:
|
225
267
|
- pavegy@gmail.com
|
@@ -242,8 +284,14 @@ files:
|
|
242
284
|
- bin/console
|
243
285
|
- bin/setup
|
244
286
|
- lib/oura.rb
|
287
|
+
- lib/oura/apis/activity.rb
|
288
|
+
- lib/oura/apis/readiness.rb
|
289
|
+
- lib/oura/apis/sleep_period.rb
|
290
|
+
- lib/oura/apis/user_information.rb
|
245
291
|
- lib/oura/client.rb
|
246
292
|
- lib/oura/constants.rb
|
293
|
+
- lib/oura/model/base.rb
|
294
|
+
- lib/oura/utils/api.rb
|
247
295
|
- lib/oura/version.rb
|
248
296
|
- oura.gemspec
|
249
297
|
homepage: https://github.com/paveg/oura
|