neo4j-ruby-driver 5.7.0.alpha.4 → 6.0.3.alpha.0-java

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 (279) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +440 -40
  3. data/jruby/neo4j/driver/ext/async_converter.rb +55 -0
  4. data/jruby/neo4j/driver/ext/auth_tokens.rb +20 -0
  5. data/jruby/neo4j/driver/ext/config_converter.rb +83 -0
  6. data/jruby/neo4j/driver/ext/exception_checkable.rb +34 -0
  7. data/jruby/neo4j/driver/ext/exception_mapper.rb +92 -0
  8. data/jruby/neo4j/driver/ext/graph_database.rb +33 -0
  9. data/jruby/neo4j/driver/ext/internal/abstract_query_runner.rb +18 -0
  10. data/jruby/neo4j/driver/ext/internal/async/internal_async_session.rb +23 -0
  11. data/jruby/neo4j/driver/ext/internal/cluster/routing_table_registry_impl.rb +15 -0
  12. data/jruby/neo4j/driver/ext/internal/cursor/disposable_async_result_cursor.rb +15 -0
  13. data/jruby/neo4j/driver/ext/internal/driver_factory.rb +24 -0
  14. data/jruby/neo4j/driver/ext/internal/eager_result_value.rb +17 -0
  15. data/jruby/neo4j/driver/ext/internal/metrics/internal_connection_pool_metrics.rb +17 -0
  16. data/jruby/neo4j/driver/ext/internal/summary/internal_notification.rb +27 -0
  17. data/jruby/neo4j/driver/ext/internal/summary/internal_plan.rb +26 -0
  18. data/jruby/neo4j/driver/ext/internal/summary/internal_result_summary.rb +34 -0
  19. data/jruby/neo4j/driver/ext/internal_driver.rb +52 -0
  20. data/jruby/neo4j/driver/ext/internal_entity.rb +21 -0
  21. data/jruby/neo4j/driver/ext/internal_keys.rb +15 -0
  22. data/jruby/neo4j/driver/ext/internal_node.rb +13 -0
  23. data/jruby/neo4j/driver/ext/internal_record.rb +29 -0
  24. data/jruby/neo4j/driver/ext/internal_relationship.rb +13 -0
  25. data/jruby/neo4j/driver/ext/internal_result.rb +27 -0
  26. data/jruby/neo4j/driver/ext/internal_session.rb +44 -0
  27. data/jruby/neo4j/driver/ext/internal_transaction.rb +19 -0
  28. data/jruby/neo4j/driver/ext/logger.rb +60 -0
  29. data/jruby/neo4j/driver/ext/map_converter.rb +14 -0
  30. data/jruby/neo4j/driver/ext/neo_converter.rb +59 -0
  31. data/jruby/neo4j/driver/ext/query.rb +13 -0
  32. data/jruby/neo4j/driver/ext/ruby_converter.rb +57 -0
  33. data/jruby/neo4j/driver/ext/run_override.rb +22 -0
  34. data/jruby/neo4j/driver/ext/start_end_naming.rb +17 -0
  35. data/{ruby → jruby}/neo4j/driver/version.rb +1 -1
  36. data/jruby/neo4j/driver.rb +62 -0
  37. data/lib/neo4j/driver/{auto_closable.rb → auto_closeable.rb} +6 -6
  38. data/lib/neo4j/driver/exceptions/neo4j_exception.rb +6 -6
  39. data/lib/neo4j/driver/internal/deprecator.rb +15 -0
  40. metadata +91 -277
  41. data/ruby/neo4j/driver/access_mode.rb +0 -10
  42. data/ruby/neo4j/driver/auth_tokens.rb +0 -34
  43. data/ruby/neo4j/driver/bookmark.rb +0 -21
  44. data/ruby/neo4j/driver/config.rb +0 -89
  45. data/ruby/neo4j/driver/graph_database.rb +0 -78
  46. data/ruby/neo4j/driver/internal/async/connection/bolt_protocol_util.rb +0 -51
  47. data/ruby/neo4j/driver/internal/async/connection/bootstrap_factory.rb +0 -22
  48. data/ruby/neo4j/driver/internal/async/connection/channel_attributes.rb +0 -31
  49. data/ruby/neo4j/driver/internal/async/connection/channel_connected_listener.rb +0 -32
  50. data/ruby/neo4j/driver/internal/async/connection/channel_connector_impl.rb +0 -83
  51. data/ruby/neo4j/driver/internal/async/connection/channel_pipeline_builder_impl.rb +0 -22
  52. data/ruby/neo4j/driver/internal/async/connection/direct_connection.rb +0 -30
  53. data/ruby/neo4j/driver/internal/async/connection/event_loop_group_factory.rb +0 -83
  54. data/ruby/neo4j/driver/internal/async/connection/handshake_completed_listener.rb +0 -27
  55. data/ruby/neo4j/driver/internal/async/connection/handshake_handler.rb +0 -113
  56. data/ruby/neo4j/driver/internal/async/connection/netty_channel_initializer.rb +0 -57
  57. data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver.rb +0 -26
  58. data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver_group.rb +0 -19
  59. data/ruby/neo4j/driver/internal/async/connection/routing_connection.rb +0 -36
  60. data/ruby/neo4j/driver/internal/async/connection/stream.rb +0 -12
  61. data/ruby/neo4j/driver/internal/async/connection/stream_reader.rb +0 -16
  62. data/ruby/neo4j/driver/internal/async/connection_context.rb +0 -10
  63. data/ruby/neo4j/driver/internal/async/immutable_connection_context.rb +0 -24
  64. data/ruby/neo4j/driver/internal/async/inbound/byte_buf_input.rb +0 -30
  65. data/ruby/neo4j/driver/internal/async/inbound/channel_error_handler.rb +0 -77
  66. data/ruby/neo4j/driver/internal/async/inbound/chunk_decoder.rb +0 -41
  67. data/ruby/neo4j/driver/internal/async/inbound/connect_timeout_handler.rb +0 -32
  68. data/ruby/neo4j/driver/internal/async/inbound/connection_read_timeout_handler.rb +0 -17
  69. data/ruby/neo4j/driver/internal/async/inbound/inbound_message_dispatcher.rb +0 -171
  70. data/ruby/neo4j/driver/internal/async/inbound/inbound_message_handler.rb +0 -42
  71. data/ruby/neo4j/driver/internal/async/inbound/message_decoder.rb +0 -51
  72. data/ruby/neo4j/driver/internal/async/internal_async_session.rb +0 -98
  73. data/ruby/neo4j/driver/internal/async/internal_async_transaction.rb +0 -13
  74. data/ruby/neo4j/driver/internal/async/leak_logging_network_session.rb +0 -34
  75. data/ruby/neo4j/driver/internal/async/network_connection.rb +0 -194
  76. data/ruby/neo4j/driver/internal/async/network_session.rb +0 -150
  77. data/ruby/neo4j/driver/internal/async/outbound/chunk_aware_byte_buf_output.rb +0 -110
  78. data/ruby/neo4j/driver/internal/async/outbound/outbound_message_handler.rb +0 -39
  79. data/ruby/neo4j/driver/internal/async/pool/channel.rb +0 -66
  80. data/ruby/neo4j/driver/internal/async/pool/channel_pool.rb +0 -31
  81. data/ruby/neo4j/driver/internal/async/pool/channel_tracker.rb +0 -135
  82. data/ruby/neo4j/driver/internal/async/pool/connection_pool_impl.rb +0 -156
  83. data/ruby/neo4j/driver/internal/async/pool/netty_channel_health_checker.rb +0 -87
  84. data/ruby/neo4j/driver/internal/async/pool/netty_channel_pool.rb +0 -52
  85. data/ruby/neo4j/driver/internal/async/pool/network_connection_factory.rb +0 -21
  86. data/ruby/neo4j/driver/internal/async/pool/pool_settings.rb +0 -34
  87. data/ruby/neo4j/driver/internal/async/pool/timed_stack.rb +0 -15
  88. data/ruby/neo4j/driver/internal/async/result_cursors_holder.rb +0 -17
  89. data/ruby/neo4j/driver/internal/async/unmanaged_transaction.rb +0 -212
  90. data/ruby/neo4j/driver/internal/bookmark_holder.rb +0 -9
  91. data/ruby/neo4j/driver/internal/cluster/cluster_composition.rb +0 -48
  92. data/ruby/neo4j/driver/internal/cluster/cluster_composition_lookup_result.rb +0 -14
  93. data/ruby/neo4j/driver/internal/cluster/cluster_routing_table.rb +0 -122
  94. data/ruby/neo4j/driver/internal/cluster/identity_resolver.rb +0 -10
  95. data/ruby/neo4j/driver/internal/cluster/loadbalancing/least_connected_load_balancing_strategy.rb +0 -68
  96. data/ruby/neo4j/driver/internal/cluster/loadbalancing/load_balancer.rb +0 -125
  97. data/ruby/neo4j/driver/internal/cluster/loadbalancing/round_robin_array_index.rb +0 -13
  98. data/ruby/neo4j/driver/internal/cluster/multi_databases_routing_procedure_runner.rb +0 -31
  99. data/ruby/neo4j/driver/internal/cluster/rediscovery_impl.rb +0 -147
  100. data/ruby/neo4j/driver/internal/cluster/route_message_routing_procedure_runner.rb +0 -43
  101. data/ruby/neo4j/driver/internal/cluster/routing_context.rb +0 -77
  102. data/ruby/neo4j/driver/internal/cluster/routing_procedure_cluster_composition_provider.rb +0 -60
  103. data/ruby/neo4j/driver/internal/cluster/routing_procedure_response.rb +0 -35
  104. data/ruby/neo4j/driver/internal/cluster/routing_settings.rb +0 -24
  105. data/ruby/neo4j/driver/internal/cluster/routing_table_handler_impl.rb +0 -95
  106. data/ruby/neo4j/driver/internal/cluster/routing_table_registry_impl.rb +0 -121
  107. data/ruby/neo4j/driver/internal/cluster/single_database_routing_procedure_runner.rb +0 -73
  108. data/ruby/neo4j/driver/internal/connection_settings.rb +0 -16
  109. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_impl.rb +0 -55
  110. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_only_factory.rb +0 -24
  111. data/ruby/neo4j/driver/internal/cursor/disposable_async_result_cursor.rb +0 -61
  112. data/ruby/neo4j/driver/internal/cursor/result_cursor_factory_impl.rb +0 -24
  113. data/ruby/neo4j/driver/internal/cursor/rx_result_cursor_impl.rb +0 -110
  114. data/ruby/neo4j/driver/internal/database_name_util.rb +0 -37
  115. data/ruby/neo4j/driver/internal/default_bookmark_holder.rb +0 -9
  116. data/ruby/neo4j/driver/internal/default_domain_name_resolver.rb +0 -11
  117. data/ruby/neo4j/driver/internal/direct_connection_provider.rb +0 -40
  118. data/ruby/neo4j/driver/internal/driver_factory.rb +0 -126
  119. data/ruby/neo4j/driver/internal/handlers/begin_tx_response_handler.rb +0 -20
  120. data/ruby/neo4j/driver/internal/handlers/channel_releasing_reset_response_handler.rb +0 -30
  121. data/ruby/neo4j/driver/internal/handlers/commit_tx_response_handler.rb +0 -25
  122. data/ruby/neo4j/driver/internal/handlers/hello_response_handler.rb +0 -65
  123. data/ruby/neo4j/driver/internal/handlers/init_response_handler.rb +0 -34
  124. data/ruby/neo4j/driver/internal/handlers/legacy_pull_all_response_handler.rb +0 -199
  125. data/ruby/neo4j/driver/internal/handlers/no_op_response_handler.rb +0 -16
  126. data/ruby/neo4j/driver/internal/handlers/ping_response_handler.rb +0 -29
  127. data/ruby/neo4j/driver/internal/handlers/pull_handlers.rb +0 -32
  128. data/ruby/neo4j/driver/internal/handlers/pulln/auto_pull_response_handler.rb +0 -168
  129. data/ruby/neo4j/driver/internal/handlers/pulln/basic_pull_response_handler.rb +0 -298
  130. data/ruby/neo4j/driver/internal/handlers/pulln/fetch_size_util.rb +0 -20
  131. data/ruby/neo4j/driver/internal/handlers/reset_response_handler.rb +0 -34
  132. data/ruby/neo4j/driver/internal/handlers/rollback_tx_response_handler.rb +0 -25
  133. data/ruby/neo4j/driver/internal/handlers/route_message_response_handler.rb +0 -21
  134. data/ruby/neo4j/driver/internal/handlers/routing_response_handler.rb +0 -70
  135. data/ruby/neo4j/driver/internal/handlers/run_response_handler.rb +0 -38
  136. data/ruby/neo4j/driver/internal/handlers/session_pull_response_completion_listener.rb +0 -34
  137. data/ruby/neo4j/driver/internal/handlers/transaction_pull_response_completion_listener.rb +0 -20
  138. data/ruby/neo4j/driver/internal/impersonation_util.rb +0 -22
  139. data/ruby/neo4j/driver/internal/internal_bookmark.rb +0 -36
  140. data/ruby/neo4j/driver/internal/internal_database_name.rb +0 -9
  141. data/ruby/neo4j/driver/internal/internal_driver.rb +0 -74
  142. data/ruby/neo4j/driver/internal/internal_entity.rb +0 -21
  143. data/ruby/neo4j/driver/internal/internal_node.rb +0 -21
  144. data/ruby/neo4j/driver/internal/internal_pair.rb +0 -9
  145. data/ruby/neo4j/driver/internal/internal_path.rb +0 -35
  146. data/ruby/neo4j/driver/internal/internal_point2_d.rb +0 -9
  147. data/ruby/neo4j/driver/internal/internal_point3_d.rb +0 -6
  148. data/ruby/neo4j/driver/internal/internal_record.rb +0 -27
  149. data/ruby/neo4j/driver/internal/internal_relationship.rb +0 -27
  150. data/ruby/neo4j/driver/internal/internal_result.rb +0 -49
  151. data/ruby/neo4j/driver/internal/internal_session.rb +0 -81
  152. data/ruby/neo4j/driver/internal/internal_transaction.rb +0 -48
  153. data/ruby/neo4j/driver/internal/logging/channel_activity_logger.rb +0 -29
  154. data/ruby/neo4j/driver/internal/logging/channel_error_logger.rb +0 -17
  155. data/ruby/neo4j/driver/internal/logging/prefixed_logger.rb +0 -19
  156. data/ruby/neo4j/driver/internal/logging/reformatted_logger.rb +0 -17
  157. data/ruby/neo4j/driver/internal/messaging/abstract_message_writer.rb +0 -23
  158. data/ruby/neo4j/driver/internal/messaging/bolt_protocol.rb +0 -32
  159. data/ruby/neo4j/driver/internal/messaging/bolt_protocol_version.rb +0 -48
  160. data/ruby/neo4j/driver/internal/messaging/common/common_message_reader.rb +0 -51
  161. data/ruby/neo4j/driver/internal/messaging/common/common_value.rb +0 -33
  162. data/ruby/neo4j/driver/internal/messaging/common/common_value_packer.rb +0 -104
  163. data/ruby/neo4j/driver/internal/messaging/common/common_value_unpacker.rb +0 -256
  164. data/ruby/neo4j/driver/internal/messaging/encode/begin_message_encoder.rb +0 -15
  165. data/ruby/neo4j/driver/internal/messaging/encode/commit_message_encoder.rb +0 -14
  166. data/ruby/neo4j/driver/internal/messaging/encode/discard_all_message_encoder.rb +0 -14
  167. data/ruby/neo4j/driver/internal/messaging/encode/discard_message_encoder.rb +0 -15
  168. data/ruby/neo4j/driver/internal/messaging/encode/goodbye_message_encoder.rb +0 -14
  169. data/ruby/neo4j/driver/internal/messaging/encode/hello_message_encoder.rb +0 -15
  170. data/ruby/neo4j/driver/internal/messaging/encode/init_message_encoder.rb +0 -16
  171. data/ruby/neo4j/driver/internal/messaging/encode/logoff_message_encoder.rb +0 -14
  172. data/ruby/neo4j/driver/internal/messaging/encode/logon_message_encoder.rb +0 -15
  173. data/ruby/neo4j/driver/internal/messaging/encode/pull_all_message_encoder.rb +0 -14
  174. data/ruby/neo4j/driver/internal/messaging/encode/pull_message_encoder.rb +0 -15
  175. data/ruby/neo4j/driver/internal/messaging/encode/reset_message_encoder.rb +0 -14
  176. data/ruby/neo4j/driver/internal/messaging/encode/rollback_message_encoder.rb +0 -14
  177. data/ruby/neo4j/driver/internal/messaging/encode/route_message_encoder.rb +0 -24
  178. data/ruby/neo4j/driver/internal/messaging/encode/route_v44_message_encoder.rb +0 -22
  179. data/ruby/neo4j/driver/internal/messaging/encode/run_message_encoder.rb +0 -16
  180. data/ruby/neo4j/driver/internal/messaging/encode/run_with_metadata_message_encoder.rb +0 -17
  181. data/ruby/neo4j/driver/internal/messaging/request/abstract_streaming_message.rb +0 -25
  182. data/ruby/neo4j/driver/internal/messaging/request/begin_message.rb +0 -25
  183. data/ruby/neo4j/driver/internal/messaging/request/commit_message.rb +0 -20
  184. data/ruby/neo4j/driver/internal/messaging/request/discard_all_message.rb +0 -20
  185. data/ruby/neo4j/driver/internal/messaging/request/discard_message.rb +0 -23
  186. data/ruby/neo4j/driver/internal/messaging/request/goodbye_message.rb +0 -20
  187. data/ruby/neo4j/driver/internal/messaging/request/hello_message.rb +0 -30
  188. data/ruby/neo4j/driver/internal/messaging/request/init_message.rb +0 -19
  189. data/ruby/neo4j/driver/internal/messaging/request/logoff_message.rb +0 -13
  190. data/ruby/neo4j/driver/internal/messaging/request/logon_message.rb +0 -13
  191. data/ruby/neo4j/driver/internal/messaging/request/message_with_metadata.rb +0 -17
  192. data/ruby/neo4j/driver/internal/messaging/request/multi_database_util.rb +0 -26
  193. data/ruby/neo4j/driver/internal/messaging/request/pull_all_message.rb +0 -23
  194. data/ruby/neo4j/driver/internal/messaging/request/pull_message.rb +0 -22
  195. data/ruby/neo4j/driver/internal/messaging/request/reset_message.rb +0 -32
  196. data/ruby/neo4j/driver/internal/messaging/request/rollback_message.rb +0 -20
  197. data/ruby/neo4j/driver/internal/messaging/request/route_message.rb +0 -28
  198. data/ruby/neo4j/driver/internal/messaging/request/run_message.rb +0 -23
  199. data/ruby/neo4j/driver/internal/messaging/request/run_with_metadata_message.rb +0 -49
  200. data/ruby/neo4j/driver/internal/messaging/request/transaction_metadata_builder.rb +0 -24
  201. data/ruby/neo4j/driver/internal/messaging/response/failure_message.rb +0 -40
  202. data/ruby/neo4j/driver/internal/messaging/response/ignored_message.rb +0 -29
  203. data/ruby/neo4j/driver/internal/messaging/response/record_message.rb +0 -33
  204. data/ruby/neo4j/driver/internal/messaging/response/success_message.rb +0 -34
  205. data/ruby/neo4j/driver/internal/messaging/v3/bolt_protocol_v3.rb +0 -82
  206. data/ruby/neo4j/driver/internal/messaging/v3/message_format_v3.rb +0 -17
  207. data/ruby/neo4j/driver/internal/messaging/v3/message_writer_v3.rb +0 -27
  208. data/ruby/neo4j/driver/internal/messaging/v4/bolt_protocol_v4.rb +0 -29
  209. data/ruby/neo4j/driver/internal/messaging/v4/message_format_v4.rb +0 -13
  210. data/ruby/neo4j/driver/internal/messaging/v4/message_writer_v4.rb +0 -17
  211. data/ruby/neo4j/driver/internal/messaging/v41/bolt_protocol_v41.rb +0 -25
  212. data/ruby/neo4j/driver/internal/messaging/v42/bolt_protocol_v42.rb +0 -13
  213. data/ruby/neo4j/driver/internal/messaging/v43/bolt_protocol_v43.rb +0 -19
  214. data/ruby/neo4j/driver/internal/messaging/v43/message_format_v43.rb +0 -14
  215. data/ruby/neo4j/driver/internal/messaging/v43/message_writer_v43.rb +0 -20
  216. data/ruby/neo4j/driver/internal/messaging/v44/bolt_protocol_v44.rb +0 -17
  217. data/ruby/neo4j/driver/internal/messaging/v44/message_format_v44.rb +0 -14
  218. data/ruby/neo4j/driver/internal/messaging/v44/message_writer_v44.rb +0 -15
  219. data/ruby/neo4j/driver/internal/messaging/v5/bolt_protocol_v5.rb +0 -21
  220. data/ruby/neo4j/driver/internal/messaging/v5/message_format_v5.rb +0 -18
  221. data/ruby/neo4j/driver/internal/messaging/v5/value_unpacker_v5.rb +0 -17
  222. data/ruby/neo4j/driver/internal/messaging/v51/bolt_protocol_v51.rb +0 -40
  223. data/ruby/neo4j/driver/internal/messaging/v51/message_format_v51.rb +0 -14
  224. data/ruby/neo4j/driver/internal/messaging/v51/message_writer_v51.rb +0 -17
  225. data/ruby/neo4j/driver/internal/metrics/connection_pool_metrics_listener.rb +0 -34
  226. data/ruby/neo4j/driver/internal/metrics/internal_abstract_metrics.rb +0 -46
  227. data/ruby/neo4j/driver/internal/metrics/internal_connection_pool_metrics.rb +0 -105
  228. data/ruby/neo4j/driver/internal/metrics/internal_metrics.rb +0 -82
  229. data/ruby/neo4j/driver/internal/metrics/internal_metrics_provider.rb +0 -18
  230. data/ruby/neo4j/driver/internal/metrics/listener_event.rb +0 -17
  231. data/ruby/neo4j/driver/internal/metrics/metrics_provider.rb +0 -24
  232. data/ruby/neo4j/driver/internal/metrics/time_recorder_listener_event.rb +0 -15
  233. data/ruby/neo4j/driver/internal/packstream/byte_array_incompatible_packer.rb +0 -12
  234. data/ruby/neo4j/driver/internal/packstream/pack_input.rb +0 -47
  235. data/ruby/neo4j/driver/internal/packstream/pack_output.rb +0 -39
  236. data/ruby/neo4j/driver/internal/packstream/pack_stream.rb +0 -326
  237. data/ruby/neo4j/driver/internal/packstream/pack_type.rb +0 -17
  238. data/ruby/neo4j/driver/internal/read_only_bookmark_holder.rb +0 -13
  239. data/ruby/neo4j/driver/internal/resolved_bolt_server_address.rb +0 -35
  240. data/ruby/neo4j/driver/internal/retry/exponential_backoff_retry_logic.rb +0 -151
  241. data/ruby/neo4j/driver/internal/revocation_strategy.rb +0 -19
  242. data/ruby/neo4j/driver/internal/scheme.rb +0 -32
  243. data/ruby/neo4j/driver/internal/security/internal_auth_token.rb +0 -15
  244. data/ruby/neo4j/driver/internal/security/security_plan_impl.rb +0 -48
  245. data/ruby/neo4j/driver/internal/security_setting.rb +0 -66
  246. data/ruby/neo4j/driver/internal/session_factory_impl.rb +0 -32
  247. data/ruby/neo4j/driver/internal/spi/connection.rb +0 -19
  248. data/ruby/neo4j/driver/internal/spi/connection_pool.rb +0 -9
  249. data/ruby/neo4j/driver/internal/spi/response_handler.rb +0 -23
  250. data/ruby/neo4j/driver/internal/summary/internal_database_info.rb +0 -7
  251. data/ruby/neo4j/driver/internal/summary/internal_input_position.rb +0 -11
  252. data/ruby/neo4j/driver/internal/summary/internal_notification.rb +0 -16
  253. data/ruby/neo4j/driver/internal/summary/internal_plan.rb +0 -41
  254. data/ruby/neo4j/driver/internal/summary/internal_profiled_plan.rb +0 -32
  255. data/ruby/neo4j/driver/internal/summary/internal_result_summary.rb +0 -33
  256. data/ruby/neo4j/driver/internal/summary/internal_server_info.rb +0 -6
  257. data/ruby/neo4j/driver/internal/summary/internal_summary_counters.rb +0 -18
  258. data/ruby/neo4j/driver/internal/svm/netty_substitutions.rb +0 -196
  259. data/ruby/neo4j/driver/internal/svm/z_lib_substitutions.rb +0 -21
  260. data/ruby/neo4j/driver/internal/util/certificate_tool.rb +0 -65
  261. data/ruby/neo4j/driver/internal/util/clock.rb +0 -29
  262. data/ruby/neo4j/driver/internal/util/error_util.rb +0 -104
  263. data/ruby/neo4j/driver/internal/util/extract.rb +0 -123
  264. data/ruby/neo4j/driver/internal/util/format.rb +0 -39
  265. data/ruby/neo4j/driver/internal/util/futures.rb +0 -99
  266. data/ruby/neo4j/driver/internal/util/iterables.rb +0 -35
  267. data/ruby/neo4j/driver/internal/util/lock_util.rb +0 -23
  268. data/ruby/neo4j/driver/internal/util/metadata_extractor.rb +0 -107
  269. data/ruby/neo4j/driver/internal/util/mutex.rb +0 -9
  270. data/ruby/neo4j/driver/internal/util/preconditions.rb +0 -16
  271. data/ruby/neo4j/driver/internal/util/result_holder.rb +0 -72
  272. data/ruby/neo4j/driver/internal/util/server_version.rb +0 -60
  273. data/ruby/neo4j/driver/logging1.rb +0 -51
  274. data/ruby/neo4j/driver/net/server_address.rb +0 -9
  275. data/ruby/neo4j/driver/query.rb +0 -48
  276. data/ruby/neo4j/driver/records.rb +0 -13
  277. data/ruby/neo4j/driver/transaction_config.rb +0 -50
  278. data/ruby/neo4j/driver/values.rb +0 -26
  279. data/ruby/neo4j/driver.rb +0 -28
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 6e0343454cd9cf98cab65814233386d198abbd6644152af5b0e514f2e2d152ea
4
- data.tar.gz: fe48e618ebbcacd6148f31055367b5e6feb328a24dca43a6769f0261c9de7a68
3
+ metadata.gz: b150718dde06f62283bdde11edaca77f17a31cd9d5988229c7f9f11d0579f5fb
4
+ data.tar.gz: 685a04443a4a9c8e8c90a3524a650166a6d63976d92e2e6418cd2807e2a531ef
5
5
  SHA512:
6
- metadata.gz: 3d8c347a0cee9ae197dfca6afd2deaed9f144a72df354a18f3298c052c75c6a627eae062993f638b67cace9b4195938845e6fb1917f9c9f034b5a349e2c0b4dd
7
- data.tar.gz: 0c87b4ba135c8ad6626ac0d0fc8678ccc7e255860a163f4d0a862a62b2b6795d9cffab01fdd5c803df93d0ca69007cfb0e27eb77455477789e617e6dcf59a514
6
+ metadata.gz: c988f11be9f369490e07f0de554590059f6b61f782abf9e16d48c16237e9298b88a5f7776d632bab79a6e0138f973cf11e2058a8d611e099ff59349d15668bb1
7
+ data.tar.gz: 5ebe999f029edd2b4a20953b39176c1d3a6fd1c6fcf739c95084dabb7499b2e37f3fcd832a780d1dc8b2485a070ad18f6e72a0be62e2cfed62182b847c44dc9c
data/README.md CHANGED
@@ -1,12 +1,50 @@
1
- # Neo4j::Driver
1
+ # Neo4j Ruby Driver
2
2
 
3
- home :: https://github.com/neo4jrb/neo4j-ruby-driver
3
+ This repository contains 2 implementation of a Neo4j driver for Ruby:
4
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.
5
+ - based on official Java implementation. It provides a thin wrapper over the Java driver (only on jruby).
6
+ - pure Ruby implementation. Available on all Ruby versions >= 3.1.
8
7
 
9
- ## Installation
8
+ Network communication is handled using [Bolt Protocol](https://7687.org/).
9
+
10
+ <details>
11
+ <summary>Table of Contents</summary>
12
+
13
+ * [Getting started](#getting-started)
14
+ * [Installation](#installation)
15
+ * [Getting a Neo4j instance](#getting-a-neo4j-instance)
16
+ * [Quick start example](#quick-start-example)
17
+ * [Server Compatibility](#server-compatibility)
18
+ * [Usage](#usage)
19
+ * [Connecting to a database](#connecting-to-a-database)
20
+ * [URI schemes](#uri-schemes)
21
+ * [Authentication](#authentication)
22
+ * [Configuration](#configuration)
23
+ * [Connectivity check](#connectivity-check)
24
+ * [Sessions & transactions](#sessions--transactions)
25
+ * [Session](#session)
26
+ * [Auto-commit transactions](#auto-commit-transactions)
27
+ * [Explicit transactions](#explicit-transactions)
28
+ * [Read transactions](#read-transactions)
29
+ * [Write transactions](#write-transactions)
30
+ * [Working with results](#working-with-results)
31
+ * [Accessing Node and Relationship data](#accessing-node-and-relationship-data)
32
+ * [Working with Paths](#working-with-paths)
33
+ * [Working with temporal types](#working-with-temporal-types)
34
+ * [Type mapping](#type-mapping)
35
+ * [Advanced](#advanced)
36
+ * [Connection pooling](#connection-pooling)
37
+ * [Logging](#logging)
38
+ * [For Driver Engineers](#for-driver-engineers)
39
+ * [Testing](#testing)
40
+ * [Contributing](#contributing)
41
+ * [License](#license)
42
+
43
+ </details>
44
+
45
+ ## Getting started
46
+
47
+ ### Installation
10
48
 
11
49
  Add this line to your application's Gemfile:
12
50
 
@@ -16,68 +54,430 @@ gem 'neo4j-ruby-driver'
16
54
 
17
55
  And then execute:
18
56
 
19
- $ bundle
57
+ ```bash
58
+ bundle install
59
+ ```
20
60
 
21
61
  Or install it yourself as:
22
62
 
23
- $ gem install neo4j-ruby-driver
63
+ ```bash
64
+ gem install neo4j-ruby-driver
65
+ ```
66
+
67
+ ### Getting a Neo4j instance
68
+
69
+ You need a running Neo4j database in order to use the driver with it. The easiest way to spin up a **local instance** is
70
+ through a Docker container.
71
+
72
+ The command below runs the latest Neo4j version in Docker, setting the admin username and password to `neo4j` and
73
+ `password` respectively:
74
+
75
+ ```bash
76
+ docker run \
77
+ -p7474:7474 \
78
+ -p7687:7687 \
79
+ -d \
80
+ -e NEO4J_AUTH=neo4j/password \
81
+ neo4j:latest
82
+ ```
83
+
84
+ ### Quick start example
85
+
86
+ ```ruby
87
+ require 'neo4j/driver'
88
+
89
+ Neo4j::Driver::GraphDatabase.driver(
90
+ 'bolt://localhost:7687',
91
+ Neo4j::Driver::AuthTokens.basic('neo4j', 'password')
92
+ ) do |driver|
93
+ driver.session(database: 'neo4j') do |session|
94
+ query_result = session.run('RETURN 2+2 AS value')
95
+ puts "2+2 equals #{query_result.single['value']}"
96
+
97
+ # consume gives the execution summary
98
+ create_result = session.run('CREATE (n)').consume
99
+ puts "Nodes created: #{create_result.counters.nodes_created}"
100
+ end
101
+ end
102
+ ```
24
103
 
25
104
  ## Server Compatibility
26
105
 
27
- The compatibility with Neo4j Server versions is documented in the [Neo4j Knowledge Base](https://neo4j.com/developer/kb/neo4j-supported-versions/).
106
+ The compatibility with Neo4j Server versions is documented in
107
+ the [Neo4j Knowledge Base](https://neo4j.com/developer/kb/neo4j-supported-versions/).
28
108
 
29
109
  ## Usage
30
110
 
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.
111
+ The API is to highest possible degree consistent with the official Java driver. Please refer to
112
+ the [Neo4j Java Driver Manual](https://neo4j.com/docs/java-manual/current/), [examples in Ruby](https://github.com/neo4jrb/neo4j-ruby-driver/blob/master/docs/dev_manual_examples.rb),
113
+ and code snippets below to understand how to use it.
114
+ [Neo4j Java Driver API Docs](https://neo4j.com/docs/api/java-driver/current/) can be helpful as well.
115
+
116
+ ### Connecting to a database
117
+
118
+ #### URI schemes
119
+
120
+ The driver supports the following URI schemes:
121
+
122
+ | URI Scheme | Description |
123
+ |----------------|---------------------------------------------------------------------------------|
124
+ | `neo4j://` | Connect using routing to a cluster/causal cluster. |
125
+ | `neo4j+s://` | Same as `neo4j://` but with full TLS encryption. |
126
+ | `neo4j+ssc://` | Same as `neo4j://` but with full TLS encryption, without hostname verification. |
127
+ | `bolt://` | Connect directly to a server using the Bolt protocol. |
128
+ | `bolt+s://` | Same as `bolt://` but with full TLS encryption. |
129
+ | `bolt+ssc://` | Same as `bolt://` but with full TLS encryption, without hostname verification. |
130
+
131
+ Example:
132
+
133
+ ```ruby
134
+ # Connect to a single instance
135
+ driver = Neo4j::Driver::GraphDatabase.driver(
136
+ 'bolt://localhost:7687',
137
+ Neo4j::Driver::AuthTokens.basic('neo4j', 'password')
138
+ )
139
+
140
+ # Connect to a cluster
141
+ driver = Neo4j::Driver::GraphDatabase.driver(
142
+ 'neo4j://graph.example.com:7687',
143
+ Neo4j::Driver::AuthTokens.basic('neo4j', 'password')
144
+ )
145
+ ```
146
+
147
+ #### Authentication
148
+
149
+ The driver provides multiple authentication methods:
150
+
151
+ ```ruby
152
+ # Basic authentication
153
+ auth = Neo4j::Driver::AuthTokens.basic('neo4j', 'password')
154
+
155
+ # With realm specification
156
+ auth = Neo4j::Driver::AuthTokens.basic('neo4j', 'password', 'realm')
157
+
158
+ # Kerberos authentication
159
+ auth = Neo4j::Driver::AuthTokens.kerberos('ticket')
160
+
161
+ # Bearer authentication
162
+ auth = Neo4j::Driver::AuthTokens.bearer('token')
163
+
164
+ # Custom authentication
165
+ auth = Neo4j::Driver::AuthTokens.custom('principal', 'credentials', 'realm', 'scheme')
166
+
167
+ # No authentication
168
+ auth = Neo4j::Driver::AuthTokens.none
169
+ ```
170
+
171
+ #### Configuration
172
+
173
+ You can configure the driver with additional options:
174
+
175
+ ```ruby
176
+ config = {
177
+ connection_timeout: 15.seconds,
178
+ connection_acquisition_timeout: 1.minute,
179
+ max_transaction_retry_time: 30.seconds,
180
+ encryption: true,
181
+ trust_strategy: :trust_all_certificates
182
+ }
183
+
184
+ driver = Neo4j::Driver::GraphDatabase.driver(
185
+ 'neo4j://localhost:7687',
186
+ Neo4j::Driver::AuthTokens.basic('neo4j', 'password'),
187
+ **config
188
+ )
189
+ ```
190
+
191
+ #### Connectivity check
192
+
193
+ ```ruby
194
+ if driver.verify_connectivity
195
+ puts "Driver is connected to the database"
196
+ else
197
+ puts "Driver cannot connect to the database"
198
+ end
199
+ ```
200
+
201
+ ### Sessions & transactions
202
+
203
+ The driver provides sessions to interact with the database and to execute queries.
204
+
205
+ #### Session
206
+
207
+ Sessions are lightweight and disposable database connections. Always close your sessions when done:
208
+
209
+ ```ruby
210
+ session = driver.session(database: 'neo4j')
211
+ begin
212
+ session.run('MATCH (n) RETURN n LIMIT 10')
213
+ ensure
214
+ session.close
215
+ end
216
+ ```
217
+
218
+ Or use a block that automatically closes the session:
219
+
220
+ ```ruby
221
+ driver.session(database: 'neo4j') do |session|
222
+ session.run('MATCH (n) RETURN n LIMIT 10')
223
+ end
224
+ ```
225
+
226
+ Session options:
227
+
228
+ ```ruby
229
+ # Default database
230
+ session = driver.session
231
+
232
+ # Specific database
233
+ session = driver.session(database: 'neo4j')
234
+
235
+ # With access mode
236
+ session = driver.session(database: 'neo4j', default_access_mode: Neo4j::Driver::AccessMode::READ)
237
+
238
+ # With bookmarks for causal consistency
239
+ session = driver.session(
240
+ database: 'neo4j',
241
+ bookmarks: [Neo4j::Driver::Bookmark.from('bookmark-1')]
242
+ )
243
+ ```
244
+
245
+ #### Auto-commit transactions
246
+
247
+ For simple, one-off queries, use auto-commit transactions:
248
+
249
+ ```ruby
250
+ session.run('CREATE (n:Person {name: $name})', name: 'Alice')
251
+ ```
252
+
253
+ #### Explicit transactions
254
+
255
+ For multiple queries that need to be executed as a unit, use explicit transactions:
256
+
257
+ ```ruby
258
+ tx = session.begin_transaction
259
+ begin
260
+ tx.run('CREATE (n:Person {name: $name})', name: 'Alice')
261
+ tx.run('CREATE (n:Person {name: $name})', name: 'Bob')
262
+ tx.commit
263
+ rescue
264
+ tx.rollback
265
+ raise
266
+ end
267
+ ```
268
+
269
+ #### Read transactions
270
+
271
+ Specifically for read operations:
272
+
273
+ ```ruby
274
+ result = session.read_transaction do |tx|
275
+ tx.run('MATCH (n:Person) RETURN n.name').map { |record| record['n.name'] }
276
+ end
277
+ puts result
278
+ ```
279
+
280
+ #### Write transactions
281
+
282
+ Specifically for write operations:
283
+
284
+ ```ruby
285
+ session.write_transaction do |tx|
286
+ tx.run('CREATE (n:Person {name: $name})', name: 'Charlie')
287
+ end
288
+ ```
289
+
290
+ ### Working with results
291
+
292
+ ```ruby
293
+ result = session.run('MATCH (n:Person) RETURN n.name AS name, n.age AS age')
294
+
295
+ # Process results
296
+ result.each do |record|
297
+ puts "#{record['name']} is #{record['age']} years old"
298
+ end
299
+
300
+ # Check if there are more results
301
+ puts "Has more results: #{result.has_next?}"
302
+
303
+ # Get a single record
304
+ single = result.single
305
+ puts single['name'] if single
306
+
307
+ # Get keys available in the result
308
+ puts "Keys: #{result.keys}"
309
+
310
+ # Access by field index
311
+ result.each do |record|
312
+ puts "First field: #{record[0]}"
313
+ end
314
+
315
+ # Convert to array
316
+ records = result.to_a
317
+ ```
318
+
319
+ #### Accessing Node and Relationship data
320
+
321
+ Working with graph entities:
322
+
323
+ ```ruby
324
+ result = session.run('MATCH (p:Person)-[r:KNOWS]->(friend) RETURN p, r, friend')
325
+
326
+ result.each do |record|
327
+ # Working with nodes
328
+ person = record['p']
329
+ puts "Node ID: #{person.id}"
330
+ puts "Labels: #{person.labels.join(', ')}"
331
+ puts "Properties: #{person.properties}"
332
+ puts "Name property: #{person.properties['name']}"
333
+
334
+ # Working with relationships
335
+ relationship = record['r']
336
+ puts "Relationship ID: #{relationship.id}"
337
+ puts "Type: #{relationship.type}"
338
+ puts "Properties: #{relationship.properties}"
339
+
340
+ # Start and end nodes of the relationship
341
+ puts "Relationship: #{relationship.start_node_id} -> #{relationship.end_node_id}"
342
+ end
343
+ ```
344
+
345
+ #### Working with Paths
346
+
347
+ Processing paths returned from Cypher:
348
+
349
+ ```ruby
350
+ result = session.run('MATCH p = (:Person)-[:KNOWS*]->(:Person) RETURN p')
351
+
352
+ result.each do |record|
353
+ path = record['p']
354
+
355
+ # Get all nodes in the path
356
+ nodes = path.nodes
357
+ puts "Nodes in path: #{nodes.map { |n| n.properties['name'] }.join(' -> ')}"
358
+
359
+ # Get all relationships in the path
360
+ relationships = path.relationships
361
+ puts "Relationship types: #{relationships.map(&:type).join(', ')}"
362
+
363
+ # Iterate through the path segments
364
+ path.each do |segment|
365
+ puts "#{segment.start_node.properties['name']} -[#{segment.relationship.type}]-> #{segment.end_node.properties['name']}"
366
+ end
367
+ end
368
+ ```
369
+
370
+ #### Working with temporal types
371
+
372
+ Creating a node with properties of temporal types:
373
+
374
+ ```ruby
375
+ session.run(
376
+ 'CREATE (e:Event {datetime: $datetime, duration: $duration})',
377
+ datetime: DateTime.new(2025, 5, 5, 5, 55, 55), duration: 1.hour
378
+ )
379
+ ```
380
+
381
+ Querying temporal values:
382
+
383
+ ```ruby
384
+ session.run('MATCH (e:Event) LIMIT 1 RETURN e.datetime, e.duration').single.to_h
385
+ # => {"e.datetime": 2025-05-05 05:55:55 +0000, "e.duration": 3600 seconds}
386
+ ```
387
+
388
+ ### Type mapping
33
389
 
34
- [Neo4j Java Driver 4.3 API](https://neo4j.com/docs/api/java-driver/current/) can be helpful as well..
390
+ The Neo4j Ruby Driver maps Cypher types to Ruby types:
35
391
 
36
- ## Development
392
+ | Cypher Type | Ruby Type |
393
+ |----------------|-----------------------------------------------|
394
+ | null | nil |
395
+ | List | Enumerable |
396
+ | Map | Hash (symbolized keys) |
397
+ | Boolean | TrueClass/FalseClass |
398
+ | Integer | Integer/String[^1] |
399
+ | Float | Float |
400
+ | String | String/Symbol[^2] (encoding: UTF-8) |
401
+ | ByteArray | String (encoding: BINARY) |
402
+ | Date | Date |
403
+ | Zoned Time | Neo4j::Driver::Types::OffsetTime |
404
+ | Local Time | Neo4j::Driver::Types::LocalTime |
405
+ | Zoned DateTime | Time/ActiveSupport::TimeWithZone/DateTime[^3] |
406
+ | Local DateTime | Neo4j::Driver::Types::LocalDateTime |
407
+ | Duration | ActiveSupport::Duration |
408
+ | Point | Neo4j::Driver::Types::Point |
409
+ | Node | Neo4j::Driver::Types::Node |
410
+ | Relationship | Neo4j::Driver::Types::Relationship |
411
+ | Path | Neo4j::Driver::Types::Path |
37
412
 
38
- This gem includes 2 different implementations: java driver wrapper and pure ruby driver
413
+ [^1]: An Integer smaller than -2 ** 63 or larger than 2 ** 63 will always be implicitly converted to String
414
+ [^2]: A Symbol passed as a parameter will always be implicitly converted to String. All Strings other than BINARY
415
+ encoded are converted to UTF-8 when stored in Neo4j
416
+ [^3]: A Ruby DateTime passed as a parameter will always be implicitly converted to Time
39
417
 
40
- $ bin/setup
41
-
42
- ## Testing
418
+ ### Advanced
43
419
 
44
- To run the tests the following tools need to be installed:
420
+ #### Connection pooling
45
421
 
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
422
+ The driver handles connection pooling automatically. Configure the connection pool:
423
+
424
+ ```ruby
425
+ config = {
426
+ max_connection_pool_size: 100,
427
+ max_connection_lifetime: 1.hour
428
+ }
52
429
 
53
- To run the tests:
54
- ```console
55
- $ bin/setup
56
- $ rspec spec
430
+ driver = Neo4j::Driver::GraphDatabase.driver('neo4j://localhost:7687', auth, **config)
57
431
  ```
58
432
 
59
- Known errors:
433
+ #### Logging
60
434
 
61
- 1. In case of heap space memory error (`org.neo4j.driver.exceptions.DatabaseException: Java heap space`), you should limit the dbms memory, for example:
435
+ Configure logging for the driver:
62
436
 
63
- ```console
64
- $ 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=::
437
+ ```ruby
438
+ config = {
439
+ logger: Logger.new(STDOUT).tap { |log| log.level = Logger::DEBUG }
440
+ }
441
+
442
+ driver = Neo4j::Driver::GraphDatabase.driver('neo4j://localhost:7687', auth, **config)
65
443
  ```
66
444
 
67
- 2. When using command `pip3 install --user git+https://github.com/klobuczek/boltkit@1.3#egg=boltkit`, if you have m1 mac chip, you may get error when pip3 tries to install `cryptography`. Steps to take in that case (reference https://stackoverflow.com/a/70074869/2559490)
445
+ ## For Driver Engineers
68
446
 
69
- ```console
70
- $ pip uninstall cffi
71
- $ python -m pip install --upgrade pip
72
- $ pip install cffi
73
- $ pip install cryptography
447
+ This gem includes 2 different implementations: a Java driver wrapper and a pure Ruby driver, so you will have to run
448
+ this command every time you switch the Ruby engine:
449
+
450
+ ```bash
451
+ bin/setup
74
452
  ```
75
453
 
454
+ ### Testing
455
+
456
+ There are two sets of tests for the driver. To run the specs placed in this repository, use a normal rspec command:
457
+
458
+ ```bash
459
+ rspec spec
460
+ ```
461
+
462
+ To run the [Testkit](https://github.com/neo4j-drivers/testkit) that is used to test all Neo4j driver implementations,
463
+ use the following:
464
+
465
+ ```bash
466
+ git clone git@github.com:neo4j-drivers/testkit.git
467
+ cd testkit
468
+ export TEST_DRIVER_NAME=ruby
469
+ export TEST_DRIVER_REPO=`realpath ../neo4j-ruby-driver`
470
+ export TEST_NEO4J_PASS=password
471
+ python3 main.py --tests UNIT_TESTS --configs 4.3-enterprise
472
+ ```
473
+
474
+ Please refer to the [Testkit](https://github.com/neo4j-drivers/testkit) documentation to learn more about its features.
475
+
76
476
  ## Contributing
77
477
 
78
- Suggestions, improvements, bug reports and pull requests are welcome on GitHub at https://github.com/neo4jrb/neo4j-ruby-driver.
478
+ Suggestions, improvements, bug reports and pull requests are welcome on GitHub
479
+ at https://github.com/neo4jrb/neo4j-ruby-driver.
79
480
 
80
481
  ## License
81
482
 
82
483
  The gem is available as open source under the terms of the [MIT License](https://opensource.org/licenses/MIT).
83
-
@@ -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,83 @@
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)?$/, 'routing_table_purge_delay'
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
+ when 'notification_config'
49
+ value = notification_config(**value)
50
+ else
51
+ value = to_neo(value, skip_unknown: true)
52
+ end
53
+ [method, value, unit].compact
54
+ end
55
+
56
+ def trust_strategy(**config)
57
+ strategy = config.delete(:strategy)
58
+ trust_strategy =
59
+ case strategy
60
+ when :trust_custom_certificates
61
+ Config::TrustStrategy
62
+ .trust_custom_certificate_signed_by(*config.delete(:cert_files).map(&java.io.File.method(:new)))
63
+ else
64
+ Config::TrustStrategy.send(strategy)
65
+ end
66
+ apply_to(trust_strategy, **config)
67
+ end
68
+
69
+ def notification_config(minimum_severity: nil, disabled_categories: nil)
70
+ org.neo4j.driver.internal.InternalNotificationConfig.new(
71
+ value_of(org.neo4j.driver.internal.InternalNotificationSeverity, minimum_severity).or_else(nil),
72
+ disabled_categories
73
+ &.map { |value| value_of(org.neo4j.driver.NotificationClassification, value) }
74
+ &.then(&java.util.HashSet.method(:new)))
75
+ end
76
+
77
+ def value_of(klass, value)
78
+ klass.value_of(value&.to_s&.upcase)
79
+ end
80
+ end
81
+ end
82
+ end
83
+ end