orientdb_client 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/CHANGELOG.md +2 -0
- data/README.md +28 -3
- data/lib/orientdb_client.rb +1 -1
- data/lib/orientdb_client/errors.rb +1 -0
- data/lib/orientdb_client/http_adapters.rb +13 -1
- data/lib/orientdb_client/http_adapters/curb_adapter.rb +9 -5
- data/lib/orientdb_client/http_adapters/typhoeus_adapter.rb +9 -1
- data/lib/orientdb_client/test.rb +2 -2
- data/lib/orientdb_client/version.rb +1 -1
- data/spec/support/shared_examples_for_http_adapter.rb +9 -0
- 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: 1f790f7d0f994bd626bff6f95c180024a2fbcd7c
|
4
|
+
data.tar.gz: 46f3386fef71ef7736be02b7b92e59254f1d62b2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 7765f03411f6491a02751d05bf2bb0d3c5fa7c744a4c7290775e0fc376c709103d9c2bc4c4cc01a04cd45e766394d02cf3171ebcdff62d44f21ef82c09afa0fd
|
7
|
+
data.tar.gz: 9e42dc627c9e01792cbce92a16e9259efaac17f4ccae3d82220d48783eecf66b593f9bb0ed2f02e869f09fbbae244d7a3995d9c42c43f1af0d0fdfda404fe26c
|
data/CHANGELOG.md
CHANGED
data/README.md
CHANGED
@@ -48,6 +48,9 @@ my_client.create_database('new_db', 'plocal', 'graph')
|
|
48
48
|
require 'orientdb_client'
|
49
49
|
require 'orientdb_client/http_adapters/curb_adapter'
|
50
50
|
client = OrientdbClient.client(adapter: 'CurbAdapter')
|
51
|
+
|
52
|
+
# initialize client with an HTTP request timeout of 30s
|
53
|
+
client = OrientdbClient.client(host: 'localhost', timeout: 30)
|
51
54
|
```
|
52
55
|
|
53
56
|
## Logging/instrumentation
|
@@ -55,7 +58,13 @@ client = OrientdbClient.client(adapter: 'CurbAdapter')
|
|
55
58
|
OrientdbClient does no logging by default, but will use ActiveSupport::Notifications
|
56
59
|
if you `require 'orientdb_client/instrumentation/log_subscriber'`.
|
57
60
|
|
58
|
-
If you are using Rails, this should *just work*.
|
61
|
+
If you are using Rails, this should *just work*. You will have to initialize your client instance
|
62
|
+
with the option `instrumenter: ActiveSupport::Notifications`, e.g.:
|
63
|
+
|
64
|
+
|
65
|
+
```ruby
|
66
|
+
my_client = OrientdbClient.client(host: 'localhost', instrumenter: ActiveSupport::Notifications)
|
67
|
+
```
|
59
68
|
|
60
69
|
If you aren't, you'll need to manually specify the logger, like so:
|
61
70
|
|
@@ -105,10 +114,26 @@ curb 0.060000 0.010000 0.070000 ( 0.331764)
|
|
105
114
|
|
106
115
|
Launch pry session with the gem: `rake console`, in pry use `reload!` to reload all gem files.
|
107
116
|
|
108
|
-
Run tests: `rake db:test:create` (consult `test.rb` for information on customizing auth credentials via env variables).
|
109
|
-
|
110
117
|
Turn on/off rudimentary debug mode with `client.debug = true/false`.
|
111
118
|
|
119
|
+
### Running the tests
|
120
|
+
|
121
|
+
Currently, we don't run integration tests in CI due to the hackyness of setting running orientdb on Travis, and also because
|
122
|
+
some of the integration tests fail non-deterministically (especially the ones involving multiple threads).
|
123
|
+
|
124
|
+
To run all the tests:
|
125
|
+
|
126
|
+
1. install orientdb locally
|
127
|
+
2. if you used a different username or password than `root`, then you'll have to specify those values via environment variables, e.g.:
|
128
|
+
|
129
|
+
```
|
130
|
+
export ORIENTDB_TEST_USERNAME=your_username
|
131
|
+
export ORIENTDB_TEST_PASSWORD=your_password
|
132
|
+
```
|
133
|
+
|
134
|
+
3. run `bundle exec rake db:test:create` to create the test database
|
135
|
+
4. run `bundle exec rspec` to run the tests
|
136
|
+
|
112
137
|
## Contributing
|
113
138
|
|
114
139
|
1. Fork it ( https://github.com/[my-github-username]/orientdb_client/fork )
|
data/lib/orientdb_client.rb
CHANGED
@@ -36,7 +36,7 @@ module OrientdbClient
|
|
36
36
|
HttpAdapters::TyphoeusAdapter
|
37
37
|
end
|
38
38
|
@instrumenter = options[:instrumenter] || Instrumenters::Noop
|
39
|
-
@http_client = adapter_klass.new
|
39
|
+
@http_client = adapter_klass.new(timeout: options[:timeout])
|
40
40
|
@node = Node.new(host: @host, port: @port, http_client: @http_client, client: self)
|
41
41
|
@connected = false
|
42
42
|
self
|
@@ -20,6 +20,7 @@ module OrientdbClient
|
|
20
20
|
class DistributedRecordLockedException < TransactionException; end
|
21
21
|
# Generic DistributedException, generally a more specific error is preferable.
|
22
22
|
class DistributedException < ServerError; end
|
23
|
+
class Timeout < ServerError; end
|
23
24
|
|
24
25
|
# ClientError: you did something wrong
|
25
26
|
class ClientError < OrientdbError; end
|
@@ -5,10 +5,12 @@ module OrientdbClient
|
|
5
5
|
class Base
|
6
6
|
attr_accessor :username, :password
|
7
7
|
|
8
|
-
def initialize
|
8
|
+
def initialize(timeout: nil)
|
9
9
|
@username = nil
|
10
10
|
@password = nil
|
11
11
|
@session_id = nil
|
12
|
+
@timeout = timeout
|
13
|
+
after_initialize
|
12
14
|
end
|
13
15
|
|
14
16
|
def reset_credentials
|
@@ -20,6 +22,16 @@ module OrientdbClient
|
|
20
22
|
def request
|
21
23
|
raise NotImplementedError
|
22
24
|
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def timed_out!(method, url)
|
29
|
+
raise OrientdbClient::Timeout, "#{method}: #{url}"
|
30
|
+
end
|
31
|
+
|
32
|
+
def after_initialize
|
33
|
+
# noop, override me as necessary
|
34
|
+
end
|
23
35
|
end
|
24
36
|
end
|
25
37
|
end
|
@@ -4,18 +4,19 @@ module OrientdbClient
|
|
4
4
|
module HttpAdapters
|
5
5
|
class CurbAdapter < Base
|
6
6
|
|
7
|
-
def initialize
|
8
|
-
super
|
9
|
-
@curl = Curl::Easy.new
|
10
|
-
end
|
11
|
-
|
12
7
|
def request(method, url, options = {})
|
13
8
|
req = prepare_request(method, url, options)
|
14
9
|
run_request(req, method)
|
15
10
|
req
|
11
|
+
rescue Curl::Err::TimeoutError
|
12
|
+
timed_out!(method, url)
|
16
13
|
end
|
17
14
|
|
18
15
|
private
|
16
|
+
|
17
|
+
def after_initialize
|
18
|
+
@curl = Curl::Easy.new
|
19
|
+
end
|
19
20
|
|
20
21
|
def prepare_request(method, url, options)
|
21
22
|
username = options[:username] || @username
|
@@ -24,6 +25,9 @@ module OrientdbClient
|
|
24
25
|
@curl.http_auth_types = :basic
|
25
26
|
@curl.username = username
|
26
27
|
@curl.password = password
|
28
|
+
if timeout = @timeout || options[:timeout]
|
29
|
+
@curl.timeout = timeout
|
30
|
+
end
|
27
31
|
@curl
|
28
32
|
end
|
29
33
|
|
@@ -6,7 +6,12 @@ module OrientdbClient
|
|
6
6
|
|
7
7
|
def request(method, url, options = {})
|
8
8
|
req = prepare_request(method, url, options)
|
9
|
-
run_request(req)
|
9
|
+
response = run_request(req)
|
10
|
+
if response.timed_out?
|
11
|
+
timed_out!(method, url)
|
12
|
+
else
|
13
|
+
return response
|
14
|
+
end
|
10
15
|
end
|
11
16
|
|
12
17
|
private
|
@@ -16,6 +21,9 @@ module OrientdbClient
|
|
16
21
|
userpwd: authentication_string(options),
|
17
22
|
method: method
|
18
23
|
}.merge(options)
|
24
|
+
if timeout = @timeout || options[:timeout]
|
25
|
+
options[:timeout] = timeout
|
26
|
+
end
|
19
27
|
Typhoeus::Request.new(url, options)
|
20
28
|
end
|
21
29
|
|
data/lib/orientdb_client/test.rb
CHANGED
@@ -1,8 +1,8 @@
|
|
1
1
|
module OrientdbClient
|
2
2
|
module Test
|
3
3
|
OrientdbClient::Test::DatabaseName = ENV['ORIENTDB_TEST_DATABASENAME'] || 'orientdb_client_rb_test'
|
4
|
-
OrientdbClient::Test::Username = ENV['ORIENTDB_TEST_USERNAME'] || '
|
5
|
-
OrientdbClient::Test::Password = ENV['ORIENTDB_TEST_PASSWORD'] || '
|
4
|
+
OrientdbClient::Test::Username = ENV['ORIENTDB_TEST_USERNAME'] || 'root'
|
5
|
+
OrientdbClient::Test::Password = ENV['ORIENTDB_TEST_PASSWORD'] || 'root'
|
6
6
|
end
|
7
7
|
end
|
8
8
|
|
@@ -20,6 +20,15 @@ RSpec.shared_examples 'http adapter' do
|
|
20
20
|
end
|
21
21
|
end
|
22
22
|
|
23
|
+
describe 'timeout handling' do
|
24
|
+
let(:url) { 'http://localhost:2480/listDatabases' }
|
25
|
+
|
26
|
+
it 'raises a Timeout exception' do
|
27
|
+
stub_request(:get, url).to_timeout
|
28
|
+
expect { adapter.request(:get, url) }.to raise_exception(OrientdbClient::Timeout)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
|
23
32
|
describe '#request' do
|
24
33
|
describe 'GET' do
|
25
34
|
let(:url) { 'http://localhost:2480/listDatabases' }
|
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: orientdb_client
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
4
|
+
version: 0.0.4
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Luke Rodgers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2016-01-05 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: typhoeus
|