class AlexaRuby::Alexa

Main processing class, parses request from Amazon Alexa and initialize new response object

Attributes

request[R]
response[R]

Public Class Methods

new(request, opts) click to toggle source

Initialize new Alexa assistant

@param request [Hash] request from Amazon Alexa web service @param opts [Hash] additional options:

:disable_validations [Boolean] disables request validation if true
# File lib/alexa_ruby/alexa.rb, line 12
def initialize(request, opts)
  @req = request
  @opts = opts
  invalid_request_exception if invalid_request?
  @request = define_request
  raise ArgumentError, 'Unknown type of Alexa request' if @request.nil?
  @request.valid? if ssl_check?
  @response = Response.new(@request.type, @request.version)
end

Private Instance Methods

define_request() click to toggle source

Initialize proper request object

@return [Object] request object

# File lib/alexa_ruby/alexa.rb, line 50
def define_request
  case @req[:request][:type]
  when /Launch/
    LaunchRequest.new(@req)
  when /Intent/
    IntentRequest.new(@req)
  when /SessionEnded/
    SessionEndedRequest.new(@req)
  when /AudioPlayer/, /Playback/, /System/
    AudioPlayerRequest.new(@req)
  end
end
invalid_request?() click to toggle source

Check if it is an invalid request

@return [Boolean]

# File lib/alexa_ruby/alexa.rb, line 36
def invalid_request?
  @req[:version].nil? || @req[:request].nil? if validations_enabled?
end
invalid_request_exception() click to toggle source

Request structure isn't valid, raise exception

# File lib/alexa_ruby/alexa.rb, line 25
def invalid_request_exception
  raise ArgumentError,
        'Invalid request structure, ' \
        'please, refer to the Amazon Alexa manual: ' \
        'https://developer.amazon.com/public/solutions' \
        '/alexa/alexa-skills-kit/docs/alexa-skills-kit-interface-reference'
end
ssl_check?() click to toggle source

Check if we have SSL certificates URL and request signature and need to validate Amazon request

@return [Boolean]

# File lib/alexa_ruby/alexa.rb, line 67
def ssl_check?
  @request.certificates_chain_url = @opts[:certificates_chain_url]
  @request.signature = @opts[:request_signature]
  @request.certificates_chain_url && @request.signature &&
    @request.type != :audio_player
end
validations_enabled?() click to toggle source

Check if validations are enabled

@return [Boolean]

# File lib/alexa_ruby/alexa.rb, line 43
def validations_enabled?
  !@opts[:disable_validations] || @opts[:disable_validations].nil?
end