wit 3.0.0 → 3.1.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.
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