api-ai-ruby 1.2.1 → 1.2.2
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +15 -0
- data/lib/api-ai-ruby/client.rb +1 -1
- data/lib/api-ai-ruby/constants.rb +1 -1
- data/lib/api-ai-ruby/request/request_query.rb +5 -4
- data/spec/api-ai-ruby/client_spec.rb +3 -1
- data/spec/api-ai-ruby/text_request_spec.rb +59 -0
- data/spec/helper.rb +3 -2
- metadata +2 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 522e5912efc69543bb84c18c85e7be17a3858640
|
4
|
+
data.tar.gz: bae85fbe0f16379fef9ceeb70a0b2035a85f26d8
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 33292054e5c042f63fa248b53bedd68d2d009e1eeb16d79aae63cf798829f9aeb500b031189a530887c2be37c7827867269270630866a56f7eba1f4cff823628
|
7
|
+
data.tar.gz: 1358d1cf73154909c6be7e903828e349fd9bad9342b010344ce92f0d2c825672dd6c867bb4edb86c1a9e23ceff665cc3f043f5dedd4b74ba74020f90a2ae2777
|
data/README.md
CHANGED
@@ -140,6 +140,20 @@ uer.retrieve('contacts') # will return current state of user entity
|
|
140
140
|
uer.delete('contacts') # will remove user entities for given session
|
141
141
|
|
142
142
|
```
|
143
|
+
#Timeouts
|
144
|
+
**ApiAiRuby::Client** uses the [http gem](https://github.com/httprb/http) under the hood. You can use ```timeout_options``` on the client to set these.
|
145
|
+
```ruby
|
146
|
+
ApiAiRuby::Client.new(
|
147
|
+
client_access_token: 'YOUR_ACCESS_TOKEN',
|
148
|
+
api_lang: 'FR',
|
149
|
+
api_base_url: 'http://example.com/v1/',
|
150
|
+
api_version: 'YYYYMMDD',
|
151
|
+
api_session_id: 'some_uuid_or_whatever',
|
152
|
+
timeout_options: [:global, { write: 1, connect: 1, read: 1 }]
|
153
|
+
)
|
154
|
+
```
|
155
|
+
|
156
|
+
Please see the [httprb wiki on timeouts](https://github.com/httprb/http/wiki/Timeouts) for more information.
|
143
157
|
|
144
158
|
|
145
159
|
#Error handling
|
@@ -148,6 +162,7 @@ uer.delete('contacts') # will remove user entities for given session
|
|
148
162
|
|
149
163
|
#Changelog
|
150
164
|
|
165
|
+
* 1.2.2 - added configurable timeouts for requests (thanks [bramski](https://github.com/bramski))
|
151
166
|
* 1.2.1 - fixed UTF-8 in text-requests
|
152
167
|
* 1.2.0 - added configurable session_id and full userEntities support
|
153
168
|
* 1.1.4 - removed unused dependency and updated default API version
|
data/lib/api-ai-ruby/client.rb
CHANGED
@@ -2,7 +2,7 @@ require 'securerandom'
|
|
2
2
|
|
3
3
|
module ApiAiRuby
|
4
4
|
class Client
|
5
|
-
attr_accessor :client_access_token, :subscription_key
|
5
|
+
attr_accessor :client_access_token, :subscription_key, :timeout_options
|
6
6
|
attr_writer :user_agent, :api_version, :api_lang, :api_base_url, :api_session_id
|
7
7
|
|
8
8
|
# Initializes a new Client object
|
@@ -3,7 +3,7 @@ require 'http'
|
|
3
3
|
module ApiAiRuby
|
4
4
|
class RequestQuery
|
5
5
|
|
6
|
-
attr_accessor :client, :headers, :options,
|
6
|
+
attr_accessor :client, :headers, :options, :request_method, :uri
|
7
7
|
|
8
8
|
# @param client [ApiAiRuby::Client]
|
9
9
|
# @param options [Hash]
|
@@ -18,20 +18,21 @@ module ApiAiRuby
|
|
18
18
|
@headers = {
|
19
19
|
Authorization: 'Bearer ' + client.client_access_token,
|
20
20
|
}
|
21
|
+
@timeout_options = client.timeout_options || options[:timeout_options]
|
21
22
|
end
|
22
23
|
|
23
24
|
# @return [Array, Hash]
|
24
25
|
def perform
|
25
|
-
|
26
26
|
if @options.has_key?(:voiceData)
|
27
27
|
options_key = :form
|
28
28
|
else
|
29
29
|
options_key = (@request_method === :get) ? :params : :json
|
30
30
|
end
|
31
31
|
|
32
|
-
|
32
|
+
request = HTTP.with(@headers)
|
33
|
+
request = request.timeout(*@timeout_options) if @timeout_options
|
34
|
+
response = request.public_send(@request_method, @uri.to_s, options_key => @options)
|
33
35
|
response_body = symbolize_keys!(response.parse)
|
34
|
-
response_headers = response.headers
|
35
36
|
fail_or_return_response_body(response.code, response_body)
|
36
37
|
end
|
37
38
|
|
@@ -48,13 +48,15 @@ describe ApiAiRuby::Client do
|
|
48
48
|
api_lang: 'RU',
|
49
49
|
api_base_url: 'http://localhost',
|
50
50
|
api_version: '1234',
|
51
|
-
api_session_id: '555'
|
51
|
+
api_session_id: '555',
|
52
|
+
timeout_options: [:global, { write: 1, connect: 1, read: 1}]
|
52
53
|
)
|
53
54
|
|
54
55
|
expect(client.api_base_url).to eq 'http://localhost'
|
55
56
|
expect(client.api_version).to eq '1234'
|
56
57
|
expect(client.api_lang).to eq 'RU'
|
57
58
|
expect(client.api_session_id).to eq '555'
|
59
|
+
expect(client.timeout_options).to eq [:global, { write: 1, connect: 1, read: 1}]
|
58
60
|
end
|
59
61
|
|
60
62
|
|
@@ -0,0 +1,59 @@
|
|
1
|
+
require 'helper'
|
2
|
+
|
3
|
+
describe ApiAiRuby::TextRequest do
|
4
|
+
let(:client) do
|
5
|
+
ApiAiRuby::Client.new(
|
6
|
+
client_access_token: 'CS',
|
7
|
+
api_lang: 'EN',
|
8
|
+
api_session_id: '555',
|
9
|
+
timeout_options: [:global, { write: 1, connect: 1, read: 1 }]
|
10
|
+
)
|
11
|
+
end
|
12
|
+
|
13
|
+
subject(:text_request) { described_class.new(client, options) }
|
14
|
+
let(:options) { { query: "hello" } }
|
15
|
+
|
16
|
+
around do |test|
|
17
|
+
begin
|
18
|
+
WebMock.disable_net_connect!(allow: 'coveralls.io')
|
19
|
+
test.run
|
20
|
+
ensure
|
21
|
+
WebMock.allow_net_connect!
|
22
|
+
end
|
23
|
+
end
|
24
|
+
|
25
|
+
let(:response_headers) do
|
26
|
+
{ "Content-Type" => "application/json;charset=UTF-8", "Content-Length" => "437", "Connection" => "close", "Access-Control-Allow-Credentials" => "true", "Cache-Control" => "no-cache=\"set-cookie\"", "Date" => "Wed, 12 Oct 2016 20:07:54 GMT", "Server" => "nginx/1.9.7", "Set-Cookie" => "AWSELB=9D5B4D210CCFFAF1BE1E0CD7C7E6FCBD7B46140CAAF64A202A005B9079598B549F7A5EC269DD0FF88508DA57410EFC7882B7860453691E7ACC870186C9D1589D2A332B51EC;PATH=/", "X-Cache" => "Miss from cloudfront", "Via" => "1.1 978198446b6fdba8a499c04f84a3a7e6.cloudfront.net (CloudFront)", "X-Amz-Cf-Id" => "ilwhpG75Ea4iXumklw7484nYt2jbx-L6ZaeiO9naUOstx45ia_nuaQ==" }
|
27
|
+
end
|
28
|
+
let(:body) do
|
29
|
+
{ :id => "94613973-930f-4a53-9286-6e9efcbb5c57", :timestamp => "2016-10-12T20:07:54.876Z", :result => { :source => "domains", :resolvedQuery => "hello", :action => "smalltalk.greetings", :parameters => { :simplified => "hello" }, :metadata => {}, :fulfillment => { :speech => "Good day!" }, :score => 0.0 }, :status => { :code => 200, :errorType => "success" }, :sessionId => "555" }
|
30
|
+
end
|
31
|
+
let(:expected_headers) do
|
32
|
+
{ 'Authorization' => 'Bearer CS', 'Connection' => 'close', 'Content-Type' => 'application/json; charset=UTF-8', 'Host' => 'api.api.ai' }
|
33
|
+
end
|
34
|
+
let(:expected_url) { "https://api.api.ai/v1/query?v=20150910" }
|
35
|
+
let(:expected_body) { '{"query":"hello","lang":"EN","sessionId":"555"}' }
|
36
|
+
|
37
|
+
describe "#perform" do
|
38
|
+
it "performs a request" do
|
39
|
+
stub = stub_request(:post, expected_url).
|
40
|
+
with(:body => expected_body,
|
41
|
+
:headers => expected_headers).
|
42
|
+
to_return(:status => 200, :body => body.to_json, :headers => response_headers)
|
43
|
+
subject.perform
|
44
|
+
expect(stub).to have_been_requested
|
45
|
+
end
|
46
|
+
|
47
|
+
context "it times out" do
|
48
|
+
it "times out properly" do
|
49
|
+
stub = stub_request(:post, expected_url).
|
50
|
+
with(:body => expected_body,
|
51
|
+
:headers => expected_headers).to_timeout
|
52
|
+
expect {
|
53
|
+
subject.perform
|
54
|
+
}.to raise_error(Errno::ETIMEDOUT)
|
55
|
+
expect(stub).to have_been_requested
|
56
|
+
end
|
57
|
+
end
|
58
|
+
end
|
59
|
+
end
|
data/spec/helper.rb
CHANGED
@@ -12,9 +12,10 @@ end
|
|
12
12
|
|
13
13
|
require 'api-ai-ruby'
|
14
14
|
require 'rspec'
|
15
|
-
|
15
|
+
require 'webmock'
|
16
|
+
require 'webmock/rspec'
|
16
17
|
|
17
|
-
|
18
|
+
WebMock.allow_net_connect!
|
18
19
|
|
19
20
|
RSpec.configure do |config|
|
20
21
|
config.expect_with :rspec do |c|
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: api-ai-ruby
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.2.
|
4
|
+
version: 1.2.2
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- api.ai
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date: 2016-
|
11
|
+
date: 2016-10-14 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: bundler
|