ralyxa-lambda 1.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +3 -0
- data/.rspec +3 -0
- data/.rubocop.yml +16 -0
- data/.ruby-version +1 -0
- data/.tool-versions +1 -0
- data/.travis.yml +12 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/CONTRIBUTING.md +19 -0
- data/Gemfile +3 -0
- data/LICENSE.txt +21 -0
- data/README.md +294 -0
- data/Rakefile +6 -0
- data/bin/console +14 -0
- data/bin/setup +8 -0
- data/lib/ralyxa.rb +36 -0
- data/lib/ralyxa/configuration.rb +18 -0
- data/lib/ralyxa/errors.rb +4 -0
- data/lib/ralyxa/handler.rb +47 -0
- data/lib/ralyxa/register_intents.rb +45 -0
- data/lib/ralyxa/request_entities/request.rb +63 -0
- data/lib/ralyxa/request_entities/user.rb +25 -0
- data/lib/ralyxa/response_builder.rb +65 -0
- data/lib/ralyxa/response_entities/card.rb +89 -0
- data/lib/ralyxa/response_entities/directives.rb +9 -0
- data/lib/ralyxa/response_entities/directives/audio.rb +11 -0
- data/lib/ralyxa/response_entities/directives/audio/audio_item.rb +23 -0
- data/lib/ralyxa/response_entities/directives/audio/stream.rb +37 -0
- data/lib/ralyxa/response_entities/directives/audio_player.rb +46 -0
- data/lib/ralyxa/response_entities/directives/audio_player/clear_queue.rb +27 -0
- data/lib/ralyxa/response_entities/directives/audio_player/play.rb +32 -0
- data/lib/ralyxa/response_entities/directives/audio_player/stop.rb +19 -0
- data/lib/ralyxa/response_entities/output_speech.rb +35 -0
- data/lib/ralyxa/response_entities/reprompt.rb +20 -0
- data/lib/ralyxa/response_entities/response.rb +54 -0
- data/lib/ralyxa/skill.rb +53 -0
- data/lib/ralyxa/version.rb +3 -0
- data/pkg/ralyxa-1.0.0.gem +0 -0
- data/ralyxa.gemspec +32 -0
- metadata +195 -0
@@ -0,0 +1,23 @@
|
|
1
|
+
module Ralyxa
|
2
|
+
module ResponseEntities
|
3
|
+
module Directives
|
4
|
+
module Audio
|
5
|
+
class AudioItem
|
6
|
+
def initialize(stream)
|
7
|
+
@stream = stream
|
8
|
+
end
|
9
|
+
|
10
|
+
def to_h
|
11
|
+
{}.tap do |audio_item|
|
12
|
+
audio_item['stream'] = @stream.to_h
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def self.as_hash(stream)
|
17
|
+
new(stream).to_h
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,37 @@
|
|
1
|
+
module Ralyxa
|
2
|
+
module ResponseEntities
|
3
|
+
module Directives
|
4
|
+
module Audio
|
5
|
+
class Stream
|
6
|
+
def initialize(url, token, offset_in_milliseconds = 0, expected_previous_token = nil)
|
7
|
+
raise Ralyxa::UnsecureUrlError, "Audio streams must be served from at an SSL-enabled (HTTPS) endpoint. Your current stream url is: #{url}" unless secure?(url)
|
8
|
+
|
9
|
+
@url = url
|
10
|
+
@token = token
|
11
|
+
@offset_in_milliseconds = offset_in_milliseconds
|
12
|
+
@expected_previous_token = expected_previous_token
|
13
|
+
end
|
14
|
+
|
15
|
+
def to_h
|
16
|
+
{}.tap do |stream|
|
17
|
+
stream['url'] = @url
|
18
|
+
stream['token'] = @token
|
19
|
+
stream['offsetInMilliseconds'] = @offset_in_milliseconds
|
20
|
+
stream['expectedPreviousToken'] = @expected_previous_token if @expected_previous_token
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def self.as_hash(url, token, offset_in_milliseconds = 0, expected_previous_token = nil)
|
25
|
+
new(url, token, offset_in_milliseconds, expected_previous_token).to_h
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
def secure?(url)
|
31
|
+
URI.parse(url).scheme == 'https' || !Ralyxa.require_secure_urls?
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
require_relative './audio_player/clear_queue'
|
2
|
+
require_relative './audio_player/play'
|
3
|
+
require_relative './audio_player/stop'
|
4
|
+
|
5
|
+
module Ralyxa
|
6
|
+
module ResponseEntities
|
7
|
+
module Directives
|
8
|
+
class AudioPlayer
|
9
|
+
class << self
|
10
|
+
def play(url, token, speech: nil, card: nil, offset_in_milliseconds: 0, expected_previous_token: nil, behaviour: Ralyxa::ResponseEntities::Directives::AudioPlayer::Play::REPLACE_ALL, audio_player_class: Ralyxa::ResponseEntities::Directives::AudioPlayer::Play, response_builder: Ralyxa::ResponseBuilder)
|
11
|
+
directive = audio_player_class.as_hash(Ralyxa::ResponseEntities::Directives::Audio::Stream.new(url, token, offset_in_milliseconds, expected_previous_token), behaviour)
|
12
|
+
|
13
|
+
response_builder.build(build_options(directive, speech, card))
|
14
|
+
end
|
15
|
+
|
16
|
+
def play_later(url, token, speech: nil, card: nil, offset_in_milliseconds: 0, expected_previous_token: nil, behaviour: Ralyxa::ResponseEntities::Directives::AudioPlayer::Play::REPLACE_ENQUEUED, audio_player_class: Ralyxa::ResponseEntities::Directives::AudioPlayer::Play, response_builder: Ralyxa::ResponseBuilder)
|
17
|
+
play(url, token, speech: speech, card: card, offset_in_milliseconds: offset_in_milliseconds, expected_previous_token: expected_previous_token, behaviour: behaviour, audio_player_class: audio_player_class, response_builder: response_builder)
|
18
|
+
end
|
19
|
+
|
20
|
+
def stop(speech: nil, card: nil, audio_player_class: Ralyxa::ResponseEntities::Directives::AudioPlayer::Stop, response_builder: Ralyxa::ResponseBuilder)
|
21
|
+
directive = audio_player_class.as_hash
|
22
|
+
|
23
|
+
response_builder.build(build_options(directive, speech, card))
|
24
|
+
end
|
25
|
+
|
26
|
+
def clear_queue(speech: nil, card: nil, behaviour: Ralyxa::ResponseEntities::Directives::AudioPlayer::ClearQueue::CLEAR_ALL, audio_player_class: Ralyxa::ResponseEntities::Directives::AudioPlayer::ClearQueue, response_builder: Ralyxa::ResponseBuilder)
|
27
|
+
directive = audio_player_class.as_hash(behaviour)
|
28
|
+
|
29
|
+
response_builder.build(build_options(directive, speech, card))
|
30
|
+
end
|
31
|
+
|
32
|
+
private
|
33
|
+
|
34
|
+
def build_options(directive, speech, card)
|
35
|
+
{}.tap do |option|
|
36
|
+
option[:directives] = [directive]
|
37
|
+
option[:end_session] = false
|
38
|
+
option[:response_text] = speech if speech
|
39
|
+
option[:card] = card if card
|
40
|
+
end
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
@@ -0,0 +1,27 @@
|
|
1
|
+
module Ralyxa
|
2
|
+
module ResponseEntities
|
3
|
+
module Directives
|
4
|
+
class AudioPlayer
|
5
|
+
class ClearQueue
|
6
|
+
CLEAR_ENQUEUED = 'CLEAR_ENQUEUED'.freeze
|
7
|
+
CLEAR_ALL = 'CLEAR_ALL'.freeze
|
8
|
+
|
9
|
+
def initialize(behaviour = Ralyxa::ResponseEntities::Directives::AudioPlayer::ClearQueue::CLEAR_ENQUEUED)
|
10
|
+
@behaviour = behaviour
|
11
|
+
end
|
12
|
+
|
13
|
+
def to_h
|
14
|
+
{}.tap do |audio_player|
|
15
|
+
audio_player['type'] = 'AudioPlayer.ClearQueue'
|
16
|
+
audio_player['clearBehavior'] = @behaviour
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def self.as_hash(behaviour = Ralyxa::ResponseEntities::Directives::AudioPlayer::ClearQueue::CLEAR_ENQUEUED)
|
21
|
+
new(behaviour).to_h
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
module Ralyxa
|
2
|
+
module ResponseEntities
|
3
|
+
module Directives
|
4
|
+
class AudioPlayer
|
5
|
+
class Play
|
6
|
+
CLEAR_ENQUEUE = 'CLEAR_ENQUEUE'.freeze
|
7
|
+
ENQUEUE = 'ENQUEUE'.freeze
|
8
|
+
REPLACE_ALL = 'REPLACE_ALL'.freeze
|
9
|
+
REPLACE_ENQUEUED = 'REPLACE_ENQUEUED'.freeze
|
10
|
+
|
11
|
+
def initialize(stream, behaviour = Ralyxa::ResponseEntities::Directives::AudioPlayer::Play::REPLACE_ALL)
|
12
|
+
@stream = stream
|
13
|
+
@behaviour = behaviour
|
14
|
+
end
|
15
|
+
|
16
|
+
def to_h
|
17
|
+
{}.tap do |audio_player|
|
18
|
+
audio_player['type'] = 'AudioPlayer.Play'
|
19
|
+
audio_player['playBehavior'] = @behaviour
|
20
|
+
|
21
|
+
audio_player['audioItem'] = Ralyxa::ResponseEntities::Directives::Audio::AudioItem.new(@stream).to_h
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.as_hash(stream, behaviour = nil)
|
26
|
+
new(stream, behaviour).to_h
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module Ralyxa
|
2
|
+
module ResponseEntities
|
3
|
+
module Directives
|
4
|
+
class AudioPlayer
|
5
|
+
class Stop
|
6
|
+
def to_h
|
7
|
+
{}.tap do |audio_player|
|
8
|
+
audio_player['type'] = 'AudioPlayer.Stop'
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def self.as_hash
|
13
|
+
new.to_h
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,35 @@
|
|
1
|
+
module Ralyxa
|
2
|
+
module ResponseEntities
|
3
|
+
class OutputSpeech
|
4
|
+
DEFAULT_RESPONSE_TEXT = 'Hello World'.freeze
|
5
|
+
DEFAULT_RESPONSE_SSML = '<speak>Hello World</speak>'.freeze
|
6
|
+
|
7
|
+
def initialize(speech, ssml)
|
8
|
+
@speech = speech
|
9
|
+
@ssml = ssml
|
10
|
+
end
|
11
|
+
|
12
|
+
def to_h
|
13
|
+
{}.tap do |output_speech|
|
14
|
+
@ssml ? add_ssml(output_speech) : add_plaintext(output_speech)
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def self.as_hash(speech: nil, ssml: false)
|
19
|
+
new(speech, ssml).to_h
|
20
|
+
end
|
21
|
+
|
22
|
+
private
|
23
|
+
|
24
|
+
def add_ssml(output_speech)
|
25
|
+
output_speech[:type] = 'SSML'
|
26
|
+
output_speech[:ssml] = (@speech || DEFAULT_RESPONSE_SSML)
|
27
|
+
end
|
28
|
+
|
29
|
+
def add_plaintext(output_speech)
|
30
|
+
output_speech[:type] = 'PlainText'
|
31
|
+
output_speech[:text] = (@speech || DEFAULT_RESPONSE_TEXT)
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
module Ralyxa
|
2
|
+
module ResponseEntities
|
3
|
+
class Reprompt
|
4
|
+
def initialize(reprompt_speech, reprompt_ssml)
|
5
|
+
@reprompt_speech = reprompt_speech
|
6
|
+
@reprompt_ssml = reprompt_ssml
|
7
|
+
end
|
8
|
+
|
9
|
+
def to_h
|
10
|
+
{}.tap do |reprompt|
|
11
|
+
reprompt[:outputSpeech] = Ralyxa::ResponseEntities::OutputSpeech.as_hash(speech: @reprompt_speech, ssml: @reprompt_ssml)
|
12
|
+
end
|
13
|
+
end
|
14
|
+
|
15
|
+
def self.as_hash(reprompt_speech: nil, reprompt_ssml: false)
|
16
|
+
new(reprompt_speech, reprompt_ssml).to_h
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,54 @@
|
|
1
|
+
require_relative './output_speech'
|
2
|
+
require_relative './reprompt'
|
3
|
+
require_relative './directives'
|
4
|
+
|
5
|
+
module Ralyxa
|
6
|
+
module ResponseEntities
|
7
|
+
class Response
|
8
|
+
def initialize(output_speech, reprompt, session_attributes, end_session, start_over, card, directives)
|
9
|
+
@output_speech = output_speech
|
10
|
+
@reprompt = reprompt
|
11
|
+
@session_attributes = session_attributes
|
12
|
+
@end_session = end_session
|
13
|
+
@start_over = start_over
|
14
|
+
@card = card
|
15
|
+
@directives = directives
|
16
|
+
end
|
17
|
+
|
18
|
+
def to_h
|
19
|
+
{}.tap do |response|
|
20
|
+
add_version(response)
|
21
|
+
add_session_attributes(response)
|
22
|
+
add_response(response)
|
23
|
+
end
|
24
|
+
end
|
25
|
+
|
26
|
+
def self.as_hash(output_speech: false, reprompt: false, session_attributes: {}, end_session: false, start_over: false, card: false, directives: false)
|
27
|
+
new(output_speech, reprompt, session_attributes, end_session, start_over, card, directives).to_h
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
attr_reader :response
|
33
|
+
|
34
|
+
def add_version(response)
|
35
|
+
response[:version] = '1.0'
|
36
|
+
end
|
37
|
+
|
38
|
+
def add_session_attributes(response)
|
39
|
+
return response[:sessionAttributes] = {} if @start_over
|
40
|
+
response[:sessionAttributes] = @session_attributes unless @session_attributes.empty?
|
41
|
+
end
|
42
|
+
|
43
|
+
def add_response(response)
|
44
|
+
response[:response] = {}.tap do |response_object|
|
45
|
+
response_object[:outputSpeech] = @output_speech if @output_speech
|
46
|
+
response_object[:reprompt] = @reprompt if @reprompt
|
47
|
+
response_object[:card] = @card if @card
|
48
|
+
response_object[:directives] = @directives if @directives
|
49
|
+
response_object[:shouldEndSession] = @end_session
|
50
|
+
end
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
54
|
+
end
|
data/lib/ralyxa/skill.rb
ADDED
@@ -0,0 +1,53 @@
|
|
1
|
+
require_relative './request_entities/request'
|
2
|
+
require_relative './handler'
|
3
|
+
|
4
|
+
# Routes an incoming request to the correct Handler.
|
5
|
+
module Ralyxa
|
6
|
+
class Skill
|
7
|
+
@handlers = {}
|
8
|
+
|
9
|
+
def initialize(request)
|
10
|
+
@request = request
|
11
|
+
end
|
12
|
+
|
13
|
+
def handle
|
14
|
+
handler = self.class.handlers[@request.intent_name]
|
15
|
+
handler ? handler.new(@request).handle : warn(handler_not_found)
|
16
|
+
end
|
17
|
+
|
18
|
+
class << self
|
19
|
+
def intent(intent_name, handler_base_class = Ralyxa::Handler, &intent_block)
|
20
|
+
intent_handler = Class.new(handler_base_class)
|
21
|
+
intent_handler.send(:define_method, :handle, &intent_block)
|
22
|
+
@handlers[intent_name] = intent_handler
|
23
|
+
end
|
24
|
+
|
25
|
+
def handle(request, alexa_request_wrapper = Ralyxa::RequestEntities::Request)
|
26
|
+
new(alexa_request_wrapper.new(request)).handle
|
27
|
+
end
|
28
|
+
|
29
|
+
def handlers
|
30
|
+
@handlers.dup
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
private
|
35
|
+
|
36
|
+
def handler_not_found
|
37
|
+
<<~HEREDOC
|
38
|
+
\e[33m
|
39
|
+
WARNING: An intent declaration for intent "#{@request.intent_name}" was not found.
|
40
|
+
|
41
|
+
To define it, add an intent declaration inside a directory called 'intents',
|
42
|
+
on the same directory level as the runfile for your server application.
|
43
|
+
|
44
|
+
You probably want something like:
|
45
|
+
|
46
|
+
intent "#{@request.intent_name}" do
|
47
|
+
respond("Hello World!")
|
48
|
+
end
|
49
|
+
\e[0m
|
50
|
+
HEREDOC
|
51
|
+
end
|
52
|
+
end
|
53
|
+
end
|
Binary file
|
data/ralyxa.gemspec
ADDED
@@ -0,0 +1,32 @@
|
|
1
|
+
lib = File.expand_path('../lib', __FILE__)
|
2
|
+
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
3
|
+
require 'ralyxa/version'
|
4
|
+
|
5
|
+
Gem::Specification.new do |spec|
|
6
|
+
spec.name = 'ralyxa-lambda'
|
7
|
+
spec.version = Ralyxa::VERSION
|
8
|
+
spec.authors = ['Sam Morgan']
|
9
|
+
spec.email = ['samm@makersacademy.com']
|
10
|
+
|
11
|
+
spec.summary = 'A Ruby framework for interacting with Amazon Alexa and lambda support'
|
12
|
+
spec.description = 'A Ruby framework for interacting with Amazon Alexa. Designed to work with Sinatra, although can be used with a few other web frameworks.'
|
13
|
+
spec.homepage = 'https://github.com/sjmog/ralyxa'
|
14
|
+
spec.license = 'MIT'
|
15
|
+
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
16
|
+
f.match(%r{^(test|spec|features)/})
|
17
|
+
end
|
18
|
+
spec.bindir = 'exe'
|
19
|
+
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
20
|
+
spec.require_paths = ['lib']
|
21
|
+
spec.required_ruby_version = '>= 2.3.1'
|
22
|
+
|
23
|
+
spec.add_dependency 'alexa_verifier', '~> 1.0'
|
24
|
+
|
25
|
+
spec.add_development_dependency 'bundler', '~> 1.14'
|
26
|
+
spec.add_development_dependency 'rake', '~> 10.0'
|
27
|
+
spec.add_development_dependency 'rspec', '~> 3.0'
|
28
|
+
spec.add_development_dependency 'timecop', '~> 0.9'
|
29
|
+
spec.add_development_dependency 'vcr', '~> 3.0'
|
30
|
+
spec.add_development_dependency 'webmock', '~> 3.0'
|
31
|
+
spec.add_development_dependency 'simplecov', '~> 0.15'
|
32
|
+
end
|
metadata
ADDED
@@ -0,0 +1,195 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: ralyxa-lambda
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.8.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Sam Morgan
|
8
|
+
autorequire:
|
9
|
+
bindir: exe
|
10
|
+
cert_chain: []
|
11
|
+
date: 2019-01-26 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: alexa_verifier
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - "~>"
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '1.0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '1.0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: bundler
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - "~>"
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '1.14'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - "~>"
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '1.14'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - "~>"
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '10.0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - "~>"
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '10.0'
|
55
|
+
- !ruby/object:Gem::Dependency
|
56
|
+
name: rspec
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - "~>"
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: '3.0'
|
62
|
+
type: :development
|
63
|
+
prerelease: false
|
64
|
+
version_requirements: !ruby/object:Gem::Requirement
|
65
|
+
requirements:
|
66
|
+
- - "~>"
|
67
|
+
- !ruby/object:Gem::Version
|
68
|
+
version: '3.0'
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: timecop
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: '0.9'
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: '0.9'
|
83
|
+
- !ruby/object:Gem::Dependency
|
84
|
+
name: vcr
|
85
|
+
requirement: !ruby/object:Gem::Requirement
|
86
|
+
requirements:
|
87
|
+
- - "~>"
|
88
|
+
- !ruby/object:Gem::Version
|
89
|
+
version: '3.0'
|
90
|
+
type: :development
|
91
|
+
prerelease: false
|
92
|
+
version_requirements: !ruby/object:Gem::Requirement
|
93
|
+
requirements:
|
94
|
+
- - "~>"
|
95
|
+
- !ruby/object:Gem::Version
|
96
|
+
version: '3.0'
|
97
|
+
- !ruby/object:Gem::Dependency
|
98
|
+
name: webmock
|
99
|
+
requirement: !ruby/object:Gem::Requirement
|
100
|
+
requirements:
|
101
|
+
- - "~>"
|
102
|
+
- !ruby/object:Gem::Version
|
103
|
+
version: '3.0'
|
104
|
+
type: :development
|
105
|
+
prerelease: false
|
106
|
+
version_requirements: !ruby/object:Gem::Requirement
|
107
|
+
requirements:
|
108
|
+
- - "~>"
|
109
|
+
- !ruby/object:Gem::Version
|
110
|
+
version: '3.0'
|
111
|
+
- !ruby/object:Gem::Dependency
|
112
|
+
name: simplecov
|
113
|
+
requirement: !ruby/object:Gem::Requirement
|
114
|
+
requirements:
|
115
|
+
- - "~>"
|
116
|
+
- !ruby/object:Gem::Version
|
117
|
+
version: '0.15'
|
118
|
+
type: :development
|
119
|
+
prerelease: false
|
120
|
+
version_requirements: !ruby/object:Gem::Requirement
|
121
|
+
requirements:
|
122
|
+
- - "~>"
|
123
|
+
- !ruby/object:Gem::Version
|
124
|
+
version: '0.15'
|
125
|
+
description: A Ruby framework for interacting with Amazon Alexa. Designed to work
|
126
|
+
with Sinatra, although can be used with a few other web frameworks.
|
127
|
+
email:
|
128
|
+
- samm@makersacademy.com
|
129
|
+
executables: []
|
130
|
+
extensions: []
|
131
|
+
extra_rdoc_files: []
|
132
|
+
files:
|
133
|
+
- ".gitignore"
|
134
|
+
- ".rspec"
|
135
|
+
- ".rubocop.yml"
|
136
|
+
- ".ruby-version"
|
137
|
+
- ".tool-versions"
|
138
|
+
- ".travis.yml"
|
139
|
+
- CODE_OF_CONDUCT.md
|
140
|
+
- CONTRIBUTING.md
|
141
|
+
- Gemfile
|
142
|
+
- LICENSE.txt
|
143
|
+
- README.md
|
144
|
+
- Rakefile
|
145
|
+
- bin/console
|
146
|
+
- bin/setup
|
147
|
+
- lib/ralyxa.rb
|
148
|
+
- lib/ralyxa/configuration.rb
|
149
|
+
- lib/ralyxa/errors.rb
|
150
|
+
- lib/ralyxa/handler.rb
|
151
|
+
- lib/ralyxa/register_intents.rb
|
152
|
+
- lib/ralyxa/request_entities/request.rb
|
153
|
+
- lib/ralyxa/request_entities/user.rb
|
154
|
+
- lib/ralyxa/response_builder.rb
|
155
|
+
- lib/ralyxa/response_entities/card.rb
|
156
|
+
- lib/ralyxa/response_entities/directives.rb
|
157
|
+
- lib/ralyxa/response_entities/directives/audio.rb
|
158
|
+
- lib/ralyxa/response_entities/directives/audio/audio_item.rb
|
159
|
+
- lib/ralyxa/response_entities/directives/audio/stream.rb
|
160
|
+
- lib/ralyxa/response_entities/directives/audio_player.rb
|
161
|
+
- lib/ralyxa/response_entities/directives/audio_player/clear_queue.rb
|
162
|
+
- lib/ralyxa/response_entities/directives/audio_player/play.rb
|
163
|
+
- lib/ralyxa/response_entities/directives/audio_player/stop.rb
|
164
|
+
- lib/ralyxa/response_entities/output_speech.rb
|
165
|
+
- lib/ralyxa/response_entities/reprompt.rb
|
166
|
+
- lib/ralyxa/response_entities/response.rb
|
167
|
+
- lib/ralyxa/skill.rb
|
168
|
+
- lib/ralyxa/version.rb
|
169
|
+
- pkg/ralyxa-1.0.0.gem
|
170
|
+
- ralyxa.gemspec
|
171
|
+
homepage: https://github.com/sjmog/ralyxa
|
172
|
+
licenses:
|
173
|
+
- MIT
|
174
|
+
metadata: {}
|
175
|
+
post_install_message:
|
176
|
+
rdoc_options: []
|
177
|
+
require_paths:
|
178
|
+
- lib
|
179
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
180
|
+
requirements:
|
181
|
+
- - ">="
|
182
|
+
- !ruby/object:Gem::Version
|
183
|
+
version: 2.3.1
|
184
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
185
|
+
requirements:
|
186
|
+
- - ">="
|
187
|
+
- !ruby/object:Gem::Version
|
188
|
+
version: '0'
|
189
|
+
requirements: []
|
190
|
+
rubyforge_project:
|
191
|
+
rubygems_version: 2.7.3
|
192
|
+
signing_key:
|
193
|
+
specification_version: 4
|
194
|
+
summary: A Ruby framework for interacting with Amazon Alexa and lambda support
|
195
|
+
test_files: []
|