ralyxa 1.5.2 → 1.6.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 +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
|