ralyxa 1.4.0 → 1.5.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 6aa4014123fdf96c66aafea914bbf45fc005234d
4
- data.tar.gz: 9f61bfe7853045176e0b1fe46d2cb525fd5d1077
3
+ metadata.gz: 356706a000592a8cf4cd64652ef2f61cf2f3f257
4
+ data.tar.gz: 3f7dbf9429193a8d2dcfbaa254a40fe1d6c80c19
5
5
  SHA512:
6
- metadata.gz: 217f26ef4be39c6e7b80d1666e6d7a9fb5361aeb41e8419e8446a92819ae5b2bd5fb1a3a3ed6f62b17a13171a24d607a810f4847464481480e8680c3528ae1ac
7
- data.tar.gz: 5e40b794bd024fb2c8b8306b23bf09a423930fd72f825810bf7616443d920ef5f2120aa2a966dc84376fe85df9bb9045fa0c05286ed7dec873dfb76d2ee7575c
6
+ metadata.gz: f4460af9eecb7d2e4114b168c3d79f80cdccbec3a3e200e664588f7d9654b87353505aad2755955fe212cce8b38206aa93d1100b85f572cb6a28ddc0aeae3f5f
7
+ data.tar.gz: 0fdac2ee8f5e53bb5394b5bd06b290fafa0a95d265d74339ae90fd91aa38d21072eab9161318b2dd82766abb86b237fdb28bb1d48ec37dca4d7512866279ef48
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- ralyxa (1.3.0)
4
+ ralyxa (1.4.0)
5
5
 
6
6
  GEM
7
7
  remote: https://rubygems.org/
@@ -1,22 +1,22 @@
1
1
  require_relative './response_builder'
2
2
  require_relative './card'
3
3
 
4
+ # Handler Base Class. Each Intent Handler inherits from this, and overwrites the #handle method.
4
5
  module Ralyxa
5
6
  class Handler
6
- def initialize(request, intent_proc)
7
- @request = request
8
- @intent_proc = intent_proc
7
+ def initialize(request)
8
+ @request = request
9
9
  end
10
10
 
11
11
  def handle
12
- instance_eval &@intent_proc
12
+ raise NotImplementedError
13
13
  end
14
14
 
15
- def respond(response_text, response_details = {}, response_builder = Ralyxa::ResponseBuilder)
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, response_details = {})
19
+ def tell(response_text = "", response_details = {})
20
20
  respond(response_text, response_details.merge(end_session: true))
21
21
  end
22
22
 
@@ -33,11 +33,10 @@ module Ralyxa
33
33
 
34
34
  NO_INTENT_DECLARATIONS_FOUND = <<~HEREDOC
35
35
  \e[33m
36
- WARNING: You haven't defined any intents.
36
+ WARNING: You haven't defined any intent declarations.
37
37
 
38
- Please define intents inside a directory called 'intents',
39
- on the same directory level as the runfile for your server application,
40
- or change the default intents directory in alexa/register_intents.rb.
38
+ Please define intent declarations inside a directory called 'intents',
39
+ on the same directory level as the runfile for your server application.
41
40
  \e[0m
42
41
  HEREDOC
43
42
  end
data/lib/ralyxa/skill.rb CHANGED
@@ -2,31 +2,53 @@ require_relative './request'
2
2
  require_relative './response'
3
3
  require_relative './handler'
4
4
 
5
+ # Routes an incoming request to the correct Handler.
5
6
  module Ralyxa
6
7
  class Skill
7
- @@intents = {}
8
+ @@handlers = {}
8
9
 
9
10
  def initialize(request)
10
11
  @request = request
11
12
  end
12
13
 
13
- def handle(handler = Ralyxa::Handler)
14
- intent_proc = self.class.registered_intents[@request.intent_name]
15
- handler.new(@request, intent_proc).handle
14
+ def handle
15
+ handler = self.class.handlers[@request.intent_name]
16
+ handler ? handler.new(@request).handle : warn(handler_not_found)
16
17
  end
17
18
 
18
19
  class << self
19
- def intent(intent_name, &block)
20
- @@intents[intent_name] = block
21
- end
22
-
23
- def registered_intents
24
- @@intents.dup
20
+ def intent(intent_name, handler_base_class = Ralyxa::Handler, &intent_block)
21
+ intent_handler = Class.new(handler_base_class)
22
+ intent_handler.send(:define_method, :handle, &intent_block)
23
+ @@handlers[intent_name] = intent_handler
25
24
  end
26
25
 
27
26
  def handle(request, alexa_request_wrapper = Ralyxa::Request)
28
27
  new(alexa_request_wrapper.new(request)).handle
29
28
  end
29
+
30
+ def handlers
31
+ @@handlers.dup
32
+ end
33
+ end
34
+
35
+ private
36
+
37
+ def handler_not_found
38
+ <<~HEREDOC
39
+ \e[33m
40
+ WARNING: An intent declaration for intent "#{ @request.intent_name }" was not found.
41
+
42
+ To define it, add an intent declaration inside a directory called 'intents',
43
+ on the same directory level as the runfile for your server application.
44
+
45
+ You probably want something like:
46
+
47
+ intent "#{ @request.intent_name }" do
48
+ respond("Hello World!")
49
+ end
50
+ \e[0m
51
+ HEREDOC
30
52
  end
31
53
  end
32
54
  end
data/lib/ralyxa/user.rb CHANGED
@@ -9,8 +9,8 @@ module Ralyxa
9
9
 
10
10
  def self.build(request)
11
11
  new(
12
- id: request.dig(:session, :user, :userId),
13
- access_token: request.dig(:session, :user, :accessToken)
12
+ id: request.dig("session", "user", "userId"),
13
+ access_token: request.dig("session", "user", "accessToken")
14
14
  )
15
15
  end
16
16
 
@@ -1,3 +1,3 @@
1
1
  module Ralyxa
2
- VERSION = "1.4.0"
2
+ VERSION = "1.5.0"
3
3
  end
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: ralyxa
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.4.0
4
+ version: 1.5.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sam Morgan