alexa_rubykit 0.0.7 → 0.0.9
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/Gemfile +1 -6
- data/Gemfile.lock +25 -8
- data/README.md +50 -7
- data/lib/alexa_rubykit.rb +13 -0
- data/lib/alexa_rubykit/request.rb +4 -30
- data/lib/alexa_rubykit/response.rb +66 -0
- data/lib/alexa_rubykit/version.rb +1 -1
- metadata +33 -7
- data/bin/alexa_rubyengine.rb +0 -20
- data/config.ru +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 82300a157ad72bda1af4da4ae9eebd461472bd96
|
4
|
+
data.tar.gz: 2973c59a6181e768dce7243292a2ae07c8d0aa52
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 468b2f0c87bc390ec889b006444d26df73e8d2dc675a8bf592b680f2b31e5be85ec738f8c3725c9aff9d165e3dedaf0c8ec7592ea2a266b6a6f274e4ba461bad
|
7
|
+
data.tar.gz: c1f7baf023b9b4af6f34c628de8cc1976e7da7efe47eabcedb079be7ba817c6d2c389518dbb5ec617f5010854934d3e80270daf9733ada407ed55a460f5db67f
|
data/Gemfile
CHANGED
data/Gemfile.lock
CHANGED
@@ -1,14 +1,32 @@
|
|
1
|
-
|
2
|
-
remote:
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
3
|
specs:
|
4
|
-
alexa_rubykit (0.0.
|
4
|
+
alexa_rubykit (0.0.9)
|
5
5
|
bundler (~> 1.7)
|
6
6
|
rake (~> 10.0)
|
7
7
|
sinatra (~> 1.4)
|
8
|
+
|
9
|
+
GEM
|
10
|
+
remote: https://rubygems.org/
|
11
|
+
specs:
|
12
|
+
diff-lcs (1.2.5)
|
8
13
|
rack (1.6.0)
|
9
14
|
rack-protection (1.5.3)
|
10
15
|
rack
|
11
|
-
rake (10.
|
16
|
+
rake (10.4.2)
|
17
|
+
rspec (3.2.0)
|
18
|
+
rspec-core (~> 3.2.0)
|
19
|
+
rspec-expectations (~> 3.2.0)
|
20
|
+
rspec-mocks (~> 3.2.0)
|
21
|
+
rspec-core (3.2.3)
|
22
|
+
rspec-support (~> 3.2.0)
|
23
|
+
rspec-expectations (3.2.1)
|
24
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
25
|
+
rspec-support (~> 3.2.0)
|
26
|
+
rspec-mocks (3.2.1)
|
27
|
+
diff-lcs (>= 1.2.0, < 2.0)
|
28
|
+
rspec-support (~> 3.2.0)
|
29
|
+
rspec-support (3.2.2)
|
12
30
|
sinatra (1.4.6)
|
13
31
|
rack (~> 1.4)
|
14
32
|
rack-protection (~> 1.4)
|
@@ -19,7 +37,6 @@ PLATFORMS
|
|
19
37
|
ruby
|
20
38
|
|
21
39
|
DEPENDENCIES
|
22
|
-
alexa_rubykit
|
23
|
-
|
24
|
-
|
25
|
-
sinatra (~> 1.4)
|
40
|
+
alexa_rubykit!
|
41
|
+
rspec (~> 3.2.0)
|
42
|
+
rspec-mocks (~> 3.2.0)
|
data/README.md
CHANGED
@@ -1,10 +1,20 @@
|
|
1
1
|
# AlexaRubykit
|
2
2
|
|
3
|
-
This gem implements a quick back-end service for deploying applications for Amazon's Echo (Alexa)
|
4
|
-
and samples are provided as-is and are in current development.
|
3
|
+
This gem implements a quick back-end service for deploying applications for Amazon's Echo (Alexa).
|
5
4
|
|
6
5
|
## Installation
|
7
6
|
|
7
|
+
### Sample Application
|
8
|
+
|
9
|
+
For a sample application video tutorial, check
|
10
|
+
|
11
|
+
<a href="http://www.youtube.com/watch?feature=player_embedded&v=PwZf506UKHo" target="_blank"><img src="http://img.youtube.com/vi/PwZf506UKHo/0.jpg"
|
12
|
+
alt="Running a sample Rubykit Demo" width="240" height="180" border="5" /></a>
|
13
|
+
|
14
|
+
Samples are provided by the alexa_rubyengine project: https://github.com/damianFC/alexa_rubyengine
|
15
|
+
|
16
|
+
### For Ruby Projects:
|
17
|
+
|
8
18
|
Add this line to your application's Gemfile:
|
9
19
|
|
10
20
|
```ruby
|
@@ -21,16 +31,49 @@ Or install it yourself as:
|
|
21
31
|
|
22
32
|
## Usage
|
23
33
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
34
|
+
This Gem provides methods to create and handle request and response objects to be used in your container of choice.
|
35
|
+
|
36
|
+
Sample usage:
|
37
|
+
|
38
|
+
```ruby
|
39
|
+
require 'alexa_rubykit'
|
40
|
+
response = AlexaRubykit::Response.new
|
41
|
+
response.add_speech('Ruby is running ready!')
|
42
|
+
response.build_response
|
43
|
+
```
|
44
|
+
|
45
|
+
Will generate a valid outputspeech response in JSON format:
|
46
|
+
|
47
|
+
``` JSON
|
48
|
+
$ {"version":"1.0","response":{"outputSpeech":{"type":"PlainText","text":"Ruby is running ready!"},"shouldEndSession":true}}
|
49
|
+
```
|
50
|
+
|
51
|
+
## Troubleshooting
|
52
|
+
|
53
|
+
There are two sources of troubleshooting information: the Amazon Echo app/website and the EBS logs that you can get from
|
54
|
+
the management console.
|
55
|
+
- "Error in SSL handshake" : Make sure your used the FQDN when you generated the SSL and it's also the active SSL in EBS.
|
56
|
+
- "Error communicating with the application" : Query the EBS logs from the management console and create an issue on GitHub.
|
29
57
|
|
30
58
|
## Contributing
|
31
59
|
|
60
|
+
1. Decide to work on the "dev" (unstable) branch or "master" (stable)
|
32
61
|
1. Fork it ( https://github.com/[my-github-username]/alexa_rubykit/fork )
|
33
62
|
2. Create your feature branch (`git checkout -b my-new-feature`)
|
34
63
|
3. Commit your changes (`git commit -am 'Add some feature'`)
|
35
64
|
4. Push to the branch (`git push origin my-new-feature`)
|
36
65
|
5. Create a new Pull Request
|
66
|
+
|
67
|
+
All development is done in the "dev" branch before being merged to master. Applications can use the developer
|
68
|
+
environment by adding the following line to their Gemfile:
|
69
|
+
|
70
|
+
```ruby
|
71
|
+
gem 'alexa_rubykit', :git => 'https://github.com/damianFC/alexa-rubykit.git', :branch => 'dev'
|
72
|
+
```
|
73
|
+
|
74
|
+
To use the stable/master branch, rename 'dev' to 'master' or remove :branch all together.
|
75
|
+
|
76
|
+
|
77
|
+
|
78
|
+
# <a name="team-members"></a>Team Members
|
79
|
+
* "Damian Finol" <damian.finol@gmail.com>
|
data/lib/alexa_rubykit.rb
CHANGED
@@ -1,6 +1,19 @@
|
|
1
1
|
require 'alexa_rubykit/request'
|
2
|
+
require 'alexa_rubykit/version'
|
3
|
+
require 'alexa_rubykit/response'
|
4
|
+
|
2
5
|
module AlexaRubykit
|
3
6
|
def self.print_json(json)
|
4
7
|
p json
|
5
8
|
end
|
9
|
+
|
10
|
+
def self.print_version
|
11
|
+
p AlexaRubykit::VERSION
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns true if all the Alexa request objects are set.
|
15
|
+
def self.valid_alexa?(request_json)
|
16
|
+
!request_json.nil? || !request_json['session'].nil? ||
|
17
|
+
!request_json['version'].nil? || !request_json['request'].nil?
|
18
|
+
end
|
6
19
|
end
|
@@ -6,14 +6,15 @@ module AlexaRubykit
|
|
6
6
|
class Request
|
7
7
|
require 'json'
|
8
8
|
require 'sinatra'
|
9
|
-
|
9
|
+
require 'alexa_rubykit'
|
10
|
+
attr_accessor :version, :session_return, :response, :shouldEndSession, :type
|
10
11
|
|
11
12
|
@request = ''
|
12
13
|
@type = ''
|
13
14
|
def initialize(json_request)
|
14
|
-
halt 500
|
15
|
+
halt 500 unless AlexaRubykit.valid_alexa?(json_request)
|
15
16
|
@request = json_request
|
16
|
-
case @request['type']
|
17
|
+
case @request['request']['type']
|
17
18
|
when /Launch/
|
18
19
|
@type = 'LAUNCH'
|
19
20
|
when /Intent/
|
@@ -24,32 +25,5 @@ module AlexaRubykit
|
|
24
25
|
halt 500
|
25
26
|
end
|
26
27
|
end
|
27
|
-
|
28
|
-
# Builds a response.
|
29
|
-
# Takes the version, response and should_end_session variables and builds a JSON object.
|
30
|
-
def build_response
|
31
|
-
# Need to set all 3 parameters or the response is invalid
|
32
|
-
halt 500 if @version.nil? || @response.nil? || @shouldEndSession.nil?
|
33
|
-
response = Hash.new
|
34
|
-
response[:version] = @version
|
35
|
-
response[:sessionAttributes] = @session_return
|
36
|
-
response[:response] = @response
|
37
|
-
response.to_json
|
38
|
-
end
|
39
|
-
|
40
|
-
# Creates a outputspeech JSON object for responding with voice.
|
41
|
-
# Data type:
|
42
|
-
#"outputSpeech": {
|
43
|
-
# "type": "string",
|
44
|
-
# "text": "string"
|
45
|
-
#}
|
46
|
-
def say_response(speech)
|
47
|
-
output_speech = { :type => 'PlainText', :text => speech }
|
48
|
-
@response = { :outputSpeech => output_speech, :shouldEndSession => @shouldEndSession }
|
49
|
-
end
|
50
|
-
|
51
|
-
def add_session(session)
|
52
|
-
@session_return = { :new => false, :sessionId => session}
|
53
|
-
end
|
54
28
|
end
|
55
29
|
end
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module AlexaRubykit
|
2
|
+
class Response
|
3
|
+
require 'json'
|
4
|
+
attr_accessor :version, :session, :response_object, :session_attributes, :speech, :response
|
5
|
+
|
6
|
+
# Every response needs a shouldendsession and a version attribute
|
7
|
+
# We initialize version to 1.0, use add_version to set your own.
|
8
|
+
def initialize(version = '1.0')
|
9
|
+
@session_attributes = Hash.new
|
10
|
+
@version = version
|
11
|
+
end
|
12
|
+
|
13
|
+
# Adds a key,value pair to the session object.
|
14
|
+
def add_session_attribute(key, value)
|
15
|
+
@session_attributes[key.to_sym] = value
|
16
|
+
end
|
17
|
+
|
18
|
+
def add_speech(speech_text)
|
19
|
+
@speech = { :type => 'PlainText', :text => speech_text }
|
20
|
+
@speech
|
21
|
+
end
|
22
|
+
|
23
|
+
# Adds a speech to the object, also returns a outputspeech object.
|
24
|
+
def say_response(speech, end_session = true)
|
25
|
+
output_speech = add_speech(speech)
|
26
|
+
{ :outputSpeech => output_speech, :shouldEndSession => end_session }
|
27
|
+
end
|
28
|
+
|
29
|
+
|
30
|
+
# Creates a session object. We pretty much only use this in testing.
|
31
|
+
def build_session
|
32
|
+
# If it's empty assume user doesn't need session attributes.
|
33
|
+
@session_attributes = Hash.new if @session_attributes.nil?
|
34
|
+
@session = { :sessionAttributes => @session_attributes }
|
35
|
+
@session
|
36
|
+
end
|
37
|
+
|
38
|
+
# The response object (with outputspeech, cards and session end)
|
39
|
+
# Should rename this, but Amazon picked their names.
|
40
|
+
# The only mandatory field is end_session which we default to true.
|
41
|
+
def build_response_object(session_end = true)
|
42
|
+
@response = Hash.new
|
43
|
+
@response[:outputSpeech] = @speech unless @speech.nil?
|
44
|
+
# TODO: We need cards too
|
45
|
+
#response[:card] = @cards
|
46
|
+
@response[:shouldEndSession] = session_end
|
47
|
+
@response
|
48
|
+
end
|
49
|
+
|
50
|
+
# Builds a response.
|
51
|
+
# Takes the version, response and should_end_session variables and builds a JSON object.
|
52
|
+
def build_response
|
53
|
+
response_object = build_response_object
|
54
|
+
response = Hash.new
|
55
|
+
response[:version] = @version
|
56
|
+
response[:sessionAttributes] = @session_attributes unless @session_attributes.empty?
|
57
|
+
response[:response] = response_object
|
58
|
+
response.to_json
|
59
|
+
end
|
60
|
+
|
61
|
+
# TODO: Update this.
|
62
|
+
def to_s
|
63
|
+
"Version => #{@version}, SessionObj => #{@session}, Response => #{@response}"
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: alexa_rubykit
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.9
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Damian Finol
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2015-04
|
11
|
+
date: 2015-05-04 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|
@@ -52,11 +52,38 @@ dependencies:
|
|
52
52
|
- - "~>"
|
53
53
|
- !ruby/object:Gem::Version
|
54
54
|
version: '1.4'
|
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.2.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.2.0
|
69
|
+
- !ruby/object:Gem::Dependency
|
70
|
+
name: rspec-mocks
|
71
|
+
requirement: !ruby/object:Gem::Requirement
|
72
|
+
requirements:
|
73
|
+
- - "~>"
|
74
|
+
- !ruby/object:Gem::Version
|
75
|
+
version: 3.2.0
|
76
|
+
type: :development
|
77
|
+
prerelease: false
|
78
|
+
version_requirements: !ruby/object:Gem::Requirement
|
79
|
+
requirements:
|
80
|
+
- - "~>"
|
81
|
+
- !ruby/object:Gem::Version
|
82
|
+
version: 3.2.0
|
55
83
|
description: Alexa Ruby Kit with examples
|
56
84
|
email:
|
57
85
|
- damian.finol@gmail.com
|
58
|
-
executables:
|
59
|
-
- alexa_rubyengine.rb
|
86
|
+
executables: []
|
60
87
|
extensions: []
|
61
88
|
extra_rdoc_files: []
|
62
89
|
files:
|
@@ -65,12 +92,11 @@ files:
|
|
65
92
|
- LICENSE.txt
|
66
93
|
- README.md
|
67
94
|
- Rakefile
|
68
|
-
- bin/alexa_rubyengine.rb
|
69
|
-
- config.ru
|
70
95
|
- lib/alexa_rubykit.rb
|
71
96
|
- lib/alexa_rubykit/request.rb
|
97
|
+
- lib/alexa_rubykit/response.rb
|
72
98
|
- lib/alexa_rubykit/version.rb
|
73
|
-
homepage:
|
99
|
+
homepage: https://github.com/damianFC/alexa-rubykit
|
74
100
|
licenses:
|
75
101
|
- MIT
|
76
102
|
metadata: {}
|
data/bin/alexa_rubyengine.rb
DELETED
@@ -1,20 +0,0 @@
|
|
1
|
-
# Alexa RubyEngine
|
2
|
-
# This Engine receives and responds to Amazon Echo's (Alexa) JSON requests.
|
3
|
-
require 'sinatra'
|
4
|
-
require 'json'
|
5
|
-
require 'alexa_rubykit'
|
6
|
-
|
7
|
-
#enable :sessions
|
8
|
-
post '/' do
|
9
|
-
content_type 'application/json'
|
10
|
-
# Check that it's a valid Alexa request
|
11
|
-
request_json = JSON.parse(request.body.read.to_s)
|
12
|
-
halt 500 if request_json['session'].nil? || request_json['version'].nil? || request_json['request'].nil?
|
13
|
-
#
|
14
|
-
request = AlexaRubykit::Request.new(request_json['request'])
|
15
|
-
request.version = '1.0'
|
16
|
-
request.add_session(request_json['session']['sessionId'])
|
17
|
-
request.shouldEndSession = true
|
18
|
-
request.say_response('Hello, this is a test')
|
19
|
-
request.build_response
|
20
|
-
end
|
data/config.ru
DELETED