Skip to content

Commit

Permalink
Merge pull request #16 from mulev/develop
Browse files Browse the repository at this point in the history
Develop
  • Loading branch information
mulev committed Oct 25, 2017
2 parents 63f6047 + 8401df1 commit fe03505
Show file tree
Hide file tree
Showing 7 changed files with 41 additions and 3 deletions.
2 changes: 1 addition & 1 deletion .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
Expand Down
3 changes: 3 additions & 0 deletions 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
Expand Down
1 change: 1 addition & 0 deletions lib/alexa_ruby.rb
Expand Up @@ -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'
Expand Down
11 changes: 10 additions & 1 deletion 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
#
Expand All @@ -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
Expand Down Expand Up @@ -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
15 changes: 15 additions & 0 deletions 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
2 changes: 1 addition & 1 deletion lib/alexa_ruby/version.rb
@@ -1,3 +1,3 @@
module AlexaRuby
VERSION = '1.4.5'.freeze
VERSION = '1.5.0'.freeze
end
10 changes: 10 additions & 0 deletions spec/request/context_spec.rb
Expand Up @@ -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
Expand All @@ -40,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

0 comments on commit fe03505

Please sign in to comment.