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.



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

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



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

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



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

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

#delete_entities_keywords(entity, keyword) ⇒ Object



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

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

#delete_entities_keywords_synonyms(entity, keyword, synonym) ⇒ Object



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

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

#delete_intents(intent) ⇒ Object



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

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

#delete_traits(trait) ⇒ Object



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

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

#delete_traits_values(trait, value) ⇒ Object



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

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

#get_entitiesObject



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

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

#get_entity(entity) ⇒ Object



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

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

#get_intent(intent) ⇒ Object



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

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

#get_intentsObject



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

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

#get_trait(trait) ⇒ Object



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

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

#get_traitsObject



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

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

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



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

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



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

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

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



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

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



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

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



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

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/#{URI.encode(entity)}/keywords", {}, payload)
end

#post_entities_keywords_synonyms(entity, keyword, payload) ⇒ Object



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

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/#{URI.encode(entity)}/keywords/#{URI.encode(keyword)}/synonyms", {}, payload)
end

#post_intents(payload) ⇒ Object



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

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

#post_traits(payload) ⇒ Object



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

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

#post_traits_values(trait, payload) ⇒ Object



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

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

#post_utterances(payload) ⇒ Object



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

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



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

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/#{URI.encode(entity)}", {}, payload)
end