alexa-skill 0.1.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 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: []