alexa-rails 0.1.5 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: fe84c01c500b20b605df841f3223b47fb2d2d0caa4b42ec2f4106defdc6d0098
4
- data.tar.gz: a3d781d08f0df84165ec47a26db26a285c40a5918932dee673d848f924dc36d9
3
+ metadata.gz: d03309523af0c0f06a2dafb3591955407d52e00cd7f9760525e52b38349e7dc8
4
+ data.tar.gz: 7d10169cac5df98db050a0095cbac14d051ab8e68e23059a7b4f2e7988d15a62
5
5
  SHA512:
6
- metadata.gz: fda2ea136306cfcdd4a4abc4a567062173da26b21598928c5ad5a07c1e307af3c8667f06a0a419db4e4a600f63d3de470b1ed43970ae5a3b3da6255087d5e60e
7
- data.tar.gz: 296c90180fe93257c458acd12f6d532392645d893f7d2a38466dc575916646299bc14a1ce95bdff42eccd39b0c8a48ec3db9f3b7db443f6277b3214608846563
6
+ metadata.gz: cd6f5a97942b6bdf85bd308f009456bff0b876b9bb34a6bc6fdffe7ca4abbd0dcca32a9d18cfee92a53b7a3d45371410f2685a66cb7c054e33f2734cded96374
7
+ data.tar.gz: 337b0cb337acc5ecac5d2baaad60a5b48c3b0ae132881eb9fc64bd82c5ddef896953df1d1402982a560ad4dadb0c4414a96834aa83540a6493eca01f61a8360a
data/README.md CHANGED
@@ -65,7 +65,7 @@ module Alexa
65
65
  class PlaceOrder < Alexa::IntentHandlers::Base
66
66
  def handle
67
67
  ...
68
- response # intent handlers should always return the +response+ object
68
+ response # intent handlers should always return the +response+ object
69
69
  end
70
70
  end
71
71
  end
@@ -74,7 +74,7 @@ end
74
74
 
75
75
  All intent handlers should contain a `#handle` method that has required logic
76
76
  as to how to handle the intent request. For example, adding session variables,
77
- setting response to elicit slots, delegate etc.
77
+ setting response to elicit slots, delegate etc.
78
78
 
79
79
  **Note**: `#handle` method should always return the `response` object.
80
80
  `response` object in available in the scope of `#handle`.
@@ -100,12 +100,12 @@ slot and the respecitve views are used.
100
100
  response.elicit_slot!(:SlotName)
101
101
  ```
102
102
 
103
- #### Delete response
103
+ #### Delegate response
104
104
 
105
105
  `#handle` is expected to return an instance of `Alexa::Response` or its subclasses.
106
- In normal cases, the `response` object is returned.
107
- In cases where the slots elicitation is delegated to alexa, an instance of
108
- `Alexa::Responses::Delegate` has to be returned.
106
+ In normal cases, the `response` object is returned.
107
+ In cases where the slots elicitation is delegated to alexa, an instance of
108
+ `Alexa::Responses::Delegate` has to be returned.
109
109
 
110
110
  ```ruby
111
111
  def handle
@@ -116,17 +116,17 @@ In cases where the slots elicitation is delegated to alexa, an instance of
116
116
 
117
117
  ### Views
118
118
 
119
- The content for speech and display cards is not set in the intent handler
119
+ The content for SSML and display cards is not set in the intent handler
120
120
  classes.
121
121
  We follow rails convention and expect all response content for intents to be
122
- in their respective view files.
122
+ in their respective `default` view files.
123
123
 
124
124
  Also, the views are context locale dependant.
125
125
 
126
126
  Given an intent named `PlaceOrder`, you view files would be
127
127
 
128
- * SSML: `views/alexa/en_us/intent_handlers/place_order/speech.ssml.erb`
129
- * Card: `views/alexa/en_us/intent_handlers/place_order/display.text.erb`
128
+ * SSML: `views/alexa/en_us/intent_handlers/place_order/default.ssml.erb`
129
+ * Card: `views/alexa/en_us/intent_handlers/place_order/default.text.erb`
130
130
 
131
131
  In case of slot elicitations, follow a similar convention but make sure you
132
132
  name the `ssml` and `text` files with the same name as the slot that is being
@@ -136,6 +136,25 @@ slot would have the following views
136
136
  * SSML: `views/alexa/en_us/intent_handlers/place_order/elicitations/address.ssml.erb`
137
137
  * Card: `views/alexa/en_us/intent_handlers/place_order/elicitations/address.text.erb`
138
138
 
139
+ ##### Render custom template instead of default
140
+
141
+ If you wish to force the `response` object to take contents from a different
142
+ template file instead of `default.*.erb`, pass the custom filename with
143
+ `Alexa::Response#with(template: )`.
144
+
145
+ For example: Instead of `default`, if you wish to render the contents of
146
+ `no_results.ssml.erb` and `no_results.text.erb`, return the response by forcing
147
+ the template with the following:
148
+
149
+ ```ruby
150
+ def handle
151
+ ...
152
+ return response.with(template: :no_results)
153
+ end
154
+ ```
155
+ and make sure you add your contents in the `no_results.*.erb` files in your
156
+ intent handlers' views' directory.
157
+
139
158
  #### SSML
140
159
 
141
160
  ##### Re-prompts
@@ -170,11 +189,30 @@ view file for the response as follows:
170
189
 
171
190
  ```
172
191
 
192
+ ##### Permission cards
193
+
194
+ To render a permission card. Use `ask_for_permissions_consent` as the `card_type`
195
+ and provide the scope in `permissions_scope` content_for block.
196
+ Following is an example for Device address permission card.
197
+
198
+ ```erb
199
+ <% content_for :card_type do %>
200
+ ask_for_permissions_consent
201
+ <% end %>
202
+
203
+ <% content_for :permissions_scope do %>
204
+ read::alexa:device:all:address
205
+ <% end %>
206
+ ```
207
+
208
+ *Note*: The permission card should not have any other content other than the
209
+ content for `card_type` and `permissions_scope`.
210
+
173
211
  ## Handling Amazon's Built-in Intents / Other request types
174
212
 
175
213
  Requests for Amazon's built-in intents and other request types
176
- are also handled with intent handlers.
177
- Below is the mapping for every request type and respective
214
+ are also handled with intent handlers.
215
+ Below is the mapping for every request type and respective
178
216
  intent handler classes.
179
217
  These intent handlers are not included in the gem as they are a
180
218
  but specific to the application.
@@ -58,11 +58,6 @@ module Alexa
58
58
  @_usage_count ||= context.user.usage_count_for(intent_name: request.intent_name)
59
59
  end
60
60
 
61
- def show_device_address_permission_consent_card?
62
- @_show_device_address_permission_consent_card == true
63
- end
64
-
65
-
66
61
  protected
67
62
 
68
63
  def has_all_slots?
@@ -126,14 +121,6 @@ module Alexa
126
121
  }
127
122
  end
128
123
 
129
- def show_device_address_permission_consent_card!
130
- @_show_device_address_permission_consent_card = true
131
- end
132
-
133
- def device_address_permission_consent_response
134
- @_device_address_permission_consent_response ||= Alexa::Responses::PermissionConsents::DeviceAddress.new(intent: self)
135
- end
136
-
137
124
  def delegate_response
138
125
  @_delegate_response ||= Alexa::Responses::Delegate.new
139
126
  end
@@ -8,6 +8,12 @@ module Alexa
8
8
  @slots_to_not_render_elicitation = []
9
9
  end
10
10
 
11
+ def with(template: )
12
+ # TODO make this return a new object instead of self.
13
+ @force_template_filename = template
14
+ self
15
+ end
16
+
11
17
  # Marks a slot for elicitation.
12
18
  #
13
19
  # Options:
@@ -30,9 +36,13 @@ module Alexa
30
36
  slot_to_elicit = elicit_directives.first[:slotToElicit]
31
37
  end
32
38
 
33
- template_path = "alexa/#{intent.context.locale}/intent_handlers/"\
39
+ template_path = "alexa/#{intent.context.locale.downcase}/intent_handlers/"\
34
40
  "#{intent.class.name.demodulize.underscore}"
35
41
 
42
+ if filename.nil? && @force_template_filename.present?
43
+ filename = @force_template_filename
44
+ end
45
+
36
46
  if filename.present?
37
47
  if format == :ssml
38
48
  "#{template_path}/#{filename}.ssml.erb"
@@ -40,12 +50,6 @@ module Alexa
40
50
  "#{template_path}/#{filename}.text.erb"
41
51
  end
42
52
  else
43
- if intent.show_device_address_permission_consent_card? && format == :text
44
- return Alexa::Responses::PermissionConsents::DeviceAddress.new(
45
- intent: intent
46
- ).partial_path(format: :text)
47
- end
48
-
49
53
  if slot_to_elicit.present? && !@slots_to_not_render_elicitation.include?(slot_to_elicit)
50
54
  if format == :ssml
51
55
  "#{template_path}/elicitations/#{slot_to_elicit.underscore}.ssml.erb"
@@ -54,9 +58,9 @@ module Alexa
54
58
  end
55
59
  else
56
60
  if format == :ssml
57
- "#{template_path}/speech.ssml.erb"
61
+ "#{template_path}/default.ssml.erb"
58
62
  else
59
- "#{template_path}/display.text.erb"
63
+ "#{template_path}/default.text.erb"
60
64
  end
61
65
  end
62
66
  end
@@ -8,7 +8,7 @@ module Alexa
8
8
  end
9
9
 
10
10
  def partial_path(format: :ssml)
11
- template_path = "alexa/#{intent.context.locale}/intent_handlers/"\
11
+ template_path = "alexa/#{intent.context.locale.downcase}/intent_handlers/"\
12
12
  "#{intent.class.name.demodulize.underscore}"
13
13
 
14
14
  if format == :ssml
@@ -10,7 +10,7 @@ module Alexa
10
10
 
11
11
  def partial_path(format: :ssml)
12
12
  if format == :ssml
13
- "alexa/#{intent.context.locale}/intent_handlers/"\
13
+ "alexa/#{intent.context.locale.downcase}/intent_handlers/"\
14
14
  "#{intent.class.name.demodulize.underscore}"\
15
15
  "/permission_consents/"\
16
16
  "device_address.ssml.erb"
@@ -1,3 +1,3 @@
1
1
  module Alexa
2
- VERSION = '0.1.5'
2
+ VERSION = '0.1.6'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alexa-rails
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.5
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Sri Vishnu Totakura
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2018-06-14 00:00:00.000000000 Z
11
+ date: 2018-06-24 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: rails