alexa_toolbox 1.0.3 → 1.0.4

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
  SHA1:
3
- metadata.gz: f39fcbc82cf476f7aa3ecb9284fcecee1b13e047
4
- data.tar.gz: 9039baf8fe5a872cd60f39424d76da64dbfc382c
3
+ metadata.gz: d512122e81904260c84fa1820a5611561e70e32a
4
+ data.tar.gz: 2fdb9f22ad05544f87aa4afb014204ba117a108d
5
5
  SHA512:
6
- metadata.gz: 8f87e7269bbbbf3dfdb6d1052f7cb400203125e737ab6e096bd63b877e44e980cb1c9fa90c22d306d5a03ccb61a487e96bac3a3da692fb60016bbf60c0ff2dcf
7
- data.tar.gz: 5293fdbaeab9d5bf528f7eb9087c25fc0c7a2488aa056c16a2e5cdadd19abbfea8caae7f5b46a3f774d30878dec17661d2fc8d22d4a52844670997e7765b307d
6
+ metadata.gz: 7511ebd8464acf9d9c8eb6fbe0eda787262e04779547ecbce51d5fdf92baac367f734c8ef88de7812f9a6a77a55ba550b5da1bab46fe0a796643eb808338716a
7
+ data.tar.gz: 82b839225d71eff9e1803ec69c23a6a1c5af74cd311958cc9add80791e2ddc828c6d091ba178f41b016948929e8b1dae8e3c4ebc2e2f0b8ce18358f70dca2259
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- alexa_toolbox (1.0.0)
4
+ alexa_toolbox (1.0.3)
5
5
  bundler (~> 1.14)
6
6
  rake
7
7
 
data/README.md CHANGED
@@ -342,6 +342,63 @@ request.context
342
342
 
343
343
  ### Address
344
344
 
345
+ ### DisplayDirective
346
+
347
+ You can display content on the new Echo Show using the predefined templates.
348
+ [Amazon Official Documentation Reference](https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/display-interface-reference)
349
+
350
+ #### Examples
351
+
352
+ ##### BodyTemplate1 Example
353
+
354
+ ```ruby
355
+ response = AlexaToolbox::Response.new
356
+ display_directive = AlexaToolbox::DisplayDirective.new("BodyTemplate1","Winner")
357
+ display_directive.template.add_title("You won!")
358
+ display_directive.template.hide_back_button
359
+ display_directive.template.background_image.set_content_description("Description of image")
360
+ display_directive.template.background_image.add_source("https://placeholder.com/placeholder_image.jpg")
361
+ response.add_display_directive_object(display_directive)
362
+ ```
363
+
364
+ ##### BodyTemplate3 Example
365
+
366
+ ```ruby
367
+ response = AlexaToolbox::Response.new
368
+ display_directive = AlexaToolbox::DisplayDirective.new("BodyTemplate3","SampleCard_92347")
369
+ display_directive.template.add_title("Body Template Title Example")
370
+ display_directive.template.hide_back_button
371
+ display_directive.template.text_content.add_primary_text("Example of text content. This content contains <b>bold text</b>, <i>italics</i>, and <br/> line breaks.","RichText")
372
+ image = AlexaToolbox::DisplayDirectiveImage.new("Mount St. Helens landscape","https://example.com/resources/card-images/mount-saint-helen-small.png")
373
+ display_directive.template.add_image_object(image)
374
+ response.add_display_directive_object(display_directive)
375
+ ```
376
+
377
+ ##### ListTemplate2 Example
378
+
379
+ ```ruby
380
+ response = AlexaToolbox::Response.new
381
+
382
+ display_directive = AlexaToolbox::DisplayDirective.new("ListTemplate2","list_template_two")
383
+ display_directive.template.add_title("Pizzas")
384
+ display_directive.template.hide_back_button
385
+
386
+ list_text = AlexaToolbox::DisplayDirectiveTextContent.new
387
+ list_text.add_primary_text("<font size='7'>Supreme</font> <br/> Large Pan Pizza $17.00","RichText")
388
+ list_text.add_secondary_text("Secondary Text")
389
+ list_text.add_tertiary_text("")
390
+ list_image = AlexaToolbox::DisplayDirectiveImage.new("Supreme Large Pan Pizza","http://www.example.com/images/thumb/SupremePizza1.jpg")
391
+ display_directive.template.add_item_to_list("item_1",list_image,list_text)
392
+
393
+ list_text = AlexaToolbox::DisplayDirectiveTextContent.new
394
+ list_text.add_primary_text("<font size='7'>Meat Lovers</font> <br/> Large Pan Pizza $17.00","RichText")
395
+ list_image = AlexaToolbox::DisplayDirectiveImage.new("Meat Lovers Large Pan Pizza","http://www.example.com/images/thumb/MeatLoversPizza1.jpg")
396
+ display_directive.template.add_item_to_list("item_2",list_image,list_text)
397
+
398
+ response.add_display_directive_object(display_directive)
399
+ ```
400
+
401
+
345
402
 
346
403
  ## Troubleshooting
347
404
 
@@ -0,0 +1,27 @@
1
+ module AlexaToolbox
2
+ # Handles creating display directives in responses.
3
+ # https://developer.amazon.com/public/solutions/alexa/alexa-skills-kit/docs/display-interface-reference
4
+ class DisplayDirective
5
+ require 'json'
6
+ require 'alexa_toolbox/display_directive_template'
7
+
8
+ attr_accessor :type, :template
9
+
10
+ def initialize(template,token)
11
+ @type = "Display.RenderTemplate"
12
+ if ["BodyTemplate1","BodyTemplate2","BodyTemplate3","BodyTemplate6","ListTemplate1","ListTemplate2","ListTemplate3"].include?(template)
13
+ @template = AlexaToolbox::DisplayDirectiveTemplate.new(template,token)
14
+ else
15
+ raise ArgumentError, 'Invalid display template given. Valid options are: "BodyTemplate1","BodyTemplate2","BodyTemplate3","BodyTemplate6","ListTemplate1","ListTemplate2","ListTemplate3"'
16
+ end
17
+ end
18
+
19
+ def build_directive(json = true)
20
+ data_hash = {
21
+ "type": @type,
22
+ "template": @template.build
23
+ }
24
+ json ? JSON.parse(data_hash.to_json) : data_hash
25
+ end
26
+ end
27
+ end
@@ -0,0 +1,78 @@
1
+ module AlexaToolbox
2
+ # Handles creating display directives in responses.
3
+ class DisplayDirectiveImage
4
+ require 'json'
5
+
6
+ attr_accessor :content_description, :sources
7
+
8
+ def initialize(content_description = "", url = nil)
9
+ @content_description = content_description
10
+ @sources = []
11
+ if !url.nil?
12
+ self.add_xsmall_source(url)
13
+ end
14
+ end
15
+
16
+ def set_content_description(text)
17
+ @content_description = text
18
+ end
19
+
20
+ def add_source(url,size = "X_SMALL",widthPixels = nil,heightPixels = nil)
21
+ source = {
22
+ url: url,
23
+ size: size
24
+ }
25
+ source[:widthPixels] = widthPixels if !widthPixels.nil?
26
+ source[:heightPixels] = heightPixels if !heightPixels.nil?
27
+ @sources.push(source)
28
+ end
29
+
30
+ def add_xsmall_source(url)
31
+ @sources.push({
32
+ url: url,
33
+ size: "X_SMALL"
34
+ })
35
+ end
36
+
37
+ def add_small_source(url)
38
+ @sources.push({
39
+ url: url,
40
+ size: "SMALL"
41
+ })
42
+ end
43
+
44
+ def add_medium_source(url)
45
+ @sources.push({
46
+ url: url,
47
+ size: "MEDIUM"
48
+ })
49
+ end
50
+
51
+ def add_large_source(url)
52
+ @sources.push({
53
+ url: url,
54
+ size: "LARGE"
55
+ })
56
+ end
57
+
58
+ def add_xlarge_source(url)
59
+ @sources.push({
60
+ url: url,
61
+ size: "X_LARGE"
62
+ })
63
+ end
64
+
65
+ def valid?
66
+ @content_description.length > 0 && @sources.count > 0
67
+ end
68
+
69
+ def build
70
+ data_hash = {
71
+ contentDescription: @content_description,
72
+ sources: @sources
73
+ }
74
+ data_hash
75
+ end
76
+
77
+ end
78
+ end
@@ -0,0 +1,66 @@
1
+ module AlexaToolbox
2
+ # Handles creating display directives in responses.
3
+ class DisplayDirectiveTemplate
4
+ require 'json'
5
+ require 'alexa_toolbox/display_directive_image'
6
+ require 'alexa_toolbox/display_directive_text_content'
7
+
8
+ attr_accessor :type, :token, :back_button, :background_image, :title, :text_content, :list_items
9
+
10
+ def initialize(type,token,title = nil,back_button = "VISIBLE")
11
+ @type = type
12
+ @token = token
13
+ @back_button = back_button
14
+ @background_image = AlexaToolbox::DisplayDirectiveImage.new
15
+ @title = title
16
+ @text_content = AlexaToolbox::DisplayDirectiveTextContent.new
17
+ @list_items = []
18
+ @image = nil
19
+ end
20
+
21
+ def set_token(token)
22
+ @token = token
23
+ end
24
+
25
+ def hide_back_button
26
+ @back_button = "HIDDEN"
27
+ end
28
+
29
+ def show_back_button
30
+ @back_button = "VISIBLE"
31
+ end
32
+
33
+ def add_title(title)
34
+ @title = title
35
+ end
36
+
37
+ def add_image_object(image)
38
+ @image = image
39
+ end
40
+
41
+ def add_item_to_list(token,image,text_content)
42
+ @list_items.push({
43
+ token: token,
44
+ image: image.build,
45
+ textContent: text_content.build
46
+ })
47
+ end
48
+
49
+ def build
50
+ template = {
51
+ :type => @type,
52
+ :token => @token,
53
+ :backButton => @back_button
54
+ }
55
+ template[:backgroundImage] = @background_image.build if @background_image.valid?
56
+ template[:title] = @title if !@title.nil? && @title.length > 0
57
+ template[:textContent] = @text_content.build if @text_content.valid?
58
+ template[:image] = @image.build if !@image.nil? && ["ListTemplate1","ListTemplate2","ListTemplate3","BodyTemplate2","BodyTemplate3","BodyTemplate6"].include?(@type)
59
+ template[:listItems] = @list_items if !@list_items.empty?
60
+
61
+
62
+ template
63
+ end
64
+
65
+ end
66
+ end
@@ -0,0 +1,58 @@
1
+ module AlexaToolbox
2
+ # Handles creating display directives in responses.
3
+ class DisplayDirectiveTextContent
4
+ require 'json'
5
+
6
+ attr_accessor :text_content
7
+
8
+ def initialize
9
+ @text_content = {}
10
+ end
11
+
12
+ def add_text(slot,text,type = "PlainText")
13
+ if ["primary","tertiary","secondary"].include?(slot)
14
+ @text_content[slot + "Text"] = {
15
+ text: text,
16
+ type: type
17
+ }
18
+ elsif ["primaryText","secondaryText","tertiaryText"].include?(slot)
19
+ @text_content[slot] = {
20
+ text: text,
21
+ type: type
22
+ }
23
+ else
24
+ raise ArgumentError, 'Invalid text type given. Valid options are: "primary","tertiary","secondary","primaryText","secondaryText","tertiaryText"'
25
+ end
26
+ end
27
+
28
+ def add_primary_text(text,type = "PlainText")
29
+ @text_content["primaryText"] = {
30
+ text: text,
31
+ type: type
32
+ }
33
+ end
34
+
35
+ def add_secondary_text(text,type = "PlainText")
36
+ @text_content["secondaryText"] = {
37
+ text: text,
38
+ type: type
39
+ }
40
+ end
41
+
42
+ def add_tertiary_text(text,type = "PlainText")
43
+ @text_content["tertiaryText"] = {
44
+ text: text,
45
+ type: type
46
+ }
47
+ end
48
+
49
+ def valid?
50
+ @text_content != {}
51
+ end
52
+
53
+ def build
54
+ @text_content
55
+ end
56
+
57
+ end
58
+ end
@@ -50,6 +50,10 @@ module AlexaToolbox
50
50
  def add_ssml_reprompt(speech_text)
51
51
  @reprompt = { "outputSpeech" => { :type => 'SSML', :ssml => check_ssml(speech_text) } }
52
52
  end
53
+
54
+ def add_display_directive_object(display_directive)
55
+ @directives << display_directive.build_directive
56
+ end
53
57
 
54
58
  def add_audio_play_directive(url, play_behavior = '', token = '', expected_previous_token = '', offset = 0)
55
59
  directive = {
@@ -1,3 +1,3 @@
1
1
  module AlexaToolbox
2
- VERSION = '1.0.3'
2
+ VERSION = '1.0.4'
3
3
  end
data/lib/alexa_toolbox.rb CHANGED
@@ -2,6 +2,7 @@ require 'alexa_toolbox/request'
2
2
  require 'alexa_toolbox/version'
3
3
  require 'alexa_toolbox/response'
4
4
  require 'alexa_toolbox/address'
5
+ require 'alexa_toolbox/display_directive'
5
6
 
6
7
  module AlexaToolbox
7
8
  # Prints a JSON object.
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: alexa_toolbox
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.0.3
4
+ version: 1.0.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Paul McMahon
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2017-06-24 00:00:00.000000000 Z
11
+ date: 2017-07-01 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: bundler
@@ -94,6 +94,10 @@ files:
94
94
  - lib/alexa_toolbox/address.rb
95
95
  - lib/alexa_toolbox/audioplayer.rb
96
96
  - lib/alexa_toolbox/context.rb
97
+ - lib/alexa_toolbox/display_directive.rb
98
+ - lib/alexa_toolbox/display_directive_image.rb
99
+ - lib/alexa_toolbox/display_directive_template.rb
100
+ - lib/alexa_toolbox/display_directive_text_content.rb
97
101
  - lib/alexa_toolbox/intent.rb
98
102
  - lib/alexa_toolbox/request.rb
99
103
  - lib/alexa_toolbox/response.rb