alexa-skill 0.1.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,7 @@
1
+ ---
2
+ SHA1:
3
+ metadata.gz: 7b9c9391b1b6290a14e125215d64715dfd46ca60
4
+ data.tar.gz: 7ab7003871bcb969a285f481635bd8da576e3a57
5
+ SHA512:
6
+ metadata.gz: 7161ce6d3d3a336e325b98e90855f498da969112499b4b49d981f75fdecfc17e45e2cf6b18ff5535a5835ac02ab078a3ea578a442a053a3d29d181a17557828a
7
+ data.tar.gz: e1591271811dfb10b1c504b9509fa424af50c91edd293fc83d5f5b2a9fc45ee481b04549be905804abd007c3e1097cd29f8737206e760bf077f8bdc170abbdf2
@@ -0,0 +1,8 @@
1
+ require 'alexa-skill/intent_builder'
2
+ require 'alexa-skill/registry'
3
+
4
+ def intent(name, &block)
5
+ builder = AlexaSkill::IntentBuilder.new(&block)
6
+ intent = AlexaSkill::IntentBuilder.build(builder)
7
+ AlexaSkill::Registry.register(name, intent)
8
+ end
@@ -0,0 +1,8 @@
1
+ module AlexaSkill
2
+ class Intent
3
+ attr_accessor :slots, :utterances, :response, :card
4
+
5
+ def initialize
6
+ end
7
+ end
8
+ end
@@ -0,0 +1,37 @@
1
+ require './lib/alexa-skill-kit/intent'
2
+
3
+ module AlexaSkill
4
+ class IntentBuilder
5
+ attr_reader :slots, :card_response, :response, :utterances
6
+ def initialize(&block)
7
+ @slots = {}
8
+ @utterances = []
9
+ self.instance_eval(&block)
10
+ end
11
+
12
+ def slot(name, options=[])
13
+ @slots[name] = options
14
+ end
15
+
16
+ def card(&block)
17
+ @card_response = block
18
+ end
19
+
20
+ def respond(&block)
21
+ @response = block
22
+ end
23
+
24
+ def utterance(value)
25
+ @utterances << value
26
+ end
27
+
28
+ def self.build(builder)
29
+ intent = AlexaSkill::Intent.new
30
+ intent.slots = builder.slots
31
+ intent.utterances = builder.utterances
32
+ intent.response = builder.response
33
+ intent.card = builder.card_response
34
+ intent
35
+ end
36
+ end
37
+ end
@@ -0,0 +1,61 @@
1
+
2
+ module AlexaSkill
3
+ INTENTS = {}
4
+
5
+ class Registry
6
+ def self.register(name, intent)
7
+ INTENTS[name] = intent
8
+ end
9
+
10
+ def self.list
11
+ INTENTS
12
+ end
13
+
14
+ def self.utterances
15
+ response = []
16
+ INTENTS.each do |name, intent|
17
+ intent.utterances.each do |utter|
18
+ response << "#{name} #{utter}"
19
+ end
20
+ end
21
+ response
22
+ end
23
+
24
+ def self.schema
25
+ response = {intents:[]}
26
+ INTENTS.each do |name, intent|
27
+ puts "NAME: #{name}"
28
+ intent_schema = {name: name, slots: []}
29
+ intent.slots.each do |slot, properties|
30
+ if properties.is_a?(String)
31
+ slot_type = properties
32
+ elsif properties.is_a?(Array)
33
+ slot_type = "LIST_OF_#{slot.upcase}"
34
+ else
35
+ raise ArgumentError, "Property '#{properties}` not recognized"
36
+ end
37
+
38
+ intent_schema[:slots] << {
39
+ name: slot,
40
+ type: slot_type
41
+ }
42
+ end
43
+ response[:intents] << intent_schema
44
+ end
45
+ response
46
+ end
47
+
48
+ def self.types
49
+ response = {}
50
+ INTENTS.each do |name, intent|
51
+ intent.slots.each do |slot, properties|
52
+ if properties.is_a?(Array)
53
+ slot_type = "LIST_OF_#{slot.upcase}"
54
+ response[slot_type] = properties
55
+ end
56
+ end
57
+ end
58
+ response
59
+ end
60
+ end
61
+ end
@@ -0,0 +1,46 @@
1
+ require 'sinatra/base'
2
+ require 'alexa_skills_ruby'
3
+
4
+ require 'alexa-skill/registry'
5
+
6
+ module AlexaSkill
7
+ class Handler < AlexaSkillsRuby::Handler
8
+ AlexaSkill::Registry.list.each do |name, intent|
9
+ on_intent name do
10
+ slots = request.intent.slots
11
+ response.set_output_speech_text( intent.response.call(slots) )
12
+ end
13
+ end
14
+ end
15
+
16
+ class Server < Sinatra::Base
17
+ post '/' do
18
+ content_type :json
19
+
20
+ handler = Handler.new(application_id: ENV['APPLICATION_ID'], logger: logger)
21
+
22
+ begin
23
+ handler.handle(request.body.read)
24
+ rescue AlexaSkillsRuby::InvalidApplicationId => e
25
+ logger.error e.to_s
26
+ 403
27
+ end
28
+
29
+ end
30
+
31
+ get '/schema.json' do
32
+ content_type :json
33
+ AlexaSkill::Registry.schema.to_json
34
+ end
35
+
36
+ get '/types.txt' do
37
+ (AlexaSkill::Registry.types[params[:type]] || []).join("\n")
38
+ end
39
+
40
+
41
+ get '/utterances.txt' do
42
+ content_type 'text/plain'
43
+ AlexaSkill::Registry.utterances.join("\n")
44
+ end
45
+ end
46
+ end
metadata ADDED
@@ -0,0 +1,105 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: alexa-skill
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.1.0
5
+ platform: ruby
6
+ authors:
7
+ - Maciej Skierkowski
8
+ autorequire:
9
+ bindir: bin
10
+ cert_chain: []
11
+ date: 2016-06-29 00:00:00.000000000 Z
12
+ dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: sinatra
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: 1.4.7
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: 1.4.7
27
+ - !ruby/object:Gem::Dependency
28
+ name: alexa_skills_ruby
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - "~>"
32
+ - !ruby/object:Gem::Version
33
+ version: 0.0.5
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - "~>"
39
+ - !ruby/object:Gem::Version
40
+ version: 0.0.5
41
+ - !ruby/object:Gem::Dependency
42
+ name: nest_thermostat
43
+ requirement: !ruby/object:Gem::Requirement
44
+ requirements:
45
+ - - "~>"
46
+ - !ruby/object:Gem::Version
47
+ version: 0.0.4
48
+ type: :runtime
49
+ prerelease: false
50
+ version_requirements: !ruby/object:Gem::Requirement
51
+ requirements:
52
+ - - "~>"
53
+ - !ruby/object:Gem::Version
54
+ version: 0.0.4
55
+ - !ruby/object:Gem::Dependency
56
+ name: rake
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: 11.2.2
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: 11.2.2
69
+ description: Create new cusotm Alexa skills with this library and server
70
+ email:
71
+ - maciej@factor.io
72
+ executables: []
73
+ extensions: []
74
+ extra_rdoc_files: []
75
+ files:
76
+ - lib/alexa-skill/app.rb
77
+ - lib/alexa-skill/intent.rb
78
+ - lib/alexa-skill/intent_builder.rb
79
+ - lib/alexa-skill/registry.rb
80
+ - lib/alexa-skill/server.rb
81
+ homepage: https://factor.io
82
+ licenses:
83
+ - MIT
84
+ metadata: {}
85
+ post_install_message:
86
+ rdoc_options: []
87
+ require_paths:
88
+ - lib
89
+ required_ruby_version: !ruby/object:Gem::Requirement
90
+ requirements:
91
+ - - ">="
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
94
+ required_rubygems_version: !ruby/object:Gem::Requirement
95
+ requirements:
96
+ - - ">="
97
+ - !ruby/object:Gem::Version
98
+ version: '0'
99
+ requirements: []
100
+ rubyforge_project:
101
+ rubygems_version: 2.5.1
102
+ signing_key:
103
+ specification_version: 4
104
+ summary: A DSL to easily create new custom Alexa Skills
105
+ test_files: []