hello-sense 0.1.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 +7 -0
- data/CHANGELOG.md +9 -0
- data/CONTRIBUTING.md +56 -0
- data/LICENSE +21 -0
- data/README.md +55 -0
- data/hello_sense.gemspec +24 -0
- data/lib/hello_sense.rb +30 -0
- data/lib/hello_sense/account.rb +130 -0
- data/lib/hello_sense/alarms.rb +59 -0
- data/lib/hello_sense/alerts.rb +14 -0
- data/lib/hello_sense/api_error.rb +20 -0
- data/lib/hello_sense/app.rb +21 -0
- data/lib/hello_sense/client.rb +142 -0
- data/lib/hello_sense/constants.rb +4 -0
- data/lib/hello_sense/devices.rb +74 -0
- data/lib/hello_sense/expansions.rb +53 -0
- data/lib/hello_sense/firmware.rb +20 -0
- data/lib/hello_sense/insights.rb +57 -0
- data/lib/hello_sense/notifications.rb +36 -0
- data/lib/hello_sense/questions.rb +44 -0
- data/lib/hello_sense/sensors.rb +125 -0
- data/lib/hello_sense/session.rb +26 -0
- data/lib/hello_sense/sharing.rb +9 -0
- data/lib/hello_sense/sleep_sounds.rb +101 -0
- data/lib/hello_sense/speech.rb +14 -0
- data/lib/hello_sense/stats.rb +21 -0
- data/lib/hello_sense/store.rb +9 -0
- data/lib/hello_sense/support.rb +23 -0
- data/lib/hello_sense/timeline.rb +85 -0
- data/lib/hello_sense/trends.rb +109 -0
- data/lib/hello_sense/version.rb +5 -0
- metadata +197 -0
@@ -0,0 +1,26 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sense
|
4
|
+
module Session
|
5
|
+
def authorize_with_password!
|
6
|
+
data = {
|
7
|
+
grant_type: 'password',
|
8
|
+
client_id: @client_id,
|
9
|
+
client_secret: @client_secret,
|
10
|
+
username: @username,
|
11
|
+
password: @password,
|
12
|
+
}
|
13
|
+
request = Net::HTTP::Post.new('/v1/oauth2/token',
|
14
|
+
headers.reject { |key, _| key == :Authorization })
|
15
|
+
request.set_form_data(data)
|
16
|
+
response = connection.request(request)
|
17
|
+
response_data = data_or_error(response)
|
18
|
+
|
19
|
+
response_data['access_token']
|
20
|
+
end
|
21
|
+
|
22
|
+
def destroy_token
|
23
|
+
delete('/v1/oauth2/token')
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
@@ -0,0 +1,101 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sense
|
4
|
+
module SleepSounds
|
5
|
+
# @return [Hash]
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# {
|
9
|
+
# "availableDurations" => [{
|
10
|
+
# "durations" => {
|
11
|
+
# "id" => 2,
|
12
|
+
# "name" => "30 Minutes"
|
13
|
+
# }, {
|
14
|
+
# "id" => 3,
|
15
|
+
# "name" => "1 Hour"
|
16
|
+
# }]
|
17
|
+
# },
|
18
|
+
# "availableSounds" => [{
|
19
|
+
# "sounds" => {
|
20
|
+
# "id" => 18,
|
21
|
+
# "preview_url" => "https://s3.amazonaws.com/hello-audio/sleep-tones-preview/Aura.mp3",
|
22
|
+
# "name" => "Aura"
|
23
|
+
# }, {
|
24
|
+
# "id" => 20,
|
25
|
+
# "preview_url" => "https://s3.amazonaws.com/hello-audio/sleep-tones-preview/Nocturne.mp3",
|
26
|
+
# "name" => "Nocturne"
|
27
|
+
# }],
|
28
|
+
# "state" => "OK"
|
29
|
+
# },
|
30
|
+
# "status" => {
|
31
|
+
# "playing" => false,
|
32
|
+
# "sound" => nil,
|
33
|
+
# "duration" => nil,
|
34
|
+
# "volume_percent" => nil
|
35
|
+
# }
|
36
|
+
# }
|
37
|
+
|
38
|
+
def sounds_combined_state
|
39
|
+
get('/v2/sleep_sounds/combined_state')
|
40
|
+
end
|
41
|
+
|
42
|
+
# @return [Hash]
|
43
|
+
#
|
44
|
+
# @example
|
45
|
+
# {
|
46
|
+
# "durations" => [{
|
47
|
+
# "id" => 2,
|
48
|
+
# "name" => "30 Minutes"
|
49
|
+
# }, {
|
50
|
+
# "id" => 3,
|
51
|
+
# "name" => "1 Hour"
|
52
|
+
# }]
|
53
|
+
# }
|
54
|
+
|
55
|
+
def sound_durations
|
56
|
+
get('/v2/sleep_sounds/durations')
|
57
|
+
end
|
58
|
+
|
59
|
+
def play_sound
|
60
|
+
post('/v2/sleep_sounds/play')
|
61
|
+
end
|
62
|
+
|
63
|
+
# @return [Hash]
|
64
|
+
#
|
65
|
+
# @example
|
66
|
+
# {
|
67
|
+
# "sounds" => [{
|
68
|
+
# "id" => 18,
|
69
|
+
# "preview_url" => "https://s3.amazonaws.com/hello-audio/sleep-tones-preview/Aura.mp3",
|
70
|
+
# "name" => "Aura"
|
71
|
+
# }, {
|
72
|
+
# "id" => 20,
|
73
|
+
# "preview_url" => "https://s3.amazonaws.com/hello-audio/sleep-tones-preview/Nocturne.mp3",
|
74
|
+
# "name" => "Nocturne"
|
75
|
+
# }],
|
76
|
+
# "state" => "OK"
|
77
|
+
# }
|
78
|
+
|
79
|
+
def sounds
|
80
|
+
get('/v2/sleep_sounds/sounds')
|
81
|
+
end
|
82
|
+
|
83
|
+
# @return [Hash]
|
84
|
+
#
|
85
|
+
# @example
|
86
|
+
# {
|
87
|
+
# "playing" => false,
|
88
|
+
# "sound" => nil,
|
89
|
+
# "duration" => nil,
|
90
|
+
# "volume_percent" => nil
|
91
|
+
# }
|
92
|
+
|
93
|
+
def sounds_status
|
94
|
+
get('/v2/sleep_sounds/status')
|
95
|
+
end
|
96
|
+
|
97
|
+
def stop_sounds(data)
|
98
|
+
post('/v2/sleep_sounds/stop', data)
|
99
|
+
end
|
100
|
+
end
|
101
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sense
|
4
|
+
module Stats
|
5
|
+
def update_stats(data)
|
6
|
+
patch('/v1/app/stats', data)
|
7
|
+
end
|
8
|
+
|
9
|
+
# @return [Hash]
|
10
|
+
#
|
11
|
+
# @example
|
12
|
+
# {
|
13
|
+
# "has_unread_insights" => true,
|
14
|
+
# "has_unanswered_questions" => true
|
15
|
+
# }
|
16
|
+
|
17
|
+
def unread_stats
|
18
|
+
get('/v1/app/stats/unread')
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sense
|
4
|
+
module Support
|
5
|
+
# @return [Array<Hash>]
|
6
|
+
#
|
7
|
+
# @example
|
8
|
+
# [
|
9
|
+
# {
|
10
|
+
# "topic" => "pairing_sense",
|
11
|
+
# "display_name" => Pairing your Sense"
|
12
|
+
# },
|
13
|
+
# {
|
14
|
+
# "topic" => "pairing_a_sleep_pill",
|
15
|
+
# "display_name" => Pairing your Sleep Pill"
|
16
|
+
# }
|
17
|
+
# ]
|
18
|
+
|
19
|
+
def support_topics
|
20
|
+
get('/v1/support/topics')
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sense
|
4
|
+
module Timeline
|
5
|
+
# Known +event_type+s:
|
6
|
+
# * +FELL_ASLEEP+
|
7
|
+
# * +GENERIC_MOTION+
|
8
|
+
# * +GENERIC_SOUND+
|
9
|
+
# * +GOT_IN_BED+
|
10
|
+
# * +GOT_OUT_OF_BED+
|
11
|
+
# * +IN_BED+
|
12
|
+
# * +WOKE_UP+
|
13
|
+
#
|
14
|
+
# Known +sleep_state+s:
|
15
|
+
# * +AWAKE+
|
16
|
+
# * +LIGHT+
|
17
|
+
# * +MEDIUM+
|
18
|
+
# * +SOUND+
|
19
|
+
#
|
20
|
+
# Known +metrics+ +name+s:
|
21
|
+
# * +fell_asleep+
|
22
|
+
# * +sound_sleep+
|
23
|
+
# * +time_to_sleep+
|
24
|
+
# * +times_awake+
|
25
|
+
# * +total_sleep+
|
26
|
+
# * +woke_up+
|
27
|
+
# * +humidity+
|
28
|
+
# * +light+
|
29
|
+
# * +particulates+
|
30
|
+
# * +sound+
|
31
|
+
# * +temperature+
|
32
|
+
#
|
33
|
+
# @param date [String] a date in 'yyyy-MM-dd' format
|
34
|
+
# @return [Hash]
|
35
|
+
#
|
36
|
+
# @example
|
37
|
+
# {
|
38
|
+
# "score" => 69,
|
39
|
+
# "score_condition" => "WARNING",
|
40
|
+
# "message" => "You were asleep for **9.0 hours**, and sleeping soundly for 6.5 hours.",
|
41
|
+
# "date" => "2017-01-01",
|
42
|
+
# "sleep_periods" => [
|
43
|
+
# "NIGHT"
|
44
|
+
# ],
|
45
|
+
# "events" => [{
|
46
|
+
# "timestamp" => 1483340220000,
|
47
|
+
# "timezone_offset" => -28800000,
|
48
|
+
# "duration_millis" => 60000,
|
49
|
+
# "message" => "You went to bed.",
|
50
|
+
# "sleep_depth" => 0,
|
51
|
+
# "sleep_state" => "AWAKE",
|
52
|
+
# "event_type" => "GOT_IN_BED",
|
53
|
+
# "sleep_period" => "NIGHT",
|
54
|
+
# "valid_actions" => [
|
55
|
+
# "ADJUST_TIME",
|
56
|
+
# "VERIFY",
|
57
|
+
# "INCORRECT"
|
58
|
+
# ]
|
59
|
+
# }],
|
60
|
+
# "metrics" => [{
|
61
|
+
# "name" => "total_sleep",
|
62
|
+
# "value" => 537,
|
63
|
+
# "unit" => "MINUTES",
|
64
|
+
# "condition" => "IDEAL"
|
65
|
+
# }],
|
66
|
+
# "locked_down" => false
|
67
|
+
# }
|
68
|
+
|
69
|
+
def timeline(date)
|
70
|
+
get("/v2/timeline/#{date}")
|
71
|
+
end
|
72
|
+
|
73
|
+
def create_timeline_event(date, type, timestamp, data)
|
74
|
+
put("/v2/timeline/#{date}/events/#{type}/#{timestamp}", data)
|
75
|
+
end
|
76
|
+
|
77
|
+
def update_timeline_event(date, type, timestamp, data)
|
78
|
+
patch("/v2/timeline/#{date}/events/#{type}/#{timestamp}", data)
|
79
|
+
end
|
80
|
+
|
81
|
+
def remove_timeline_event(date, type, timestamp)
|
82
|
+
delete("/v2/timeline/#{date}/events/#{type}/#{timestamp}")
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,109 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Sense
|
4
|
+
module Trends
|
5
|
+
# @param timescale [String] one of +'LAST_WEEK'+, +'LAST_MONTH'+, +'LAST_3_MONTHS'+
|
6
|
+
# @return [Hash]
|
7
|
+
#
|
8
|
+
# @example
|
9
|
+
# {
|
10
|
+
# "available_time_scales" => [
|
11
|
+
# "LAST_WEEK",
|
12
|
+
# "LAST_MONTH",
|
13
|
+
# "LAST_3_MONTHS"
|
14
|
+
# ],
|
15
|
+
# "graphs" => [{
|
16
|
+
# "time_scale" => "LAST_WEEK",
|
17
|
+
# "title" => "Sleep Score",
|
18
|
+
# "data_type" => "SCORES",
|
19
|
+
# "graph_type" => "GRID",
|
20
|
+
# "min_value" => 71.0,
|
21
|
+
# "max_value" => 86.0,
|
22
|
+
# "sections" => [{
|
23
|
+
# "values" => [81.0, 80.0, 78.0, 71.0, 79.0, 86.0, 77.0],
|
24
|
+
# "titles" => ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"],
|
25
|
+
# "highlighted_values" => [6],
|
26
|
+
# "highlighted_title" => 6
|
27
|
+
# }],
|
28
|
+
# "condition_ranges" => [{
|
29
|
+
# "min_value" => 80.0,
|
30
|
+
# "max_value" => 100.0,
|
31
|
+
# "condition" => "IDEAL"
|
32
|
+
# }, {
|
33
|
+
# "min_value" => 60.0,
|
34
|
+
# "max_value" => 79.0,
|
35
|
+
# "condition" => "WARNING"
|
36
|
+
# }, {
|
37
|
+
# "min_value" => 0.0,
|
38
|
+
# "max_value" => 59.0,
|
39
|
+
# "condition" => "ALERT"
|
40
|
+
# }],
|
41
|
+
# "annotations" => [{
|
42
|
+
# "title" => "Avg. Weekdays",
|
43
|
+
# "value" => 78.8,
|
44
|
+
# "data_type" => "SCORES",
|
45
|
+
# "condition" => "WARNING"
|
46
|
+
# }, {
|
47
|
+
# "title" => "Avg. Weekends",
|
48
|
+
# "value" => 79.0,
|
49
|
+
# "data_type" => "SCORES",
|
50
|
+
# "condition" => "WARNING"
|
51
|
+
# }, {
|
52
|
+
# "title" => "Avg. Overall",
|
53
|
+
# "value" => 78.9,
|
54
|
+
# "data_type" => "SCORES",
|
55
|
+
# "condition" => "WARNING"
|
56
|
+
# }]
|
57
|
+
# }, {
|
58
|
+
# "time_scale" => "LAST_WEEK",
|
59
|
+
# "title" => "Sleep Duration",
|
60
|
+
# "data_type" => "HOURS",
|
61
|
+
# "graph_type" => "BAR",
|
62
|
+
# "min_value" => 7.483333,
|
63
|
+
# "max_value" => 9.083333,
|
64
|
+
# "sections" => [{
|
65
|
+
# "values" => [7.85, 8.383333, 7.483333, 7.7, 7.8, 9.083333, 7.6833334],
|
66
|
+
# "titles" => ["SUN", "MON", "TUE", "WED", "THU", "FRI", "SAT"],
|
67
|
+
# "highlighted_values" => [2, 5],
|
68
|
+
# "highlighted_title" => 6
|
69
|
+
# }],
|
70
|
+
# "condition_ranges" => [],
|
71
|
+
# "annotations" => [{
|
72
|
+
# "title" => "Avg. Weekdays",
|
73
|
+
# "value" => 8.1,
|
74
|
+
# "data_type" => "HOURS",
|
75
|
+
# "condition" => nil
|
76
|
+
# }, {
|
77
|
+
# "title" => "Avg. Weekends",
|
78
|
+
# "value" => 7.8,
|
79
|
+
# "data_type" => "HOURS",
|
80
|
+
# "condition" => nil
|
81
|
+
# }, {
|
82
|
+
# "title" => "Avg. Overall",
|
83
|
+
# "value" => 8.0,
|
84
|
+
# "data_type" => "HOURS",
|
85
|
+
# "condition" => nil
|
86
|
+
# }]
|
87
|
+
# }, {
|
88
|
+
# "time_scale" => "LAST_WEEK",
|
89
|
+
# "title" => "Sleep Depth",
|
90
|
+
# "data_type" => "PERCENTS",
|
91
|
+
# "graph_type" => "BUBBLES",
|
92
|
+
# "min_value" => 0.0,
|
93
|
+
# "max_value" => 1.0,
|
94
|
+
# "sections" => [{
|
95
|
+
# "values" => [0.068022884, 0.5591227, 0.3728544],
|
96
|
+
# "titles" => ["LIGHT", "MEDIUM", "DEEP"],
|
97
|
+
# "highlighted_values" => [],
|
98
|
+
# "highlighted_title" => nil
|
99
|
+
# }],
|
100
|
+
# "condition_ranges" => [],
|
101
|
+
# "annotations" => []
|
102
|
+
# }]
|
103
|
+
# }
|
104
|
+
|
105
|
+
def trends(timescale)
|
106
|
+
get("/v2/trends/#{timescale}")
|
107
|
+
end
|
108
|
+
end
|
109
|
+
end
|
metadata
ADDED
@@ -0,0 +1,197 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: hello-sense
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Jordan Cole
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
date: 2017-07-20 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: byebug
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '9.0'
|
20
|
+
- - ">="
|
21
|
+
- !ruby/object:Gem::Version
|
22
|
+
version: 9.0.0
|
23
|
+
type: :development
|
24
|
+
prerelease: false
|
25
|
+
version_requirements: !ruby/object:Gem::Requirement
|
26
|
+
requirements:
|
27
|
+
- - "~>"
|
28
|
+
- !ruby/object:Gem::Version
|
29
|
+
version: '9.0'
|
30
|
+
- - ">="
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: 9.0.0
|
33
|
+
- !ruby/object:Gem::Dependency
|
34
|
+
name: rake
|
35
|
+
requirement: !ruby/object:Gem::Requirement
|
36
|
+
requirements:
|
37
|
+
- - "~>"
|
38
|
+
- !ruby/object:Gem::Version
|
39
|
+
version: '11.0'
|
40
|
+
- - ">="
|
41
|
+
- !ruby/object:Gem::Version
|
42
|
+
version: 11.0.0
|
43
|
+
type: :development
|
44
|
+
prerelease: false
|
45
|
+
version_requirements: !ruby/object:Gem::Requirement
|
46
|
+
requirements:
|
47
|
+
- - "~>"
|
48
|
+
- !ruby/object:Gem::Version
|
49
|
+
version: '11.0'
|
50
|
+
- - ">="
|
51
|
+
- !ruby/object:Gem::Version
|
52
|
+
version: 11.0.0
|
53
|
+
- !ruby/object:Gem::Dependency
|
54
|
+
name: rspec-core
|
55
|
+
requirement: !ruby/object:Gem::Requirement
|
56
|
+
requirements:
|
57
|
+
- - "~>"
|
58
|
+
- !ruby/object:Gem::Version
|
59
|
+
version: '3.6'
|
60
|
+
- - ">="
|
61
|
+
- !ruby/object:Gem::Version
|
62
|
+
version: 3.6.0
|
63
|
+
type: :development
|
64
|
+
prerelease: false
|
65
|
+
version_requirements: !ruby/object:Gem::Requirement
|
66
|
+
requirements:
|
67
|
+
- - "~>"
|
68
|
+
- !ruby/object:Gem::Version
|
69
|
+
version: '3.6'
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: 3.6.0
|
73
|
+
- !ruby/object:Gem::Dependency
|
74
|
+
name: rspec-expectations
|
75
|
+
requirement: !ruby/object:Gem::Requirement
|
76
|
+
requirements:
|
77
|
+
- - "~>"
|
78
|
+
- !ruby/object:Gem::Version
|
79
|
+
version: '3.6'
|
80
|
+
- - ">="
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.6.0
|
83
|
+
type: :development
|
84
|
+
prerelease: false
|
85
|
+
version_requirements: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.6'
|
90
|
+
- - ">="
|
91
|
+
- !ruby/object:Gem::Version
|
92
|
+
version: 3.6.0
|
93
|
+
- !ruby/object:Gem::Dependency
|
94
|
+
name: rubocop
|
95
|
+
requirement: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - "~>"
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: '0.48'
|
100
|
+
- - ">="
|
101
|
+
- !ruby/object:Gem::Version
|
102
|
+
version: 0.48.0
|
103
|
+
type: :development
|
104
|
+
prerelease: false
|
105
|
+
version_requirements: !ruby/object:Gem::Requirement
|
106
|
+
requirements:
|
107
|
+
- - "~>"
|
108
|
+
- !ruby/object:Gem::Version
|
109
|
+
version: '0.48'
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: 0.48.0
|
113
|
+
- !ruby/object:Gem::Dependency
|
114
|
+
name: yard
|
115
|
+
requirement: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - "~>"
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: '0.9'
|
120
|
+
- - ">="
|
121
|
+
- !ruby/object:Gem::Version
|
122
|
+
version: 0.9.0
|
123
|
+
type: :development
|
124
|
+
prerelease: false
|
125
|
+
version_requirements: !ruby/object:Gem::Requirement
|
126
|
+
requirements:
|
127
|
+
- - "~>"
|
128
|
+
- !ruby/object:Gem::Version
|
129
|
+
version: '0.9'
|
130
|
+
- - ">="
|
131
|
+
- !ruby/object:Gem::Version
|
132
|
+
version: 0.9.0
|
133
|
+
description: Ruby implementation of Sense's private API
|
134
|
+
email:
|
135
|
+
- stilist@ratafia.info
|
136
|
+
executables: []
|
137
|
+
extensions: []
|
138
|
+
extra_rdoc_files: []
|
139
|
+
files:
|
140
|
+
- CHANGELOG.md
|
141
|
+
- CONTRIBUTING.md
|
142
|
+
- LICENSE
|
143
|
+
- README.md
|
144
|
+
- hello_sense.gemspec
|
145
|
+
- lib/hello_sense.rb
|
146
|
+
- lib/hello_sense/account.rb
|
147
|
+
- lib/hello_sense/alarms.rb
|
148
|
+
- lib/hello_sense/alerts.rb
|
149
|
+
- lib/hello_sense/api_error.rb
|
150
|
+
- lib/hello_sense/app.rb
|
151
|
+
- lib/hello_sense/client.rb
|
152
|
+
- lib/hello_sense/constants.rb
|
153
|
+
- lib/hello_sense/devices.rb
|
154
|
+
- lib/hello_sense/expansions.rb
|
155
|
+
- lib/hello_sense/firmware.rb
|
156
|
+
- lib/hello_sense/insights.rb
|
157
|
+
- lib/hello_sense/notifications.rb
|
158
|
+
- lib/hello_sense/questions.rb
|
159
|
+
- lib/hello_sense/sensors.rb
|
160
|
+
- lib/hello_sense/session.rb
|
161
|
+
- lib/hello_sense/sharing.rb
|
162
|
+
- lib/hello_sense/sleep_sounds.rb
|
163
|
+
- lib/hello_sense/speech.rb
|
164
|
+
- lib/hello_sense/stats.rb
|
165
|
+
- lib/hello_sense/store.rb
|
166
|
+
- lib/hello_sense/support.rb
|
167
|
+
- lib/hello_sense/timeline.rb
|
168
|
+
- lib/hello_sense/trends.rb
|
169
|
+
- lib/hello_sense/version.rb
|
170
|
+
homepage: https://github.com/stilist/hello-sense
|
171
|
+
licenses: []
|
172
|
+
metadata:
|
173
|
+
yard.run: yri
|
174
|
+
post_install_message:
|
175
|
+
rdoc_options: []
|
176
|
+
require_paths:
|
177
|
+
- lib
|
178
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
179
|
+
requirements:
|
180
|
+
- - ">="
|
181
|
+
- !ruby/object:Gem::Version
|
182
|
+
version: 2.3.0
|
183
|
+
- - "<"
|
184
|
+
- !ruby/object:Gem::Version
|
185
|
+
version: 2.5.0
|
186
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
187
|
+
requirements:
|
188
|
+
- - ">="
|
189
|
+
- !ruby/object:Gem::Version
|
190
|
+
version: '0'
|
191
|
+
requirements: []
|
192
|
+
rubyforge_project:
|
193
|
+
rubygems_version: 2.6.8
|
194
|
+
signing_key:
|
195
|
+
specification_version: 4
|
196
|
+
summary: TK
|
197
|
+
test_files: []
|