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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: c64a178ea35c5280218a441dcc9993679965990c
4
- data.tar.gz: aaf9815ad8f4fcd99e9a9f623aeb973eb9ffdbdd
3
+ metadata.gz: dd7bd13bd046d4f22c745be4e01c7bafe6970e72
4
+ data.tar.gz: 125194d8fff5eae293104ab729ca1a8f014a9a59
5
5
  SHA512:
6
- metadata.gz: ff171ca1e709b0fde16930e42a9e49f08b5d788eda174de7ea727356b5e82d0a958646d6dbb825b2bf8fb3c33694ecb10d4e9dcc423b06ad1b6a0c040660f928
7
- data.tar.gz: fadf34ec57b1d7aaf6a4b0c9ce9f2cec734a02769c49378e3f58fd2bd00d41a716e8991ca657d7d99092552d81680a0ee10d12b6d6f4c8e31dbfb9f77779f2ba
6
+ metadata.gz: acb690cb6c31f1ce5a721f122fbedad6f513cb3e4f326a23b3882881d623fce35e1f1fc2f360d22306937fe02437b8a1d7ce2179362476cf2b51cd20ec4ecacb
7
+ data.tar.gz: ad3c6b4b4cb8bd191e55354b51c26e983d6c60601a57d5af705776b2a85b435a0247d72582a4ab5948593bf041fec649a44008508b0785b294b5e7c2fb9170d2
data/CHANGELOG ADDED
@@ -0,0 +1,4 @@
1
+ [1.2.0]
2
+ - Add support of ENQUEUE type in AudioPlayer directive
3
+ - Add support of AudioPlayer.ClearQueue directive
4
+ - Minor refactoring
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- alexa_ruby (1.0.4)
4
+ alexa_ruby (1.2.0)
5
5
  bundler (>= 1.6.9)
6
6
  oj (~> 3.0)
7
7
  rake
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 - AudioPlayer.Play and AudioPlayer.Stop.
176
- To start playback call:
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 play_directive(params)
13
- url = params[:url]
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
- token = token(params[:token])
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 stop_directive
27
- build_directive('AudioPlayer.Stop')
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
- # Set play directive parameters
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
- # @param type [String] directive type, can be Play or Stop
35
- # @param url [String] streaming service URL
36
- # @param token [String] streaming service token
37
- # @param offset [Integer] playback offset
38
- def build_directive(type, url = nil, token = nil, offset = nil)
39
- directive = { type: type }
40
- return directive if type == 'AudioPlayer.Stop'
41
- directive[:playBehavior] = 'REPLACE_ALL'
42
- directive[:audioItem] = { stream: {} }
43
- directive[:audioItem][:stream][:url] = url
44
- directive[:audioItem][:stream][:token] = token
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
- unless rewrite
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
- player.play_directive(params)
78
+ AudioPlayer.new.play(params)
84
79
  when :stop
85
- player.stop_directive
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
- if merge
163
- attributes.each { |k, v| add_session_attribute(k, v, true) }
164
- else
175
+ rewrite = true
176
+ unless merge
165
177
  @resp[:sessionAttributes] = {}
166
- attributes.each { |k, v| add_session_attribute(k, v, false) }
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[:type] = ssml ? 'SSML' : 'PlainText'
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
 
@@ -1,3 +1,3 @@
1
1
  module AlexaRuby
2
- VERSION = '1.1.1'.freeze
2
+ VERSION = '1.2.0'.freeze
3
3
  end
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.1.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-06-16 00:00:00.000000000 Z
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.6.12
145
+ rubygems_version: 2.2.2
145
146
  signing_key:
146
147
  specification_version: 4
147
148
  summary: Ruby toolkit for Amazon Alexa API