orientdb_client 0.0.3 → 0.0.4
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.
- 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
|