aws-lex-conversation 0.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 +7 -0
- data/.github/workflows/ci.yml +35 -0
- data/.gitignore +15 -0
- data/.rspec +3 -0
- data/.rubocop.yml +29 -0
- data/.simplecov +5 -0
- data/CODE_OF_CONDUCT.md +74 -0
- data/Gemfile +12 -0
- data/LICENSE.md +21 -0
- data/README.md +160 -0
- data/Rakefile +11 -0
- data/aws-lex-conversation.gemspec +38 -0
- data/bin/console +15 -0
- data/bin/setup +8 -0
- data/lib/aws-lex-conversation.rb +3 -0
- data/lib/aws/lex/conversation.rb +58 -0
- data/lib/aws/lex/conversation/base.rb +40 -0
- data/lib/aws/lex/conversation/handler/base.rb +34 -0
- data/lib/aws/lex/conversation/handler/delegate.rb +17 -0
- data/lib/aws/lex/conversation/handler/echo.rb +24 -0
- data/lib/aws/lex/conversation/response/base.rb +30 -0
- data/lib/aws/lex/conversation/response/close.rb +29 -0
- data/lib/aws/lex/conversation/response/confirm_intent.rb +31 -0
- data/lib/aws/lex/conversation/response/delegate.rb +29 -0
- data/lib/aws/lex/conversation/response/elicit_intent.rb +27 -0
- data/lib/aws/lex/conversation/response/elicit_slot.rb +33 -0
- data/lib/aws/lex/conversation/support/inflector.rb +43 -0
- data/lib/aws/lex/conversation/support/responses.rb +56 -0
- data/lib/aws/lex/conversation/type/base.rb +95 -0
- data/lib/aws/lex/conversation/type/bot.rb +17 -0
- data/lib/aws/lex/conversation/type/confirmation_status.rb +17 -0
- data/lib/aws/lex/conversation/type/current_intent.rb +34 -0
- data/lib/aws/lex/conversation/type/dialog_action_type.rb +19 -0
- data/lib/aws/lex/conversation/type/enumeration.rb +44 -0
- data/lib/aws/lex/conversation/type/event.rb +37 -0
- data/lib/aws/lex/conversation/type/fulfillment_state.rb +16 -0
- data/lib/aws/lex/conversation/type/invocation_source.rb +16 -0
- data/lib/aws/lex/conversation/type/message.rb +20 -0
- data/lib/aws/lex/conversation/type/message/content_type.rb +19 -0
- data/lib/aws/lex/conversation/type/output_dialog_mode.rb +16 -0
- data/lib/aws/lex/conversation/type/recent_intent_summary_view.rb +29 -0
- data/lib/aws/lex/conversation/type/response.rb +17 -0
- data/lib/aws/lex/conversation/type/response_card.rb +23 -0
- data/lib/aws/lex/conversation/type/response_card/button.rb +18 -0
- data/lib/aws/lex/conversation/type/response_card/content_type.rb +17 -0
- data/lib/aws/lex/conversation/type/response_card/generic_attachment.rb +26 -0
- data/lib/aws/lex/conversation/type/sentiment_label.rb +18 -0
- data/lib/aws/lex/conversation/type/sentiment_response.rb +21 -0
- data/lib/aws/lex/conversation/type/sentiment_score.rb +35 -0
- data/lib/aws/lex/conversation/type/slot_detail.rb +20 -0
- data/lib/aws/lex/conversation/type/slot_resolution.rb +15 -0
- data/lib/aws/lex/conversation/version.rb +9 -0
- metadata +117 -0
| @@ -0,0 +1,95 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Aws
         | 
| 4 | 
            +
              module Lex
         | 
| 5 | 
            +
                class Conversation
         | 
| 6 | 
            +
                  module Type
         | 
| 7 | 
            +
                    module Base
         | 
| 8 | 
            +
                      def self.included(base)
         | 
| 9 | 
            +
                        base.include(Shrink::Wrap)
         | 
| 10 | 
            +
                        base.include(InstanceMethods)
         | 
| 11 | 
            +
                        base.extend(ClassMethods)
         | 
| 12 | 
            +
                        base.transform(Shrink::Wrap::Transformer::Symbolize)
         | 
| 13 | 
            +
                        base.class_eval do
         | 
| 14 | 
            +
                          def initialize(opts = {})
         | 
| 15 | 
            +
                            assign_attributes!(opts)
         | 
| 16 | 
            +
                          end
         | 
| 17 | 
            +
                        end
         | 
| 18 | 
            +
                      end
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                      module InstanceMethods
         | 
| 21 | 
            +
                        def assign_attributes!(opts = {})
         | 
| 22 | 
            +
                          self.class.attributes.each do |attribute|
         | 
| 23 | 
            +
                            instance_variable_set("@#{attribute}", opts[attribute])
         | 
| 24 | 
            +
                          end
         | 
| 25 | 
            +
                        end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                        def to_lex
         | 
| 28 | 
            +
                          self.class.attributes.each_with_object({}) do |attribute, hash|
         | 
| 29 | 
            +
                            value = transform_to_lex(instance_variable_get("@#{attribute}"))
         | 
| 30 | 
            +
                            hash[self.class.mapping.fetch(attribute)] = value
         | 
| 31 | 
            +
                          end
         | 
| 32 | 
            +
                        end
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                        private
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                        def transform_to_lex(value)
         | 
| 37 | 
            +
                          case value
         | 
| 38 | 
            +
                          when Hash
         | 
| 39 | 
            +
                            value.each_with_object({}) do |(key, val), hash|
         | 
| 40 | 
            +
                              hash[key.to_sym] = transform_to_lex(val)
         | 
| 41 | 
            +
                            end
         | 
| 42 | 
            +
                          when Array
         | 
| 43 | 
            +
                            value.map { |v| transform_to_lex(v) }
         | 
| 44 | 
            +
                          else
         | 
| 45 | 
            +
                            if value.respond_to?(:to_lex)
         | 
| 46 | 
            +
                              value.to_lex
         | 
| 47 | 
            +
                            else
         | 
| 48 | 
            +
                              value
         | 
| 49 | 
            +
                            end
         | 
| 50 | 
            +
                          end
         | 
| 51 | 
            +
                        end
         | 
| 52 | 
            +
                      end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                      module ClassMethods
         | 
| 55 | 
            +
                        def integer!
         | 
| 56 | 
            +
                          ->(v) { v.to_i }
         | 
| 57 | 
            +
                        end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                        def symbolize_hash!
         | 
| 60 | 
            +
                          ->(v) { v.transform_keys(&:to_sym) }
         | 
| 61 | 
            +
                        end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                        def required(attribute, opts = {})
         | 
| 64 | 
            +
                          property(attribute, opts.merge(allow_nil: false))
         | 
| 65 | 
            +
                        end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                        def optional(attribute, opts = {})
         | 
| 68 | 
            +
                          property(attribute, opts.merge(allow_nil: true))
         | 
| 69 | 
            +
                        end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                        def property(attribute, opts = {})
         | 
| 72 | 
            +
                          from = opts.fetch(:from) do
         | 
| 73 | 
            +
                            Support::Inflector.new(attribute).to_camel_case.to_sym
         | 
| 74 | 
            +
                          end
         | 
| 75 | 
            +
                          params = { from: from }.merge(opts)
         | 
| 76 | 
            +
             | 
| 77 | 
            +
                          attr_accessor(attribute)
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                          mapping[attribute] = from
         | 
| 80 | 
            +
                          translate(attribute => params)
         | 
| 81 | 
            +
                        end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                        def attributes
         | 
| 84 | 
            +
                          @attributes ||= mapping.keys
         | 
| 85 | 
            +
                        end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                        def mapping
         | 
| 88 | 
            +
                          @mapping ||= {}
         | 
| 89 | 
            +
                        end
         | 
| 90 | 
            +
                      end
         | 
| 91 | 
            +
                    end
         | 
| 92 | 
            +
                  end
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
              end
         | 
| 95 | 
            +
            end
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Aws
         | 
| 4 | 
            +
              module Lex
         | 
| 5 | 
            +
                class Conversation
         | 
| 6 | 
            +
                  module Type
         | 
| 7 | 
            +
                    class ConfirmationStatus
         | 
| 8 | 
            +
                      include Enumeration
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                      enumeration('None')
         | 
| 11 | 
            +
                      enumeration('Confirmed')
         | 
| 12 | 
            +
                      enumeration('Denied')
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,34 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Aws
         | 
| 4 | 
            +
              module Lex
         | 
| 5 | 
            +
                class Conversation
         | 
| 6 | 
            +
                  module Type
         | 
| 7 | 
            +
                    class CurrentIntent
         | 
| 8 | 
            +
                      include Base
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                      required :name
         | 
| 11 | 
            +
                      required :slots
         | 
| 12 | 
            +
                      required :slot_details
         | 
| 13 | 
            +
                      required :confirmation_status
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                      class << self
         | 
| 16 | 
            +
                        def slot_details!
         | 
| 17 | 
            +
                          ->(v) do
         | 
| 18 | 
            +
                            v.each_with_object({}) do |(key, value), hash|
         | 
| 19 | 
            +
                              hash[key.to_sym] = SlotDetail.shrink_wrap(value)
         | 
| 20 | 
            +
                            end
         | 
| 21 | 
            +
                          end
         | 
| 22 | 
            +
                        end
         | 
| 23 | 
            +
                      end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                      coerce(
         | 
| 26 | 
            +
                        slots: symbolize_hash!,
         | 
| 27 | 
            +
                        slot_details: slot_details!,
         | 
| 28 | 
            +
                        confirmation_status: ConfirmationStatus
         | 
| 29 | 
            +
                      )
         | 
| 30 | 
            +
                    end
         | 
| 31 | 
            +
                  end
         | 
| 32 | 
            +
                end
         | 
| 33 | 
            +
              end
         | 
| 34 | 
            +
            end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Aws
         | 
| 4 | 
            +
              module Lex
         | 
| 5 | 
            +
                class Conversation
         | 
| 6 | 
            +
                  module Type
         | 
| 7 | 
            +
                    class DialogActionType
         | 
| 8 | 
            +
                      include Enumeration
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                      enumeration('ElicitIntent')
         | 
| 11 | 
            +
                      enumeration('ElicitSlot')
         | 
| 12 | 
            +
                      enumeration('ConfirmIntent')
         | 
| 13 | 
            +
                      enumeration('Delegate')
         | 
| 14 | 
            +
                      enumeration('Close')
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| @@ -0,0 +1,44 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Aws
         | 
| 4 | 
            +
              module Lex
         | 
| 5 | 
            +
                class Conversation
         | 
| 6 | 
            +
                  module Type
         | 
| 7 | 
            +
                    module Enumeration
         | 
| 8 | 
            +
                      def self.included(base)
         | 
| 9 | 
            +
                        base.extend(ClassMethods)
         | 
| 10 | 
            +
                        base.include(InstanceMethods)
         | 
| 11 | 
            +
                        base.attr_accessor(:raw)
         | 
| 12 | 
            +
                        base.class_eval do
         | 
| 13 | 
            +
                          def initialize(raw)
         | 
| 14 | 
            +
                            self.raw = raw
         | 
| 15 | 
            +
                          end
         | 
| 16 | 
            +
                        end
         | 
| 17 | 
            +
                      end
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      module InstanceMethods
         | 
| 20 | 
            +
                        def to_lex
         | 
| 21 | 
            +
                          raw # maintain original casing
         | 
| 22 | 
            +
                        end
         | 
| 23 | 
            +
                      end
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                      module ClassMethods
         | 
| 26 | 
            +
                        def enumeration(value)
         | 
| 27 | 
            +
                          enumerations << value
         | 
| 28 | 
            +
                          snake_case = Support::Inflector.new(value).to_snake_case
         | 
| 29 | 
            +
                          class_eval(
         | 
| 30 | 
            +
                            "def #{snake_case}?; raw.casecmp('#{value}').zero?; end",
         | 
| 31 | 
            +
                            __FILE__,
         | 
| 32 | 
            +
                            __LINE__ - 2
         | 
| 33 | 
            +
                          )
         | 
| 34 | 
            +
                        end
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                        def enumerations
         | 
| 37 | 
            +
                          @enumerations ||= []
         | 
| 38 | 
            +
                        end
         | 
| 39 | 
            +
                      end
         | 
| 40 | 
            +
                    end
         | 
| 41 | 
            +
                  end
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
            end
         | 
| @@ -0,0 +1,37 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Aws
         | 
| 4 | 
            +
              module Lex
         | 
| 5 | 
            +
                class Conversation
         | 
| 6 | 
            +
                  module Type
         | 
| 7 | 
            +
                    class Event
         | 
| 8 | 
            +
                      include Base
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                      required :current_intent
         | 
| 11 | 
            +
                      required :bot
         | 
| 12 | 
            +
                      required :user_id
         | 
| 13 | 
            +
                      required :input_transcript
         | 
| 14 | 
            +
                      required :invocation_source
         | 
| 15 | 
            +
                      required :output_dialog_mode
         | 
| 16 | 
            +
                      required :message_version
         | 
| 17 | 
            +
                      required :session_attributes
         | 
| 18 | 
            +
                      required :recent_intent_summary_view
         | 
| 19 | 
            +
                      optional :request_attributes
         | 
| 20 | 
            +
                      optional :sentiment_response
         | 
| 21 | 
            +
                      optional :kendra_response
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                      coerce(
         | 
| 24 | 
            +
                        current_intent: CurrentIntent,
         | 
| 25 | 
            +
                        bot: Bot,
         | 
| 26 | 
            +
                        invocation_source: InvocationSource,
         | 
| 27 | 
            +
                        output_dialog_mode: OutputDialogMode,
         | 
| 28 | 
            +
                        session_attributes: symbolize_hash!,
         | 
| 29 | 
            +
                        request_attributes: symbolize_hash!,
         | 
| 30 | 
            +
                        recent_intent_summary_view: Array[RecentIntentSummaryView],
         | 
| 31 | 
            +
                        sentiment_response: SentimentResponse
         | 
| 32 | 
            +
                      )
         | 
| 33 | 
            +
                    end
         | 
| 34 | 
            +
                  end
         | 
| 35 | 
            +
                end
         | 
| 36 | 
            +
              end
         | 
| 37 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Aws
         | 
| 4 | 
            +
              module Lex
         | 
| 5 | 
            +
                class Conversation
         | 
| 6 | 
            +
                  module Type
         | 
| 7 | 
            +
                    class Message
         | 
| 8 | 
            +
                      include Base
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                      optional :content_type, default: 'PlainText'
         | 
| 11 | 
            +
                      required :content
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                      coerce(
         | 
| 14 | 
            +
                        content_type: Message::ContentType
         | 
| 15 | 
            +
                      )
         | 
| 16 | 
            +
                    end
         | 
| 17 | 
            +
                  end
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,19 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Aws
         | 
| 4 | 
            +
              module Lex
         | 
| 5 | 
            +
                class Conversation
         | 
| 6 | 
            +
                  module Type
         | 
| 7 | 
            +
                    class Message
         | 
| 8 | 
            +
                      class ContentType
         | 
| 9 | 
            +
                        include Enumeration
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                        enumeration('PlainText')
         | 
| 12 | 
            +
                        enumeration('SSML')
         | 
| 13 | 
            +
                        enumeration('CustomPayload')
         | 
| 14 | 
            +
                      end
         | 
| 15 | 
            +
                    end
         | 
| 16 | 
            +
                  end
         | 
| 17 | 
            +
                end
         | 
| 18 | 
            +
              end
         | 
| 19 | 
            +
            end
         | 
| @@ -0,0 +1,29 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Aws
         | 
| 4 | 
            +
              module Lex
         | 
| 5 | 
            +
                class Conversation
         | 
| 6 | 
            +
                  module Type
         | 
| 7 | 
            +
                    class RecentIntentSummaryView
         | 
| 8 | 
            +
                      include Base
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                      required :intent_name
         | 
| 11 | 
            +
                      required :slots
         | 
| 12 | 
            +
                      required :confirmation_status
         | 
| 13 | 
            +
                      required :dialog_action_type
         | 
| 14 | 
            +
                      required :slot_to_elicit
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                      optional :fulfillment_state
         | 
| 17 | 
            +
                      optional :checkpoint_label
         | 
| 18 | 
            +
             | 
| 19 | 
            +
                      coerce(
         | 
| 20 | 
            +
                        slots: symbolize_hash!,
         | 
| 21 | 
            +
                        confirmation_status: ConfirmationStatus,
         | 
| 22 | 
            +
                        dialog_action_type: DialogActionType,
         | 
| 23 | 
            +
                        fulfillment_state: FulfillmentState
         | 
| 24 | 
            +
                      )
         | 
| 25 | 
            +
                    end
         | 
| 26 | 
            +
                  end
         | 
| 27 | 
            +
                end
         | 
| 28 | 
            +
              end
         | 
| 29 | 
            +
            end
         | 
| @@ -0,0 +1,17 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Aws
         | 
| 4 | 
            +
              module Lex
         | 
| 5 | 
            +
                class Conversation
         | 
| 6 | 
            +
                  module Type
         | 
| 7 | 
            +
                    class Response
         | 
| 8 | 
            +
                      include Base
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                      required :dialog_action
         | 
| 11 | 
            +
                      optional :session_attributes
         | 
| 12 | 
            +
                      optional :recent_intent_summary_view
         | 
| 13 | 
            +
                    end
         | 
| 14 | 
            +
                  end
         | 
| 15 | 
            +
                end
         | 
| 16 | 
            +
              end
         | 
| 17 | 
            +
            end
         | 
| @@ -0,0 +1,23 @@ | |
| 1 | 
            +
            # frozen_string_literal: true
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module Aws
         | 
| 4 | 
            +
              module Lex
         | 
| 5 | 
            +
                class Conversation
         | 
| 6 | 
            +
                  module Type
         | 
| 7 | 
            +
                    class ResponseCard
         | 
| 8 | 
            +
                      include Base
         | 
| 9 | 
            +
             | 
| 10 | 
            +
                      optional :version
         | 
| 11 | 
            +
                      optional :content_type, default: 'application/vnd.amazonaws.card.generic'
         | 
| 12 | 
            +
                      required :generic_attachments
         | 
| 13 | 
            +
             | 
| 14 | 
            +
                      coerce(
         | 
| 15 | 
            +
                        version: integer!,
         | 
| 16 | 
            +
                        content_type: ResponseCard::ContentType,
         | 
| 17 | 
            +
                        generic_attachments: Array[GenericAttachment]
         | 
| 18 | 
            +
                      )
         | 
| 19 | 
            +
                    end
         | 
| 20 | 
            +
                  end
         | 
| 21 | 
            +
                end
         | 
| 22 | 
            +
              end
         | 
| 23 | 
            +
            end
         |