neo4j-ruby-driver 6.0.3.alpha.0 → 6.2.1.beta.2

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 (348) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +113 -411
  3. data/{ruby → lib}/neo4j/driver/access_mode.rb +2 -1
  4. data/lib/neo4j/driver/auth_token_managers.rb +31 -0
  5. data/lib/neo4j/driver/auth_tokens.rb +41 -0
  6. data/lib/neo4j/driver/auto_commit_retries_mode.rb +18 -0
  7. data/lib/neo4j/driver/bolt/bolt_version.rb +67 -0
  8. data/lib/neo4j/driver/bolt/connection.rb +1091 -0
  9. data/lib/neo4j/driver/bolt/handshake.rb +236 -0
  10. data/lib/neo4j/driver/bolt/message/failure.rb +139 -0
  11. data/lib/neo4j/driver/bolt/message/ignored.rb +27 -0
  12. data/lib/neo4j/driver/bolt/message/record.rb +30 -0
  13. data/lib/neo4j/driver/bolt/message/success.rb +34 -0
  14. data/lib/neo4j/driver/bolt/message.rb +112 -0
  15. data/lib/neo4j/driver/bolt/pool.rb +255 -0
  16. data/lib/neo4j/driver/bolt/protocol/base.rb +146 -0
  17. data/lib/neo4j/driver/bolt/protocol/v3.rb +43 -0
  18. data/lib/neo4j/driver/bolt/protocol/v4.rb +24 -0
  19. data/lib/neo4j/driver/bolt/protocol/v43.rb +28 -0
  20. data/lib/neo4j/driver/bolt/protocol/v44.rb +23 -0
  21. data/lib/neo4j/driver/bolt/protocol/v5.rb +27 -0
  22. data/lib/neo4j/driver/bolt/protocol/v51.rb +24 -0
  23. data/lib/neo4j/driver/bolt/protocol/v52.rb +28 -0
  24. data/lib/neo4j/driver/bolt/protocol/v53.rb +27 -0
  25. data/lib/neo4j/driver/bolt/protocol/v54.rb +14 -0
  26. data/lib/neo4j/driver/bolt/protocol/v55.rb +17 -0
  27. data/lib/neo4j/driver/bolt/protocol/v56.rb +14 -0
  28. data/lib/neo4j/driver/bolt/protocol/v57.rb +31 -0
  29. data/lib/neo4j/driver/bolt/protocol/v58.rb +15 -0
  30. data/lib/neo4j/driver/bolt/protocol/v6.rb +43 -0
  31. data/lib/neo4j/driver/bolt/protocol/v61.rb +21 -0
  32. data/lib/neo4j/driver/bolt/protocol_version_handler.rb +39 -0
  33. data/lib/neo4j/driver/bolt/record_buffer.rb +143 -0
  34. data/lib/neo4j/driver/bolt/stream_handler.rb +53 -0
  35. data/lib/neo4j/driver/bolt/tls_config.rb +129 -0
  36. data/lib/neo4j/driver/bolt/wire.rb +321 -0
  37. data/lib/neo4j/driver/bookmark.rb +15 -0
  38. data/lib/neo4j/driver/bookmark_managers.rb +39 -0
  39. data/lib/neo4j/driver/client_certificate.rb +19 -0
  40. data/lib/neo4j/driver/client_certificate_manager.rb +37 -0
  41. data/lib/neo4j/driver/client_certificate_managers.rb +15 -0
  42. data/lib/neo4j/driver/client_certificates.rb +14 -0
  43. data/lib/neo4j/driver/direct/connection_provider.rb +262 -0
  44. data/lib/neo4j/driver/driver.rb +268 -0
  45. data/lib/neo4j/driver/eager_result.rb +10 -0
  46. data/lib/neo4j/driver/exceptions/neo4j_exception.rb +16 -7
  47. data/lib/neo4j/driver/exceptions/no_such_record_exception.rb +1 -1
  48. data/lib/neo4j/driver/exceptions/protocol_exception.rb +0 -5
  49. data/lib/neo4j/driver/exceptions/security_retryable_exception.rb +14 -0
  50. data/lib/neo4j/driver/exceptions/transaction_terminated_exception.rb +13 -0
  51. data/lib/neo4j/driver/graph_database.rb +29 -0
  52. data/lib/neo4j/driver/internal/clock.rb +20 -0
  53. data/lib/neo4j/driver/internal/clock_adapter.rb +21 -0
  54. data/lib/neo4j/driver/internal/default_bookmark_manager.rb +54 -0
  55. data/lib/neo4j/driver/internal/deprecator.rb +9 -5
  56. data/lib/neo4j/driver/internal/driver_factory.rb +128 -0
  57. data/lib/neo4j/driver/internal/duration_normalizer.rb +14 -39
  58. data/lib/neo4j/driver/internal/extras.rb +23 -0
  59. data/lib/neo4j/driver/internal/home_db_cache.rb +57 -0
  60. data/lib/neo4j/driver/internal/internal_auth_token_manager.rb +37 -0
  61. data/lib/neo4j/driver/internal/metrics.rb +31 -0
  62. data/lib/neo4j/driver/internal/security/static_auth_token_manager.rb +25 -0
  63. data/lib/neo4j/driver/internal/validator.rb +16 -2
  64. data/lib/neo4j/driver/net.rb +29 -0
  65. data/lib/neo4j/driver/packstream/markers.rb +49 -0
  66. data/lib/neo4j/driver/packstream/packer.rb +335 -0
  67. data/lib/neo4j/driver/packstream/structure.rb +27 -0
  68. data/lib/neo4j/driver/packstream/unpacker.rb +170 -0
  69. data/lib/neo4j/driver/record.rb +43 -0
  70. data/lib/neo4j/driver/result.rb +282 -0
  71. data/lib/neo4j/driver/routing/load_balancer.rb +706 -0
  72. data/lib/neo4j/driver/routing/routed_connection.rb +132 -0
  73. data/lib/neo4j/driver/routing/routing_table.rb +127 -0
  74. data/lib/neo4j/driver/routing/server_address.rb +25 -0
  75. data/lib/neo4j/driver/routing_control.rb +13 -0
  76. data/lib/neo4j/driver/session.rb +577 -0
  77. data/lib/neo4j/driver/summary/database_info.rb +25 -0
  78. data/lib/neo4j/driver/summary/gql_notification.rb +38 -0
  79. data/lib/neo4j/driver/summary/gql_status_object.rb +35 -0
  80. data/lib/neo4j/driver/summary/notification.rb +46 -0
  81. data/lib/neo4j/driver/summary/plan.rb +23 -0
  82. data/lib/neo4j/driver/summary/profile.rb +28 -0
  83. data/lib/neo4j/driver/summary/query.rb +19 -0
  84. data/lib/neo4j/driver/summary/query_type.rb +5 -1
  85. data/lib/neo4j/driver/summary/result_summary.rb +215 -0
  86. data/lib/neo4j/driver/summary/server_info.rb +33 -0
  87. data/lib/neo4j/driver/summary/summary_counters.rb +72 -0
  88. data/lib/neo4j/driver/transaction.rb +344 -0
  89. data/lib/neo4j/driver/types/duration.rb +76 -0
  90. data/lib/neo4j/driver/types/entity.rb +40 -0
  91. data/lib/neo4j/driver/types/local_date_time.rb +77 -8
  92. data/lib/neo4j/driver/types/local_time.rb +50 -7
  93. data/lib/neo4j/driver/types/node.rb +18 -0
  94. data/lib/neo4j/driver/types/offset_time.rb +78 -7
  95. data/lib/neo4j/driver/types/path.rb +68 -0
  96. data/lib/neo4j/driver/types/point.rb +38 -18
  97. data/lib/neo4j/driver/types/relationship.rb +32 -0
  98. data/lib/neo4j/driver/types/temporal_value.rb +44 -0
  99. data/lib/neo4j/driver/types/unbound_relationship.rb +24 -0
  100. data/lib/neo4j/driver/types/unresolvable_zoned_date_time.rb +38 -0
  101. data/lib/neo4j/driver/types/unsupported_type.rb +25 -0
  102. data/lib/neo4j/driver/types/uuid.rb +29 -0
  103. data/{ruby → lib}/neo4j/driver/version.rb +1 -1
  104. data/lib/neo4j/driver.rb +15 -0
  105. data/lib/neo4j-ruby-driver_loader.rb +34 -20
  106. metadata +115 -441
  107. data/lib/neo4j/driver/internal/bolt_server_address.rb +0 -97
  108. data/lib/neo4j/driver/synchronizable.rb +0 -23
  109. data/lib/neo4j/driver/types/time.rb +0 -45
  110. data/ruby/neo4j/driver/auth_tokens.rb +0 -34
  111. data/ruby/neo4j/driver/bookmark.rb +0 -21
  112. data/ruby/neo4j/driver/config.rb +0 -89
  113. data/ruby/neo4j/driver/graph_database.rb +0 -78
  114. data/ruby/neo4j/driver/internal/async/connection/bolt_protocol_util.rb +0 -51
  115. data/ruby/neo4j/driver/internal/async/connection/bootstrap_factory.rb +0 -22
  116. data/ruby/neo4j/driver/internal/async/connection/channel_attributes.rb +0 -31
  117. data/ruby/neo4j/driver/internal/async/connection/channel_connected_listener.rb +0 -32
  118. data/ruby/neo4j/driver/internal/async/connection/channel_connector_impl.rb +0 -83
  119. data/ruby/neo4j/driver/internal/async/connection/channel_pipeline_builder_impl.rb +0 -22
  120. data/ruby/neo4j/driver/internal/async/connection/direct_connection.rb +0 -30
  121. data/ruby/neo4j/driver/internal/async/connection/event_loop_group_factory.rb +0 -83
  122. data/ruby/neo4j/driver/internal/async/connection/handshake_completed_listener.rb +0 -27
  123. data/ruby/neo4j/driver/internal/async/connection/handshake_handler.rb +0 -113
  124. data/ruby/neo4j/driver/internal/async/connection/netty_channel_initializer.rb +0 -57
  125. data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver.rb +0 -26
  126. data/ruby/neo4j/driver/internal/async/connection/netty_domain_name_resolver_group.rb +0 -19
  127. data/ruby/neo4j/driver/internal/async/connection/routing_connection.rb +0 -36
  128. data/ruby/neo4j/driver/internal/async/connection/stream.rb +0 -12
  129. data/ruby/neo4j/driver/internal/async/connection/stream_reader.rb +0 -16
  130. data/ruby/neo4j/driver/internal/async/connection_context.rb +0 -10
  131. data/ruby/neo4j/driver/internal/async/immutable_connection_context.rb +0 -24
  132. data/ruby/neo4j/driver/internal/async/inbound/byte_buf_input.rb +0 -30
  133. data/ruby/neo4j/driver/internal/async/inbound/channel_error_handler.rb +0 -77
  134. data/ruby/neo4j/driver/internal/async/inbound/chunk_decoder.rb +0 -41
  135. data/ruby/neo4j/driver/internal/async/inbound/connect_timeout_handler.rb +0 -32
  136. data/ruby/neo4j/driver/internal/async/inbound/connection_read_timeout_handler.rb +0 -17
  137. data/ruby/neo4j/driver/internal/async/inbound/inbound_message_dispatcher.rb +0 -171
  138. data/ruby/neo4j/driver/internal/async/inbound/inbound_message_handler.rb +0 -42
  139. data/ruby/neo4j/driver/internal/async/inbound/message_decoder.rb +0 -51
  140. data/ruby/neo4j/driver/internal/async/internal_async_session.rb +0 -92
  141. data/ruby/neo4j/driver/internal/async/internal_async_transaction.rb +0 -13
  142. data/ruby/neo4j/driver/internal/async/leak_logging_network_session.rb +0 -34
  143. data/ruby/neo4j/driver/internal/async/network_connection.rb +0 -194
  144. data/ruby/neo4j/driver/internal/async/network_session.rb +0 -150
  145. data/ruby/neo4j/driver/internal/async/outbound/chunk_aware_byte_buf_output.rb +0 -110
  146. data/ruby/neo4j/driver/internal/async/outbound/outbound_message_handler.rb +0 -39
  147. data/ruby/neo4j/driver/internal/async/pool/channel.rb +0 -66
  148. data/ruby/neo4j/driver/internal/async/pool/channel_pool.rb +0 -31
  149. data/ruby/neo4j/driver/internal/async/pool/channel_tracker.rb +0 -135
  150. data/ruby/neo4j/driver/internal/async/pool/connection_pool_impl.rb +0 -156
  151. data/ruby/neo4j/driver/internal/async/pool/netty_channel_health_checker.rb +0 -87
  152. data/ruby/neo4j/driver/internal/async/pool/netty_channel_pool.rb +0 -52
  153. data/ruby/neo4j/driver/internal/async/pool/network_connection_factory.rb +0 -21
  154. data/ruby/neo4j/driver/internal/async/pool/pool_settings.rb +0 -34
  155. data/ruby/neo4j/driver/internal/async/pool/timed_stack.rb +0 -15
  156. data/ruby/neo4j/driver/internal/async/result_cursors_holder.rb +0 -17
  157. data/ruby/neo4j/driver/internal/async/unmanaged_transaction.rb +0 -212
  158. data/ruby/neo4j/driver/internal/bookmark_holder.rb +0 -9
  159. data/ruby/neo4j/driver/internal/cluster/cluster_composition.rb +0 -48
  160. data/ruby/neo4j/driver/internal/cluster/cluster_composition_lookup_result.rb +0 -14
  161. data/ruby/neo4j/driver/internal/cluster/cluster_routing_table.rb +0 -122
  162. data/ruby/neo4j/driver/internal/cluster/identity_resolver.rb +0 -10
  163. data/ruby/neo4j/driver/internal/cluster/loadbalancing/least_connected_load_balancing_strategy.rb +0 -68
  164. data/ruby/neo4j/driver/internal/cluster/loadbalancing/load_balancer.rb +0 -125
  165. data/ruby/neo4j/driver/internal/cluster/loadbalancing/round_robin_array_index.rb +0 -13
  166. data/ruby/neo4j/driver/internal/cluster/multi_databases_routing_procedure_runner.rb +0 -31
  167. data/ruby/neo4j/driver/internal/cluster/rediscovery_impl.rb +0 -147
  168. data/ruby/neo4j/driver/internal/cluster/route_message_routing_procedure_runner.rb +0 -43
  169. data/ruby/neo4j/driver/internal/cluster/routing_context.rb +0 -77
  170. data/ruby/neo4j/driver/internal/cluster/routing_procedure_cluster_composition_provider.rb +0 -60
  171. data/ruby/neo4j/driver/internal/cluster/routing_procedure_response.rb +0 -35
  172. data/ruby/neo4j/driver/internal/cluster/routing_settings.rb +0 -24
  173. data/ruby/neo4j/driver/internal/cluster/routing_table_handler_impl.rb +0 -95
  174. data/ruby/neo4j/driver/internal/cluster/routing_table_registry_impl.rb +0 -121
  175. data/ruby/neo4j/driver/internal/cluster/single_database_routing_procedure_runner.rb +0 -73
  176. data/ruby/neo4j/driver/internal/connection_settings.rb +0 -16
  177. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_impl.rb +0 -55
  178. data/ruby/neo4j/driver/internal/cursor/async_result_cursor_only_factory.rb +0 -24
  179. data/ruby/neo4j/driver/internal/cursor/disposable_async_result_cursor.rb +0 -61
  180. data/ruby/neo4j/driver/internal/cursor/result_cursor_factory_impl.rb +0 -24
  181. data/ruby/neo4j/driver/internal/cursor/rx_result_cursor_impl.rb +0 -110
  182. data/ruby/neo4j/driver/internal/database_name_util.rb +0 -37
  183. data/ruby/neo4j/driver/internal/default_bookmark_holder.rb +0 -9
  184. data/ruby/neo4j/driver/internal/default_domain_name_resolver.rb +0 -11
  185. data/ruby/neo4j/driver/internal/direct_connection_provider.rb +0 -40
  186. data/ruby/neo4j/driver/internal/driver_factory.rb +0 -126
  187. data/ruby/neo4j/driver/internal/eager_result_value.rb +0 -5
  188. data/ruby/neo4j/driver/internal/handlers/begin_tx_response_handler.rb +0 -20
  189. data/ruby/neo4j/driver/internal/handlers/channel_releasing_reset_response_handler.rb +0 -30
  190. data/ruby/neo4j/driver/internal/handlers/commit_tx_response_handler.rb +0 -23
  191. data/ruby/neo4j/driver/internal/handlers/hello_response_handler.rb +0 -65
  192. data/ruby/neo4j/driver/internal/handlers/init_response_handler.rb +0 -34
  193. data/ruby/neo4j/driver/internal/handlers/legacy_pull_all_response_handler.rb +0 -199
  194. data/ruby/neo4j/driver/internal/handlers/no_op_response_handler.rb +0 -16
  195. data/ruby/neo4j/driver/internal/handlers/ping_response_handler.rb +0 -29
  196. data/ruby/neo4j/driver/internal/handlers/pull_handlers.rb +0 -32
  197. data/ruby/neo4j/driver/internal/handlers/pulln/auto_pull_response_handler.rb +0 -169
  198. data/ruby/neo4j/driver/internal/handlers/pulln/basic_pull_response_handler.rb +0 -298
  199. data/ruby/neo4j/driver/internal/handlers/pulln/fetch_size_util.rb +0 -20
  200. data/ruby/neo4j/driver/internal/handlers/reset_response_handler.rb +0 -34
  201. data/ruby/neo4j/driver/internal/handlers/rollback_tx_response_handler.rb +0 -25
  202. data/ruby/neo4j/driver/internal/handlers/route_message_response_handler.rb +0 -21
  203. data/ruby/neo4j/driver/internal/handlers/routing_response_handler.rb +0 -79
  204. data/ruby/neo4j/driver/internal/handlers/run_response_handler.rb +0 -38
  205. data/ruby/neo4j/driver/internal/handlers/session_pull_response_completion_listener.rb +0 -34
  206. data/ruby/neo4j/driver/internal/handlers/transaction_pull_response_completion_listener.rb +0 -20
  207. data/ruby/neo4j/driver/internal/impersonation_util.rb +0 -22
  208. data/ruby/neo4j/driver/internal/internal_bookmark.rb +0 -9
  209. data/ruby/neo4j/driver/internal/internal_database_name.rb +0 -9
  210. data/ruby/neo4j/driver/internal/internal_driver.rb +0 -83
  211. data/ruby/neo4j/driver/internal/internal_entity.rb +0 -21
  212. data/ruby/neo4j/driver/internal/internal_node.rb +0 -21
  213. data/ruby/neo4j/driver/internal/internal_pair.rb +0 -9
  214. data/ruby/neo4j/driver/internal/internal_path.rb +0 -35
  215. data/ruby/neo4j/driver/internal/internal_point2_d.rb +0 -9
  216. data/ruby/neo4j/driver/internal/internal_point3_d.rb +0 -6
  217. data/ruby/neo4j/driver/internal/internal_record.rb +0 -27
  218. data/ruby/neo4j/driver/internal/internal_relationship.rb +0 -27
  219. data/ruby/neo4j/driver/internal/internal_result.rb +0 -49
  220. data/ruby/neo4j/driver/internal/internal_session.rb +0 -91
  221. data/ruby/neo4j/driver/internal/internal_transaction.rb +0 -48
  222. data/ruby/neo4j/driver/internal/logging/channel_activity_logger.rb +0 -29
  223. data/ruby/neo4j/driver/internal/logging/channel_error_logger.rb +0 -17
  224. data/ruby/neo4j/driver/internal/logging/prefixed_logger.rb +0 -19
  225. data/ruby/neo4j/driver/internal/logging/reformatted_logger.rb +0 -17
  226. data/ruby/neo4j/driver/internal/messaging/abstract_message_writer.rb +0 -23
  227. data/ruby/neo4j/driver/internal/messaging/bolt_protocol.rb +0 -32
  228. data/ruby/neo4j/driver/internal/messaging/bolt_protocol_version.rb +0 -48
  229. data/ruby/neo4j/driver/internal/messaging/common/common_message_reader.rb +0 -51
  230. data/ruby/neo4j/driver/internal/messaging/common/common_value.rb +0 -33
  231. data/ruby/neo4j/driver/internal/messaging/common/common_value_packer.rb +0 -104
  232. data/ruby/neo4j/driver/internal/messaging/common/common_value_unpacker.rb +0 -256
  233. data/ruby/neo4j/driver/internal/messaging/encode/begin_message_encoder.rb +0 -15
  234. data/ruby/neo4j/driver/internal/messaging/encode/commit_message_encoder.rb +0 -14
  235. data/ruby/neo4j/driver/internal/messaging/encode/discard_all_message_encoder.rb +0 -14
  236. data/ruby/neo4j/driver/internal/messaging/encode/discard_message_encoder.rb +0 -15
  237. data/ruby/neo4j/driver/internal/messaging/encode/goodbye_message_encoder.rb +0 -14
  238. data/ruby/neo4j/driver/internal/messaging/encode/hello_message_encoder.rb +0 -15
  239. data/ruby/neo4j/driver/internal/messaging/encode/init_message_encoder.rb +0 -16
  240. data/ruby/neo4j/driver/internal/messaging/encode/logoff_message_encoder.rb +0 -14
  241. data/ruby/neo4j/driver/internal/messaging/encode/logon_message_encoder.rb +0 -15
  242. data/ruby/neo4j/driver/internal/messaging/encode/pull_all_message_encoder.rb +0 -14
  243. data/ruby/neo4j/driver/internal/messaging/encode/pull_message_encoder.rb +0 -15
  244. data/ruby/neo4j/driver/internal/messaging/encode/reset_message_encoder.rb +0 -14
  245. data/ruby/neo4j/driver/internal/messaging/encode/rollback_message_encoder.rb +0 -14
  246. data/ruby/neo4j/driver/internal/messaging/encode/route_message_encoder.rb +0 -24
  247. data/ruby/neo4j/driver/internal/messaging/encode/route_v44_message_encoder.rb +0 -22
  248. data/ruby/neo4j/driver/internal/messaging/encode/run_message_encoder.rb +0 -16
  249. data/ruby/neo4j/driver/internal/messaging/encode/run_with_metadata_message_encoder.rb +0 -17
  250. data/ruby/neo4j/driver/internal/messaging/request/abstract_streaming_message.rb +0 -25
  251. data/ruby/neo4j/driver/internal/messaging/request/begin_message.rb +0 -25
  252. data/ruby/neo4j/driver/internal/messaging/request/commit_message.rb +0 -20
  253. data/ruby/neo4j/driver/internal/messaging/request/discard_all_message.rb +0 -20
  254. data/ruby/neo4j/driver/internal/messaging/request/discard_message.rb +0 -23
  255. data/ruby/neo4j/driver/internal/messaging/request/goodbye_message.rb +0 -20
  256. data/ruby/neo4j/driver/internal/messaging/request/hello_message.rb +0 -30
  257. data/ruby/neo4j/driver/internal/messaging/request/init_message.rb +0 -19
  258. data/ruby/neo4j/driver/internal/messaging/request/logoff_message.rb +0 -13
  259. data/ruby/neo4j/driver/internal/messaging/request/logon_message.rb +0 -13
  260. data/ruby/neo4j/driver/internal/messaging/request/message_with_metadata.rb +0 -17
  261. data/ruby/neo4j/driver/internal/messaging/request/multi_database_util.rb +0 -26
  262. data/ruby/neo4j/driver/internal/messaging/request/pull_all_message.rb +0 -23
  263. data/ruby/neo4j/driver/internal/messaging/request/pull_message.rb +0 -22
  264. data/ruby/neo4j/driver/internal/messaging/request/reset_message.rb +0 -32
  265. data/ruby/neo4j/driver/internal/messaging/request/rollback_message.rb +0 -20
  266. data/ruby/neo4j/driver/internal/messaging/request/route_message.rb +0 -28
  267. data/ruby/neo4j/driver/internal/messaging/request/run_message.rb +0 -23
  268. data/ruby/neo4j/driver/internal/messaging/request/run_with_metadata_message.rb +0 -49
  269. data/ruby/neo4j/driver/internal/messaging/request/transaction_metadata_builder.rb +0 -24
  270. data/ruby/neo4j/driver/internal/messaging/response/failure_message.rb +0 -40
  271. data/ruby/neo4j/driver/internal/messaging/response/ignored_message.rb +0 -29
  272. data/ruby/neo4j/driver/internal/messaging/response/record_message.rb +0 -33
  273. data/ruby/neo4j/driver/internal/messaging/response/success_message.rb +0 -34
  274. data/ruby/neo4j/driver/internal/messaging/v3/bolt_protocol_v3.rb +0 -82
  275. data/ruby/neo4j/driver/internal/messaging/v3/message_format_v3.rb +0 -17
  276. data/ruby/neo4j/driver/internal/messaging/v3/message_writer_v3.rb +0 -27
  277. data/ruby/neo4j/driver/internal/messaging/v4/bolt_protocol_v4.rb +0 -29
  278. data/ruby/neo4j/driver/internal/messaging/v4/message_format_v4.rb +0 -13
  279. data/ruby/neo4j/driver/internal/messaging/v4/message_writer_v4.rb +0 -17
  280. data/ruby/neo4j/driver/internal/messaging/v41/bolt_protocol_v41.rb +0 -25
  281. data/ruby/neo4j/driver/internal/messaging/v42/bolt_protocol_v42.rb +0 -13
  282. data/ruby/neo4j/driver/internal/messaging/v43/bolt_protocol_v43.rb +0 -19
  283. data/ruby/neo4j/driver/internal/messaging/v43/message_format_v43.rb +0 -14
  284. data/ruby/neo4j/driver/internal/messaging/v43/message_writer_v43.rb +0 -20
  285. data/ruby/neo4j/driver/internal/messaging/v44/bolt_protocol_v44.rb +0 -17
  286. data/ruby/neo4j/driver/internal/messaging/v44/message_format_v44.rb +0 -14
  287. data/ruby/neo4j/driver/internal/messaging/v44/message_writer_v44.rb +0 -15
  288. data/ruby/neo4j/driver/internal/messaging/v5/bolt_protocol_v5.rb +0 -21
  289. data/ruby/neo4j/driver/internal/messaging/v5/message_format_v5.rb +0 -18
  290. data/ruby/neo4j/driver/internal/messaging/v5/value_unpacker_v5.rb +0 -17
  291. data/ruby/neo4j/driver/internal/messaging/v51/bolt_protocol_v51.rb +0 -40
  292. data/ruby/neo4j/driver/internal/messaging/v51/message_format_v51.rb +0 -14
  293. data/ruby/neo4j/driver/internal/messaging/v51/message_writer_v51.rb +0 -17
  294. data/ruby/neo4j/driver/internal/metrics/connection_pool_metrics_listener.rb +0 -34
  295. data/ruby/neo4j/driver/internal/metrics/internal_abstract_metrics.rb +0 -46
  296. data/ruby/neo4j/driver/internal/metrics/internal_connection_pool_metrics.rb +0 -105
  297. data/ruby/neo4j/driver/internal/metrics/internal_metrics.rb +0 -82
  298. data/ruby/neo4j/driver/internal/metrics/internal_metrics_provider.rb +0 -18
  299. data/ruby/neo4j/driver/internal/metrics/listener_event.rb +0 -17
  300. data/ruby/neo4j/driver/internal/metrics/metrics_provider.rb +0 -24
  301. data/ruby/neo4j/driver/internal/metrics/time_recorder_listener_event.rb +0 -15
  302. data/ruby/neo4j/driver/internal/packstream/byte_array_incompatible_packer.rb +0 -12
  303. data/ruby/neo4j/driver/internal/packstream/pack_input.rb +0 -47
  304. data/ruby/neo4j/driver/internal/packstream/pack_output.rb +0 -39
  305. data/ruby/neo4j/driver/internal/packstream/pack_stream.rb +0 -324
  306. data/ruby/neo4j/driver/internal/packstream/pack_type.rb +0 -17
  307. data/ruby/neo4j/driver/internal/read_only_bookmark_holder.rb +0 -13
  308. data/ruby/neo4j/driver/internal/resolved_bolt_server_address.rb +0 -35
  309. data/ruby/neo4j/driver/internal/retry/exponential_backoff_retry_logic.rb +0 -150
  310. data/ruby/neo4j/driver/internal/revocation_strategy.rb +0 -19
  311. data/ruby/neo4j/driver/internal/scheme.rb +0 -32
  312. data/ruby/neo4j/driver/internal/security/internal_auth_token.rb +0 -15
  313. data/ruby/neo4j/driver/internal/security/security_plan_impl.rb +0 -48
  314. data/ruby/neo4j/driver/internal/security_setting.rb +0 -66
  315. data/ruby/neo4j/driver/internal/session_factory_impl.rb +0 -32
  316. data/ruby/neo4j/driver/internal/spi/connection.rb +0 -19
  317. data/ruby/neo4j/driver/internal/spi/connection_pool.rb +0 -9
  318. data/ruby/neo4j/driver/internal/spi/response_handler.rb +0 -23
  319. data/ruby/neo4j/driver/internal/summary/internal_database_info.rb +0 -7
  320. data/ruby/neo4j/driver/internal/summary/internal_input_position.rb +0 -11
  321. data/ruby/neo4j/driver/internal/summary/internal_notification.rb +0 -16
  322. data/ruby/neo4j/driver/internal/summary/internal_plan.rb +0 -41
  323. data/ruby/neo4j/driver/internal/summary/internal_profiled_plan.rb +0 -32
  324. data/ruby/neo4j/driver/internal/summary/internal_result_summary.rb +0 -33
  325. data/ruby/neo4j/driver/internal/summary/internal_server_info.rb +0 -6
  326. data/ruby/neo4j/driver/internal/summary/internal_summary_counters.rb +0 -18
  327. data/ruby/neo4j/driver/internal/svm/netty_substitutions.rb +0 -196
  328. data/ruby/neo4j/driver/internal/svm/z_lib_substitutions.rb +0 -21
  329. data/ruby/neo4j/driver/internal/util/certificate_tool.rb +0 -65
  330. data/ruby/neo4j/driver/internal/util/clock.rb +0 -29
  331. data/ruby/neo4j/driver/internal/util/error_util.rb +0 -104
  332. data/ruby/neo4j/driver/internal/util/extract.rb +0 -123
  333. data/ruby/neo4j/driver/internal/util/format.rb +0 -39
  334. data/ruby/neo4j/driver/internal/util/futures.rb +0 -99
  335. data/ruby/neo4j/driver/internal/util/iterables.rb +0 -35
  336. data/ruby/neo4j/driver/internal/util/lock_util.rb +0 -23
  337. data/ruby/neo4j/driver/internal/util/metadata_extractor.rb +0 -101
  338. data/ruby/neo4j/driver/internal/util/mutex.rb +0 -9
  339. data/ruby/neo4j/driver/internal/util/preconditions.rb +0 -16
  340. data/ruby/neo4j/driver/internal/util/result_holder.rb +0 -72
  341. data/ruby/neo4j/driver/internal/util/server_version.rb +0 -60
  342. data/ruby/neo4j/driver/logging1.rb +0 -51
  343. data/ruby/neo4j/driver/net/server_address.rb +0 -9
  344. data/ruby/neo4j/driver/query.rb +0 -48
  345. data/ruby/neo4j/driver/records.rb +0 -13
  346. data/ruby/neo4j/driver/transaction_config.rb +0 -50
  347. data/ruby/neo4j/driver/values.rb +0 -26
  348. data/ruby/neo4j/driver.rb +0 -30
@@ -3,16 +3,87 @@
3
3
  module Neo4j
4
4
  module Driver
5
5
  module Types
6
- class OffsetTime < Time
7
- class << self
8
- FIELDS = %i[hour min sec nsec utc_offset].freeze
6
+ # Bolt OffsetTime time of day with a fixed UTC offset, stored as
7
+ # nanoseconds-since-midnight (in local wall clock) plus offset
8
+ # seconds. Equivalent to java.time.OffsetTime. Was previously
9
+ # called Types::Time, which collided cosmetically with ::Time.
10
+ class OffsetTime < TemporalValue
11
+ attr_reader :nanoseconds, :tz_offset_seconds
9
12
 
10
- def significant_fields
11
- FIELDS
12
- end
13
+ def self.significant_fields = %i[nanoseconds tz_offset_seconds]
14
+
15
+ def initialize(nanoseconds, tz_offset_seconds)
16
+ @nanoseconds = nanoseconds % NANOS_PER_DAY
17
+ @tz_offset_seconds = tz_offset_seconds
18
+ end
19
+
20
+ def self.from_nanos(nanoseconds, tz_offset_seconds) = new(nanoseconds, tz_offset_seconds)
21
+
22
+ # Build from a Ruby Time — its wall clock plus its UTC offset.
23
+ # Reuses LocalTime's field extraction. Mirrors LocalDateTime.from_time.
24
+ def self.from_time(time)
25
+ new(LocalTime.from_time(time).nanoseconds, time.utc_offset)
26
+ end
27
+
28
+ # Accepts "12:34:56.123456789+01:00", "12:34:56Z", or any string
29
+ # containing such a time-with-offset component.
30
+ def self.parse(string)
31
+ match = string.match(/(\d{1,2}):(\d{2})(?::(\d{2})(?:\.(\d+))?)?([Z+-][\d:]*)?/)
32
+ raise ArgumentError, "Invalid OffsetTime format: #{string}" unless match
33
+
34
+ nanos = LocalTime.send(:parse_nanos,
35
+ match[1].to_i, match[2].to_i, (match[3] || 0).to_i, match[4] || '0')
36
+ new(nanos, parse_offset(match[5] || 'Z'))
37
+ end
38
+
39
+ def self.parse_offset(str)
40
+ return 0 if str == 'Z'
41
+ raise ArgumentError, "Invalid timezone offset: #{str}" unless str =~ /^([+-])(\d{2}):?(\d{2})?$/
42
+
43
+ sign = ::Regexp.last_match(1) == '+' ? 1 : -1
44
+ sign * (::Regexp.last_match(2).to_i * 3600 + (::Regexp.last_match(3) || 0).to_i * 60)
13
45
  end
46
+ private_class_method :parse_offset
14
47
 
15
- delegate(*significant_fields, to: :@time)
48
+ def hour = (@nanoseconds / NANOS_PER_HOUR) % 24
49
+ def minute = (@nanoseconds / NANOS_PER_MINUTE) % 60
50
+ def second = (@nanoseconds / NANOS_PER_SECOND) % 60
51
+ def nanosecond = @nanoseconds % NANOS_PER_SECOND
52
+
53
+ # Add a numeric or ActiveSupport::Duration. Sub-second precision
54
+ # preserved (see LocalTime#+).
55
+ def +(other)
56
+ self.class.new(@nanoseconds + (other.to_f * NANOS_PER_SECOND).round, @tz_offset_seconds)
57
+ end
58
+
59
+ def to_s
60
+ # Apply the sign to the formatted offset as a whole, not to
61
+ # `hours` alone — Ruby integer division for `-12600 / 3600` is
62
+ # -4 (floor toward -∞), which would render -03:30 as -04:30.
63
+ abs = @tz_offset_seconds.abs
64
+ sign = @tz_offset_seconds.negative? ? '-' : '+'
65
+ format('%02d:%02d:%02d.%09d%s%02d:%02d',
66
+ hour, minute, second, nanosecond,
67
+ sign, abs / 3600, (abs % 3600) / 60)
68
+ end
69
+
70
+ # Order by underlying UTC instant. Two OffsetTimes representing
71
+ # the same UTC instant in different offsets compare equal under
72
+ # <=>; == still requires same fields (they're not the same value).
73
+ def <=>(other)
74
+ return nil unless other.is_a?(OffsetTime)
75
+
76
+ utc_nanos <=> other.utc_nanos
77
+ end
78
+
79
+ protected
80
+
81
+ # UTC = local − offset. Positive offset means "ahead of UTC", so
82
+ # the UTC instant is *earlier* (smaller nanos). The previous
83
+ # implementation added instead of subtracting, inverting ordering.
84
+ def utc_nanos
85
+ @nanoseconds - (@tz_offset_seconds * NANOS_PER_SECOND)
86
+ end
16
87
  end
17
88
  end
18
89
  end
@@ -0,0 +1,68 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Neo4j
4
+ module Driver
5
+ module Types
6
+ # Represents a Path in the Neo4j graph
7
+ # A path is a sequence of alternating nodes and relationships
8
+ class Path
9
+ include Enumerable
10
+
11
+ attr_reader :nodes, :relationships
12
+
13
+ def initialize(nodes, relationships, segments)
14
+ @nodes = nodes
15
+ @relationships = relationships
16
+ @segments = segments
17
+ end
18
+
19
+ # Returns the start node of the path
20
+ def start
21
+ @nodes.first
22
+ end
23
+ alias start_node start
24
+
25
+ # Returns the end node of the path
26
+ def end
27
+ @nodes.last
28
+ end
29
+ alias end_node end
30
+
31
+ # Returns the number of relationships in the path (number of segments)
32
+ def length
33
+ @relationships.length
34
+ end
35
+
36
+ # Check if the path contains the given node
37
+ def contains_node?(node)
38
+ @nodes.any? { |n| n.id == node.id }
39
+ end
40
+
41
+ # Check if the path contains the given relationship
42
+ def contains_relationship?(relationship)
43
+ @relationships.any? { |r| r.id == relationship.id }
44
+ end
45
+
46
+ # Iterate over segments in the path
47
+ # Each segment represents a relationship and its start/end nodes
48
+ def each(&)
49
+ @segments.each(&)
50
+ end
51
+
52
+ # Represents a segment of a path (a relationship and its start/end nodes)
53
+ class Segment
54
+ attr_reader :start_node, :end_node, :relationship
55
+
56
+ def initialize(start_node, end_node, relationship)
57
+ @start_node = start_node
58
+ @end_node = end_node
59
+ @relationship = relationship
60
+ end
61
+
62
+ alias start start_node
63
+ alias end end_node
64
+ end
65
+ end
66
+ end
67
+ end
68
+ end
@@ -3,36 +3,56 @@
3
3
  module Neo4j
4
4
  module Driver
5
5
  module Types
6
+ # Point (2D or 3D)
6
7
  class Point
7
- attr_accessor :srid, :x, :y, :z
8
+ attr_reader :srid, :x, :y, :z
8
9
 
9
- SRID = {
10
- 'WGS-84': 4326,
11
- 'WGS-84-3D': 4979,
12
- cartesian: 7203,
13
- 'cartesian-3D': 9157
14
- }.with_indifferent_access.freeze
10
+ # SRID constants for coordinate reference systems
11
+ WGS_84_2D = 4326 # Geographic 2D (longitude, latitude)
12
+ WGS_84_3D = 4979 # Geographic 3D (longitude, latitude, height)
13
+ CARTESIAN_2D = 7203 # Cartesian 2D (x, y)
14
+ CARTESIAN_3D = 9157 # Cartesian 3D (x, y, z)
15
15
 
16
- def initialize(args)
17
- self.x = args[:longitude] || args[:x]
18
- self.y = args[:latitude] || args[:y]
19
- self.z = args[:height] || args[:z]
20
- self.srid = args[:srid] || SRID[args[:crs] || implied_crs(args[:longitude] || args[:latitude])]
16
+ def initialize(srid: nil, x: nil, y: nil, z: nil, longitude: nil, latitude: nil, height: nil)
17
+ # Handle longitude/latitude aliases for x/y
18
+ if longitude || latitude
19
+ @x = (longitude || x).to_f
20
+ @y = (latitude || y).to_f
21
+ @z = (height || z)&.to_f
22
+ # Use WGS-84 SRID for geographic coordinates
23
+ @srid = srid || (@z ? WGS_84_3D : WGS_84_2D)
24
+ else
25
+ @x = x.to_f
26
+ @y = y.to_f
27
+ @z = z&.to_f
28
+ # Use Cartesian SRID for x/y/z coordinates
29
+ @srid = srid || (@z ? CARTESIAN_3D : CARTESIAN_2D)
30
+ end
31
+ end
32
+
33
+ def dimension
34
+ @z.nil? ? 2 : 3
21
35
  end
22
36
 
23
37
  def coordinates
24
38
  [x, y, z].compact.map(&:to_f)
25
39
  end
26
40
 
27
- private
28
-
29
- def implied_crs(geo)
30
- if geo
31
- z ? :'WGS-84-3D' : :'WGS-84'
41
+ def to_s
42
+ if @z
43
+ "Point{srid=#{@srid}, x=#{@x}, y=#{@y}, z=#{@z}}"
32
44
  else
33
- z ? :'cartesian-3D' : :cartesian
45
+ "Point{srid=#{@srid}, x=#{@x}, y=#{@y}}"
34
46
  end
35
47
  end
48
+
49
+ def ==(other)
50
+ other.is_a?(Point) &&
51
+ other.srid == @srid &&
52
+ (other.x - @x).abs < 0.00001 &&
53
+ (other.y - @y).abs < 0.00001 &&
54
+ (@z.nil? || (other.z - @z).abs < 0.00001)
55
+ end
36
56
  end
37
57
  end
38
58
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Neo4j
4
+ module Driver
5
+ module Types
6
+ # Represents a Relationship in the Neo4j graph.
7
+ # Mirrors Java's org.neo4j.driver.types.Relationship — an Entity with a
8
+ # type and start/end node ids.
9
+ class Relationship < Entity
10
+ attr_reader :start_node_id, :end_node_id, :type,
11
+ :start_node_element_id, :end_node_element_id
12
+
13
+ # Bolt 4.x wire doesn't include start/end_node_element_id —
14
+ # PackStream hydration passes nil for those slots. Fall back to
15
+ # the stringified node id so callers always see a value
16
+ # (matches what Java's driver does for 4.x). Path-bound
17
+ # relationships pass the actual node element_ids from #bind,
18
+ # which override the fallback.
19
+ def initialize(id, start_node_id, end_node_id, type, properties,
20
+ element_id = nil, start_node_element_id = nil,
21
+ end_node_element_id = nil)
22
+ super(id, properties, element_id)
23
+ @start_node_id = start_node_id
24
+ @end_node_id = end_node_id
25
+ @type = type
26
+ @start_node_element_id = start_node_element_id || start_node_id.to_s
27
+ @end_node_element_id = end_node_element_id || end_node_id.to_s
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
@@ -0,0 +1,44 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Neo4j
4
+ module Driver
5
+ module Types
6
+ # Shared base for the Bolt temporal value types: Duration,
7
+ # LocalDateTime, LocalTime, OffsetTime. Each subclass declares its
8
+ # `significant_fields` and gets `<=>`, `==`, `eql?`, `hash` derived
9
+ # from them automatically. Comparable mixed in here gives `<`, `>`,
10
+ # `between?`, `clamp` etc. for free.
11
+ class TemporalValue
12
+ include Comparable
13
+
14
+ NANOS_PER_SECOND = 1_000_000_000
15
+ NANOS_PER_MINUTE = 60 * NANOS_PER_SECOND
16
+ NANOS_PER_HOUR = 60 * NANOS_PER_MINUTE
17
+ NANOS_PER_DAY = 24 * NANOS_PER_HOUR
18
+
19
+ def self.significant_fields
20
+ raise NotImplementedError, "#{self} must define .significant_fields"
21
+ end
22
+
23
+ def significant
24
+ self.class.significant_fields.map { send(it) }
25
+ end
26
+
27
+ def <=>(other)
28
+ return nil unless other.is_a?(self.class)
29
+
30
+ significant <=> other.significant
31
+ end
32
+
33
+ def ==(other)
34
+ other.is_a?(self.class) && significant == other.significant
35
+ end
36
+ alias eql? ==
37
+
38
+ def hash
39
+ significant.hash
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
@@ -0,0 +1,24 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Neo4j
4
+ module Driver
5
+ module Types
6
+ # Represents an unbound relationship (used in paths before binding to
7
+ # nodes). An Entity with a type but no start/end nodes yet.
8
+ class UnboundRelationship < Entity
9
+ attr_reader :type
10
+
11
+ def initialize(id, type, properties, element_id = nil)
12
+ super(id, properties, element_id)
13
+ @type = type
14
+ end
15
+
16
+ # Bind this relationship to specific start and end nodes
17
+ def bind(start_node_id, end_node_id, start_node_element_id = nil, end_node_element_id = nil)
18
+ Relationship.new(@id, start_node_id, end_node_id, @type, @properties,
19
+ @element_id, start_node_element_id, end_node_element_id)
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,38 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Neo4j
4
+ module Driver
5
+ module Types
6
+ # A ZonedDateTime the driver received with a zone id its runtime's time
7
+ # zone database can't resolve (e.g. the server sent "Europe/Neo4j").
8
+ #
9
+ # Hydration can't build a real Time, but raising mid-record on the reader
10
+ # thread would break the connection and strand the whole result — so the
11
+ # failure is deferred into this placeholder. Any consumer that tries to
12
+ # interpret the value raises (naming the zone), matching the Java driver,
13
+ # while the record and connection stay intact so an open transaction can
14
+ # still roll back cleanly.
15
+ class UnresolvableZonedDateTime
16
+ attr_reader :zone_name
17
+
18
+ def initialize(zone_name)
19
+ @zone_name = zone_name
20
+ end
21
+
22
+ # The driver error this value stands in for. Raised by any consumer
23
+ # that tries to use it (the testkit backend on serialize; a public-API
24
+ # caller via #value).
25
+ def error
26
+ Exceptions::ClientException.new(
27
+ "The server returned a ZonedDateTime with a zone id (#{@zone_name.inspect}) " \
28
+ "that this runtime's time zone database does not recognise"
29
+ )
30
+ end
31
+
32
+ def value
33
+ raise error
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
@@ -0,0 +1,25 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Neo4j
4
+ module Driver
5
+ module Types
6
+ # A value whose Bolt struct type is newer than this driver understands
7
+ # (Bolt 6.0+ can push forward-compat markers, struct signature 0x3F). The
8
+ # driver can't materialise the real value, but it must not crash — it
9
+ # surfaces the type's name, the protocol version that introduced it, and
10
+ # an optional server message so callers can react. Mirrors the Java
11
+ # driver's UnsupportedType.
12
+ class UnsupportedType
13
+ attr_reader :name, :min_protocol_version, :message
14
+
15
+ # `major`/`minor` are the wire ints (e.g. 6, 10); expose them joined as
16
+ # "major.minor" the way testkit / the Java driver report it.
17
+ def initialize(name, major, minor, message = nil)
18
+ @name = name
19
+ @min_protocol_version = "#{major}.#{minor}"
20
+ @message = message
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,29 @@
1
+ # frozen_string_literal: true
2
+
3
+ module Neo4j
4
+ module Driver
5
+ module Types
6
+ # A Neo4j UUID value (Bolt 6.1+). An opaque, immutable value type
7
+ # mirroring java.util.UUID (which JRuby uses natively) and Python's
8
+ # uuid.UUID — construct via `from_string`, read the canonical
9
+ # hyphenated form via `to_s`. `new` is private so flavor-agnostic
10
+ # code goes through `from_string`, the one constructor that also
11
+ # exists on java.util.UUID.
12
+ class UUID
13
+ def self.from_string(value) = new(value)
14
+ private_class_method :new
15
+
16
+ def initialize(value)
17
+ @value = value.to_s
18
+ end
19
+
20
+ def to_s = @value
21
+
22
+ def ==(other) = other.is_a?(UUID) && other.to_s == @value
23
+ alias eql? ==
24
+
25
+ def hash = @value.hash
26
+ end
27
+ end
28
+ end
29
+ end
@@ -2,6 +2,6 @@
2
2
 
3
3
  module Neo4j
4
4
  module Driver
5
- VERSION = '6.0.3.alpha.0'
5
+ VERSION = '6.2.1.beta.2'
6
6
  end
7
7
  end
@@ -0,0 +1,15 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'connection_pool'
4
+ require 'neo4j-ruby-driver_loader'
5
+ require 'openssl'
6
+ require 'socket'
7
+ require 'stringio'
8
+ require 'tzinfo'
9
+
10
+ module Neo4j
11
+ module Driver
12
+ Loader.load(:mri)
13
+ AuthTokenManager = Internal::InternalAuthTokenManager
14
+ end
15
+ end
@@ -1,32 +1,46 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'active_support/concern'
4
- require 'active_support/core_ext/hash/indifferent_access'
5
- require 'active_support/isolated_execution_state' if Gem::Requirement.create('>= 7').satisfied_by?(Gem.loaded_specs["activesupport"].version) # TODO: this should not be necessary https://github.com/rails/rails/issues/43851
6
- require 'active_support/deprecator' if Gem::Requirement.create('>= 7.1').satisfied_by?(Gem.loaded_specs["activesupport"].version)
7
- require 'active_support/deprecation'
8
- require 'active_support/core_ext/numeric/time'
9
- require 'active_support/duration'
10
- require 'active_support/time'
11
3
  require 'date'
4
+ require 'forwardable'
5
+ require 'time'
12
6
  require 'uri'
13
7
  require 'zeitwerk'
14
8
 
15
9
  module Neo4j
16
10
  module Driver
17
11
  class Loader
18
- def self.load
19
- loader = Zeitwerk::Loader.new
20
- loader.tag = 'neo4j-ruby-driver'
21
- loader.push_dir(File.expand_path(__dir__))
22
- driver_specific_dir = File.dirname(File.dirname(caller_locations(1..1).first.path))
23
- loader.push_dir(driver_specific_dir)
24
- yield loader if block_given?
25
- loader.ignore(File.expand_path('neo4j*ruby*driver*.rb', __dir__))
26
- loader.ignore(File.expand_path('org', __dir__))
27
- loader.inflector = Zeitwerk::GemInflector.new(File.expand_path('neo4j/driver', driver_specific_dir))
28
- loader.setup
29
- loader.eager_load
12
+ class << self
13
+ # `__dir__` resolves to:
14
+ # dev: lib/shared → shared_root = lib/shared
15
+ # installed gem: lib → shared_root = lib (the impl dir is
16
+ # merged in by the staged build, so
17
+ # impl_root below is missing and the
18
+ # conditional push is skipped)
19
+ def load(impl)
20
+ @impl = impl
21
+ shared_root = File.expand_path(__dir__)
22
+ impl_root = File.expand_path("../#{impl}", shared_root)
23
+
24
+ loader = Zeitwerk::Loader.new
25
+ loader.tag = 'neo4j-ruby-driver'
26
+ loader.inflector = Zeitwerk::GemInflector.new(File.expand_path('neo4j/driver', __dir__))
27
+ loader.inflector.inflect('packstream' => 'PackStream', 'uuid' => 'UUID')
28
+ loader.push_dir(shared_root)
29
+ loader.push_dir(impl_root) if File.directory?(impl_root)
30
+ yield loader if block_given?
31
+ # ignore the Bundler.require-friendly entry files (neo4j-ruby-driver.rb, neo4j-ruby-driver_loader.rb,
32
+ # neo4j_ruby_driver.rb) since Zeitwerk would otherwise try to
33
+ # autoload them as constants with the wrong names.
34
+ loader.ignore(File.expand_path(__FILE__))
35
+ loader.ignore(File.expand_path('neo4j-ruby-driver.rb', __dir__))
36
+ loader.ignore(File.expand_path('neo4j_ruby_driver.rb', __dir__))
37
+ loader.setup
38
+ loader.eager_load
39
+ end
40
+
41
+ def jruby? = @impl == :jruby
42
+
43
+ def mri? = @impl == :mri
30
44
  end
31
45
  end
32
46
  end