wit 3.0.0 → 3.1.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (8) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/CHANGES.md +5 -0
  4. data/Gemfile +1 -0
  5. data/README.md +98 -2
  6. data/lib/wit.rb +25 -7
  7. data/wit.gemspec +1 -1
  8. metadata +2 -1
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 20bcf5fae1df0ea0fe610b69f059f21dbe12f5e1
4
- data.tar.gz: 9784d136f7e6dcd658dd5f902ac882a38f294b2b
3
+ metadata.gz: 8346c258aff676710321e7452750f3ea6eff3a56
4
+ data.tar.gz: 625b24dc2223fef2500303d98c409deea91b3f43
5
5
  SHA512:
6
- metadata.gz: bcc746f4aa7fe8e71ec4e5f0c4aff56b6c61b968f0bff398a3de3280e7698b50073ce4f0c9e953e485f96c983809373015e88027272cfe75160af3fb9a760e29
7
- data.tar.gz: 6ec24766a8061ab26d2530c1631f84c30d352ee87c7ca51fb70eeb8ec0a06714657570a9c925d4a87b6baa5c58b27a0ccd7bd6e8a19a0877951991685a5d4af0
6
+ metadata.gz: fe28aba17bdb04e4a4614edc99bad441434c7c6f5056273e9c0092e6f1d38783202d74e7c040a199cc47314cfcd98fd4b8291b0395a4f7f17dd4dd98979147a4
7
+ data.tar.gz: d4b6ee270ca08b5f0f367bd06dae05e9e4eb3d5aa4b9d8e35cb085ab184dd9a12069e5baaeab50d9cf97f18ade9e7042cf4ee2bc501231339acce9c5a6974263
data/.gitignore CHANGED
@@ -1,3 +1,4 @@
1
1
  *.gem
2
2
  *.swo
3
3
  *.swp
4
+ Gemfile.lock
data/CHANGES.md CHANGED
@@ -1,3 +1,8 @@
1
+ ## v3.1
2
+
3
+ - allows for custom logging
4
+ - better error message
5
+
1
6
  ## v3.0
2
7
 
3
8
  Bot Engine integration
data/Gemfile ADDED
@@ -0,0 +1 @@
1
+ gemspec
data/README.md CHANGED
@@ -22,13 +22,109 @@ See the `examples` folder for examples.
22
22
 
23
23
  ## API
24
24
 
25
+ ### Overview
26
+
25
27
  `wit-ruby` provides a Wit class with the following methods:
26
- * `message` - the Wit message API
27
- * `converse` - the low-level Wit converse API
28
+ * `message` - the Wit [message API](https://wit.ai/docs/http/20160330#get-intent-via-text-link)
29
+ * `converse` - the low-level Wit [converse API](https://wit.ai/docs/http/20160330#converse-link)
28
30
  * `run_actions` - a higher-level method to the Wit converse API
29
31
 
32
+ ### Wit class
33
+
34
+ The Wit constructor takes the following parameters:
35
+ * `access_token` - the access token of your Wit instance
36
+ * `actions` - the `Hash` with your actions
37
+
38
+ The `actions` `Hash` has action names as keys, and action implementations as values.
39
+ Action names are symbols, and action implementations are lambda functions (not `Proc`).
40
+ You need to provide at least an implementation for the special actions `:say`, `:merge` and `:error`.
41
+
42
+ A minimal `actions` `Hash` looks like this:
43
+ ```ruby
44
+ actions = {
45
+ :say => -> (session_id, msg) {
46
+ p msg
47
+ },
48
+ :merge => -> (context, entities) {
49
+ return context
50
+ },
51
+ :error => -> (session_id, msg) {
52
+ p 'Oops I don\'t know what to do.'
53
+ },
54
+ }
55
+ ```
56
+
57
+ A custom action takes one parameter:
58
+ * `context` - the `Hash` representing the session state
59
+
60
+ Example:
61
+ ```ruby
62
+ require 'wit'
63
+ client = Wit.new access_token, actions
64
+ ```
65
+
66
+ ### Logging
67
+
68
+ Default logging is to `STDOUT` with `INFO` level.
69
+
70
+ You can setup your logging level as follows:
71
+ ```ruby
72
+ Wit.logger.level = Logger::WARN
73
+ ```
74
+ See the [Logger class](http://ruby-doc.org/stdlib-2.1.0/libdoc/logger/rdoc/Logger.html) docs for more information.
75
+
76
+ ### message
77
+
78
+ The Wit [message API](https://wit.ai/docs/http/20160330#get-intent-via-text-link).
79
+
80
+ Takes the following parameters:
81
+ * `msg` - the text you want Wit.ai to extract the information from
82
+
83
+ Example:
84
+ ```ruby
85
+ resp = client.message 'what is the weather in London?'
86
+ p "Yay, got Wit.ai response: #{resp}"
87
+ ```
88
+
89
+ ### run_actions
90
+
91
+ A higher-level method to the Wit converse API.
92
+
93
+ Takes the following parameters:
94
+ * `session_id` - a unique identifier describing the user session
95
+ * `message` - the text received from the user
96
+ * `context` - the `Hash` representing the session state
97
+ * `max_steps` - (optional) the maximum number of actions to execute (defaults to 5)
98
+
99
+ Example:
100
+ ```ruby
101
+ session = 'my-user-session-42'
102
+ context0 = {}
103
+ context1 = client.run_actions session, 'what is the weather in London?', context0
104
+ p "The session state is now: #{context1}"
105
+ context2 = client.run_actions session, 'and in Brussels?', context1
106
+ p "The session state is now: #{context2}"
107
+ ```
108
+
109
+ ### converse
110
+
111
+ The low-level Wit [converse API](https://wit.ai/docs/http/20160330#converse-link).
112
+
113
+ Takes the following parameters:
114
+ * `session_id` - a unique identifier describing the user session
115
+ * `msg` - the text received from the user
116
+ * `context` - the `Hash` representing the session state
117
+
118
+ Example:
119
+ ```ruby
120
+ resp = client.converse 'my-user-session-42', 'what is the weather in London?', {}
121
+ p "Yay, got Wit.ai response: #{resp}"
122
+ ```
123
+
124
+
30
125
  See the [docs](https://wit.ai/docs) for more information.
31
126
 
127
+
32
128
  ## Thanks
33
129
 
34
130
  Thanks to [Justin Workman](http://github.com/xtagon) for releasing a first version in October 2013. We really appreciate!
data/lib/wit.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require 'json'
2
+ require 'logger'
2
3
  require 'net/http'
3
4
 
4
5
  WIT_API_HOST = ENV['WIT_URL'] || 'https://api.wit.ai'
@@ -20,7 +21,9 @@ def req(access_token, meth_class, path, params={}, payload={})
20
21
  Net::HTTP.start uri.host, uri.port, {:use_ssl => uri.scheme == 'https'} do |http|
21
22
  rsp = http.request request
22
23
  raise WitException.new "HTTP error code=#{rsp.code}" unless rsp.code.to_i <= 200
23
- JSON.parse rsp.body
24
+ json = JSON.parse rsp.body
25
+ raise WitException.new "Wit responded with an error: #{json['error']}" if json.has_key? 'error'
26
+ json
24
27
  end
25
28
  end
26
29
 
@@ -42,11 +45,26 @@ def validate_actions(actions)
42
45
  end
43
46
 
44
47
  class Wit
48
+ class << self
49
+ attr_writer :logger
50
+
51
+ def logger
52
+ @logger ||= begin
53
+ $stdout.sync = true
54
+ Logger.new(STDOUT)
55
+ end.tap { |logger| logger.level = Logger::INFO }
56
+ end
57
+ end
58
+
45
59
  def initialize(access_token, actions)
46
60
  @access_token = access_token
47
61
  @actions = validate_actions actions
48
62
  end
49
63
 
64
+ def logger
65
+ self.class.logger
66
+ end
67
+
50
68
  def message(msg)
51
69
  params = {}
52
70
  params[:q] = msg unless msg.nil?
@@ -72,28 +90,28 @@ class Wit
72
90
  if type == 'msg'
73
91
  raise WitException.new 'unknown action: say' unless @actions.has_key? :say
74
92
  msg = rst['msg']
75
- p "Executing say with: #{msg}"
93
+ logger.info "Executing say with: #{msg}"
76
94
  @actions[:say].call session_id, msg
77
95
  elsif type == 'merge'
78
96
  raise WitException.new 'unknown action: merge' unless @actions.has_key? :merge
79
- p 'Executing merge'
97
+ logger.info 'Executing merge'
80
98
  context = @actions[:merge].call context, rst['entities']
81
99
  if context.nil?
82
- p 'WARN missing context - did you forget to return it?'
100
+ logger.warn 'missing context - did you forget to return it?'
83
101
  context = {}
84
102
  end
85
103
  elsif type == 'action'
86
104
  action = rst['action'].to_sym
87
105
  raise WitException.new "unknown action: #{action}" unless @actions.has_key? action
88
- p "Executing action #{action}"
106
+ logger.info "Executing action #{action}"
89
107
  context = @actions[action].call context
90
108
  if context.nil?
91
- p 'WARN missing context - did you forget to return it?'
109
+ logger.warn 'missing context - did you forget to return it?'
92
110
  context = {}
93
111
  end
94
112
  elsif type == 'error'
95
113
  raise WitException.new 'unknown action: error' unless @actions.has_key? :error
96
- p 'Executing error'
114
+ logger.info 'Executing error'
97
115
  @actions[:error].call session_id, 'unknown action: error'
98
116
  else
99
117
  raise WitException.new "unknown type: #{type}"
data/wit.gemspec CHANGED
@@ -1,6 +1,6 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'wit'
3
- s.version = '3.0.0'
3
+ s.version = '3.1.0'
4
4
  s.date = '2014-12-05'
5
5
  s.summary = 'Ruby SDK for Wit.ai'
6
6
  s.description = 'Ruby SDK for Wit.ai'
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: wit
3
3
  version: !ruby/object:Gem::Version
4
- version: 3.0.0
4
+ version: 3.1.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - The Wit Team
@@ -18,6 +18,7 @@ extra_rdoc_files: []
18
18
  files:
19
19
  - ".gitignore"
20
20
  - CHANGES.md
21
+ - Gemfile
21
22
  - LICENSE
22
23
  - README.md
23
24
  - examples/joke.rb