neo4j-ruby-driver 4.4.0-java
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/LICENSE.txt +21 -0
- data/README.md +72 -0
- data/jruby/neo4j/driver/ext/async_converter.rb +55 -0
- data/jruby/neo4j/driver/ext/auth_tokens.rb +20 -0
- data/jruby/neo4j/driver/ext/bookmark.rb +15 -0
- data/jruby/neo4j/driver/ext/config_converter.rb +69 -0
- data/jruby/neo4j/driver/ext/exception_checkable.rb +34 -0
- data/jruby/neo4j/driver/ext/exception_mapper.rb +89 -0
- data/jruby/neo4j/driver/ext/graph_database.rb +29 -0
- data/jruby/neo4j/driver/ext/internal/async/internal_async_session.rb +23 -0
- data/jruby/neo4j/driver/ext/internal/cluster/routing_table_registry_impl.rb +15 -0
- data/jruby/neo4j/driver/ext/internal/cursor/disposable_async_result_cursor.rb +15 -0
- data/jruby/neo4j/driver/ext/internal/metrics/internal_connection_pool_metrics.rb +17 -0
- data/jruby/neo4j/driver/ext/internal/summary/internal_result_summary.rb +32 -0
- data/jruby/neo4j/driver/ext/internal_driver.rb +34 -0
- data/jruby/neo4j/driver/ext/internal_entity.rb +21 -0
- data/jruby/neo4j/driver/ext/internal_keys.rb +15 -0
- data/jruby/neo4j/driver/ext/internal_node.rb +13 -0
- data/jruby/neo4j/driver/ext/internal_record.rb +29 -0
- data/jruby/neo4j/driver/ext/internal_relationship.rb +13 -0
- data/jruby/neo4j/driver/ext/internal_result.rb +23 -0
- data/jruby/neo4j/driver/ext/internal_session.rb +40 -0
- data/jruby/neo4j/driver/ext/internal_transaction.rb +24 -0
- data/jruby/neo4j/driver/ext/logger.rb +60 -0
- data/jruby/neo4j/driver/ext/map_converter.rb +14 -0
- data/jruby/neo4j/driver/ext/neo_converter.rb +59 -0
- data/jruby/neo4j/driver/ext/query.rb +13 -0
- data/jruby/neo4j/driver/ext/ruby_converter.rb +57 -0
- data/jruby/neo4j/driver/ext/run_override.rb +22 -0
- data/jruby/neo4j/driver/ext/start_end_naming.rb +17 -0
- data/jruby/neo4j/driver.rb +54 -0
- data/lib/loader.rb +19 -0
- data/lib/neo4j/driver/auto_closable.rb +32 -0
- data/lib/neo4j/driver/exceptions/authentication_exception.rb +15 -0
- data/lib/neo4j/driver/exceptions/authorization_expired_exception.rb +14 -0
- data/lib/neo4j/driver/exceptions/certificate_exception.rb +10 -0
- data/lib/neo4j/driver/exceptions/client_exception.rb +18 -0
- data/lib/neo4j/driver/exceptions/connection_read_timeout_exception.rb +14 -0
- data/lib/neo4j/driver/exceptions/database_exception.rb +13 -0
- data/lib/neo4j/driver/exceptions/discovery_exception.rb +16 -0
- data/lib/neo4j/driver/exceptions/fatal_discovery_exception.rb +13 -0
- data/lib/neo4j/driver/exceptions/illegal_state_exception.rb +10 -0
- data/lib/neo4j/driver/exceptions/neo4j_exception.rb +22 -0
- data/lib/neo4j/driver/exceptions/no_such_record_exception.rb +33 -0
- data/lib/neo4j/driver/exceptions/protocol_exception.rb +17 -0
- data/lib/neo4j/driver/exceptions/result_consumed_exception.rb +13 -0
- data/lib/neo4j/driver/exceptions/security_exception.rb +14 -0
- data/lib/neo4j/driver/exceptions/service_unavailable_exception.rb +12 -0
- data/lib/neo4j/driver/exceptions/session_expired_exception.rb +14 -0
- data/lib/neo4j/driver/exceptions/token_expired_exception.rb +15 -0
- data/lib/neo4j/driver/exceptions/transaction_nesting_exception.rb +11 -0
- data/lib/neo4j/driver/exceptions/transient_exception.rb +13 -0
- data/lib/neo4j/driver/exceptions/untrusted_server_exception.rb +11 -0
- data/lib/neo4j/driver/exceptions/value/lossy_coercion.rb +15 -0
- data/lib/neo4j/driver/exceptions/value/not_multi_valued.rb +13 -0
- data/lib/neo4j/driver/exceptions/value/uncoercible.rb +15 -0
- data/lib/neo4j/driver/exceptions/value/unsizable.rb +12 -0
- data/lib/neo4j/driver/exceptions/value/value_exception.rb +12 -0
- data/lib/neo4j/driver/internal/bolt_server_address.rb +97 -0
- data/lib/neo4j/driver/internal/duration_normalizer.rb +47 -0
- data/lib/neo4j/driver/internal/validator.rb +29 -0
- data/lib/neo4j/driver/summary/query_type.rb +12 -0
- data/lib/neo4j/driver/synchronizable.rb +23 -0
- data/lib/neo4j/driver/types/local_date_time.rb +20 -0
- data/lib/neo4j/driver/types/local_time.rb +19 -0
- data/lib/neo4j/driver/types/offset_time.rb +19 -0
- data/lib/neo4j/driver/types/point.rb +39 -0
- data/lib/neo4j/driver/types/time.rb +43 -0
- data/lib/neo4j/driver/version.rb +7 -0
- data/lib/neo4j_ruby_driver.rb +15 -0
- metadata +336 -0
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: bab0100e6ebde4c4522a587dc4f5d3448cd2ba9d014814c427d907432ebc3627
|
4
|
+
data.tar.gz: 4907a712afbce45c27b89672258c288303b757e88913c0037bf9edb078bc5e17
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 00eb88088196a005182e951e23b034ae14268023db985432770b9ead9b558925bd214491d3e2c7841697b3fcc4163e5bd35d3c3ff708a834322e2039e7fe4566
|
7
|
+
data.tar.gz: 6b25acdd0734c8876e7380293763093382ae2d1561f601ef48373b0e79c742e2d9a201bb55156eae3e8af0df543087ecd3c79ab9534731a83a9c7d80c24f7530
|
data/LICENSE.txt
ADDED
@@ -0,0 +1,21 @@
|
|
1
|
+
The MIT License (MIT)
|
2
|
+
|
3
|
+
Copyright (c) 2018 Heinrich Klobuczek
|
4
|
+
|
5
|
+
Permission is hereby granted, free of charge, to any person obtaining a copy
|
6
|
+
of this software and associated documentation files (the "Software"), to deal
|
7
|
+
in the Software without restriction, including without limitation the rights
|
8
|
+
to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
|
9
|
+
copies of the Software, and to permit persons to whom the Software is
|
10
|
+
furnished to do so, subject to the following conditions:
|
11
|
+
|
12
|
+
The above copyright notice and this permission notice shall be included in
|
13
|
+
all copies or substantial portions of the Software.
|
14
|
+
|
15
|
+
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
|
16
|
+
IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
|
17
|
+
FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
|
18
|
+
AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
|
19
|
+
LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
|
20
|
+
OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
|
21
|
+
THE SOFTWARE.
|
data/README.md
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# Neo4j::Driver
|
2
|
+
|
3
|
+
home :: https://github.com/neo4jrb/neo4j-ruby-driver
|
4
|
+
|
5
|
+
This repository contains 2 implementation of a neo4j driver for ruby:
|
6
|
+
- based on official java implementation. It provides a thin wrapper over the java driver (only on jruby).
|
7
|
+
- pure ruby implmementation. Available on all ruby versions >= 3.1.
|
8
|
+
|
9
|
+
## Installation
|
10
|
+
|
11
|
+
Add this line to your application's Gemfile:
|
12
|
+
|
13
|
+
```ruby
|
14
|
+
gem 'neo4j-ruby-driver'
|
15
|
+
```
|
16
|
+
|
17
|
+
And then execute:
|
18
|
+
|
19
|
+
$ bundle
|
20
|
+
|
21
|
+
Or install it yourself as:
|
22
|
+
|
23
|
+
$ gem install neo4j-ruby-driver
|
24
|
+
|
25
|
+
## Server Compatibility
|
26
|
+
|
27
|
+
The compatibility with Neo4j Server versions is documented in the [Neo4j Knowledge Base](https://neo4j.com/developer/kb/neo4j-supported-versions/).
|
28
|
+
|
29
|
+
## Usage
|
30
|
+
|
31
|
+
The API is to highest possible degree consistent with the official java driver.
|
32
|
+
At this moment [The Neo4j Drivers Manual v4.4](https://neo4j.com/docs/java-manual/current/) along with the ruby version of the [code fragments](https://github.com/neo4jrb/neo4j-ruby-driver/blob/master/docs/dev_manual_examples.rb) and the ruby specs provide the only documentation.
|
33
|
+
|
34
|
+
[Neo4j Java Driver 4.3 API](https://neo4j.com/docs/api/java-driver/current/) can be helpful as well..
|
35
|
+
|
36
|
+
## Development
|
37
|
+
|
38
|
+
This gem includes 2 different implementations: java driver wrapper and pure ruby driver
|
39
|
+
|
40
|
+
$ bin/setup
|
41
|
+
|
42
|
+
## Testing
|
43
|
+
|
44
|
+
To run the tests the following tools need to be installed:
|
45
|
+
|
46
|
+
$ brew install python
|
47
|
+
$ pip3 install --user git+https://github.com/klobuczek/boltkit@1.3#egg=boltkit
|
48
|
+
$ neoctrl-install -e 4.4.5 servers
|
49
|
+
$ neoctrl-configure servers/neo4j-enterprise-4.4.5 dbms.directories.import= dbms.default_listen_address=::
|
50
|
+
$ neoctrl-set-initial-password pass servers/neo4j-enterprise-4.4.5
|
51
|
+
$ neoctrl-start servers/neo4j-enterprise-4.4.5
|
52
|
+
|
53
|
+
To run the tests:
|
54
|
+
```console
|
55
|
+
$ bin/setup
|
56
|
+
$ rspec spec
|
57
|
+
```
|
58
|
+
|
59
|
+
In case of heap space memory error (`org.neo4j.driver.exceptions.DatabaseException: Java heap space`), you should limit the dbms memory, for example:
|
60
|
+
|
61
|
+
```console
|
62
|
+
$ neoctrl-configure servers/neo4j-enterprise-4.4.5 dbms.memory.pagecache.size=600m dbms.memory.heap.max_size=600m dbms.memory.heap.initial_size=600m dbms.directories.import= dbms.connectors.default_listen_address=::
|
63
|
+
```
|
64
|
+
|
65
|
+
## Contributing
|
66
|
+
|
67
|
+
Suggestions, improvements, bug reports and pull requests are welcome on GitHub at https://github.com/neo4jrb/neo4j-ruby-driver.
|
68
|
+
|
69
|
+
## License
|
70
|
+
|
71
|
+
The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
|
72
|
+
|
@@ -0,0 +1,55 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j::Driver::Ext
|
4
|
+
module AsyncConverter
|
5
|
+
include ExceptionMapper
|
6
|
+
|
7
|
+
private
|
8
|
+
|
9
|
+
class Variable
|
10
|
+
def initialize(condition = ::Async::Condition.new)
|
11
|
+
@condition = condition
|
12
|
+
@value = nil
|
13
|
+
end
|
14
|
+
|
15
|
+
def resolve(value = true)
|
16
|
+
@value = value
|
17
|
+
condition = @condition
|
18
|
+
@condition = nil
|
19
|
+
|
20
|
+
self.freeze
|
21
|
+
|
22
|
+
condition.signal(value)
|
23
|
+
end
|
24
|
+
|
25
|
+
def resolved?
|
26
|
+
@condition.nil?
|
27
|
+
end
|
28
|
+
|
29
|
+
def value
|
30
|
+
@condition&.wait
|
31
|
+
return @value
|
32
|
+
end
|
33
|
+
|
34
|
+
def wait
|
35
|
+
self.value
|
36
|
+
end
|
37
|
+
end
|
38
|
+
|
39
|
+
def to_future(completion_stage)
|
40
|
+
Concurrent::Promises.resolvable_future.tap do |future|
|
41
|
+
completion_stage.then_apply(&future.method(:fulfill)).exceptionally { |e| future.reject(mapped_exception(e.cause)) }
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
def to_async(completion_stage)
|
46
|
+
variable = Variable.new
|
47
|
+
completion_stage.when_complete do |value, error|
|
48
|
+
variable.resolve([value, error])
|
49
|
+
end
|
50
|
+
value, error = variable.wait
|
51
|
+
raise mapped_exception(e.cause) if error
|
52
|
+
value
|
53
|
+
end
|
54
|
+
end
|
55
|
+
end
|
@@ -0,0 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module AuthTokens
|
7
|
+
include NeoConverter
|
8
|
+
|
9
|
+
def basic(username, password, realm = nil)
|
10
|
+
Neo4j::Driver::Internal::Validator.require_non_nil_credentials!(username, password)
|
11
|
+
super
|
12
|
+
end
|
13
|
+
|
14
|
+
def custom(principal, credentials, realm, scheme, **parameters)
|
15
|
+
super(principal, credentials, realm, scheme, to_neo(parameters))
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module ConfigConverter
|
7
|
+
include NeoConverter
|
8
|
+
|
9
|
+
private
|
10
|
+
|
11
|
+
def to_java_config(builder_class, **hash)
|
12
|
+
apply_to(builder_class.builder, **hash).build
|
13
|
+
end
|
14
|
+
|
15
|
+
def apply_to(builder, **hash)
|
16
|
+
hash.compact.reduce(builder) { |object, key_value| object.send(*config_method(*key_value)) }
|
17
|
+
end
|
18
|
+
|
19
|
+
def config_method(key, value)
|
20
|
+
method = :"with_#{key}"
|
21
|
+
unit = nil
|
22
|
+
case key.to_s
|
23
|
+
when 'encryption', 'driver_metrics', 'hostname_verification'
|
24
|
+
method = :"without_#{key}" unless value
|
25
|
+
value = nil
|
26
|
+
when 'timeout'
|
27
|
+
value = java.time.Duration.ofMillis(Driver::Internal::DurationNormalizer.milliseconds(value))
|
28
|
+
when /time(out)?$/
|
29
|
+
value = Driver::Internal::DurationNormalizer.milliseconds(value) || -1
|
30
|
+
unit = java.util.concurrent.TimeUnit::MILLISECONDS
|
31
|
+
when 'logger'
|
32
|
+
method = :with_logging
|
33
|
+
value = Neo4j::Driver::Ext::Logger.new(value)
|
34
|
+
when 'resolver'
|
35
|
+
proc = value
|
36
|
+
value = ->(address) { java.util.HashSet.new(proc.call(address)) }
|
37
|
+
when 'bookmarks'
|
38
|
+
return [method, *value]
|
39
|
+
when 'trust_strategy'
|
40
|
+
value = trust_strategy(**value)
|
41
|
+
when 'revocation_strategy'
|
42
|
+
method = case value
|
43
|
+
when Neo4j::Driver::Internal::RevocationStrategy::NO_CHECKS
|
44
|
+
'without_certificate_revocation_checks'
|
45
|
+
else
|
46
|
+
"with_#{value}_revocation_checks"
|
47
|
+
end
|
48
|
+
else
|
49
|
+
value = to_neo(value, skip_unknown: true)
|
50
|
+
end
|
51
|
+
[method, value, unit].compact
|
52
|
+
end
|
53
|
+
|
54
|
+
def trust_strategy(**config)
|
55
|
+
strategy = config.delete(:strategy)
|
56
|
+
trust_strategy =
|
57
|
+
case strategy
|
58
|
+
when :trust_custom_certificates
|
59
|
+
Config::TrustStrategy
|
60
|
+
.trust_custom_certificate_signed_by(*config.delete(:cert_files).map(&java.io.File.method(:new)))
|
61
|
+
else
|
62
|
+
Config::TrustStrategy.send(strategy)
|
63
|
+
end
|
64
|
+
apply_to(trust_strategy, **config)
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module ExceptionCheckable
|
7
|
+
include ExceptionMapper
|
8
|
+
|
9
|
+
def check
|
10
|
+
yield
|
11
|
+
rescue Java::JavaLang::RuntimeException => e
|
12
|
+
raise mapped_exception(e)
|
13
|
+
end
|
14
|
+
|
15
|
+
def reverse_check
|
16
|
+
yield
|
17
|
+
rescue Neo4j::Driver::Exceptions::ServiceUnavailableException => e
|
18
|
+
raise(throwable(e.cause) || Java::OrgNeo4jDriverExceptions::ServiceUnavailableException.new(e.message))
|
19
|
+
rescue Neo4j::Driver::Exceptions::Neo4jException,
|
20
|
+
Neo4j::Driver::Exceptions::NoSuchRecordException,
|
21
|
+
Neo4j::Driver::Exceptions::UntrustedServerException,
|
22
|
+
Neo4j::Driver::Exceptions::IllegalStateException => e
|
23
|
+
raise(throwable(e.cause) || e)
|
24
|
+
end
|
25
|
+
|
26
|
+
private
|
27
|
+
|
28
|
+
def throwable(e)
|
29
|
+
e if e.is_a? Java::JavaLang::Throwable
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,89 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module ExceptionMapper
|
7
|
+
java_import org.neo4j.driver.exceptions.AuthenticationException
|
8
|
+
java_import org.neo4j.driver.exceptions.AuthorizationExpiredException
|
9
|
+
java_import org.neo4j.driver.exceptions.ClientException
|
10
|
+
java_import org.neo4j.driver.exceptions.ConnectionReadTimeoutException
|
11
|
+
java_import org.neo4j.driver.exceptions.DatabaseException
|
12
|
+
java_import org.neo4j.driver.exceptions.DiscoveryException
|
13
|
+
java_import org.neo4j.driver.exceptions.FatalDiscoveryException
|
14
|
+
java_import org.neo4j.driver.exceptions.ProtocolException
|
15
|
+
java_import org.neo4j.driver.exceptions.ResultConsumedException
|
16
|
+
java_import org.neo4j.driver.exceptions.SecurityException
|
17
|
+
java_import org.neo4j.driver.exceptions.ServiceUnavailableException
|
18
|
+
java_import org.neo4j.driver.exceptions.SessionExpiredException
|
19
|
+
java_import org.neo4j.driver.exceptions.TokenExpiredException
|
20
|
+
java_import org.neo4j.driver.exceptions.TransactionNestingException
|
21
|
+
java_import org.neo4j.driver.exceptions.TransientException
|
22
|
+
java_import org.neo4j.driver.exceptions.UntrustedServerException
|
23
|
+
|
24
|
+
def mapped_exception(exception)
|
25
|
+
mapped_neo4j_exception_class(exception)&.new(*arguments(exception)) ||
|
26
|
+
mapped_runtime_exception_class(exception)&.new(exception.message) || exception
|
27
|
+
end
|
28
|
+
|
29
|
+
def arguments(e)
|
30
|
+
[e.code, e.message, e.suppressed.map(&method(:mapped_exception))]
|
31
|
+
end
|
32
|
+
|
33
|
+
private
|
34
|
+
|
35
|
+
def mapped_neo4j_exception_class(exception_class)
|
36
|
+
case exception_class
|
37
|
+
when AuthenticationException
|
38
|
+
Neo4j::Driver::Exceptions::AuthenticationException
|
39
|
+
when AuthorizationExpiredException
|
40
|
+
Neo4j::Driver::Exceptions::AuthorizationExpiredException
|
41
|
+
when FatalDiscoveryException
|
42
|
+
Neo4j::Driver::Exceptions::FatalDiscoveryException
|
43
|
+
when ResultConsumedException
|
44
|
+
Neo4j::Driver::Exceptions::ResultConsumedException
|
45
|
+
when TokenExpiredException
|
46
|
+
Neo4j::Driver::Exceptions::TokenExpiredException
|
47
|
+
when SecurityException
|
48
|
+
Neo4j::Driver::Exceptions::SecurityException
|
49
|
+
when TransactionNestingException
|
50
|
+
Neo4j::Driver::Exceptions::TransactionNestingException
|
51
|
+
when ClientException
|
52
|
+
Neo4j::Driver::Exceptions::ClientException
|
53
|
+
when ConnectionReadTimeoutException
|
54
|
+
Neo4j::Driver::Exceptions::ConnectionReadTimeoutException
|
55
|
+
when DatabaseException
|
56
|
+
Neo4j::Driver::Exceptions::DatabaseException
|
57
|
+
when DiscoveryException
|
58
|
+
Neo4j::Driver::Exceptions::DiscoveryException
|
59
|
+
when ProtocolException
|
60
|
+
Neo4j::Driver::Exceptions::ProtocolException
|
61
|
+
when ServiceUnavailableException
|
62
|
+
Neo4j::Driver::Exceptions::ServiceUnavailableException
|
63
|
+
when SessionExpiredException
|
64
|
+
Neo4j::Driver::Exceptions::SessionExpiredException
|
65
|
+
when TransientException
|
66
|
+
Neo4j::Driver::Exceptions::TransientException
|
67
|
+
else
|
68
|
+
nil
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
def mapped_runtime_exception_class(exception_class)
|
73
|
+
case exception_class
|
74
|
+
when Java::OrgNeo4jDriverExceptions::NoSuchRecordException
|
75
|
+
Neo4j::Driver::Exceptions::NoSuchRecordException
|
76
|
+
when Java::OrgNeo4jDriverExceptions::UntrustedServerException
|
77
|
+
Neo4j::Driver::Exceptions::UntrustedServerException
|
78
|
+
when Java::JavaLang::IllegalStateException
|
79
|
+
Neo4j::Driver::Exceptions::IllegalStateException
|
80
|
+
when Java::JavaLang::IllegalArgumentException
|
81
|
+
ArgumentError
|
82
|
+
else
|
83
|
+
nil
|
84
|
+
end
|
85
|
+
end
|
86
|
+
end
|
87
|
+
end
|
88
|
+
end
|
89
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module GraphDatabase
|
7
|
+
extend AutoClosable
|
8
|
+
include ConfigConverter
|
9
|
+
include ExceptionCheckable
|
10
|
+
|
11
|
+
auto_closable :driver, :routing_driver
|
12
|
+
|
13
|
+
def driver(uri, auth_token = Neo4j::Driver::AuthTokens.none, **config)
|
14
|
+
check do
|
15
|
+
java_method(:driver, [java.lang.String, org.neo4j.driver.AuthToken, org.neo4j.driver.Config])
|
16
|
+
.call(uri.to_s, auth_token, to_java_config(Neo4j::Driver::Config, **config))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
|
20
|
+
def routing_driver(routing_uris, auth_token, **config)
|
21
|
+
check do
|
22
|
+
super(routing_uris.map { |uri| java.net.URI.create(uri.to_s) }, auth_token,
|
23
|
+
to_java_config(Neo4j::Driver::Config, **config))
|
24
|
+
end
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module Internal
|
7
|
+
module Async
|
8
|
+
module InternalAsyncSession
|
9
|
+
include ConfigConverter
|
10
|
+
include RunOverride
|
11
|
+
include AsyncConverter
|
12
|
+
|
13
|
+
def run_async(statement, parameters = {}, config = {})
|
14
|
+
to_future(
|
15
|
+
java_method(:runAsync, [org.neo4j.driver.Query, org.neo4j.driver.TransactionConfig])
|
16
|
+
.call(to_statement(statement, parameters), to_java_config(Neo4j::Driver::TransactionConfig, config)))
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j::Driver::Ext
|
4
|
+
module Internal
|
5
|
+
module Cluster
|
6
|
+
module RoutingTableRegistryImpl
|
7
|
+
def routing_table_handler(database)
|
8
|
+
get_routing_table_handler(org.neo4j.driver.internal.DatabaseNameUtil.database(database)).then do |it|
|
9
|
+
it.get if it.present?
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module Internal
|
7
|
+
module Metrics
|
8
|
+
module InternalConnectionPoolMetrics
|
9
|
+
def address
|
10
|
+
java_class.declared_method('getAddress').tap { |m| m.accessible = true }.invoke(java_object)
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -0,0 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module Internal
|
7
|
+
module Summary
|
8
|
+
module InternalResultSummary
|
9
|
+
java_import org.neo4j.driver.summary.QueryType
|
10
|
+
|
11
|
+
%i[result_available_after result_consumed_after].each do |method|
|
12
|
+
define_method(method) { super(Java::JavaUtilConcurrent::TimeUnit::MILLISECONDS) }
|
13
|
+
end
|
14
|
+
|
15
|
+
def query_type
|
16
|
+
case super
|
17
|
+
when QueryType::READ_ONLY
|
18
|
+
Driver::Summary::QueryType::READ_ONLY
|
19
|
+
when QueryType::READ_WRITE
|
20
|
+
Driver::Summary::QueryType::READ_WRITE
|
21
|
+
when QueryType::WRITE_ONLY
|
22
|
+
Driver::Summary::QueryType::WRITE_ONLY
|
23
|
+
when QueryType::SCHEMA_WRITE
|
24
|
+
Driver::Summary::QueryType::SCHEMA_WRITE
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
@@ -0,0 +1,34 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module InternalDriver
|
7
|
+
extend AutoClosable
|
8
|
+
include ConfigConverter
|
9
|
+
include ExceptionCheckable
|
10
|
+
include AsyncConverter
|
11
|
+
|
12
|
+
auto_closable :session
|
13
|
+
|
14
|
+
def session(**session_config)
|
15
|
+
java_method(:session, [org.neo4j.driver.SessionConfig])
|
16
|
+
.call(to_java_config(Neo4j::Driver::SessionConfig, session_config))
|
17
|
+
end
|
18
|
+
|
19
|
+
def async_session(**session_config)
|
20
|
+
java_method(:asyncSession, [org.neo4j.driver.SessionConfig])
|
21
|
+
.call(to_java_config(Neo4j::Driver::SessionConfig, session_config))
|
22
|
+
end
|
23
|
+
|
24
|
+
def close_async
|
25
|
+
to_future(super)
|
26
|
+
end
|
27
|
+
|
28
|
+
def verify_connectivity
|
29
|
+
check { super }
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
34
|
+
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module InternalEntity
|
7
|
+
include MapConverter
|
8
|
+
|
9
|
+
alias properties to_h
|
10
|
+
|
11
|
+
def [](key)
|
12
|
+
get(key.to_s).as_ruby_object
|
13
|
+
end
|
14
|
+
|
15
|
+
def ==(other)
|
16
|
+
java_method(:isEqual).call(other)
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module InternalRecord
|
7
|
+
include MapConverter
|
8
|
+
include InternalKeys
|
9
|
+
|
10
|
+
def values
|
11
|
+
java_send(:values).map(&:as_ruby_object)
|
12
|
+
end
|
13
|
+
|
14
|
+
def [](key)
|
15
|
+
case key
|
16
|
+
when Integer
|
17
|
+
java_method(:get, [Java::int]).call(key)
|
18
|
+
else
|
19
|
+
java_method(:get, [java.lang.String]).call(key.to_s)
|
20
|
+
end.as_ruby_object
|
21
|
+
end
|
22
|
+
|
23
|
+
def first
|
24
|
+
java_method(:get, [Java::int]).call(0).as_ruby_object
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Neo4j
|
4
|
+
module Driver
|
5
|
+
module Ext
|
6
|
+
module InternalResult
|
7
|
+
include Enumerable
|
8
|
+
include ExceptionCheckable
|
9
|
+
include InternalKeys
|
10
|
+
|
11
|
+
%i[has_next? next single consume peek].each do |method|
|
12
|
+
define_method(method) do |*args, &block|
|
13
|
+
check { super(*args, &block) }
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
def each(&block)
|
18
|
+
check { stream.for_each(&block) }
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|