From f11925755f4c27eb12c519cedacdd6b54fde5d48 Mon Sep 17 00:00:00 2001 From: Mike Mulev Date: Wed, 25 Oct 2017 20:57:00 +0300 Subject: [PATCH 1/3] temporarily disable build for ruby 2.2.0 --- .travis.yml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/.travis.yml b/.travis.yml index 9673b68..c0217c1 100644 --- a/.travis.yml +++ b/.travis.yml @@ -1,7 +1,7 @@ language: ruby rvm: - 2.1.0 -- 2.2.0 +# - 2.2.0 # build fails for unknown reason - 2.3.4 - 2.4.2 script: rake test From 97af68c8b1ff50a850c7a950a99475a52290ed27 Mon Sep 17 00:00:00 2001 From: Mike Mulev Date: Wed, 25 Oct 2017 20:58:28 +0300 Subject: [PATCH 2/3] handle audio player state info from context section --- CHANGELOG | 3 +++ lib/alexa_ruby.rb | 1 + lib/alexa_ruby/request/base_request/context.rb | 11 ++++++++++- .../request/base_request/context/audio_state.rb | 15 +++++++++++++++ lib/alexa_ruby/version.rb | 2 +- spec/request/context_spec.rb | 3 +++ 6 files changed, 33 insertions(+), 2 deletions(-) create mode 100644 lib/alexa_ruby/request/base_request/context/audio_state.rb diff --git a/CHANGELOG b/CHANGELOG index 8555544..905e997 100644 --- a/CHANGELOG +++ b/CHANGELOG @@ -1,3 +1,6 @@ +[1.5.0] +- Handle AudioPlayer state info in context section within request + [1.4.5] - Handle different Playback requests - Validate signature for all except AudioPlayer diff --git a/lib/alexa_ruby.rb b/lib/alexa_ruby.rb index 53a1a83..b31d8f4 100644 --- a/lib/alexa_ruby.rb +++ b/lib/alexa_ruby.rb @@ -7,6 +7,7 @@ require 'alexa_ruby/alexa' require 'alexa_ruby/request/base_request' require 'alexa_ruby/request/base_request/context' +require 'alexa_ruby/request/base_request/context/audio_state' require 'alexa_ruby/request/base_request/context/device' require 'alexa_ruby/request/base_request/session' require 'alexa_ruby/request/base_request/validator' diff --git a/lib/alexa_ruby/request/base_request/context.rb b/lib/alexa_ruby/request/base_request/context.rb index afb9622..0769176 100644 --- a/lib/alexa_ruby/request/base_request/context.rb +++ b/lib/alexa_ruby/request/base_request/context.rb @@ -1,7 +1,7 @@ module AlexaRuby # Amazon Alexa request context - application, user and device info class Context - attr_reader :app_id, :user, :device, :api_endpoint + attr_reader :app_id, :user, :device, :api_endpoint, :audio_state # Initialize new Context object # @@ -14,6 +14,7 @@ def initialize(context) @user = load_user(context[:System][:user]) @device = load_device(context[:System][:device]) @api_endpoint = context[:System][:apiEndpoint] + @audio_state = load_audio_state(context[:AudioPlayer]) end private @@ -41,5 +42,13 @@ def load_user(params) def load_device(params) Device.new(params) end + + # Initialize audio player state + # + # @param params [Hash] audio player parameters + # @return [Object] new AudioState object instance + def load_audio_state(params) + AudioState.new(params) unless params.nil? + end end end diff --git a/lib/alexa_ruby/request/base_request/context/audio_state.rb b/lib/alexa_ruby/request/base_request/context/audio_state.rb new file mode 100644 index 0000000..5196744 --- /dev/null +++ b/lib/alexa_ruby/request/base_request/context/audio_state.rb @@ -0,0 +1,15 @@ +module AlexaRuby + # Audio state from context section in request + class AudioState + attr_reader :token, :playback_offset, :playback_state + + # Setup new AudioState object + # + # @param audio_state [Hash] audio player state + def initialize(audio_state) + @token = audio_state[:token] + @playback_offset = audio_state[:offsetInMilliseconds] + @playback_state = audio_state[:playerActivity] + end + end +end diff --git a/lib/alexa_ruby/version.rb b/lib/alexa_ruby/version.rb index b4b3c09..3c792dc 100644 --- a/lib/alexa_ruby/version.rb +++ b/lib/alexa_ruby/version.rb @@ -1,3 +1,3 @@ module AlexaRuby - VERSION = '1.4.5'.freeze + VERSION = '1.5.0'.freeze end diff --git a/spec/request/context_spec.rb b/spec/request/context_spec.rb index b5a68c0..16f4d50 100644 --- a/spec/request/context_spec.rb +++ b/spec/request/context_spec.rb @@ -18,6 +18,9 @@ alexa.request.context.user.id.wont_be_nil alexa.request.context.device.wont_be_nil alexa.request.context.device.id.wont_be_nil + alexa.request.context.audio_state.token.must_be_nil + alexa.request.context.audio_state.playback_offset.wont_be_nil + alexa.request.context.audio_state.playback_state.wont_be_nil end it 'should raise ArgumentError if application ID is missing' do From 55db76480f7cd283fa3fa12d7d2c536ac5a1c4f9 Mon Sep 17 00:00:00 2001 From: Mike Mulev Date: Wed, 25 Oct 2017 21:02:37 +0300 Subject: [PATCH 3/3] +1 spec --- spec/request/context_spec.rb | 7 +++++++ 1 file changed, 7 insertions(+) diff --git a/spec/request/context_spec.rb b/spec/request/context_spec.rb index 16f4d50..5ac3172 100644 --- a/spec/request/context_spec.rb +++ b/spec/request/context_spec.rb @@ -43,6 +43,13 @@ err = proc { AlexaRuby.new(req) }.must_raise ArgumentError err.message.must_equal 'Missing device ID' end + + it 'should remain valid if audio player section is missing' do + req = Oj.load(@json, symbol_keys: true) + req[:context][:AudioPlayer] = nil + alexa = AlexaRuby.new(req) + alexa.request.context.audio_state.must_be_nil + end end end end