RecastAI 2.1.1 → 3.0.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 +4 -4
- data/Gemfile.lock +5 -6
- data/README.md +19 -19
- data/lib/recastai.rb +18 -8
- data/lib/recastai/apis/connect/connect.rb +16 -0
- data/lib/recastai/apis/connect/message.rb +44 -0
- data/lib/recastai/apis/connect/models/message.rb +20 -0
- data/lib/recastai/apis/connect/utils.rb +9 -0
- data/lib/recastai/{errors.rb → apis/errors.rb} +1 -1
- data/lib/recastai/apis/request/analyse.rb +45 -0
- data/lib/recastai/apis/request/converse.rb +50 -0
- data/lib/recastai/{action.rb → apis/request/models/action.rb} +0 -2
- data/lib/recastai/apis/request/models/conversation.rb +105 -0
- data/lib/recastai/{entity.rb → apis/request/models/entity.rb} +0 -4
- data/lib/recastai/{intent.rb → apis/request/models/intent.rb} +0 -2
- data/lib/recastai/apis/request/models/response.rb +119 -0
- data/lib/recastai/apis/request/request.rb +18 -0
- data/lib/recastai/apis/request/utils.rb +30 -0
- data/lib/recastai/utils.rb +7 -26
- metadata +17 -10
- data/lib/recastai/client.rb +0 -104
- data/lib/recastai/conversation.rb +0 -182
- data/lib/recastai/response.rb +0 -227
    
        checksums.yaml
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            ---
         | 
| 2 2 | 
             
            SHA1:
         | 
| 3 | 
            -
              metadata.gz:  | 
| 4 | 
            -
              data.tar.gz:  | 
| 3 | 
            +
              metadata.gz: 8e0d9d38204152540d567fca3d5d666bc1074bff
         | 
| 4 | 
            +
              data.tar.gz: 6c75863441add341d3832dc812ed281088d68da7
         | 
| 5 5 | 
             
            SHA512:
         | 
| 6 | 
            -
              metadata.gz:  | 
| 7 | 
            -
              data.tar.gz:  | 
| 6 | 
            +
              metadata.gz: fd45c6c44cfd34dd279b9a45399284c6085a61404b98e08b308b24220085510f5d60be5d5bf9de0969e3318c10719e29dd3876af0f9d73535c5ed8feab34ff83
         | 
| 7 | 
            +
              data.tar.gz: 4c8f99a187d5db0885f10b1166602ce0e52a7d1142c00eb3c3fc8697e4b885d931fa5d171e2a5e6dc560aba8c3543b78eb07cfa5b5cd9917bec1fb0ea10b1c1f
         | 
    
        data/Gemfile.lock
    CHANGED
    
    | @@ -1,7 +1,7 @@ | |
| 1 1 | 
             
            PATH
         | 
| 2 2 | 
             
              remote: .
         | 
| 3 3 | 
             
              specs:
         | 
| 4 | 
            -
                RecastAI ( | 
| 4 | 
            +
                RecastAI (3.0.0)
         | 
| 5 5 | 
             
                  httmultiparty (~> 0.3)
         | 
| 6 6 | 
             
                  httparty (~> 0.13)
         | 
| 7 7 |  | 
| @@ -19,12 +19,11 @@ GEM | |
| 19 19 | 
             
                  httparty (>= 0.7.3)
         | 
| 20 20 | 
             
                  mimemagic
         | 
| 21 21 | 
             
                  multipart-post
         | 
| 22 | 
            -
                httparty (0. | 
| 23 | 
            -
                  json (~> 1.8)
         | 
| 22 | 
            +
                httparty (0.14.0)
         | 
| 24 23 | 
             
                  multi_xml (>= 0.5.2)
         | 
| 25 24 | 
             
                json (1.8.3)
         | 
| 26 | 
            -
                mimemagic (0.3. | 
| 27 | 
            -
                multi_xml (0. | 
| 25 | 
            +
                mimemagic (0.3.2)
         | 
| 26 | 
            +
                multi_xml (0.6.0)
         | 
| 28 27 | 
             
                multipart-post (2.0.0)
         | 
| 29 28 | 
             
                rspec (3.4.0)
         | 
| 30 29 | 
             
                  rspec-core (~> 3.4.0)
         | 
| @@ -61,4 +60,4 @@ DEPENDENCIES | |
| 61 60 | 
             
              webmock (~> 1.24)
         | 
| 62 61 |  | 
| 63 62 | 
             
            BUNDLED WITH
         | 
| 64 | 
            -
               1. | 
| 63 | 
            +
               1.14.5
         | 
    
        data/README.md
    CHANGED
    
    | @@ -9,35 +9,35 @@ Recast.AI official SDK in Ruby | |
| 9 9 | 
             
            ## Synospis
         | 
| 10 10 |  | 
| 11 11 | 
             
            This module is a wrapper around the [Recast.AI](https://recast.ai) API, and allows you to:
         | 
| 12 | 
            -
            * [ | 
| 13 | 
            -
            * [ | 
| 12 | 
            +
            * [Analyse your text](https://github.com/RecastAI/SDK-Ruby/wiki/01---Analyse-text)
         | 
| 13 | 
            +
            * [Manage a conversation](https://github.com/RecastAI/SDK-Ruby/wiki/02---Manage-conversation)
         | 
| 14 | 
            +
            * [Receive and send messages](https://github.com/RecastAI/SDK-Ruby/wiki/03---Receive-and-send-messages)
         | 
| 14 15 |  | 
| 15 16 | 
             
            ## Installation
         | 
| 16 17 |  | 
| 18 | 
            +
            This gem supports ruby 2.3+.
         | 
| 19 | 
            +
             | 
| 17 20 | 
             
            ```bash
         | 
| 18 | 
            -
            gem install  | 
| 21 | 
            +
            gem install RecastAI
         | 
| 19 22 | 
             
            ```
         | 
| 20 23 |  | 
| 21 | 
            -
             | 
| 22 | 
            -
             | 
| 23 | 
            -
            You can find the full documentation [here](https://github.com/RecastAI/SDK-Ruby/wiki).
         | 
| 24 | 
            +
            You can now use the sdk in your code.
         | 
| 24 25 |  | 
| 25 | 
            -
             | 
| 26 | 
            +
            Using the entire SDK:
         | 
| 27 | 
            +
            ```ruby
         | 
| 28 | 
            +
            require 'recastai'
         | 
| 26 29 |  | 
| 27 | 
            -
             | 
| 30 | 
            +
            client = RecastAI.new('YOUR_TOKEN')
         | 
| 31 | 
            +
            ```
         | 
| 28 32 |  | 
| 29 | 
            -
             | 
| 33 | 
            +
            Extracting one single API:
         | 
| 34 | 
            +
            ```ruby
         | 
| 35 | 
            +
            require 'recastai'
         | 
| 30 36 |  | 
| 31 | 
            -
             | 
| 32 | 
            -
             | 
| 33 | 
            -
             | 
| 34 | 
            -
            * [Action](https://github.com/RecastAI/SDK-Ruby/wiki/Class-Action) represents an action to do when using the text_converse method.
         | 
| 35 | 
            -
            * [Intent](https://github.com/RecastAI/SDK-Ruby/wiki/Class-Intent) represents an intent matched when using either the text_request, file_request or text_converse methods.
         | 
| 36 | 
            -
            * [Entity](https://github.com/RecastAI/SDK-Ruby/wiki/Class-Entity) represents an entity extracted from an input.
         | 
| 37 | 
            -
            * [RecastError](https://github.com/RecastAI/SDK-Ruby/wiki/Class-RecastError) is the error returned by the module.
         | 
| 37 | 
            +
            request = RecastAI::Request.new('YOUR_TOKEN')
         | 
| 38 | 
            +
            connect = RecastAI::Connect.new('YOUR_TOKEN')
         | 
| 39 | 
            +
            ```
         | 
| 38 40 |  | 
| 39 | 
            -
            Don't hesitate to dive into the code, it's commented ;)
         | 
| 40 | 
            -
            `
         | 
| 41 41 | 
             
            ## More
         | 
| 42 42 |  | 
| 43 43 | 
             
            You can view the whole API reference at [man.recast.ai](https://man.recast.ai).
         | 
| @@ -52,7 +52,7 @@ You can follow us on Twitter at [@recastai](https://twitter.com/recastai) for up | |
| 52 52 |  | 
| 53 53 | 
             
            ## License
         | 
| 54 54 |  | 
| 55 | 
            -
            Copyright (c) [ | 
| 55 | 
            +
            Copyright (c) [2017] [Recast.AI](https://recast.ai)
         | 
| 56 56 |  | 
| 57 57 | 
             
            Permission is hereby granted, free of charge, to any person obtaining a copy
         | 
| 58 58 | 
             
            of this software and associated documentation files (the "Software"), to deal
         | 
    
        data/lib/recastai.rb
    CHANGED
    
    | @@ -2,15 +2,25 @@ | |
| 2 2 |  | 
| 3 3 | 
             
            $LOAD_PATH.unshift(File.dirname(__FILE__))
         | 
| 4 4 |  | 
| 5 | 
            +
            require 'json'
         | 
| 5 6 | 
             
            require 'httparty'
         | 
| 6 7 | 
             
            require 'httmultiparty'
         | 
| 7 | 
            -
            require 'json'
         | 
| 8 8 |  | 
| 9 9 | 
             
            require 'recastai/utils'
         | 
| 10 | 
            -
            require 'recastai/ | 
| 11 | 
            -
            require 'recastai/ | 
| 12 | 
            -
             | 
| 13 | 
            -
             | 
| 14 | 
            -
             | 
| 15 | 
            -
             | 
| 16 | 
            -
             | 
| 10 | 
            +
            require 'recastai/apis/connect/connect'
         | 
| 11 | 
            +
            require 'recastai/apis/request/request'
         | 
| 12 | 
            +
             | 
| 13 | 
            +
            module RecastAI
         | 
| 14 | 
            +
              class Client
         | 
| 15 | 
            +
                attr_reader :token, :language
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                def initialize(token = nil, language = nil)
         | 
| 18 | 
            +
                  [RecastAI::Request, RecastAI::Connect].each do |api|
         | 
| 19 | 
            +
                    i = api.name.rindex('::')
         | 
| 20 | 
            +
                    name = i.nil? ? api.name : api.name[(i + 2)..-1]
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                    self.class.send(:define_method, name.downcase.to_sym, ->{ api.new(token, language) })
         | 
| 23 | 
            +
                  end
         | 
| 24 | 
            +
                end
         | 
| 25 | 
            +
              end
         | 
| 26 | 
            +
            end
         | 
| @@ -0,0 +1,16 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'message'
         | 
| 4 | 
            +
             | 
| 5 | 
            +
            module RecastAI
         | 
| 6 | 
            +
              class Connect
         | 
| 7 | 
            +
                include Message
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                attr_reader :token, :language
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                def initialize(token = nil, language = nil)
         | 
| 12 | 
            +
                  @token = token
         | 
| 13 | 
            +
                  @language = language
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
              end
         | 
| 16 | 
            +
            end
         | 
| @@ -0,0 +1,44 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'models/message'
         | 
| 4 | 
            +
            require_relative 'utils'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module RecastAI
         | 
| 7 | 
            +
              module Message
         | 
| 8 | 
            +
                def handle_message(request, &block)
         | 
| 9 | 
            +
                  request.body.rewind if request.body.respond_to?(:rewind)
         | 
| 10 | 
            +
                  body = request.body.is_a?(String) ? request.body : request.body.read
         | 
| 11 | 
            +
                  message = Msg.new(body)
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  yield(message)
         | 
| 14 | 
            +
                end
         | 
| 15 | 
            +
             | 
| 16 | 
            +
                def send_message(payload, conversation_id, token: nil)
         | 
| 17 | 
            +
                  token ||= @token
         | 
| 18 | 
            +
                  raise RecastError.new('Token is missing') if token.nil?
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  response = HTTParty.post(
         | 
| 21 | 
            +
                    "#{Utils::CONVERSATION_ENDPOINT}#{conversation_id}/messages",
         | 
| 22 | 
            +
                    body: { messages: payload },
         | 
| 23 | 
            +
                    headers: { 'Authorization' => "Token #{token}" }
         | 
| 24 | 
            +
                  )
         | 
| 25 | 
            +
                  raise RecastError.new(JSON.parse(response.body)['message']) if response.code != 201
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  response
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                def broadcast_message(payload, token: nil)
         | 
| 31 | 
            +
                  token ||= @token
         | 
| 32 | 
            +
                  raise RecastError.new('Token is missing') if token.nil?
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  response = HTTParty.post(
         | 
| 35 | 
            +
                    Utils::MESSAGE_ENDPOINT,
         | 
| 36 | 
            +
                    body: { messages: payload },
         | 
| 37 | 
            +
                    headers: { 'Authorization' => "Token #{token}" }
         | 
| 38 | 
            +
                  )
         | 
| 39 | 
            +
                  raise RecastError.new(JSON.parse(response.body)['message']) if response.code != 201
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                  response
         | 
| 42 | 
            +
                end
         | 
| 43 | 
            +
              end
         | 
| 44 | 
            +
            end
         | 
| @@ -0,0 +1,20 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module RecastAI
         | 
| 4 | 
            +
              class Msg
         | 
| 5 | 
            +
                attr_reader :content, :type, :conversation_id
         | 
| 6 | 
            +
             | 
| 7 | 
            +
                def initialize(request)
         | 
| 8 | 
            +
                  request = JSON.parse(request)
         | 
| 9 | 
            +
                  request.each do |k, v|
         | 
| 10 | 
            +
                    k = k.gsub(/(.)([A-Z])/,'\1_\2').downcase
         | 
| 11 | 
            +
                    self.instance_variable_set("@#{k}", v)
         | 
| 12 | 
            +
                    self.define_singleton_method(k.to_sym){ v }
         | 
| 13 | 
            +
                  end
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  @conversation_id = request['message']['conversation']
         | 
| 16 | 
            +
                  @content = request['message']['attachment']['content']
         | 
| 17 | 
            +
                  @type = request['message']['attachment']['type']
         | 
| 18 | 
            +
                end
         | 
| 19 | 
            +
              end
         | 
| 20 | 
            +
            end
         | 
| @@ -0,0 +1,45 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'models/response'
         | 
| 4 | 
            +
            require_relative 'utils'
         | 
| 5 | 
            +
            require_relative '../errors'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module RecastAI
         | 
| 8 | 
            +
              module Analyse
         | 
| 9 | 
            +
                def analyse_text(text, token: nil, language: nil)
         | 
| 10 | 
            +
                  token ||= @token
         | 
| 11 | 
            +
                  raise RecastError.new('Token is missing') if token.nil?
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  language ||= @language
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  body = { text: text }
         | 
| 16 | 
            +
                  body[:language] = language unless language.nil?
         | 
| 17 | 
            +
                  response = HTTParty.post(
         | 
| 18 | 
            +
                    Utils::REQUEST_ENDPOINT,
         | 
| 19 | 
            +
                    body: body,
         | 
| 20 | 
            +
                    headers: { 'Authorization' => "Token #{token}" }
         | 
| 21 | 
            +
                  )
         | 
| 22 | 
            +
                  raise RecastError.new(JSON.parse(response.body)['message']) if response.code != 200
         | 
| 23 | 
            +
             | 
| 24 | 
            +
                  Response.new(response.body)
         | 
| 25 | 
            +
                end
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                def analyse_file(file, token: nil, language: nil)
         | 
| 28 | 
            +
                  token ||= @token
         | 
| 29 | 
            +
                  raise RecastError.new('Token is missing') if token.nil?
         | 
| 30 | 
            +
             | 
| 31 | 
            +
                  language ||= @language
         | 
| 32 | 
            +
             | 
| 33 | 
            +
                  body = { voice: File.new(file) }
         | 
| 34 | 
            +
                  body[:language] = language unless language.nil?
         | 
| 35 | 
            +
                  response = HTTMultiParty.post(
         | 
| 36 | 
            +
                    Utils::REQUEST_ENDPOINT,
         | 
| 37 | 
            +
                    body: body,
         | 
| 38 | 
            +
                    headers: { 'Authorization' => "Token #{token}" }
         | 
| 39 | 
            +
                  )
         | 
| 40 | 
            +
                  raise RecastError.new(JSON.parse(response.body)['message']) if response.code != 200
         | 
| 41 | 
            +
             | 
| 42 | 
            +
                  Response.new(response.body)
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
              end
         | 
| 45 | 
            +
            end
         | 
| @@ -0,0 +1,50 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'models/conversation'
         | 
| 4 | 
            +
            require_relative 'utils'
         | 
| 5 | 
            +
            require_relative '../errors'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module RecastAI
         | 
| 8 | 
            +
              module Converse
         | 
| 9 | 
            +
                def converse_text(text, token: nil, language: nil, conversation_token: nil, memory: nil)
         | 
| 10 | 
            +
                  token ||= @token
         | 
| 11 | 
            +
                  raise RecastError.new('Token is missing') if token.nil?
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                  language ||= @language
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  body = { text: text }
         | 
| 16 | 
            +
                  body[:language] = language unless language.nil?
         | 
| 17 | 
            +
                  body[:conversation_token] = conversation_token unless conversation_token.nil?
         | 
| 18 | 
            +
                  body[:memory] = memory unless memory.nil?
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  response = HTTParty.post(
         | 
| 21 | 
            +
                    Utils::CONVERSE_ENDPOINT,
         | 
| 22 | 
            +
                    body: body,
         | 
| 23 | 
            +
                    headers: { 'Authorization' => "Token #{token}" }
         | 
| 24 | 
            +
                  )
         | 
| 25 | 
            +
                  raise RecastError.new(JSON.parse(response.body)['message']) if response.code != 200
         | 
| 26 | 
            +
             | 
| 27 | 
            +
                  Conversation.new(response.body, token)
         | 
| 28 | 
            +
                end
         | 
| 29 | 
            +
             | 
| 30 | 
            +
                def converse_file(file, token: nil, language: nil, conversation_token: nil, memory: nil)
         | 
| 31 | 
            +
                  token ||= @token
         | 
| 32 | 
            +
                  raise RecastError.new('Token is missing') if token.nil?
         | 
| 33 | 
            +
             | 
| 34 | 
            +
                  language ||= @language
         | 
| 35 | 
            +
             | 
| 36 | 
            +
                  body = { voice: File.new(file) }
         | 
| 37 | 
            +
                  body[:language] = language unless language.nil?
         | 
| 38 | 
            +
                  body[:conversation_token] = conversation_token unless conversation_token.nil?
         | 
| 39 | 
            +
                  body[:memory] = memory unless memory.nil?
         | 
| 40 | 
            +
                  response = HTTMultiParty.post(
         | 
| 41 | 
            +
                    Utils::CONVERSE_ENDPOINT,
         | 
| 42 | 
            +
                    body: body,
         | 
| 43 | 
            +
                    headers: { 'Authorization' => "Token #{token}" }
         | 
| 44 | 
            +
                  )
         | 
| 45 | 
            +
                  raise RecastError.new(JSON.parse(response.body)['message']) if response.code != 200
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                  Conversation.new(response.body, token)
         | 
| 48 | 
            +
                end
         | 
| 49 | 
            +
              end
         | 
| 50 | 
            +
            end
         | 
| @@ -0,0 +1,105 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'action'
         | 
| 4 | 
            +
            require_relative 'entity'
         | 
| 5 | 
            +
            require_relative 'intent'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module RecastAI
         | 
| 8 | 
            +
              class Conversation
         | 
| 9 | 
            +
                attr_reader :raw, :uuid, :source, :replies, :action, :next_actions, :memory, :entities, :intents,
         | 
| 10 | 
            +
                            :conversation_token, :language, :version, :timestamp, :status
         | 
| 11 | 
            +
             | 
| 12 | 
            +
                def initialize(response, token)
         | 
| 13 | 
            +
                  @token = token
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                  @raw = response
         | 
| 16 | 
            +
             | 
| 17 | 
            +
                  response = JSON.parse(response)
         | 
| 18 | 
            +
                  response = response['results']
         | 
| 19 | 
            +
             | 
| 20 | 
            +
                  @uuid               = response['uuid']
         | 
| 21 | 
            +
                  @source             = response['source']
         | 
| 22 | 
            +
                  @replies            = response['replies']
         | 
| 23 | 
            +
                  @action             = response['action'] ? Action.new(response['action']) : nil
         | 
| 24 | 
            +
                  @next_actions       = response['next_actions'].map{ |i| Action.new(i) }
         | 
| 25 | 
            +
                  @memory             = response['memory'].reject { |_, e| e.nil? }.map{ |n, e| Entity.new(n, e) }
         | 
| 26 | 
            +
                  @entities           = response['entities'].flat_map{ |_, e| e.map{ |ee| Entity.new(n, ee) } }
         | 
| 27 | 
            +
                  @intents            = response['intents'].map{ |i| Intent.new(i) }
         | 
| 28 | 
            +
                  @conversation_token = response['conversation_token']
         | 
| 29 | 
            +
                  @language           = response['language']
         | 
| 30 | 
            +
                  @version            = response['version']
         | 
| 31 | 
            +
                  @timestamp          = response['timestamp']
         | 
| 32 | 
            +
                  @status             = response['status']
         | 
| 33 | 
            +
                end
         | 
| 34 | 
            +
             | 
| 35 | 
            +
                def reply
         | 
| 36 | 
            +
                  @replies.any? ? @replies.first : nil
         | 
| 37 | 
            +
                end
         | 
| 38 | 
            +
             | 
| 39 | 
            +
                def next_action
         | 
| 40 | 
            +
                  @next_actions.any? ? @next_actions.first : nil
         | 
| 41 | 
            +
                end
         | 
| 42 | 
            +
             | 
| 43 | 
            +
                def joined_replies(sep = ' ')
         | 
| 44 | 
            +
                  @replies.join(sep)
         | 
| 45 | 
            +
                end
         | 
| 46 | 
            +
             | 
| 47 | 
            +
                def get_memory(key = nil)
         | 
| 48 | 
            +
                  return @memory if key.nil?
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  @memory.each do |entity|
         | 
| 51 | 
            +
                    return entity if entity.name.casecmp(key.to_s).zero?
         | 
| 52 | 
            +
                  end
         | 
| 53 | 
            +
             | 
| 54 | 
            +
                  nil
         | 
| 55 | 
            +
                end
         | 
| 56 | 
            +
             | 
| 57 | 
            +
                def intent
         | 
| 58 | 
            +
                  @intents.any? ? @intents.first : nil
         | 
| 59 | 
            +
                end
         | 
| 60 | 
            +
             | 
| 61 | 
            +
                def set_memory(memory)
         | 
| 62 | 
            +
                  body = { conversation_token: @conversation_token, memory: memory }
         | 
| 63 | 
            +
                  response = HTTParty.put(
         | 
| 64 | 
            +
                    Utils::CONVERSE_ENDPOINT,
         | 
| 65 | 
            +
                    body: body,
         | 
| 66 | 
            +
                    headers: { 'Authorization' => "Token #{@token}" }
         | 
| 67 | 
            +
                  )
         | 
| 68 | 
            +
                  raise RecastError.new(JSON.parse(response.body)['message']) if response.code != 200
         | 
| 69 | 
            +
             | 
| 70 | 
            +
                  response = JSON.parse(response.body)
         | 
| 71 | 
            +
                  response = response['results']
         | 
| 72 | 
            +
                  response['memory'].reject { |_, e| e.nil? }.map { |n, e| Entity.new(n, e) }
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                def reset_memory(name = nil)
         | 
| 76 | 
            +
                  body = { conversation_token: @conversation_token }
         | 
| 77 | 
            +
                  body[:memory] = { name => nil } unless name.nil?
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                  response = HTTParty.put(
         | 
| 80 | 
            +
                    Utils::CONVERSE_ENDPOINT,
         | 
| 81 | 
            +
                    body: body,
         | 
| 82 | 
            +
                    headers: { 'Authorization' => "Token #{@token}" }
         | 
| 83 | 
            +
                  )
         | 
| 84 | 
            +
                  raise RecastError.new(JSON.parse(response.body)['message']) if response.code != 200
         | 
| 85 | 
            +
             | 
| 86 | 
            +
                  response = JSON.parse(response.body)
         | 
| 87 | 
            +
                  response = response['results']
         | 
| 88 | 
            +
                  response['memory'].reject { |_, e| e.nil? }.map { |n, e| Entity.new(n, e) }
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                def reset_conversation
         | 
| 92 | 
            +
                  body = { conversation_token: @conversation_token }
         | 
| 93 | 
            +
                  response = HTTParty.delete(
         | 
| 94 | 
            +
                    Utils::CONVERSE_ENDPOINT,
         | 
| 95 | 
            +
                    body: body,
         | 
| 96 | 
            +
                    headers: { 'Authorization' => "Token #{@token}" }
         | 
| 97 | 
            +
                  )
         | 
| 98 | 
            +
                  raise RecastError.new(JSON.parse(response.body)['message']) if response.code != 200
         | 
| 99 | 
            +
             | 
| 100 | 
            +
                  response = JSON.parse(response.body)
         | 
| 101 | 
            +
                  response = response['results']
         | 
| 102 | 
            +
                  response['memory'].reject { |_, e| e.nil? }.map { |n, e| Entity.new(n, e) }
         | 
| 103 | 
            +
                end
         | 
| 104 | 
            +
              end
         | 
| 105 | 
            +
            end
         | 
| @@ -1,7 +1,5 @@ | |
| 1 1 | 
             
            # encoding: utf-8
         | 
| 2 2 |  | 
| 3 | 
            -
            ##
         | 
| 4 | 
            -
            # This class build an Entity used in RecastAI::Response and RecastAI::Conversation
         | 
| 5 3 | 
             
            module RecastAI
         | 
| 6 4 | 
             
              class Entity
         | 
| 7 5 | 
             
                attr_reader :name
         | 
| @@ -9,8 +7,6 @@ module RecastAI | |
| 9 7 | 
             
                def initialize(name, data)
         | 
| 10 8 | 
             
                  @name = name
         | 
| 11 9 |  | 
| 12 | 
            -
                  # For each pair key, value, set a instance variable
         | 
| 13 | 
            -
                  # and an attr_reader named k and returning v
         | 
| 14 10 | 
             
                  data.each_pair do |k, v|
         | 
| 15 11 | 
             
                    self.instance_variable_set("@#{k}", v)
         | 
| 16 12 | 
             
                    self.define_singleton_method(k.to_sym){ v }
         | 
| @@ -0,0 +1,119 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'intent'
         | 
| 4 | 
            +
            require_relative 'entity'
         | 
| 5 | 
            +
            require_relative '../utils'
         | 
| 6 | 
            +
             | 
| 7 | 
            +
            module RecastAI
         | 
| 8 | 
            +
              class Response
         | 
| 9 | 
            +
                attr_reader :raw
         | 
| 10 | 
            +
                attr_reader :uuid
         | 
| 11 | 
            +
                attr_reader :source
         | 
| 12 | 
            +
                attr_reader :intents
         | 
| 13 | 
            +
                attr_reader :act
         | 
| 14 | 
            +
                attr_reader :type
         | 
| 15 | 
            +
                attr_reader :sentiment
         | 
| 16 | 
            +
                attr_reader :entities
         | 
| 17 | 
            +
                attr_reader :language
         | 
| 18 | 
            +
                attr_reader :version
         | 
| 19 | 
            +
                attr_reader :timestamp
         | 
| 20 | 
            +
                attr_reader :status
         | 
| 21 | 
            +
             | 
| 22 | 
            +
                def initialize(response)
         | 
| 23 | 
            +
                  @raw = response
         | 
| 24 | 
            +
             | 
| 25 | 
            +
                  response = JSON.parse(response)
         | 
| 26 | 
            +
                  response = response['results']
         | 
| 27 | 
            +
             | 
| 28 | 
            +
                  @uuid      = response['uuid']
         | 
| 29 | 
            +
                  @source    = response['source']
         | 
| 30 | 
            +
                  @intents   = response['intents'].map{ |i| Intent.new(i) }
         | 
| 31 | 
            +
                  @act       = response['act']
         | 
| 32 | 
            +
                  @type      = response['type']
         | 
| 33 | 
            +
                  @sentiment = response['sentiment']
         | 
| 34 | 
            +
                  @entities  = response['entities'].flat_map{ |n, e| e.map{ |ee| Entity.new(n, ee) } }
         | 
| 35 | 
            +
                  @language  = response['language']
         | 
| 36 | 
            +
                  @version   = response['version']
         | 
| 37 | 
            +
                  @timestamp = response['timestamp']
         | 
| 38 | 
            +
                  @status    = response['status']
         | 
| 39 | 
            +
                end
         | 
| 40 | 
            +
             | 
| 41 | 
            +
                def intent
         | 
| 42 | 
            +
                  @intents.any? ? @intents.first : nil
         | 
| 43 | 
            +
                end
         | 
| 44 | 
            +
             | 
| 45 | 
            +
                def get(name)
         | 
| 46 | 
            +
                  @entities.each do |entity|
         | 
| 47 | 
            +
                    return entity if entity.name.casecmp(name.to_s).zero?
         | 
| 48 | 
            +
                  end
         | 
| 49 | 
            +
             | 
| 50 | 
            +
                  nil
         | 
| 51 | 
            +
                end
         | 
| 52 | 
            +
             | 
| 53 | 
            +
                def all(name)
         | 
| 54 | 
            +
                  @entities.select do |entity|
         | 
| 55 | 
            +
                    entity.name.casecmp(name.to_s).zero?
         | 
| 56 | 
            +
                  end
         | 
| 57 | 
            +
                end
         | 
| 58 | 
            +
             | 
| 59 | 
            +
                def assert?
         | 
| 60 | 
            +
                  @act == Utils::ACT_ASSERT
         | 
| 61 | 
            +
                end
         | 
| 62 | 
            +
             | 
| 63 | 
            +
                def command?
         | 
| 64 | 
            +
                  @act == Utils::ACT_COMMAND
         | 
| 65 | 
            +
                end
         | 
| 66 | 
            +
             | 
| 67 | 
            +
                def wh_query?
         | 
| 68 | 
            +
                  @act == Utils::ACT_WH_QUERY
         | 
| 69 | 
            +
                end
         | 
| 70 | 
            +
             | 
| 71 | 
            +
                def yn_query?
         | 
| 72 | 
            +
                  @act == Utils::ACT_YN_QUERY
         | 
| 73 | 
            +
                end
         | 
| 74 | 
            +
             | 
| 75 | 
            +
                def abbreviation?
         | 
| 76 | 
            +
                  !@type.index(Utils::TYPE_ABBREVIATION).nil?
         | 
| 77 | 
            +
                end
         | 
| 78 | 
            +
             | 
| 79 | 
            +
                def entity?
         | 
| 80 | 
            +
                  !@type.index(Utils::TYPE_ENTITY).nil?
         | 
| 81 | 
            +
                end
         | 
| 82 | 
            +
             | 
| 83 | 
            +
                def description?
         | 
| 84 | 
            +
                  !@type.index(Utils::TYPE_DESCRIPTION).nil?
         | 
| 85 | 
            +
                end
         | 
| 86 | 
            +
             | 
| 87 | 
            +
                def human?
         | 
| 88 | 
            +
                  !@type.index(Utils::TYPE_HUMAN).nil?
         | 
| 89 | 
            +
                end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                def location?
         | 
| 92 | 
            +
                  !@type.index(Utils::TYPE_LOCATION).nil?
         | 
| 93 | 
            +
                end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                def number?
         | 
| 96 | 
            +
                  !@type.index(Utils::TYPE_NUMBER).nil?
         | 
| 97 | 
            +
                end
         | 
| 98 | 
            +
             | 
| 99 | 
            +
                def vpositive?
         | 
| 100 | 
            +
                  @sentiment == Utils::SENTIMENT_VPOSITIVE
         | 
| 101 | 
            +
                end
         | 
| 102 | 
            +
             | 
| 103 | 
            +
                def positive?
         | 
| 104 | 
            +
                  @sentiment == Utils::SENTIMENT_POSITIVE
         | 
| 105 | 
            +
                end
         | 
| 106 | 
            +
             | 
| 107 | 
            +
                def neutral?
         | 
| 108 | 
            +
                  @sentiment == Utils::SENTIMENT_NEUTRAL
         | 
| 109 | 
            +
                end
         | 
| 110 | 
            +
             | 
| 111 | 
            +
                def negative?
         | 
| 112 | 
            +
                  @sentiment == Utils::SENTIMENT_NEGATIVE
         | 
| 113 | 
            +
                end
         | 
| 114 | 
            +
             | 
| 115 | 
            +
                def vnegative?
         | 
| 116 | 
            +
                  @sentiment == Utils::SENTIMENT_VNEGATIVE
         | 
| 117 | 
            +
                end
         | 
| 118 | 
            +
              end
         | 
| 119 | 
            +
            end
         | 
| @@ -0,0 +1,18 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            require_relative 'analyse'
         | 
| 4 | 
            +
            require_relative 'converse'
         | 
| 5 | 
            +
             | 
| 6 | 
            +
            module RecastAI
         | 
| 7 | 
            +
              class Request
         | 
| 8 | 
            +
                include Converse
         | 
| 9 | 
            +
                include Analyse
         | 
| 10 | 
            +
             | 
| 11 | 
            +
                attr_reader :token, :language
         | 
| 12 | 
            +
             | 
| 13 | 
            +
                def initialize(token = nil, language = nil)
         | 
| 14 | 
            +
                  @token = token
         | 
| 15 | 
            +
                  @language = language
         | 
| 16 | 
            +
                end
         | 
| 17 | 
            +
              end
         | 
| 18 | 
            +
            end
         | 
| @@ -0,0 +1,30 @@ | |
| 1 | 
            +
            # encoding: utf-8
         | 
| 2 | 
            +
             | 
| 3 | 
            +
            module RecastAI
         | 
| 4 | 
            +
              class Utils
         | 
| 5 | 
            +
                # Endpoints
         | 
| 6 | 
            +
                REQUEST_ENDPOINT = 'https://api.recast.ai/v2/request/'.freeze
         | 
| 7 | 
            +
                CONVERSE_ENDPOINT = 'https://api.recast.ai/v2/converse/'.freeze
         | 
| 8 | 
            +
             | 
| 9 | 
            +
                # Act constants
         | 
| 10 | 
            +
                ACT_ASSERT = 'assert'.freeze
         | 
| 11 | 
            +
                ACT_COMMAND = 'command'.freeze
         | 
| 12 | 
            +
                ACT_WH_QUERY = 'wh-query'.freeze
         | 
| 13 | 
            +
                ACT_YN_QUERY = 'yn-query'.freeze
         | 
| 14 | 
            +
             | 
| 15 | 
            +
                # Type constants
         | 
| 16 | 
            +
                TYPE_ABBREVIATION = 'abbr:'.freeze
         | 
| 17 | 
            +
                TYPE_ENTITY = 'enty:'.freeze
         | 
| 18 | 
            +
                TYPE_DESCRIPTION = 'desc:'.freeze
         | 
| 19 | 
            +
                TYPE_HUMAN = 'hum:'.freeze
         | 
| 20 | 
            +
                TYPE_LOCATION = 'loc:'.freeze
         | 
| 21 | 
            +
                TYPE_NUMBER = 'num:'.freeze
         | 
| 22 | 
            +
             | 
| 23 | 
            +
                # Sentiment constants
         | 
| 24 | 
            +
                SENTIMENT_VPOSITIVE = 'vpositive'.freeze
         | 
| 25 | 
            +
                SENTIMENT_POSITIVE = 'positive'.freeze
         | 
| 26 | 
            +
                SENTIMENT_NEUTRAL = 'neutral'.freeze
         | 
| 27 | 
            +
                SENTIMENT_NEGATIVE = 'negative'.freeze
         | 
| 28 | 
            +
                SENTIMENT_VNEGATIVE = 'vnegative'.freeze
         | 
| 29 | 
            +
              end
         | 
| 30 | 
            +
            end
         | 
    
        data/lib/recastai/utils.rb
    CHANGED
    
    | @@ -3,34 +3,15 @@ | |
| 3 3 | 
             
            module RecastAI
         | 
| 4 4 | 
             
              class Utils
         | 
| 5 5 | 
             
                # Versioning
         | 
| 6 | 
            -
                MAJOR = ' | 
| 7 | 
            -
                MINOR = ' | 
| 8 | 
            -
                MICRO = ' | 
| 6 | 
            +
                MAJOR = '3'.freeze
         | 
| 7 | 
            +
                MINOR = '0'.freeze
         | 
| 8 | 
            +
                MICRO = '0'.freeze
         | 
| 9 9 | 
             
                VERSION = "#{MAJOR}.#{MINOR}.#{MICRO}".freeze
         | 
| 10 10 |  | 
| 11 11 | 
             
                # Endpoints
         | 
| 12 | 
            -
                 | 
| 13 | 
            -
                 | 
| 14 | 
            -
             | 
| 15 | 
            -
                 | 
| 16 | 
            -
                ACT_ASSERT = 'assert'.freeze
         | 
| 17 | 
            -
                ACT_COMMAND = 'command'.freeze
         | 
| 18 | 
            -
                ACT_WH_QUERY = 'wh-query'.freeze
         | 
| 19 | 
            -
                ACT_YN_QUERY = 'yn-query'.freeze
         | 
| 20 | 
            -
             | 
| 21 | 
            -
                # Type constants
         | 
| 22 | 
            -
                TYPE_ABBREVIATION = 'abbr:'.freeze
         | 
| 23 | 
            -
                TYPE_ENTITY = 'enty:'.freeze
         | 
| 24 | 
            -
                TYPE_DESCRIPTION = 'desc:'.freeze
         | 
| 25 | 
            -
                TYPE_HUMAN = 'hum:'.freeze
         | 
| 26 | 
            -
                TYPE_LOCATION = 'loc:'.freeze
         | 
| 27 | 
            -
                TYPE_NUMBER = 'num:'.freeze
         | 
| 28 | 
            -
             | 
| 29 | 
            -
                # Sentiment constants
         | 
| 30 | 
            -
                SENTIMENT_VPOSITIVE = 'vpositive'.freeze
         | 
| 31 | 
            -
                SENTIMENT_POSITIVE = 'positive'.freeze
         | 
| 32 | 
            -
                SENTIMENT_NEUTRAL = 'neutral'.freeze
         | 
| 33 | 
            -
                SENTIMENT_NEGATIVE = 'negative'.freeze
         | 
| 34 | 
            -
                SENTIMENT_VNEGATIVE = 'vnegative'.freeze
         | 
| 12 | 
            +
                TRAIN_ENDPOINT = 'https://api.recast.ai/v2/'.freeze
         | 
| 13 | 
            +
                CONNECT_ENDPOINT = 'https://api.recast.ai/connect/v1/'.freeze
         | 
| 14 | 
            +
                HOST_ENDPOINT = 'https://api.recast.ai/host/v1/'.freeze
         | 
| 15 | 
            +
                MONITOR_ENDPOINT = 'https://api.recast.ai/monitor/v1/'.freeze
         | 
| 35 16 | 
             
              end
         | 
| 36 17 | 
             
            end
         | 
    
        metadata
    CHANGED
    
    | @@ -1,14 +1,14 @@ | |
| 1 1 | 
             
            --- !ruby/object:Gem::Specification
         | 
| 2 2 | 
             
            name: RecastAI
         | 
| 3 3 | 
             
            version: !ruby/object:Gem::Version
         | 
| 4 | 
            -
              version:  | 
| 4 | 
            +
              version: 3.0.0
         | 
| 5 5 | 
             
            platform: ruby
         | 
| 6 6 | 
             
            authors:
         | 
| 7 7 | 
             
            - Paul Renvoisé
         | 
| 8 8 | 
             
            autorequire: 
         | 
| 9 9 | 
             
            bindir: bin
         | 
| 10 10 | 
             
            cert_chain: []
         | 
| 11 | 
            -
            date:  | 
| 11 | 
            +
            date: 2017-03-30 00:00:00.000000000 Z
         | 
| 12 12 | 
             
            dependencies:
         | 
| 13 13 | 
             
            - !ruby/object:Gem::Dependency
         | 
| 14 14 | 
             
              name: httparty
         | 
| @@ -113,13 +113,20 @@ files: | |
| 113 113 | 
             
            - bin/file
         | 
| 114 114 | 
             
            - bin/text
         | 
| 115 115 | 
             
            - lib/recastai.rb
         | 
| 116 | 
            -
            - lib/recastai/ | 
| 117 | 
            -
            - lib/recastai/ | 
| 118 | 
            -
            - lib/recastai/ | 
| 119 | 
            -
            - lib/recastai/ | 
| 120 | 
            -
            - lib/recastai/errors.rb
         | 
| 121 | 
            -
            - lib/recastai/ | 
| 122 | 
            -
            - lib/recastai/ | 
| 116 | 
            +
            - lib/recastai/apis/connect/connect.rb
         | 
| 117 | 
            +
            - lib/recastai/apis/connect/message.rb
         | 
| 118 | 
            +
            - lib/recastai/apis/connect/models/message.rb
         | 
| 119 | 
            +
            - lib/recastai/apis/connect/utils.rb
         | 
| 120 | 
            +
            - lib/recastai/apis/errors.rb
         | 
| 121 | 
            +
            - lib/recastai/apis/request/analyse.rb
         | 
| 122 | 
            +
            - lib/recastai/apis/request/converse.rb
         | 
| 123 | 
            +
            - lib/recastai/apis/request/models/action.rb
         | 
| 124 | 
            +
            - lib/recastai/apis/request/models/conversation.rb
         | 
| 125 | 
            +
            - lib/recastai/apis/request/models/entity.rb
         | 
| 126 | 
            +
            - lib/recastai/apis/request/models/intent.rb
         | 
| 127 | 
            +
            - lib/recastai/apis/request/models/response.rb
         | 
| 128 | 
            +
            - lib/recastai/apis/request/request.rb
         | 
| 129 | 
            +
            - lib/recastai/apis/request/utils.rb
         | 
| 123 130 | 
             
            - lib/recastai/utils.rb
         | 
| 124 131 | 
             
            - misc/.gitkeep
         | 
| 125 132 | 
             
            - misc/logo-inline.png
         | 
| @@ -145,7 +152,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement | |
| 145 152 | 
             
                  version: '0'
         | 
| 146 153 | 
             
            requirements: []
         | 
| 147 154 | 
             
            rubyforge_project: 
         | 
| 148 | 
            -
            rubygems_version: 2.5. | 
| 155 | 
            +
            rubygems_version: 2.5.2
         | 
| 149 156 | 
             
            signing_key: 
         | 
| 150 157 | 
             
            specification_version: 4
         | 
| 151 158 | 
             
            summary: Recast.AI official SDK for Ruby
         | 
    
        data/lib/recastai/client.rb
    DELETED
    
    | @@ -1,104 +0,0 @@ | |
| 1 | 
            -
            # encoding: utf-8
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            ##
         | 
| 4 | 
            -
            # This class is the main entrypoint to Recast.AI
         | 
| 5 | 
            -
            # When using *_converse, a RecastAI::Conversation object is returned
         | 
| 6 | 
            -
            # When using *_request, a RecastAI::Response object is returned
         | 
| 7 | 
            -
            module RecastAI
         | 
| 8 | 
            -
              class Client
         | 
| 9 | 
            -
                attr_accessor :token
         | 
| 10 | 
            -
                attr_accessor :language
         | 
| 11 | 
            -
             | 
| 12 | 
            -
                def initialize(token = nil, language = nil)
         | 
| 13 | 
            -
                  @token = token
         | 
| 14 | 
            -
                  @language = language
         | 
| 15 | 
            -
                end
         | 
| 16 | 
            -
             | 
| 17 | 
            -
                ##
         | 
| 18 | 
            -
                # Perform a text converse to Recast.AI
         | 
| 19 | 
            -
                #
         | 
| 20 | 
            -
                # * *Args* :
         | 
| 21 | 
            -
                #   - +text+ - String, the text to process
         | 
| 22 | 
            -
                #   - +options+ - Hash, request's options
         | 
| 23 | 
            -
                # * *Returns* :
         | 
| 24 | 
            -
                #   - An instance of Conversation
         | 
| 25 | 
            -
                # * *Throws* :
         | 
| 26 | 
            -
                #   - RecastError
         | 
| 27 | 
            -
                def text_converse(text, options = {})
         | 
| 28 | 
            -
                  token = options[:token] || @token
         | 
| 29 | 
            -
                  raise(RecastError.new('Token is missing')) if token.nil?
         | 
| 30 | 
            -
             | 
| 31 | 
            -
                  language = options[:language] || @language
         | 
| 32 | 
            -
             | 
| 33 | 
            -
                  body = { text: text }
         | 
| 34 | 
            -
                  body[:language] = language unless language.nil?
         | 
| 35 | 
            -
                  body[:conversation_token] = options[:conversation_token] unless options[:conversation_token].nil?
         | 
| 36 | 
            -
                  body[:memory] = options[:memory] unless options[:memory].nil?
         | 
| 37 | 
            -
             | 
| 38 | 
            -
                  response = HTTParty.post(
         | 
| 39 | 
            -
                    Utils::CONVERSE_ENDPOINT,
         | 
| 40 | 
            -
                    body: body,
         | 
| 41 | 
            -
                    headers: { Authorization: "Token #{token}" }
         | 
| 42 | 
            -
                  )
         | 
| 43 | 
            -
                  raise(RecastError.new(response.message)) if response.code != 200
         | 
| 44 | 
            -
             | 
| 45 | 
            -
                  Conversation.new(response.body)
         | 
| 46 | 
            -
                end
         | 
| 47 | 
            -
             | 
| 48 | 
            -
                ##
         | 
| 49 | 
            -
                # Perform a text request to Recast.AI
         | 
| 50 | 
            -
                #
         | 
| 51 | 
            -
                # * *Args* :
         | 
| 52 | 
            -
                #   - +text+ - String, the text to process
         | 
| 53 | 
            -
                #   - +options+ - Hash, request's options
         | 
| 54 | 
            -
                # * *Returns* :
         | 
| 55 | 
            -
                #   - An instance of Response
         | 
| 56 | 
            -
                # * *Throws* :
         | 
| 57 | 
            -
                #   - RecastError
         | 
| 58 | 
            -
                def text_request(text, options = {})
         | 
| 59 | 
            -
                  token = options[:token] || @token
         | 
| 60 | 
            -
                  raise(RecastError.new('Token is missing')) if token.nil?
         | 
| 61 | 
            -
             | 
| 62 | 
            -
                  language = options[:language] || @language
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                  body = { text: text }
         | 
| 65 | 
            -
                  body[:language] = language unless language.nil?
         | 
| 66 | 
            -
                  response = HTTParty.post(
         | 
| 67 | 
            -
                    Utils::REQUEST_ENDPOINT,
         | 
| 68 | 
            -
                    body: body,
         | 
| 69 | 
            -
                    headers: { Authorization: "Token #{token}" }
         | 
| 70 | 
            -
                  )
         | 
| 71 | 
            -
                  raise(RecastError.new(response.message)) if response.code != 200
         | 
| 72 | 
            -
             | 
| 73 | 
            -
                  Response.new(response.body)
         | 
| 74 | 
            -
                end
         | 
| 75 | 
            -
             | 
| 76 | 
            -
                ##
         | 
| 77 | 
            -
                # Perform a voice file request to Recast.AI
         | 
| 78 | 
            -
                #
         | 
| 79 | 
            -
                # * *Args* :
         | 
| 80 | 
            -
                #   - +file+ - String or File, the voice file to process
         | 
| 81 | 
            -
                #   - +options+ - Hash, request's options
         | 
| 82 | 
            -
                # * *Returns* :
         | 
| 83 | 
            -
                #   - An instance of Response
         | 
| 84 | 
            -
                # * *Throws* :
         | 
| 85 | 
            -
                #   - RecastError
         | 
| 86 | 
            -
                def file_request(file, options = {})
         | 
| 87 | 
            -
                  token = options[:token] || @token
         | 
| 88 | 
            -
                  raise(RecastError.new('Token is missing')) if token.nil?
         | 
| 89 | 
            -
             | 
| 90 | 
            -
                  language = options[:language] || @language
         | 
| 91 | 
            -
             | 
| 92 | 
            -
                  body = { voice: File.new(file) }
         | 
| 93 | 
            -
                  body[:language] = language unless language.nil?
         | 
| 94 | 
            -
                  response = HTTMultiParty.post(
         | 
| 95 | 
            -
                    Utils::REQUEST_ENDPOINT,
         | 
| 96 | 
            -
                    body: body,
         | 
| 97 | 
            -
                    headers: { Authorization: "Token #{token}" }
         | 
| 98 | 
            -
                  )
         | 
| 99 | 
            -
                  raise(RecastError.new(response.message)) if response.code != 200
         | 
| 100 | 
            -
             | 
| 101 | 
            -
                  Response.new(response.body)
         | 
| 102 | 
            -
                end
         | 
| 103 | 
            -
              end
         | 
| 104 | 
            -
            end
         | 
| @@ -1,182 +0,0 @@ | |
| 1 | 
            -
            # encoding: utf-8
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            ##
         | 
| 4 | 
            -
            # This class builds a conversation from *_converse
         | 
| 5 | 
            -
            module RecastAI
         | 
| 6 | 
            -
              class Conversation
         | 
| 7 | 
            -
                attr_reader :raw
         | 
| 8 | 
            -
                attr_reader :uuid
         | 
| 9 | 
            -
                attr_reader :source
         | 
| 10 | 
            -
                attr_reader :replies
         | 
| 11 | 
            -
                attr_reader :action
         | 
| 12 | 
            -
                attr_reader :next_actions
         | 
| 13 | 
            -
                attr_reader :memory
         | 
| 14 | 
            -
                attr_reader :entities
         | 
| 15 | 
            -
                attr_reader :intents
         | 
| 16 | 
            -
                attr_reader :conversation_token
         | 
| 17 | 
            -
                attr_reader :language
         | 
| 18 | 
            -
                attr_reader :version
         | 
| 19 | 
            -
                attr_reader :timestamp
         | 
| 20 | 
            -
                attr_reader :status
         | 
| 21 | 
            -
             | 
| 22 | 
            -
                def initialize(response)
         | 
| 23 | 
            -
                  @raw = response
         | 
| 24 | 
            -
             | 
| 25 | 
            -
                  response = JSON.parse(response)
         | 
| 26 | 
            -
                  response = response['results']
         | 
| 27 | 
            -
             | 
| 28 | 
            -
                  @uuid               = response['uuid']
         | 
| 29 | 
            -
                  @source             = response['source']
         | 
| 30 | 
            -
                  @replies            = response['replies']
         | 
| 31 | 
            -
                  @action             = response['action'] ? Action.new(response['action']) : nil
         | 
| 32 | 
            -
                  @next_actions       = response['next_actions'].map{ |i| Action.new(i) }
         | 
| 33 | 
            -
                  @memory             = response['memory'].select{ |n, e| !e.nil? }.map{ |n, e| Entity.new(n, e) }
         | 
| 34 | 
            -
                  @entities           = response['entities'].flat_map{ |n, e| e.map{ |ee| Entity.new(n, ee) } }
         | 
| 35 | 
            -
                  @intents            = response['intents'].map{ |i| Intent.new(i) }
         | 
| 36 | 
            -
                  @conversation_token = response['conversation_token']
         | 
| 37 | 
            -
                  @language           = response['language']
         | 
| 38 | 
            -
                  @version            = response['version']
         | 
| 39 | 
            -
                  @timestamp          = response['timestamp']
         | 
| 40 | 
            -
                  @status             = response['status']
         | 
| 41 | 
            -
                end
         | 
| 42 | 
            -
             | 
| 43 | 
            -
                ##
         | 
| 44 | 
            -
                # Returns the first reply provided there is one
         | 
| 45 | 
            -
                #
         | 
| 46 | 
            -
                # * *Args* :
         | 
| 47 | 
            -
                # * *Returns* :
         | 
| 48 | 
            -
                #   - A String or nil
         | 
| 49 | 
            -
                def reply
         | 
| 50 | 
            -
                  @replies.any? ? @replies.first : nil
         | 
| 51 | 
            -
                end
         | 
| 52 | 
            -
             | 
| 53 | 
            -
                ##
         | 
| 54 | 
            -
                # Returns the first next action provided there is one
         | 
| 55 | 
            -
                #
         | 
| 56 | 
            -
                # * *Args* :
         | 
| 57 | 
            -
                # * *Returns* :
         | 
| 58 | 
            -
                #   - An instance of Action or nil
         | 
| 59 | 
            -
                def next_action
         | 
| 60 | 
            -
                  @next_actions.any? ? @next_actions.first : nil
         | 
| 61 | 
            -
                end
         | 
| 62 | 
            -
             | 
| 63 | 
            -
                ##
         | 
| 64 | 
            -
                # Returns the replies joined with sep
         | 
| 65 | 
            -
                #
         | 
| 66 | 
            -
                # * *Args* :
         | 
| 67 | 
            -
                #   - +sep+ - String, the separator (default: ' ')
         | 
| 68 | 
            -
                # * *Returns* :
         | 
| 69 | 
            -
                #   - A String or nil
         | 
| 70 | 
            -
                def joined_replies(sep=' ')
         | 
| 71 | 
            -
                  @replies.join(sep)
         | 
| 72 | 
            -
                end
         | 
| 73 | 
            -
             | 
| 74 | 
            -
                ##
         | 
| 75 | 
            -
                # Returns the first entity in the memory name matches the parameter
         | 
| 76 | 
            -
                # If no name is provided, returns the full memory
         | 
| 77 | 
            -
                #
         | 
| 78 | 
            -
                # * *Args* :
         | 
| 79 | 
            -
                #   - +key+ - String, the memory's field name
         | 
| 80 | 
            -
                # * *Returns* :
         | 
| 81 | 
            -
                #   - An instance of Entity or a Memory
         | 
| 82 | 
            -
                def get_memory(key=nil)
         | 
| 83 | 
            -
                  return @memory if key.nil?
         | 
| 84 | 
            -
             | 
| 85 | 
            -
                  @memory.each do |entity|
         | 
| 86 | 
            -
                    return entity if entity.name.casecmp(key.to_s) == 0
         | 
| 87 | 
            -
                  end
         | 
| 88 | 
            -
             | 
| 89 | 
            -
                  nil
         | 
| 90 | 
            -
                end
         | 
| 91 | 
            -
             | 
| 92 | 
            -
                ##
         | 
| 93 | 
            -
                # Returns the first intent provided there is one
         | 
| 94 | 
            -
                #
         | 
| 95 | 
            -
                # * *Args* :
         | 
| 96 | 
            -
                # * *Returns* :
         | 
| 97 | 
            -
                #   - A String or nil
         | 
| 98 | 
            -
                def intent
         | 
| 99 | 
            -
                  @intents.any? ? @intents.first : nil
         | 
| 100 | 
            -
                end
         | 
| 101 | 
            -
             | 
| 102 | 
            -
                class << self
         | 
| 103 | 
            -
                  ##
         | 
| 104 | 
            -
                  # Merges the conversation memory with the one given
         | 
| 105 | 
            -
                  #
         | 
| 106 | 
            -
                  # * *Args* :
         | 
| 107 | 
            -
                  #   - +token+ - String, your request_token
         | 
| 108 | 
            -
                  #   - +conversation_token+ String, the token of the conversation whose memory will be updated
         | 
| 109 | 
            -
                  #   - +memory+ Hash, the memory you want to update with
         | 
| 110 | 
            -
                  # * *Returns* :
         | 
| 111 | 
            -
                  #   - An updated Memory
         | 
| 112 | 
            -
                  # * *Throws* :
         | 
| 113 | 
            -
                  #   - RecastError
         | 
| 114 | 
            -
                  def set_memory(token, conversation_token, memory)
         | 
| 115 | 
            -
                    body = { conversation_token: conversation_token, memory: memory }
         | 
| 116 | 
            -
                    response = HTTParty.put(
         | 
| 117 | 
            -
                      Utils::CONVERSE_ENDPOINT,
         | 
| 118 | 
            -
                      body: body,
         | 
| 119 | 
            -
                      headers: { Authorization: "Token #{token}" }
         | 
| 120 | 
            -
                    )
         | 
| 121 | 
            -
                    raise(RecastError.new(response.message)) if response.code != 200
         | 
| 122 | 
            -
             | 
| 123 | 
            -
                    response = JSON.parse(response.body)
         | 
| 124 | 
            -
                    response = response['results']
         | 
| 125 | 
            -
                    response['memory'].select{ |n, e| !e.nil? }.map{ |n, e| Entity.new(n, e) }
         | 
| 126 | 
            -
                  end
         | 
| 127 | 
            -
             | 
| 128 | 
            -
                  ##
         | 
| 129 | 
            -
                  # Reset the conversation memory fully or partially with the one given
         | 
| 130 | 
            -
                  #
         | 
| 131 | 
            -
                  # * *Args* :
         | 
| 132 | 
            -
                  #   - +token+ - String, your request_token
         | 
| 133 | 
            -
                  #   - +conversation_token+ String, the token of the conversation whose memory will be updated
         | 
| 134 | 
            -
                  #   - +memory+ Hash, the memory you want to update with
         | 
| 135 | 
            -
                  # * *Returns* :
         | 
| 136 | 
            -
                  #   - A fully or partially reset Memory
         | 
| 137 | 
            -
                  # * *Throws* :
         | 
| 138 | 
            -
                  #   - RecastError
         | 
| 139 | 
            -
                  def reset_memory(token, conversation_token, name=nil)
         | 
| 140 | 
            -
                    body = { conversation_token: conversation_token }
         | 
| 141 | 
            -
                    unless name.nil?
         | 
| 142 | 
            -
                      body[:memory] = { name => nil }
         | 
| 143 | 
            -
                    end
         | 
| 144 | 
            -
                    response = HTTParty.put(
         | 
| 145 | 
            -
                      Utils::CONVERSE_ENDPOINT,
         | 
| 146 | 
            -
                      body: body,
         | 
| 147 | 
            -
                      headers: { Authorization: "Token #{token}" }
         | 
| 148 | 
            -
                    )
         | 
| 149 | 
            -
                    raise(RecastError.new(response.message)) if response.code != 200
         | 
| 150 | 
            -
             | 
| 151 | 
            -
                    response = JSON.parse(response.body)
         | 
| 152 | 
            -
                    response = response['results']
         | 
| 153 | 
            -
                    response['memory'].select{ |n, e| !e.nil? }.map{ |n, e| Entity.new(n, e) }
         | 
| 154 | 
            -
                  end
         | 
| 155 | 
            -
             | 
| 156 | 
            -
                  ##
         | 
| 157 | 
            -
                  # Resets the conversation state by setting every memory field to nil,
         | 
| 158 | 
            -
                  # all actions to not done, and the last action to nil
         | 
| 159 | 
            -
                  #
         | 
| 160 | 
            -
                  # * *Args* :
         | 
| 161 | 
            -
                  #   - +token+ - String, your request_token
         | 
| 162 | 
            -
                  #   - +conversation_token+ - String, the token of the conversation to reset
         | 
| 163 | 
            -
                  # * *Returns* :
         | 
| 164 | 
            -
                  #   - A fully reset Memory
         | 
| 165 | 
            -
                  # * *Throws* :
         | 
| 166 | 
            -
                  #   - RecastError
         | 
| 167 | 
            -
                  def reset_conversation(token, conversation_token)
         | 
| 168 | 
            -
                    body = { conversation_token: conversation_token }
         | 
| 169 | 
            -
                    response = HTTParty.delete(
         | 
| 170 | 
            -
                      Utils::CONVERSE_ENDPOINT,
         | 
| 171 | 
            -
                      body: body,
         | 
| 172 | 
            -
                      headers: { Authorization: "Token #{token}" }
         | 
| 173 | 
            -
                    )
         | 
| 174 | 
            -
                    raise(RecastError.new(response.message)) if response.code != 200
         | 
| 175 | 
            -
             | 
| 176 | 
            -
                    response = JSON.parse(response.body)
         | 
| 177 | 
            -
                    response = response['results']
         | 
| 178 | 
            -
                    response['memory'].select{ |n, e| !e.nil? }.map{ |n, e| Entity.new(n, e) }
         | 
| 179 | 
            -
                  end
         | 
| 180 | 
            -
                end
         | 
| 181 | 
            -
              end
         | 
| 182 | 
            -
            end
         | 
    
        data/lib/recastai/response.rb
    DELETED
    
    | @@ -1,227 +0,0 @@ | |
| 1 | 
            -
            # encoding: utf-8
         | 
| 2 | 
            -
             | 
| 3 | 
            -
            ##
         | 
| 4 | 
            -
            # This class builds a response from *_request
         | 
| 5 | 
            -
            module RecastAI
         | 
| 6 | 
            -
              class Response
         | 
| 7 | 
            -
                attr_reader :raw
         | 
| 8 | 
            -
                attr_reader :uuid
         | 
| 9 | 
            -
                attr_reader :source
         | 
| 10 | 
            -
                attr_reader :intents
         | 
| 11 | 
            -
                attr_reader :act
         | 
| 12 | 
            -
                attr_reader :type
         | 
| 13 | 
            -
                attr_reader :sentiment
         | 
| 14 | 
            -
                attr_reader :entities
         | 
| 15 | 
            -
                attr_reader :language
         | 
| 16 | 
            -
                attr_reader :version
         | 
| 17 | 
            -
                attr_reader :timestamp
         | 
| 18 | 
            -
                attr_reader :status
         | 
| 19 | 
            -
             | 
| 20 | 
            -
                def initialize(response)
         | 
| 21 | 
            -
                  @raw = response
         | 
| 22 | 
            -
             | 
| 23 | 
            -
                  response = JSON.parse(response)
         | 
| 24 | 
            -
                  response = response['results']
         | 
| 25 | 
            -
             | 
| 26 | 
            -
                  @uuid      = response['uuid']
         | 
| 27 | 
            -
                  @source    = response['source']
         | 
| 28 | 
            -
                  @intents   = response['intents'].map{ |i| Intent.new(i) }
         | 
| 29 | 
            -
                  @act       = response['act']
         | 
| 30 | 
            -
                  @type      = response['type']
         | 
| 31 | 
            -
                  @sentiment = response['sentiment']
         | 
| 32 | 
            -
                  @entities  = response['entities'].flat_map{ |n, e| e.map{ |ee| Entity.new(n, ee) } }
         | 
| 33 | 
            -
                  @language  = response['language']
         | 
| 34 | 
            -
                  @version   = response['version']
         | 
| 35 | 
            -
                  @timestamp = response['timestamp']
         | 
| 36 | 
            -
                  @status    = response['status']
         | 
| 37 | 
            -
                end
         | 
| 38 | 
            -
             | 
| 39 | 
            -
                ##
         | 
| 40 | 
            -
                # Returns the first intent provided there is one
         | 
| 41 | 
            -
                #
         | 
| 42 | 
            -
                # * *Args* :
         | 
| 43 | 
            -
                # * *Returns* :
         | 
| 44 | 
            -
                #   - A String or nil
         | 
| 45 | 
            -
                def intent
         | 
| 46 | 
            -
                  @intents.any? ? @intents.first : nil
         | 
| 47 | 
            -
                end
         | 
| 48 | 
            -
             | 
| 49 | 
            -
                ##
         | 
| 50 | 
            -
                # Returns the first entity whose name matches the parameter
         | 
| 51 | 
            -
                #
         | 
| 52 | 
            -
                # * *Args* :
         | 
| 53 | 
            -
                #   - +name+ - String, the entity's name
         | 
| 54 | 
            -
                # * *Returns* :
         | 
| 55 | 
            -
                #   - An instance of Entity or nil
         | 
| 56 | 
            -
                def get(name)
         | 
| 57 | 
            -
                  @entities.each do |entity|
         | 
| 58 | 
            -
                    return entity if entity.name.casecmp(name.to_s) == 0
         | 
| 59 | 
            -
                  end
         | 
| 60 | 
            -
             | 
| 61 | 
            -
                  nil
         | 
| 62 | 
            -
                end
         | 
| 63 | 
            -
             | 
| 64 | 
            -
                ##
         | 
| 65 | 
            -
                # Returns all entities whose names matches the parameter
         | 
| 66 | 
            -
                #
         | 
| 67 | 
            -
                # * *Args* :
         | 
| 68 | 
            -
                #   - +name+ - String, the entities' names
         | 
| 69 | 
            -
                # * *Returns* :
         | 
| 70 | 
            -
                #   - An array of instances of Entity or an empty array
         | 
| 71 | 
            -
                def all(name)
         | 
| 72 | 
            -
                  @entities.select do |entity|
         | 
| 73 | 
            -
                    entity.name.casecmp(name.to_s) == 0
         | 
| 74 | 
            -
                  end
         | 
| 75 | 
            -
                end
         | 
| 76 | 
            -
             | 
| 77 | 
            -
                ##
         | 
| 78 | 
            -
                # Return whether or not the act is an assertion
         | 
| 79 | 
            -
                #
         | 
| 80 | 
            -
                # + *Args* :
         | 
| 81 | 
            -
                # + *Returns* :
         | 
| 82 | 
            -
                #   - True or False
         | 
| 83 | 
            -
                def assert?
         | 
| 84 | 
            -
                  @act == Utils::ACT_ASSERT
         | 
| 85 | 
            -
                end
         | 
| 86 | 
            -
             | 
| 87 | 
            -
                ##
         | 
| 88 | 
            -
                # Return whether or not the act is a command
         | 
| 89 | 
            -
                #
         | 
| 90 | 
            -
                # + *Args* :
         | 
| 91 | 
            -
                # + *Returns* :
         | 
| 92 | 
            -
                #   - True or False
         | 
| 93 | 
            -
                def command?
         | 
| 94 | 
            -
                  @act == Utils::ACT_COMMAND
         | 
| 95 | 
            -
                end
         | 
| 96 | 
            -
             | 
| 97 | 
            -
                ##
         | 
| 98 | 
            -
                # Return whether or not the act is a wh-query
         | 
| 99 | 
            -
                #
         | 
| 100 | 
            -
                # + *Args* :
         | 
| 101 | 
            -
                # + *Returns* :
         | 
| 102 | 
            -
                #   - True or False
         | 
| 103 | 
            -
                def wh_query?
         | 
| 104 | 
            -
                  @act == Utils::ACT_WH_QUERY
         | 
| 105 | 
            -
                end
         | 
| 106 | 
            -
             | 
| 107 | 
            -
                ##
         | 
| 108 | 
            -
                # Return whether or not the act is a yn-query
         | 
| 109 | 
            -
                #
         | 
| 110 | 
            -
                # + *Args* :
         | 
| 111 | 
            -
                # + *Returns* :
         | 
| 112 | 
            -
                #   - True or False
         | 
| 113 | 
            -
                def yn_query?
         | 
| 114 | 
            -
                  @act == Utils::ACT_YN_QUERY
         | 
| 115 | 
            -
                end
         | 
| 116 | 
            -
             | 
| 117 | 
            -
                ##
         | 
| 118 | 
            -
                # Return whether or not the type is an abbreviation
         | 
| 119 | 
            -
                #
         | 
| 120 | 
            -
                # + *Args* :
         | 
| 121 | 
            -
                # + *Returns* :
         | 
| 122 | 
            -
                #   - True or False
         | 
| 123 | 
            -
                def abbreviation?
         | 
| 124 | 
            -
                  !@type.index(Utils::TYPE_ABBREVIATION).nil?
         | 
| 125 | 
            -
                end
         | 
| 126 | 
            -
             | 
| 127 | 
            -
                ##
         | 
| 128 | 
            -
                # Return whether or not the type is an entity
         | 
| 129 | 
            -
                #
         | 
| 130 | 
            -
                # + *Args* :
         | 
| 131 | 
            -
                # + *Returns* :
         | 
| 132 | 
            -
                #   - True or False
         | 
| 133 | 
            -
                def entity?
         | 
| 134 | 
            -
                  !@type.index(Utils::TYPE_ENTITY).nil?
         | 
| 135 | 
            -
                end
         | 
| 136 | 
            -
             | 
| 137 | 
            -
                ##
         | 
| 138 | 
            -
                # Return whether or not the type is a description
         | 
| 139 | 
            -
                #
         | 
| 140 | 
            -
                # + *Args* :
         | 
| 141 | 
            -
                # + *Returns* :
         | 
| 142 | 
            -
                #   - True or False
         | 
| 143 | 
            -
                def description?
         | 
| 144 | 
            -
                  !@type.index(Utils::TYPE_DESCRIPTION).nil?
         | 
| 145 | 
            -
                end
         | 
| 146 | 
            -
             | 
| 147 | 
            -
                ##
         | 
| 148 | 
            -
                # Return whether or not the type is a human
         | 
| 149 | 
            -
                #
         | 
| 150 | 
            -
                # + *Args* :
         | 
| 151 | 
            -
                # + *Returns* :
         | 
| 152 | 
            -
                #   - True or False
         | 
| 153 | 
            -
                def human?
         | 
| 154 | 
            -
                  !@type.index(Utils::TYPE_HUMAN).nil?
         | 
| 155 | 
            -
                end
         | 
| 156 | 
            -
             | 
| 157 | 
            -
                ##
         | 
| 158 | 
            -
                # Return whether or not the type is a location
         | 
| 159 | 
            -
                #
         | 
| 160 | 
            -
                # + *Args* :
         | 
| 161 | 
            -
                # + *Returns* :
         | 
| 162 | 
            -
                #   - True or False
         | 
| 163 | 
            -
                def location?
         | 
| 164 | 
            -
                  !@type.index(Utils::TYPE_LOCATION).nil?
         | 
| 165 | 
            -
                end
         | 
| 166 | 
            -
             | 
| 167 | 
            -
                ##
         | 
| 168 | 
            -
                # Return whether or not the type is a number
         | 
| 169 | 
            -
                #
         | 
| 170 | 
            -
                # + *Args* :
         | 
| 171 | 
            -
                # + *Returns* :
         | 
| 172 | 
            -
                #   - True or False
         | 
| 173 | 
            -
                def number?
         | 
| 174 | 
            -
                  !@type.index(Utils::TYPE_NUMBER).nil?
         | 
| 175 | 
            -
                end
         | 
| 176 | 
            -
             | 
| 177 | 
            -
                ##
         | 
| 178 | 
            -
                # Return whether or not the sentiment is very positive
         | 
| 179 | 
            -
                #
         | 
| 180 | 
            -
                # + *Args* :
         | 
| 181 | 
            -
                # + *Returns* :
         | 
| 182 | 
            -
                #   - True or False
         | 
| 183 | 
            -
                def vpositive?
         | 
| 184 | 
            -
                  @sentiment == Utils::SENTIMENT_VPOSITIVE
         | 
| 185 | 
            -
                end
         | 
| 186 | 
            -
             | 
| 187 | 
            -
                ##
         | 
| 188 | 
            -
                # Return whether or not the sentiment is positive
         | 
| 189 | 
            -
                #
         | 
| 190 | 
            -
                # + *Args* :
         | 
| 191 | 
            -
                # + *Returns* :
         | 
| 192 | 
            -
                #   - True or False
         | 
| 193 | 
            -
                def positive?
         | 
| 194 | 
            -
                  @sentiment == Utils::SENTIMENT_POSITIVE
         | 
| 195 | 
            -
                end
         | 
| 196 | 
            -
             | 
| 197 | 
            -
                ##
         | 
| 198 | 
            -
                # Return whether or not the sentiment is neutral
         | 
| 199 | 
            -
                #
         | 
| 200 | 
            -
                # + *Args* :
         | 
| 201 | 
            -
                # + *Returns* :
         | 
| 202 | 
            -
                #   - True or False
         | 
| 203 | 
            -
                def neutral?
         | 
| 204 | 
            -
                  @sentiment == Utils::SENTIMENT_NEUTRAL
         | 
| 205 | 
            -
                end
         | 
| 206 | 
            -
             | 
| 207 | 
            -
                ##
         | 
| 208 | 
            -
                # Return whether or not the sentiment is negative
         | 
| 209 | 
            -
                #
         | 
| 210 | 
            -
                # + *Args* :
         | 
| 211 | 
            -
                # + *Returns* :
         | 
| 212 | 
            -
                #   - True or False
         | 
| 213 | 
            -
                def negative?
         | 
| 214 | 
            -
                  @sentiment == Utils::SENTIMENT_NEGATIVE
         | 
| 215 | 
            -
                end
         | 
| 216 | 
            -
             | 
| 217 | 
            -
                ##
         | 
| 218 | 
            -
                # Return whether or not the sentiment is very negative
         | 
| 219 | 
            -
                #
         | 
| 220 | 
            -
                # + *Args* :
         | 
| 221 | 
            -
                # + *Returns* :
         | 
| 222 | 
            -
                #   - True or False
         | 
| 223 | 
            -
                def vnegative?
         | 
| 224 | 
            -
                  @sentiment == Utils::SENTIMENT_VNEGATIVE
         | 
| 225 | 
            -
                end
         | 
| 226 | 
            -
              end
         | 
| 227 | 
            -
            end
         |