Class: Wit

Inherits:
Object
  • Object
show all
Defined in:
lib/wit.rb

Defined Under Namespace

Classes: Error

Constant Summary collapse

WIT_API_HOST =
ENV['WIT_URL'] || 'https://api.wit.ai'
WIT_API_VERSION =
ENV['WIT_API_VERSION']  || '20200513'
LEARN_MORE =
'Learn more at https://wit.ai/docs/quickstart'

Instance Method Summary collapse

Constructor Details

#initialize(opts = {}) ⇒ Wit

Returns a new instance of Wit.



16
17
18
19
20
21
22
# File 'lib/wit.rb', line 16

def initialize(opts = {})
  @access_token = opts[:access_token]

  if opts[:logger]
    @logger = opts[:logger]
  end
end

Instance Method Details

#create_new_app(payload, set_new_app_token = false) ⇒ Object



63
64
65
66
67
# File 'lib/wit.rb', line 63

def create_new_app(payload, set_new_app_token = false)
  response = req(logger, @access_token, Net::HTTP::Post, "/apps", {}, payload)
  @access_token = response['access_token'] if set_new_app_token
  return response
end

#delete_entities(entity) ⇒ Object



117
118
119
# File 'lib/wit.rb', line 117

def delete_entities(entity)
  req(logger, @access_token, Net::HTTP::Delete, "/entities/#{CGI::escape(entity)}")
end

#delete_entities_keywords(entity, keyword) ⇒ Object



127
128
129
# File 'lib/wit.rb', line 127

def delete_entities_keywords(entity, keyword)
  req(logger, @access_token, Net::HTTP::Delete, "/entities/#{CGI::escape(entity)}/keywords/#{CGI::escape(keyword)}")
end

#delete_entities_keywords_synonyms(entity, keyword, synonym) ⇒ Object



137
138
139
# File 'lib/wit.rb', line 137

def delete_entities_keywords_synonyms(entity, keyword, synonym)
  req(logger,@access_token, Net::HTTP::Delete, "/entities/#{CGI::escape(entity)}/keywords/#{CGI::escape(keyword)}/synonyms/#{CGI::escape(synonym)}")
end

#delete_intents(intent) ⇒ Object



93
94
95
# File 'lib/wit.rb', line 93

def delete_intents(intent)
  req(logger, @access_token, Net::HTTP::Delete, "/intents/#{CGI::escape(intent)}")
end

#delete_traits(trait) ⇒ Object



161
162
163
# File 'lib/wit.rb', line 161

def delete_traits(trait)
  req(logger, @access_token, Net::HTTP::Delete, "/traits/#{CGI::escape(trait)}")
end

#delete_traits_values(trait, value) ⇒ Object



157
158
159
# File 'lib/wit.rb', line 157

def delete_traits_values(trait, value)
  req(logger, @access_token, Net::HTTP::Delete, "/traits/#{CGI::escape(trait)}/values/#{CGI::escape(value)}")
end

#get_entitiesObject



97
98
99
# File 'lib/wit.rb', line 97

def get_entities
  req(logger, @access_token, Net::HTTP::Get, "/entities")
end

#get_entity(entity) ⇒ Object



107
108
109
# File 'lib/wit.rb', line 107

def get_entity(entity)
  req(logger, @access_token, Net::HTTP::Get, "/entities/#{CGI::escape(entity)}")
end

#get_intent(intent) ⇒ Object



85
86
87
# File 'lib/wit.rb', line 85

def get_intent(intent)
  req(logger, @access_token, Net::HTTP::Get, "/intents/#{CGI::escape(intent)}")
end

#get_intentsObject



81
82
83
# File 'lib/wit.rb', line 81

def get_intents
  req(logger, @access_token, Net::HTTP::Get, "/intents")
end

#get_trait(trait) ⇒ Object



145
146
147
# File 'lib/wit.rb', line 145

def get_trait(trait)
  req(logger, @access_token, Net::HTTP::Get, "/traits/#{CGI::escape(trait)}")
end

#get_traitsObject



141
142
143
# File 'lib/wit.rb', line 141

def get_traits
  req(logger, @access_token, Net::HTTP::Get, "/traits")
end

#interactive(handle_message = nil, context = {}) ⇒ Object



41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
# File 'lib/wit.rb', line 41

def interactive(handle_message=nil, context={})
  while true
    print '> '
    msg = STDIN.gets.strip
    if msg == ''
      next
    end

    begin
      if handle_message.nil?
        puts(message(msg))
      else
        puts(handle_message.call(message(msg)))
      end
    rescue Error => exp
      logger.error("error: #{exp.message}")
    end
  end
rescue Interrupt => _exp
  puts
end

#loggerObject



24
25
26
27
28
29
30
# File 'lib/wit.rb', line 24

def logger
  @logger ||= begin
    x = Logger.new(STDOUT)
    x.level = Logger::INFO
    x
  end
end

#message(msg, n = nil, verbose = nil) ⇒ Object



32
33
34
35
36
37
38
39
# File 'lib/wit.rb', line 32

def message(msg, n=nil, verbose=nil)
  params = {}
  params[:q] = msg unless msg.nil?
  params[:n] = n unless n.nil?
  params[:verbose] = verbose unless verbose.nil?
  res = req(logger, @access_token, Net::HTTP::Get, '/message', params)
  return res
end

#post_entities(payload) ⇒ Object



101
102
103
104
105
# File 'lib/wit.rb', line 101

def post_entities(payload)
  payload = payload.map {|k, v| [(k.to_sym rescue k), v]}.to_h.reject{ |k| ![:name, :roles, :lookups, :keywords].include?(k) }
  validate_payload payload
  req(logger, @access_token, Net::HTTP::Post, "/entities", {}, payload)
end

#post_entities_keywords(entity, payload) ⇒ Object



121
122
123
124
125
# File 'lib/wit.rb', line 121

def post_entities_keywords(entity, payload)
  payload = payload.map {|k, v| [(k.to_sym rescue k), v]}.to_h.reject{ |k| ![:keyword, :synonyms].include?(k) }
  validate_payload payload
  req(logger, @access_token, Net::HTTP::Post, "/entities/#{CGI::escape(entity)}/keywords", {}, payload)
end

#post_entities_keywords_synonyms(entity, keyword, payload) ⇒ Object



131
132
133
134
135
# File 'lib/wit.rb', line 131

def post_entities_keywords_synonyms(entity, keyword, payload)
  payload = payload.map {|k, v| [(k.to_sym rescue k), v]}.to_h.reject{ |k| ![:synonym].include?(k) }
  validate_payload payload
  req(logger,@access_token, Net::HTTP::Post, "/entities/#{CGI::escape(entity)}/keywords/#{CGI::escape(keyword)}/synonyms", {}, payload)
end

#post_intents(payload) ⇒ Object



89
90
91
# File 'lib/wit.rb', line 89

def post_intents(payload)
  req(logger, @access_token, Net::HTTP::Post, "/intents", {}, payload)
end

#post_traits(payload) ⇒ Object



149
150
151
# File 'lib/wit.rb', line 149

def post_traits(payload)
  req(logger, @access_token, Net::HTTP::Post, "/traits", {}, payload)
end

#post_traits_values(trait, payload) ⇒ Object



153
154
155
# File 'lib/wit.rb', line 153

def post_traits_values(trait, payload)
  req(logger, @access_token, Net::HTTP::Post, "/traits/#{CGI::escape(trait)}/values", {}, payload)
end

#post_utterances(payload) ⇒ Object



69
70
71
72
73
74
75
76
77
78
79
# File 'lib/wit.rb', line 69

def post_utterances(payload)
  payload = [payload] if payload.is_a? Hash

  payload.each do |utterance|
    unless utterance[:entities].empty?
      utterance[:entities] = validate_entities utterance[:entities]
    end
    validate_payload utterance
  end
  req(logger, @access_token, Net::HTTP::Post, "/utterances", {}, payload)
end

#put_entities(entity, payload) ⇒ Object



111
112
113
114
115
# File 'lib/wit.rb', line 111

def put_entities(entity, payload)
  payload = payload.map {|k, v| [(k.to_sym rescue k), v]}.to_h.reject{ |k| ![:name, :roles, :lookups, :keywords].include?(k) }
  validate_payload payload
  req(logger, @access_token, Net::HTTP::Put, "/entities/#{CGI::escape(entity)}", {}, payload)
end