ralyxa 1.5.2 → 1.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.rubocop.yml +13 -0
- data/.ruby-version +1 -0
- data/README.md +19 -0
- data/Rakefile +3 -3
- data/bin/console +3 -3
- data/lib/ralyxa/configuration.rb +13 -0
- data/lib/ralyxa/errors.rb +1 -1
- data/lib/ralyxa/handler.rb +3 -3
- data/lib/ralyxa/register_intents.rb +13 -11
- data/lib/ralyxa/request_entities/request.rb +15 -8
- data/lib/ralyxa/request_entities/user.rb +4 -4
- data/lib/ralyxa/response_builder.rb +2 -2
- data/lib/ralyxa/response_entities/card.rb +18 -18
- data/lib/ralyxa/response_entities/output_speech.rb +9 -9
- data/lib/ralyxa/response_entities/response.rb +11 -10
- data/lib/ralyxa/skill.rb +13 -13
- data/lib/ralyxa/version.rb +1 -1
- data/lib/ralyxa.rb +31 -3
- data/ralyxa.gemspec +18 -13
- metadata +62 -4
- data/Gemfile.lock +0 -35
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: f1ff42c3c4d881414ba200d222731420250354dd
|
4
|
+
data.tar.gz: b20af2b9b31a38ca6840f931aadfac82042a167c
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: e8df761d9ee6ac49298fe03fb29f9021115e68b06ba7865a07eb09d7514ff19140e4405f5657adfe582997c8f7ea8c1f32122f0eeb9da183d180818c1269f772
|
7
|
+
data.tar.gz: b2505f0529eaa5ab513ec79c140b45c6bc75d2e4745bd3d5d56fb03086dab90feb883bf469a78f9d7dd39e83db55131a681668a3fa8c232420d70bc67acf73f9
|
data/.rubocop.yml
ADDED
data/.ruby-version
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
2.3.1
|
data/README.md
CHANGED
@@ -190,6 +190,25 @@ end
|
|
190
190
|
|
191
191
|
> You can't actually respond to a `SessionEndedRequest`, but you might want to do some tidying in this action.
|
192
192
|
|
193
|
+
## Testing
|
194
|
+
Part of Amazon's requirements for Alexa skills is that they have to ensure requests are sent from Amazon. This is done in a number of ways documented [here](https://developer.amazon.com/docs/custom-skills/host-a-custom-skill-as-a-web-service.html). This verification is built into Ralyxa and can cause issues when testing your skills with stubbed data.
|
195
|
+
|
196
|
+
### Disabling verification
|
197
|
+
Inside of your spec_helper files, include the following to disable verification:
|
198
|
+
|
199
|
+
#### RSpec
|
200
|
+
```ruby
|
201
|
+
require 'ralyxa'
|
202
|
+
|
203
|
+
RSpec.configure do |config|
|
204
|
+
config.before :each do
|
205
|
+
Ralyxa.configure do |config|
|
206
|
+
config.validate_requests = false
|
207
|
+
end
|
208
|
+
end
|
209
|
+
end
|
210
|
+
```
|
211
|
+
|
193
212
|
## Development
|
194
213
|
|
195
214
|
After checking out the repo, run `bundle install` to install dependencies. Then, run `rspec` to run the tests. You can also run `irb` for an interactive prompt that will allow you to experiment.
|
data/Rakefile
CHANGED
data/bin/console
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
require
|
4
|
-
require
|
3
|
+
require 'bundler/setup'
|
4
|
+
require 'ralyxa'
|
5
5
|
|
6
6
|
# You can add fixtures and/or initialization code here to make experimenting
|
7
7
|
# with your gem easier. You can also use a different console, if you like.
|
@@ -10,5 +10,5 @@ require "ralyxa"
|
|
10
10
|
# require "pry"
|
11
11
|
# Pry.start
|
12
12
|
|
13
|
-
require
|
13
|
+
require 'irb'
|
14
14
|
IRB.start(__FILE__)
|
data/lib/ralyxa/errors.rb
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
class UnsecureUrlError < StandardError
|
2
|
-
end
|
2
|
+
end
|
data/lib/ralyxa/handler.rb
CHANGED
@@ -12,11 +12,11 @@ module Ralyxa
|
|
12
12
|
raise NotImplementedError
|
13
13
|
end
|
14
14
|
|
15
|
-
def respond(response_text =
|
15
|
+
def respond(response_text = '', response_details = {}, response_builder = Ralyxa::ResponseBuilder)
|
16
16
|
response_builder.build(response_details.merge(response_text: response_text))
|
17
17
|
end
|
18
18
|
|
19
|
-
def tell(response_text =
|
19
|
+
def tell(response_text = '', response_details = {})
|
20
20
|
respond(response_text, response_details.merge(end_session: true))
|
21
21
|
end
|
22
22
|
|
@@ -33,4 +33,4 @@ module Ralyxa
|
|
33
33
|
attr_reader :request
|
34
34
|
private :request, :respond, :tell, :ask
|
35
35
|
end
|
36
|
-
end
|
36
|
+
end
|
@@ -2,7 +2,7 @@ require_relative './skill'
|
|
2
2
|
|
3
3
|
module Ralyxa
|
4
4
|
class RegisterIntents
|
5
|
-
DEFAULT_INTENTS_DIRECTORY =
|
5
|
+
DEFAULT_INTENTS_DIRECTORY = './intents'.freeze
|
6
6
|
|
7
7
|
def initialize(intents_directory, alexa_skill_class)
|
8
8
|
@intents_directory = intents_directory
|
@@ -22,22 +22,24 @@ module Ralyxa
|
|
22
22
|
end
|
23
23
|
|
24
24
|
private
|
25
|
+
|
25
26
|
attr_reader :intents_directory, :alexa_skill_class
|
26
27
|
|
27
28
|
def intent_declarations
|
28
29
|
@intent_declarations ||=
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
Dir.glob("#{intents_directory}/*.rb")
|
31
|
+
.map { |relative_path| File.expand_path(relative_path) }
|
32
|
+
.map { |intent_declaration_path| File.open(intent_declaration_path).read }
|
32
33
|
end
|
33
34
|
|
34
|
-
|
35
|
-
|
36
|
-
|
35
|
+
heredoc = <<~HEREDOC
|
36
|
+
\e[33m
|
37
|
+
WARNING: You haven't defined any intent declarations.
|
37
38
|
|
38
|
-
|
39
|
-
|
40
|
-
|
39
|
+
Please define intent declarations inside a directory called 'intents',
|
40
|
+
on the same directory level as the runfile for your server application.
|
41
|
+
\e[0m
|
41
42
|
HEREDOC
|
43
|
+
NO_INTENT_DECLARATIONS_FOUND = heredoc.freeze
|
42
44
|
end
|
43
|
-
end
|
45
|
+
end
|
@@ -1,12 +1,13 @@
|
|
1
1
|
require 'json'
|
2
2
|
require 'forwardable'
|
3
|
+
require 'alexa_verifier'
|
3
4
|
require_relative './user'
|
4
5
|
|
5
6
|
module Ralyxa
|
6
7
|
module RequestEntities
|
7
8
|
class Request
|
8
9
|
extend Forwardable
|
9
|
-
INTENT_REQUEST_TYPE =
|
10
|
+
INTENT_REQUEST_TYPE = 'IntentRequest'.freeze
|
10
11
|
|
11
12
|
def_delegator :@user, :id, :user_id
|
12
13
|
def_delegator :@user, :access_token, :user_access_token
|
@@ -15,30 +16,36 @@ module Ralyxa
|
|
15
16
|
def initialize(original_request, user_class = Ralyxa::RequestEntities::User)
|
16
17
|
@request = JSON.parse(original_request.body.read)
|
17
18
|
@user = user_class.build(@request)
|
19
|
+
|
20
|
+
validate_request(original_request) if Ralyxa.configuration.validate_requests?
|
18
21
|
end
|
19
22
|
|
20
23
|
def intent_name
|
21
|
-
return @request[
|
22
|
-
@request[
|
24
|
+
return @request['request']['type'] unless intent_request?
|
25
|
+
@request['request']['intent']['name']
|
23
26
|
end
|
24
27
|
|
25
28
|
def slot_value(slot_name)
|
26
|
-
@request[
|
29
|
+
@request['request']['intent']['slots'][slot_name]['value']
|
27
30
|
end
|
28
31
|
|
29
32
|
def new_session?
|
30
|
-
@request[
|
33
|
+
@request['session']['new']
|
31
34
|
end
|
32
35
|
|
33
36
|
def session_attribute(attribute_name)
|
34
|
-
@request[
|
37
|
+
@request['session']['attributes'][attribute_name]
|
35
38
|
end
|
36
39
|
|
37
40
|
private
|
38
41
|
|
39
42
|
def intent_request?
|
40
|
-
@request[
|
43
|
+
@request['request']['type'] == INTENT_REQUEST_TYPE
|
44
|
+
end
|
45
|
+
|
46
|
+
def validate_request(request)
|
47
|
+
AlexaVerifier.valid!(request)
|
41
48
|
end
|
42
49
|
end
|
43
50
|
end
|
44
|
-
end
|
51
|
+
end
|
@@ -10,14 +10,14 @@ module Ralyxa
|
|
10
10
|
|
11
11
|
def self.build(request)
|
12
12
|
new(
|
13
|
-
id: request.dig(
|
14
|
-
access_token: request.dig(
|
13
|
+
id: request.dig('session', 'user', 'userId'),
|
14
|
+
access_token: request.dig('session', 'user', 'accessToken')
|
15
15
|
)
|
16
16
|
end
|
17
17
|
|
18
18
|
def access_token_exists?
|
19
|
-
|
19
|
+
!@access_token.nil?
|
20
20
|
end
|
21
21
|
end
|
22
22
|
end
|
23
|
-
end
|
23
|
+
end
|
@@ -36,9 +36,9 @@ module Ralyxa
|
|
36
36
|
|
37
37
|
def output_speech
|
38
38
|
output_speech_params = { speech: @options.delete(:response_text) }
|
39
|
-
output_speech_params
|
39
|
+
output_speech_params[:ssml] = @options.delete(:ssml) if @options[:ssml]
|
40
40
|
|
41
41
|
@output_speech_class.as_hash(output_speech_params)
|
42
42
|
end
|
43
43
|
end
|
44
|
-
end
|
44
|
+
end
|
@@ -3,9 +3,9 @@ require_relative '../errors'
|
|
3
3
|
module Ralyxa
|
4
4
|
module ResponseEntities
|
5
5
|
class Card
|
6
|
-
LINK_ACCOUNT_CARD_TYPE =
|
7
|
-
SIMPLE_CARD_TYPE =
|
8
|
-
STANDARD_CARD_TYPE =
|
6
|
+
LINK_ACCOUNT_CARD_TYPE = 'LinkAccount'.freeze
|
7
|
+
SIMPLE_CARD_TYPE = 'Simple'.freeze
|
8
|
+
STANDARD_CARD_TYPE = 'Standard'.freeze
|
9
9
|
|
10
10
|
def initialize(options)
|
11
11
|
@options = options
|
@@ -20,40 +20,40 @@ module Ralyxa
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def to_h
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
23
|
+
{}.tap do |card|
|
24
|
+
add_type(card)
|
25
|
+
add_title(card) if @options[:title]
|
26
|
+
add_body(card) if @options[:body]
|
27
|
+
add_image(card) if @options[:image_url]
|
28
28
|
end
|
29
29
|
end
|
30
30
|
|
31
31
|
private
|
32
32
|
|
33
|
-
def
|
33
|
+
def add_type(card)
|
34
34
|
return card[:type] = LINK_ACCOUNT_CARD_TYPE if link_account?
|
35
35
|
card[:type] = SIMPLE_CARD_TYPE if simple?
|
36
36
|
card[:type] = STANDARD_CARD_TYPE if standard?
|
37
37
|
end
|
38
38
|
|
39
|
-
def
|
39
|
+
def add_title(card)
|
40
40
|
card[:title] = @options[:title]
|
41
41
|
end
|
42
42
|
|
43
|
-
def
|
43
|
+
def add_body(card)
|
44
44
|
card[:content] = @options[:body] if simple?
|
45
45
|
card[:text] = @options[:body] if standard?
|
46
46
|
end
|
47
47
|
|
48
|
-
def
|
49
|
-
raise UnsecureUrlError
|
50
|
-
card[:image] =
|
48
|
+
def add_image(card)
|
49
|
+
raise UnsecureUrlError, "Card images must be available at an SSL-enabled (HTTPS) endpoint. Your current image url is: #{@options[:image_url]}" unless secure?
|
50
|
+
card[:image] = {}
|
51
51
|
card[:image][:smallImageUrl] = @options[:image_url]
|
52
52
|
card[:image][:largeImageUrl] = @options[:image_url]
|
53
53
|
end
|
54
54
|
|
55
55
|
def link_account?
|
56
|
-
|
56
|
+
!@options[:link_account].nil?
|
57
57
|
end
|
58
58
|
|
59
59
|
def simple?
|
@@ -61,12 +61,12 @@ module Ralyxa
|
|
61
61
|
end
|
62
62
|
|
63
63
|
def standard?
|
64
|
-
|
64
|
+
!@options[:image_url].nil?
|
65
65
|
end
|
66
66
|
|
67
67
|
def secure?
|
68
|
-
URI.parse(@options[:image_url]).scheme ==
|
68
|
+
URI.parse(@options[:image_url]).scheme == 'https'
|
69
69
|
end
|
70
70
|
end
|
71
71
|
end
|
72
|
-
end
|
72
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module Ralyxa
|
2
2
|
module ResponseEntities
|
3
3
|
class OutputSpeech
|
4
|
-
DEFAULT_RESPONSE_TEXT =
|
5
|
-
DEFAULT_RESPONSE_SSML =
|
4
|
+
DEFAULT_RESPONSE_TEXT = 'Hello World'.freeze
|
5
|
+
DEFAULT_RESPONSE_SSML = '<speak>Hello World</speak>'.freeze
|
6
6
|
|
7
7
|
def initialize(speech, ssml)
|
8
8
|
@speech = speech
|
@@ -10,8 +10,8 @@ module Ralyxa
|
|
10
10
|
end
|
11
11
|
|
12
12
|
def to_h
|
13
|
-
|
14
|
-
@ssml ?
|
13
|
+
{}.tap do |output_speech|
|
14
|
+
@ssml ? add_ssml(output_speech) : add_plaintext(output_speech)
|
15
15
|
end
|
16
16
|
end
|
17
17
|
|
@@ -21,15 +21,15 @@ module Ralyxa
|
|
21
21
|
|
22
22
|
private
|
23
23
|
|
24
|
-
def
|
25
|
-
output_speech[:type] =
|
24
|
+
def add_ssml(output_speech)
|
25
|
+
output_speech[:type] = 'SSML'
|
26
26
|
output_speech[:ssml] = (@speech || DEFAULT_RESPONSE_SSML)
|
27
27
|
end
|
28
28
|
|
29
|
-
def
|
30
|
-
output_speech[:type] =
|
29
|
+
def add_plaintext(output_speech)
|
30
|
+
output_speech[:type] = 'PlainText'
|
31
31
|
output_speech[:text] = (@speech || DEFAULT_RESPONSE_TEXT)
|
32
32
|
end
|
33
33
|
end
|
34
34
|
end
|
35
|
-
end
|
35
|
+
end
|
@@ -12,10 +12,10 @@ module Ralyxa
|
|
12
12
|
end
|
13
13
|
|
14
14
|
def to_h
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
15
|
+
{}.tap do |response|
|
16
|
+
add_version(response)
|
17
|
+
add_session_attributes(response)
|
18
|
+
add_response(response)
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -24,23 +24,24 @@ module Ralyxa
|
|
24
24
|
end
|
25
25
|
|
26
26
|
private
|
27
|
+
|
27
28
|
attr_reader :response
|
28
29
|
|
29
|
-
def
|
30
|
-
response[:version] =
|
30
|
+
def add_version(response)
|
31
|
+
response[:version] = '1.0'
|
31
32
|
end
|
32
33
|
|
33
|
-
def
|
34
|
+
def add_session_attributes(response)
|
34
35
|
return response[:sessionAttributes] = {} if @start_over
|
35
36
|
response[:sessionAttributes] = @session_attributes unless @session_attributes.empty?
|
36
37
|
end
|
37
38
|
|
38
|
-
def
|
39
|
-
response[:response] =
|
39
|
+
def add_response(response)
|
40
|
+
response[:response] = {}
|
40
41
|
response[:response][:outputSpeech] = @output_speech
|
41
42
|
response[:response][:card] = @card if @card
|
42
43
|
response[:response][:shouldEndSession] = @end_session
|
43
44
|
end
|
44
45
|
end
|
45
46
|
end
|
46
|
-
end
|
47
|
+
end
|
data/lib/ralyxa/skill.rb
CHANGED
@@ -4,7 +4,7 @@ require_relative './handler'
|
|
4
4
|
# Routes an incoming request to the correct Handler.
|
5
5
|
module Ralyxa
|
6
6
|
class Skill
|
7
|
-
|
7
|
+
@handlers = {}
|
8
8
|
|
9
9
|
def initialize(request)
|
10
10
|
@request = request
|
@@ -19,7 +19,7 @@ module Ralyxa
|
|
19
19
|
def intent(intent_name, handler_base_class = Ralyxa::Handler, &intent_block)
|
20
20
|
intent_handler = Class.new(handler_base_class)
|
21
21
|
intent_handler.send(:define_method, :handle, &intent_block)
|
22
|
-
|
22
|
+
@handlers[intent_name] = intent_handler
|
23
23
|
end
|
24
24
|
|
25
25
|
def handle(request, alexa_request_wrapper = Ralyxa::RequestEntities::Request)
|
@@ -27,7 +27,7 @@ module Ralyxa
|
|
27
27
|
end
|
28
28
|
|
29
29
|
def handlers
|
30
|
-
|
30
|
+
@handlers.dup
|
31
31
|
end
|
32
32
|
end
|
33
33
|
|
@@ -35,19 +35,19 @@ module Ralyxa
|
|
35
35
|
|
36
36
|
def handler_not_found
|
37
37
|
<<~HEREDOC
|
38
|
-
|
39
|
-
|
38
|
+
\e[33m
|
39
|
+
WARNING: An intent declaration for intent "#{@request.intent_name}" was not found.
|
40
40
|
|
41
|
-
|
42
|
-
|
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
43
|
|
44
|
-
|
44
|
+
You probably want something like:
|
45
45
|
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
46
|
+
intent "#{@request.intent_name}" do
|
47
|
+
respond("Hello World!")
|
48
|
+
end
|
49
|
+
\e[0m
|
50
50
|
HEREDOC
|
51
51
|
end
|
52
52
|
end
|
53
|
-
end
|
53
|
+
end
|
data/lib/ralyxa/version.rb
CHANGED
data/lib/ralyxa.rb
CHANGED
@@ -1,8 +1,36 @@
|
|
1
|
-
require
|
2
|
-
require 'ralyxa/
|
1
|
+
require 'ralyxa/version'
|
2
|
+
require 'ralyxa/configuration'
|
3
3
|
require 'ralyxa/register_intents'
|
4
|
+
require 'ralyxa/skill'
|
4
5
|
|
5
6
|
module Ralyxa
|
7
|
+
class << self
|
8
|
+
attr_accessor :configuration
|
9
|
+
|
10
|
+
def configure
|
11
|
+
yield configuration if block_given?
|
12
|
+
end
|
13
|
+
|
14
|
+
def method_missing(m, *args, &block)
|
15
|
+
if configuration.respond_to?(m)
|
16
|
+
configuration.send(m, *args, &block)
|
17
|
+
else
|
18
|
+
super
|
19
|
+
end
|
20
|
+
end
|
21
|
+
|
22
|
+
def respond_to_missing?(m, include_private = false)
|
23
|
+
configuration.respond_to?(m) || super
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def setup_configuration
|
29
|
+
@configuration = Ralyxa::Configuration.new
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
setup_configuration
|
6
34
|
end
|
7
35
|
|
8
|
-
Ralyxa::RegisterIntents.run
|
36
|
+
Ralyxa::RegisterIntents.run
|
data/ralyxa.gemspec
CHANGED
@@ -1,26 +1,31 @@
|
|
1
|
-
# coding: utf-8
|
2
1
|
lib = File.expand_path('../lib', __FILE__)
|
3
2
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
4
3
|
require 'ralyxa/version'
|
5
4
|
|
6
5
|
Gem::Specification.new do |spec|
|
7
|
-
spec.name =
|
6
|
+
spec.name = 'ralyxa'
|
8
7
|
spec.version = Ralyxa::VERSION
|
9
|
-
spec.authors = [
|
10
|
-
spec.email = [
|
8
|
+
spec.authors = ['Sam Morgan']
|
9
|
+
spec.email = ['samm@makersacademy.com']
|
11
10
|
|
12
|
-
spec.summary =
|
13
|
-
spec.description =
|
14
|
-
spec.homepage =
|
15
|
-
spec.license =
|
11
|
+
spec.summary = 'A Ruby framework for interacting with Amazon Alexa.'
|
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'
|
16
15
|
spec.files = `git ls-files -z`.split("\x0").reject do |f|
|
17
16
|
f.match(%r{^(test|spec|features)/})
|
18
17
|
end
|
19
|
-
spec.bindir =
|
18
|
+
spec.bindir = 'exe'
|
20
19
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
21
|
-
spec.require_paths = [
|
20
|
+
spec.require_paths = ['lib']
|
22
21
|
spec.required_ruby_version = '>= 2.3.1'
|
23
|
-
|
24
|
-
spec.
|
25
|
-
|
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'
|
26
31
|
end
|
metadata
CHANGED
@@ -1,15 +1,29 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: ralyxa
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Sam Morgan
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2018-01-04 00:00:00.000000000 Z
|
12
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'
|
13
27
|
- !ruby/object:Gem::Dependency
|
14
28
|
name: bundler
|
15
29
|
requirement: !ruby/object:Gem::Requirement
|
@@ -52,6 +66,48 @@ dependencies:
|
|
52
66
|
- - "~>"
|
53
67
|
- !ruby/object:Gem::Version
|
54
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'
|
55
111
|
description: A Ruby framework for interacting with Amazon Alexa. Designed to work
|
56
112
|
with Sinatra, although can be used with a few other web frameworks.
|
57
113
|
email:
|
@@ -62,16 +118,18 @@ extra_rdoc_files: []
|
|
62
118
|
files:
|
63
119
|
- ".gitignore"
|
64
120
|
- ".rspec"
|
121
|
+
- ".rubocop.yml"
|
122
|
+
- ".ruby-version"
|
65
123
|
- ".travis.yml"
|
66
124
|
- CODE_OF_CONDUCT.md
|
67
125
|
- Gemfile
|
68
|
-
- Gemfile.lock
|
69
126
|
- LICENSE.txt
|
70
127
|
- README.md
|
71
128
|
- Rakefile
|
72
129
|
- bin/console
|
73
130
|
- bin/setup
|
74
131
|
- lib/ralyxa.rb
|
132
|
+
- lib/ralyxa/configuration.rb
|
75
133
|
- lib/ralyxa/errors.rb
|
76
134
|
- lib/ralyxa/handler.rb
|
77
135
|
- lib/ralyxa/register_intents.rb
|
@@ -105,7 +163,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
105
163
|
version: '0'
|
106
164
|
requirements: []
|
107
165
|
rubyforge_project:
|
108
|
-
rubygems_version: 2.6.
|
166
|
+
rubygems_version: 2.6.14
|
109
167
|
signing_key:
|
110
168
|
specification_version: 4
|
111
169
|
summary: A Ruby framework for interacting with Amazon Alexa.
|
data/Gemfile.lock
DELETED
@@ -1,35 +0,0 @@
|
|
1
|
-
PATH
|
2
|
-
remote: .
|
3
|
-
specs:
|
4
|
-
ralyxa (1.5.0)
|
5
|
-
|
6
|
-
GEM
|
7
|
-
remote: https://rubygems.org/
|
8
|
-
specs:
|
9
|
-
diff-lcs (1.3)
|
10
|
-
rake (10.5.0)
|
11
|
-
rspec (3.6.0)
|
12
|
-
rspec-core (~> 3.6.0)
|
13
|
-
rspec-expectations (~> 3.6.0)
|
14
|
-
rspec-mocks (~> 3.6.0)
|
15
|
-
rspec-core (3.6.0)
|
16
|
-
rspec-support (~> 3.6.0)
|
17
|
-
rspec-expectations (3.6.0)
|
18
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
19
|
-
rspec-support (~> 3.6.0)
|
20
|
-
rspec-mocks (3.6.0)
|
21
|
-
diff-lcs (>= 1.2.0, < 2.0)
|
22
|
-
rspec-support (~> 3.6.0)
|
23
|
-
rspec-support (3.6.0)
|
24
|
-
|
25
|
-
PLATFORMS
|
26
|
-
ruby
|
27
|
-
|
28
|
-
DEPENDENCIES
|
29
|
-
bundler (~> 1.14)
|
30
|
-
rake (~> 10.0)
|
31
|
-
ralyxa!
|
32
|
-
rspec (~> 3.0)
|
33
|
-
|
34
|
-
BUNDLED WITH
|
35
|
-
1.14.6
|