alexa_ruby 1.1.1 → 1.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG +4 -0
- data/Gemfile.lock +1 -1
- data/README.md +36 -2
- data/lib/alexa_ruby/response/audio_player.rb +54 -21
- data/lib/alexa_ruby/response/response.rb +28 -20
- data/lib/alexa_ruby/version.rb +1 -1
- metadata +4 -3
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: dd7bd13bd046d4f22c745be4e01c7bafe6970e72
|
4
|
+
data.tar.gz: 125194d8fff5eae293104ab729ca1a8f014a9a59
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: acb690cb6c31f1ce5a721f122fbedad6f513cb3e4f326a23b3882881d623fce35e1f1fc2f360d22306937fe02437b8a1d7ce2179362476cf2b51cd20ec4ecacb
|
7
|
+
data.tar.gz: ad3c6b4b4cb8bd191e55354b51c26e983d6c60601a57d5af705776b2a85b435a0247d72582a4ab5948593bf041fec649a44008508b0785b294b5e7c2fb9170d2
|
data/CHANGELOG
ADDED
data/Gemfile.lock
CHANGED
data/README.md
CHANGED
@@ -172,14 +172,48 @@ alexa.response.add_card(card)
|
|
172
172
|
|
173
173
|
#### Add audio player directive
|
174
174
|
|
175
|
-
Supported directives
|
176
|
-
|
175
|
+
Supported directives:
|
176
|
+
|
177
|
+
- AudioPlayer.Play
|
178
|
+
- AudioPlayer.ClearQueue
|
179
|
+
- AudioPlayer.Stop
|
180
|
+
|
181
|
+
To start the whole new playback call:
|
177
182
|
|
178
183
|
```ruby
|
179
184
|
params = { url: 'https://my-site.com/my-stream', token: 'test', offset: 0 }
|
180
185
|
alexa.response.add_audio_player_directive(:start, params)
|
181
186
|
```
|
182
187
|
|
188
|
+
To enqueue new audio file call:
|
189
|
+
|
190
|
+
```ruby
|
191
|
+
params = { url: 'https://my-site.com/my-stream', token: 'test', offset: 0, play_behavior: :enqueue }
|
192
|
+
alexa.response.add_audio_player_directive(:start, params)
|
193
|
+
```
|
194
|
+
|
195
|
+
To replace all previously enqueued audio files call:
|
196
|
+
|
197
|
+
```ruby
|
198
|
+
params = { url: 'https://my-site.com/my-stream', token: 'test', offset: 0, play_behavior: :replace_enqueued }
|
199
|
+
alexa.response.add_audio_player_directive(:start, params)
|
200
|
+
```
|
201
|
+
|
202
|
+
To clear all:
|
203
|
+
|
204
|
+
```ruby
|
205
|
+
alexa.response.add_audio_player_directive(:clear)
|
206
|
+
```
|
207
|
+
|
208
|
+
To clear only enqueued tracks and keep the playing one:
|
209
|
+
|
210
|
+
```ruby
|
211
|
+
alexa.response.add_audio_player_directive(
|
212
|
+
:clear,
|
213
|
+
clear_behavior: :clear_queue
|
214
|
+
)
|
215
|
+
```
|
216
|
+
|
183
217
|
To stop playback call:
|
184
218
|
|
185
219
|
```ruby
|
@@ -4,45 +4,78 @@ module AlexaRuby
|
|
4
4
|
# Build an AudioPlayer.Play directive
|
5
5
|
#
|
6
6
|
# @param params [Hash] optional request parameters:
|
7
|
+
# behavior [Symbol] playback behavior
|
7
8
|
# url [String] streaming URL
|
8
9
|
# token [String] streaming service token
|
10
|
+
# previous_token [String] previous played audio token
|
9
11
|
# offset [Integer] playback offset
|
10
12
|
# @return [Hash] AudioPlayer.Play directive
|
11
13
|
# @raise [ArgumentError] if audio URL isn't valid
|
12
|
-
def
|
13
|
-
|
14
|
-
if invalid_url?(url)
|
14
|
+
def play(params)
|
15
|
+
@opts = params
|
16
|
+
if invalid_url?(@opts[:url])
|
15
17
|
raise ArgumentError, 'Audio URL must be a valid ' \
|
16
18
|
'SSL-enabled (HTTPS) endpoint'
|
17
19
|
end
|
18
|
-
|
19
|
-
offset = params[:offset] || 0
|
20
|
-
build_directive('AudioPlayer.Play', url, token, offset)
|
20
|
+
play_directive
|
21
21
|
end
|
22
22
|
|
23
23
|
# Build AudioPlayer.Stop directive
|
24
24
|
#
|
25
25
|
# @return [Hash] AudioPlayer.Stop directive
|
26
|
-
def
|
27
|
-
|
26
|
+
def stop
|
27
|
+
{ type: 'AudioPlayer.Stop' }
|
28
|
+
end
|
29
|
+
|
30
|
+
# Build AudioPlayer.ClearQueue directive
|
31
|
+
#
|
32
|
+
# @param behavior [Symbol] clearing behavior
|
33
|
+
# @return [Hash] AudioPlayer.ClearQueue directive
|
34
|
+
def clear_queue(behavior = :clear_all)
|
35
|
+
clear_behavior =
|
36
|
+
case behavior
|
37
|
+
when :clear_all
|
38
|
+
'CLEAR_ALL'
|
39
|
+
when :clear_queue
|
40
|
+
'CLEAR_ENQUEUED'
|
41
|
+
else
|
42
|
+
'CLEAR_ALL'
|
43
|
+
end
|
44
|
+
{ type: 'AudioPlayer.ClearQueue', clearBehavior: clear_behavior }
|
28
45
|
end
|
29
46
|
|
30
47
|
private
|
31
48
|
|
32
|
-
#
|
49
|
+
# Define playback behavior
|
50
|
+
#
|
51
|
+
# @param behavior [Symbol] playback behavior
|
52
|
+
# @return [String] Amazon behavior type
|
53
|
+
def playback_behavior(behavior)
|
54
|
+
case behavior
|
55
|
+
when :replace_all
|
56
|
+
'REPLACE_ALL'
|
57
|
+
when :enqueue
|
58
|
+
'ENQUEUE'
|
59
|
+
when :replace_enqueued
|
60
|
+
'REPLACE_ENQUEUED'
|
61
|
+
else
|
62
|
+
'REPLACE_ALL'
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
# Build play directive
|
33
67
|
#
|
34
|
-
# @
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
directive[:audioItem][:stream][:offsetInMilliseconds] = offset
|
68
|
+
# @return [Hash] ready to use AudioPlayer.Play directive
|
69
|
+
def play_directive
|
70
|
+
directive = { type: 'AudioPlayer.Play' }
|
71
|
+
directive[:playBehavior] = playback_behavior(@opts[:play_behavior])
|
72
|
+
directive[:audioItem] = { stream: { url: @opts[:url] } }
|
73
|
+
stream = directive[:audioItem][:stream]
|
74
|
+
stream[:token] = token(@opts[:token])
|
75
|
+
stream[:offsetInMilliseconds] = @opts[:offset] || 0
|
76
|
+
if @opts[:behavior] == :enqueue
|
77
|
+
stream[:expectedPreviousToken] = @opts[:previous_token]
|
78
|
+
end
|
46
79
|
directive
|
47
80
|
end
|
48
81
|
|
@@ -22,12 +22,7 @@ module AlexaRuby
|
|
22
22
|
# @raise [ArgumentError] if session key is already added and
|
23
23
|
# rewrite is set to false
|
24
24
|
def add_session_attribute(key, value, rewrite = false)
|
25
|
-
|
26
|
-
if @resp[:sessionAttributes].key?(key)
|
27
|
-
raise ArgumentError, 'Duplicate session attributes not allowed'
|
28
|
-
end
|
29
|
-
end
|
30
|
-
@resp[:sessionAttributes][key] = value
|
25
|
+
session_attribute(key, value, rewrite)
|
31
26
|
end
|
32
27
|
|
33
28
|
# Add pack of session attributes and overwrite all existing ones
|
@@ -75,14 +70,16 @@ module AlexaRuby
|
|
75
70
|
# url [String] streaming URL
|
76
71
|
# token [String] streaming service token
|
77
72
|
# offset [Integer] playback offset
|
73
|
+
# replace_all [Boolean] true if stream must replace all previous
|
78
74
|
def add_audio_player_directive(directive, params = {})
|
79
|
-
player = AudioPlayer.new
|
80
75
|
@resp[:response][:directives] = [
|
81
76
|
case directive.to_sym
|
82
77
|
when :start
|
83
|
-
|
78
|
+
AudioPlayer.new.play(params)
|
84
79
|
when :stop
|
85
|
-
|
80
|
+
AudioPlayer.new.stop
|
81
|
+
when :clear
|
82
|
+
AudioPlayer.new.clear_queue(params[:clear_behavior])
|
86
83
|
end
|
87
84
|
]
|
88
85
|
end
|
@@ -153,18 +150,34 @@ module AlexaRuby
|
|
153
150
|
|
154
151
|
private
|
155
152
|
|
153
|
+
# Add one session attribute
|
154
|
+
#
|
155
|
+
# @param key [String] atrribute key
|
156
|
+
# @param value [String] attribute value
|
157
|
+
# @param rewrite [Boolean] rewrite if key already exists?
|
158
|
+
# @raise [ArgumentError] if session key is already added and
|
159
|
+
# rewrite is set to false
|
160
|
+
def session_attribute(key, value, rewrite = false)
|
161
|
+
unless rewrite
|
162
|
+
if @resp[:sessionAttributes].key?(key)
|
163
|
+
raise ArgumentError, 'Duplicate session attributes not allowed'
|
164
|
+
end
|
165
|
+
end
|
166
|
+
@resp[:sessionAttributes][key] = value
|
167
|
+
end
|
168
|
+
|
156
169
|
# Add pack of session attributes.
|
157
170
|
# By default all existing session attributes would be overwritten
|
158
171
|
#
|
159
172
|
# @param attributes [Hash] pack of session attributes
|
160
173
|
# @param merge [Boolean] merge attributes with existing ones?
|
161
174
|
def session_attributes(attributes, merge)
|
162
|
-
|
163
|
-
|
164
|
-
else
|
175
|
+
rewrite = true
|
176
|
+
unless merge
|
165
177
|
@resp[:sessionAttributes] = {}
|
166
|
-
|
178
|
+
rewrite = false
|
167
179
|
end
|
180
|
+
attributes.each { |k, v| session_attribute(k, v, rewrite) }
|
168
181
|
end
|
169
182
|
|
170
183
|
# Build speech object
|
@@ -173,13 +186,8 @@ module AlexaRuby
|
|
173
186
|
# @param ssml [Boolean] is it an SSML speech or not
|
174
187
|
# @return [Hash] speech object
|
175
188
|
def build_speech(speech, ssml)
|
176
|
-
obj = {}
|
177
|
-
obj[:
|
178
|
-
if ssml
|
179
|
-
obj[:ssml] = fix_ssml(speech)
|
180
|
-
else
|
181
|
-
obj[:text] = speech
|
182
|
-
end
|
189
|
+
obj = { type: ssml ? 'SSML' : 'PlainText' }
|
190
|
+
ssml ? obj[:ssml] = fix_ssml(speech) : obj[:text] = speech
|
183
191
|
obj
|
184
192
|
end
|
185
193
|
|
data/lib/alexa_ruby/version.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alexa_ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Mike Mulev
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2017-
|
11
|
+
date: 2017-07-10 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -99,6 +99,7 @@ executables: []
|
|
99
99
|
extensions: []
|
100
100
|
extra_rdoc_files: []
|
101
101
|
files:
|
102
|
+
- CHANGELOG
|
102
103
|
- Gemfile
|
103
104
|
- Gemfile.lock
|
104
105
|
- LICENSE
|
@@ -141,7 +142,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
141
142
|
version: '0'
|
142
143
|
requirements: []
|
143
144
|
rubyforge_project:
|
144
|
-
rubygems_version: 2.
|
145
|
+
rubygems_version: 2.2.2
|
145
146
|
signing_key:
|
146
147
|
specification_version: 4
|
147
148
|
summary: Ruby toolkit for Amazon Alexa API
|