class AlexaModelMd
Public Class Methods
new(wiki=nil, keywords={})
click to toggle source
Calls superclass method
# File lib/alexa_modelmd.rb, line 39 def initialize(wiki=nil, keywords={}) wcis = keywords.delete :whatcanisay puts 'wcis: ' + wcis.inspect if @debug super(wiki, keywords) if wcis then found = self.find 'What can I say' if not found then s=<<EOF # What can I say ## WhatCanISay * what can I say * give me some examples ` #rsc.alexamodelmd.sample_utterances '#{self.title}' "Not yet enabled." ` + help whatcanisay EOF self.create_section s end end end
Public Instance Methods
endpoint()
click to toggle source
# File lib/alexa_modelmd.rb, line 92 def endpoint() @dxsx.dx.endpoint end
endpoint=(s)
click to toggle source
# File lib/alexa_modelmd.rb, line 93 def endpoint=(s) @dxsx.dx.endpoint = s end
entries()
click to toggle source
Calls superclass method
# File lib/alexa_modelmd.rb, line 75 def entries() r = super() r.map do |entry| def entry.intents() puts 'entries | x: ' + x.inspect if @debug self.body().split(/(?=^## )/).map {|x| Intent.new(x, debug: @debug)} end entry end end
invocation()
click to toggle source
# File lib/alexa_modelmd.rb, line 94 def invocation() @dxsx.dx.invocation end
invocation=(s)
click to toggle source
# File lib/alexa_modelmd.rb, line 95 def invocation=(s) @dxsx.dx.invocation = s end
save_rsf()
click to toggle source
# File lib/alexa_modelmd.rb, line 97 def save_rsf() if @dxsx.dx.respond_to? :rsf_file then FileX.write @dxsx.dx.rsf_file, to_rsf() else raise AMSummaryExceptiom, 'no rsf_file summary field found' end end
save_txt()
click to toggle source
# File lib/alexa_modelmd.rb, line 105 def save_txt() if @dxsx.dx.respond_to? :txt_file then FileX.write @dxsx.dx.txt_file, to_txt() else raise AMSummaryExceptiom, 'no txt_file summary field found' end end
to_doc()
click to toggle source
note: An intent or an utterance can't contain numbers
# File lib/alexa_modelmd.rb, line 134 def to_doc() a = RexleBuilder.build do |xml| xml.model do xml.summary do xml.title @dxsx.dx.title xml.invocation @dxsx.dx.invocation xml.endpoint @dxsx.dx.endpoint end xml.entries do entries.each do |entry| xml.entry do xml.topic entry.heading.strip xml.intents do entry.intents.each do |intent| xml.intent do xml.name intent.name.gsub(/\d+/, '') xml.utterances do intent.utterances.each do |utterance| xml.utterance utterance.gsub(/\d+/, '') end end xml.code do xml.cdata! intent.code end end #/intent end end #/intents xml.tags do entry.tags.each do |tag| xml.tag tag end end end end end #/entries end #/model end Rexle.new(a) end
to_md()
click to toggle source
Transforms the document into an Alexa_modelmd formatted document
# File lib/alexa_modelmd.rb, line 115 def to_md Rexslt.new(md_xslt(), to_xml(), debug: @debug).to_s end
to_modelb()
click to toggle source
This generates a plain text file representing the Alexa Model to be built using the alexa_modelbuilder gem
# File lib/alexa_modelmd.rb, line 122 def to_modelb Rexslt.new(modelbuilder_xslt(), to_xml()).to_s end
Also aliased as: to_txt
to_rsf()
click to toggle source
# File lib/alexa_modelmd.rb, line 128 def to_rsf Rexslt.new(rsf_xslt(), to_xml(), debug: @debug).to_s end
to_xml()
click to toggle source
# File lib/alexa_modelmd.rb, line 189 def to_xml() to_doc.xml pretty: true end
utterances()
click to toggle source
# File lib/alexa_modelmd.rb, line 193 def utterances() to_doc.root.xpath('//entries/entry/intents/intent/' + 'utterances/utterance').map(&:text) end
Private Instance Methods
md_xslt()
click to toggle source
# File lib/alexa_modelmd.rb, line 295 def md_xslt() <<EOF <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> <xsl:template match='model'> <xsl:text disable-output-escaping="yes"><?dynarex schema="sections[title, invocation, endpoint]/section(x)" format_mask="[!x]"?></xsl:text> title: <xsl:value-of select='summary/title'/> invocation: <xsl:value-of select='summary/invocation'/> endpoint: <xsl:value-of select='summary/endpoint'/> --# <xsl:apply-templates select='entries/entry' /> <xsl:text> </xsl:text> </xsl:template> <xsl:template match='entries/entry'> <xsl:text> </xsl:text> <xsl:text># </xsl:text><xsl:value-of select='topic' /><xsl:text> </xsl:text> <xsl:apply-templates select='intents/intent' /><xsl:text> +</xsl:text> <xsl:apply-templates select='tags/tag' /> <xsl:text> </xsl:text> </xsl:template> <xsl:template match='intents/intent'><xsl:text> </xsl:text> <xsl:text> ## </xsl:text><xsl:value-of select='name' /><xsl:text> </xsl:text> <xsl:apply-templates select='utterances/utterance' /><xsl:text> </xsl:text> <xsl:text> `</xsl:text> <xsl:value-of select='code' /> <xsl:text>`</xsl:text> </xsl:template> <xsl:template match='utterances/utterance'> * <xsl:value-of select='.'/> </xsl:template> <xsl:template match='tags/tag'> <xsl:text> </xsl:text><xsl:value-of select='.'/> </xsl:template> </xsl:stylesheet> EOF end
modelbuilder_xslt()
click to toggle source
# File lib/alexa_modelmd.rb, line 200 def modelbuilder_xslt() <<EOF <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> <xsl:template match='model'>name: <xsl:value-of select='summary/title' /> invocation: <xsl:value-of select='summary/invocation' /> <xsl:text> </xsl:text> <xsl:apply-templates select='entries/entry' /> endpoint: <xsl:value-of select='summary/endpoint' /> </xsl:template> <xsl:template match='entries/entry'> # <xsl:value-of select='topic' /><xsl:text> </xsl:text> <xsl:apply-templates select='intents/intent' /> </xsl:template> <xsl:template match='intents/intent'> <xsl:text> </xsl:text> <xsl:value-of select='name' /> <xsl:apply-templates select='utterances/utterance' /> <xsl:text> </xsl:text> </xsl:template> <xsl:template match='utterances/utterance'> <xsl:text> </xsl:text> <xsl:value-of select='.' /> </xsl:template> </xsl:stylesheet> EOF end
rsf_xslt()
click to toggle source
# File lib/alexa_modelmd.rb, line 241 def rsf_xslt() <<EOF <xsl:stylesheet xmlns:xsl='http://www.w3.org/1999/XSL/Transform' version='1.0'> <xsl:output method="xml" indent="yes" omit-xml-declaration="yes" /> <xsl:template match='model'> <xsl:element name='skill'> <xsl:text> </xsl:text> <xsl:apply-templates select='entries/entry' /> <xsl:text> </xsl:text> </xsl:element> </xsl:template> <xsl:template match='entries/entry'> <xsl:text> </xsl:text> <xsl:comment><xsl:text> </xsl:text><xsl:value-of select='topic' /><xsl:text> </xsl:text></xsl:comment><xsl:text> </xsl:text> <xsl:apply-templates select='intents/intent' /> <xsl:text> </xsl:text><xsl:comment><xsl:text> // </xsl:text><xsl:value-of select='topic' /><xsl:text> </xsl:text></xsl:comment><xsl:text> </xsl:text> </xsl:template> <xsl:template match='intents/intent'><xsl:text> </xsl:text> <xsl:element name='response'> <xsl:attribute name='id'><xsl:value-of select='name' /></xsl:attribute><xsl:text> </xsl:text> <xsl:element name='script'> <xsl:text disable-output-escaping="yes"> <![CDATA[ </xsl:text> <xsl:value-of select='code' /> <xsl:text disable-output-escaping="yes"> ]]></xsl:text> <xsl:text> </xsl:text> </xsl:element> <xsl:text> </xsl:text> </xsl:element><xsl:text> </xsl:text> </xsl:template> </xsl:stylesheet> EOF end