pg_eventstore 2.0.0 → 3.0.0

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 (303) hide show
  1. checksums.yaml +4 -4
  2. data/.rubocop.yml +10 -1
  3. data/CHANGELOG.md +186 -20
  4. data/README.md +25 -15
  5. data/db/migrations/10_setup_pg_cron.rb +1 -23
  6. data/db/migrations/15_create_streams_global_index.sql +17 -0
  7. data/db/migrations/16_populate_streams_global_index.rb +150 -0
  8. data/db/migrations/17_create_events_global_index.sql +62 -0
  9. data/db/migrations/18_populate_events_global_index.rb +124 -0
  10. data/db/migrations/19_populate_events_global_index_p2.rb +25 -0
  11. data/db/migrations/20_migrate_subscriptions_current_position.sql +19 -0
  12. data/db/migrations/21_create_partitions_stats.sql +2 -0
  13. data/db/migrations/22_drop_streams_sql_view.sql +2 -0
  14. data/db/migrations/23_adjust_partitions_indexes.sql +5 -0
  15. data/db/migrations/24_drop_legacy_events_indexes.sql +3 -0
  16. data/db/migrations/25_add_parent_partitions_info_to_partitions.sql +16 -0
  17. data/db/migrations/26_change_events_stream_revision_type.rb +35 -0
  18. data/db/migrations/27_drop_events_horizon.sql +3 -0
  19. data/db/migrations/28_create_maintenance_tasks.sql +8 -0
  20. data/db/migrations/29_create_event_markers.sql +35 -0
  21. data/db/migrations/30_improve_partitions_search_in_admin_ui.rb +24 -0
  22. data/db/migrations/31_drop_events_id_default_value.sql +1 -0
  23. data/db/migrations/32_create_parittions_triggers.sql +101 -0
  24. data/docs/AGENTS.fragment.md +696 -0
  25. data/docs/admin_ui.md +3 -1
  26. data/docs/appending_events.md +110 -49
  27. data/docs/configuration.md +69 -36
  28. data/docs/event_tracing.md +55 -0
  29. data/docs/events_and_streams.md +54 -30
  30. data/docs/how_it_works.md +57 -16
  31. data/docs/linking_events.md +2 -1
  32. data/docs/maintenance.md +14 -5
  33. data/docs/multiple_commands.md +17 -8
  34. data/docs/reading_events.md +208 -43
  35. data/docs/reading_streams.md +50 -0
  36. data/docs/replication.md +99 -0
  37. data/docs/subscriptions.md +165 -35
  38. data/docs/writing_middleware.md +25 -8
  39. data/ext/pg_eventstore_ext/extconf.rb +5 -0
  40. data/ext/pg_eventstore_ext/pg_eventstore_ext.c +74 -0
  41. data/lib/pg_eventstore/async_runner.rb +63 -0
  42. data/lib/pg_eventstore/basic_config.rb +15 -0
  43. data/lib/pg_eventstore/chunks/chunk.rb +31 -0
  44. data/lib/pg_eventstore/chunks/read_api_events_index_chunk.rb +83 -0
  45. data/lib/pg_eventstore/chunks/replica_events_index_chunk.rb +35 -0
  46. data/lib/pg_eventstore/chunks/repository.rb +73 -0
  47. data/lib/pg_eventstore/chunks/subscription_checkpoint_chunk.rb +48 -0
  48. data/lib/pg_eventstore/chunks/subscription_events_index_chunk.rb +99 -0
  49. data/lib/pg_eventstore/chunks.rb +14 -0
  50. data/lib/pg_eventstore/client.rb +163 -50
  51. data/lib/pg_eventstore/commands/append.rb +62 -43
  52. data/lib/pg_eventstore/commands/delete_event.rb +7 -8
  53. data/lib/pg_eventstore/commands/delete_stream.rb +3 -3
  54. data/lib/pg_eventstore/commands/event_modifiers/prepare_link_event.rb +9 -7
  55. data/lib/pg_eventstore/commands/event_modifiers/prepare_regular_event.rb +12 -7
  56. data/lib/pg_eventstore/commands/link_to.rb +5 -5
  57. data/lib/pg_eventstore/commands/read.rb +23 -5
  58. data/lib/pg_eventstore/commands/read_grouped.rb +46 -0
  59. data/lib/pg_eventstore/commands/read_streams.rb +18 -0
  60. data/lib/pg_eventstore/commands/read_streams_paginated.rb +56 -0
  61. data/lib/pg_eventstore/commands/regular_stream_read_paginated.rb +4 -4
  62. data/lib/pg_eventstore/commands/revision_check/current_revision.rb +51 -0
  63. data/lib/pg_eventstore/commands/revision_check/event_type_revisions_comparison.rb +46 -0
  64. data/lib/pg_eventstore/commands/revision_check/expected_revision.rb +135 -0
  65. data/lib/pg_eventstore/commands/revision_check/stream_revision_check.rb +98 -0
  66. data/lib/pg_eventstore/commands/revision_check/stream_revision_comparison.rb +36 -0
  67. data/lib/pg_eventstore/commands/stream_revision.rb +14 -0
  68. data/lib/pg_eventstore/commands/system_stream_read_paginated.rb +4 -4
  69. data/lib/pg_eventstore/commands.rb +4 -2
  70. data/lib/pg_eventstore/config.rb +30 -9
  71. data/lib/pg_eventstore/connection.rb +21 -2
  72. data/lib/pg_eventstore/errors.rb +136 -10
  73. data/lib/pg_eventstore/event.rb +34 -2
  74. data/lib/pg_eventstore/event_deserializer.rb +5 -4
  75. data/lib/pg_eventstore/event_global_index.rb +118 -0
  76. data/lib/pg_eventstore/event_marker.rb +16 -0
  77. data/lib/pg_eventstore/event_marker_index.rb +25 -0
  78. data/lib/pg_eventstore/event_serializer.rb +6 -0
  79. data/lib/pg_eventstore/extensions/acts_as_configurable.rb +88 -0
  80. data/lib/pg_eventstore/extensions/options_defaults.rb +25 -0
  81. data/lib/pg_eventstore/extensions/options_extension.rb +2 -2
  82. data/lib/pg_eventstore/feature_marker.rb +18 -0
  83. data/lib/pg_eventstore/maintenance.rb +11 -6
  84. data/lib/pg_eventstore/middleware/event_tracing.rb +53 -0
  85. data/lib/pg_eventstore/partition.rb +6 -0
  86. data/lib/pg_eventstore/pg_connection.rb +70 -14
  87. data/lib/pg_eventstore/queries/event_marker_queries.rb +74 -0
  88. data/lib/pg_eventstore/queries/event_queries.rb +7 -93
  89. data/lib/pg_eventstore/queries/events_global_index_queries.rb +131 -0
  90. data/lib/pg_eventstore/queries/index_filtering_queries.rb +179 -0
  91. data/lib/pg_eventstore/queries/links_resolver.rb +4 -4
  92. data/lib/pg_eventstore/queries/maintenance_queries.rb +159 -42
  93. data/lib/pg_eventstore/queries/partition_queries.rb +45 -103
  94. data/lib/pg_eventstore/queries/replica_queries.rb +110 -0
  95. data/lib/pg_eventstore/queries/streams_global_index_queries.rb +163 -0
  96. data/lib/pg_eventstore/queries/transaction_queries.rb +52 -10
  97. data/lib/pg_eventstore/queries.rb +29 -1
  98. data/lib/pg_eventstore/query_builders/basic_filtering.rb +38 -5
  99. data/lib/pg_eventstore/query_builders/event_markers_filtering.rb +47 -0
  100. data/lib/pg_eventstore/query_builders/event_markers_index_filtering.rb +275 -0
  101. data/lib/pg_eventstore/query_builders/event_subscription_positions_filtering.rb +37 -0
  102. data/lib/pg_eventstore/query_builders/events_filtering.rb +15 -164
  103. data/lib/pg_eventstore/query_builders/events_global_index_filtering.rb +227 -0
  104. data/lib/pg_eventstore/query_builders/filters/collection.rb +324 -0
  105. data/lib/pg_eventstore/query_builders/filters/event_type_filter.rb +37 -0
  106. data/lib/pg_eventstore/query_builders/filters/filter_row.rb +54 -0
  107. data/lib/pg_eventstore/query_builders/filters/marker_filter.rb +20 -0
  108. data/lib/pg_eventstore/query_builders/filters/marker_filter_row.rb +49 -0
  109. data/lib/pg_eventstore/query_builders/filters/stream_filter.rb +48 -0
  110. data/lib/pg_eventstore/query_builders/index_based_events_filtering.rb +260 -0
  111. data/lib/pg_eventstore/query_builders/partitions_filtering.rb +175 -51
  112. data/lib/pg_eventstore/query_builders/read_cursor/stream_cursor.rb +122 -0
  113. data/lib/pg_eventstore/query_builders/streams_global_index_filtering.rb +83 -0
  114. data/lib/pg_eventstore/query_builders/subscription_events_filtering.rb +79 -0
  115. data/lib/pg_eventstore/query_strategy/async.rb +64 -0
  116. data/lib/pg_eventstore/query_strategy/foreground.rb +25 -0
  117. data/lib/pg_eventstore/query_strategy.rb +19 -0
  118. data/lib/pg_eventstore/raw_event.rb +46 -0
  119. data/lib/pg_eventstore/rspec/test_helpers.rb +21 -8
  120. data/lib/pg_eventstore/sql_builder.rb +87 -8
  121. data/lib/pg_eventstore/stream.rb +13 -16
  122. data/lib/pg_eventstore/stream_global_index.rb +28 -0
  123. data/lib/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rb +5 -17
  124. data/lib/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rb +36 -0
  125. data/lib/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rb +12 -0
  126. data/lib/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rb +21 -7
  127. data/lib/pg_eventstore/subscriptions/events_processor.rb +20 -18
  128. data/lib/pg_eventstore/subscriptions/events_processor_consumer/multiple.rb +63 -0
  129. data/lib/pg_eventstore/subscriptions/events_processor_consumer/replica.rb +68 -0
  130. data/lib/pg_eventstore/subscriptions/events_processor_consumer/single.rb +62 -0
  131. data/lib/pg_eventstore/subscriptions/events_processor_consumer.rb +44 -0
  132. data/lib/pg_eventstore/subscriptions/events_subscription_position_worker.rb +68 -0
  133. data/lib/pg_eventstore/subscriptions/queries/event_subscription_position_queries.rb +177 -0
  134. data/lib/pg_eventstore/subscriptions/queries/subscription_queries.rb +78 -54
  135. data/lib/pg_eventstore/subscriptions/replica_subscription_handler.rb +140 -0
  136. data/lib/pg_eventstore/subscriptions/replica_subscription_runner.rb +9 -0
  137. data/lib/pg_eventstore/subscriptions/subscription.rb +2 -1
  138. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/collection.rb +36 -0
  139. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/index_read_strategy.rb +82 -0
  140. data/lib/pg_eventstore/subscriptions/subscription_feed_strategies/replication_strategy.rb +75 -0
  141. data/lib/pg_eventstore/subscriptions/subscription_feed_strategy.rb +31 -0
  142. data/lib/pg_eventstore/subscriptions/subscription_feeder.rb +24 -0
  143. data/lib/pg_eventstore/subscriptions/subscription_handler_performance.rb +4 -2
  144. data/lib/pg_eventstore/subscriptions/subscription_runner.rb +20 -9
  145. data/lib/pg_eventstore/subscriptions/subscription_runner_commands/reset_position.rb +1 -1
  146. data/lib/pg_eventstore/subscriptions/subscription_runners_feeder.rb +9 -18
  147. data/lib/pg_eventstore/subscriptions/subscriptions_lifecycle.rb +0 -12
  148. data/lib/pg_eventstore/subscriptions/subscriptions_manager.rb +74 -14
  149. data/lib/pg_eventstore/{subscriptions/synchronized_array.rb → synchronized_array.rb} +15 -0
  150. data/lib/pg_eventstore/tasks/setup.rake +2 -2
  151. data/lib/pg_eventstore/utils.rb +31 -0
  152. data/lib/pg_eventstore/version.rb +1 -1
  153. data/lib/pg_eventstore/web/application.rb +100 -16
  154. data/lib/pg_eventstore/web/paginator/base_collection.rb +5 -1
  155. data/lib/pg_eventstore/web/paginator/event_types_collection.rb +14 -4
  156. data/lib/pg_eventstore/web/paginator/events_collection.rb +29 -33
  157. data/lib/pg_eventstore/web/paginator/helpers.rb +16 -9
  158. data/lib/pg_eventstore/web/paginator/markers_collection.rb +48 -0
  159. data/lib/pg_eventstore/web/paginator/stream_contexts_collection.rb +13 -2
  160. data/lib/pg_eventstore/web/paginator/stream_ids_collection.rb +21 -11
  161. data/lib/pg_eventstore/web/paginator/stream_names_collection.rb +18 -4
  162. data/lib/pg_eventstore/web/paginator/streams_collection.rb +95 -0
  163. data/lib/pg_eventstore/web/public/javascripts/pg_eventstore.js +49 -22
  164. data/lib/pg_eventstore/web/subscriptions/set_collection.rb +1 -1
  165. data/lib/pg_eventstore/web/subscriptions/subscriptions.rb +1 -1
  166. data/lib/pg_eventstore/web/subscriptions/with_state/set_collection.rb +1 -1
  167. data/lib/pg_eventstore/web/subscriptions/with_state/subscriptions.rb +1 -1
  168. data/lib/pg_eventstore/web/views/home/dashboard.erb +11 -9
  169. data/lib/pg_eventstore/web/views/home/partials/event_filter.erb +18 -5
  170. data/lib/pg_eventstore/web/views/home/partials/events.erb +38 -1
  171. data/lib/pg_eventstore/web/views/home/partials/markers_filter.erb +18 -0
  172. data/lib/pg_eventstore/web/views/layouts/application.erb +6 -0
  173. data/lib/pg_eventstore/web/views/streams/index.erb +110 -0
  174. data/lib/pg_eventstore/web/views/streams/partials/streams.erb +11 -0
  175. data/lib/pg_eventstore/web/views/subscriptions/index.erb +4 -1
  176. data/lib/pg_eventstore/web.rb +2 -0
  177. data/lib/pg_eventstore.rb +23 -60
  178. data/pg_eventstore.gemspec +6 -4
  179. data/sig/interfaces/_raw_events_handler.rbs +3 -0
  180. data/sig/interfaces/subscription_handler.rbs +1 -1
  181. data/sig/pg/result.rbs +9 -0
  182. data/sig/pg_eventstore/async_runner.rbs +13 -0
  183. data/sig/pg_eventstore/basic_config.rbs +9 -0
  184. data/sig/pg_eventstore/chunks/chunk.rbs +13 -0
  185. data/sig/pg_eventstore/chunks/read_api_events_index_chunk.rbs +30 -0
  186. data/sig/pg_eventstore/chunks/replica_events_index_chunk.rbs +11 -0
  187. data/sig/pg_eventstore/chunks/repository.rbs +22 -0
  188. data/sig/pg_eventstore/chunks/subscription_checkpoint_chunk.rbs +18 -0
  189. data/sig/pg_eventstore/chunks/subscription_events_index_chunk.rbs +37 -0
  190. data/sig/pg_eventstore/client.rbs +40 -42
  191. data/sig/pg_eventstore/commands/append.rbs +11 -25
  192. data/sig/pg_eventstore/commands/event_modifiers/prepare_link_event.rbs +9 -12
  193. data/sig/pg_eventstore/commands/event_modifiers/prepare_regular_event.rbs +5 -4
  194. data/sig/pg_eventstore/commands/link_to.rbs +6 -11
  195. data/sig/pg_eventstore/commands/read.rbs +2 -5
  196. data/sig/pg_eventstore/commands/read_grouped.rbs +7 -0
  197. data/sig/pg_eventstore/commands/read_streams.rbs +7 -0
  198. data/sig/pg_eventstore/commands/read_streams_paginated.rbs +16 -0
  199. data/sig/pg_eventstore/commands/regular_stream_read_paginated.rbs +9 -17
  200. data/sig/pg_eventstore/commands/revision_check/current_revision.rbs +25 -0
  201. data/sig/pg_eventstore/commands/revision_check/event_type_revisions_comparison.rbs +14 -0
  202. data/sig/pg_eventstore/commands/revision_check/expected_revision.rbs +67 -0
  203. data/sig/pg_eventstore/commands/revision_check/stream_revision_check.rbs +20 -0
  204. data/sig/pg_eventstore/commands/revision_check/stream_revision_comparison.rbs +9 -0
  205. data/sig/pg_eventstore/commands/stream_revision.rbs +7 -0
  206. data/sig/pg_eventstore/commands/system_stream_read_paginated.rbs +9 -14
  207. data/sig/pg_eventstore/config.rbs +15 -6
  208. data/sig/pg_eventstore/connection.rbs +11 -18
  209. data/sig/pg_eventstore/errors.rbs +64 -34
  210. data/sig/pg_eventstore/event.rbs +16 -2
  211. data/sig/pg_eventstore/event_deserializer.rbs +5 -10
  212. data/sig/pg_eventstore/event_global_index.rbs +60 -0
  213. data/sig/pg_eventstore/event_marker.rbs +9 -0
  214. data/sig/pg_eventstore/event_marker_index.rbs +12 -0
  215. data/sig/pg_eventstore/extensions/acts_as_configurable.rbs +29 -0
  216. data/sig/pg_eventstore/extensions/options_defaults.rbs +7 -0
  217. data/sig/pg_eventstore/feature_marker.rbs +10 -0
  218. data/sig/pg_eventstore/maintenance.rbs +12 -8
  219. data/sig/pg_eventstore/middleware/event_trace.rbs +14 -0
  220. data/sig/pg_eventstore/partition.rbs +2 -4
  221. data/sig/pg_eventstore/pg_connection.rbs +8 -0
  222. data/sig/pg_eventstore/queries/event_marker_queries.rbs +21 -0
  223. data/sig/pg_eventstore/queries/event_queries.rbs +4 -36
  224. data/sig/pg_eventstore/queries/events_global_index_queries.rbs +37 -0
  225. data/sig/pg_eventstore/queries/index_filtering_queries.rbs +50 -0
  226. data/sig/pg_eventstore/queries/links_resolver.rbs +5 -9
  227. data/sig/pg_eventstore/queries/maintenance_queries.rbs +12 -9
  228. data/sig/pg_eventstore/queries/partition_queries.rbs +32 -67
  229. data/sig/pg_eventstore/queries/replica_queries.rbs +31 -0
  230. data/sig/pg_eventstore/queries/streams_global_index_queries.rbs +39 -0
  231. data/sig/pg_eventstore/queries/transaction_queries.rbs +2 -0
  232. data/sig/pg_eventstore/queries.rbs +11 -21
  233. data/sig/pg_eventstore/query_builders/basic_filtering.rbs +10 -3
  234. data/sig/pg_eventstore/query_builders/event_markers_filtering.rbs +17 -0
  235. data/sig/pg_eventstore/query_builders/event_markers_index_filtering.rbs +69 -0
  236. data/sig/pg_eventstore/query_builders/event_subscription_positions_filtering.rbs +15 -0
  237. data/sig/pg_eventstore/query_builders/events_filtering_query.rbs +9 -51
  238. data/sig/pg_eventstore/query_builders/events_global_index_filtering.rbs +68 -0
  239. data/sig/pg_eventstore/query_builders/filters/collection.rbs +84 -0
  240. data/sig/pg_eventstore/query_builders/filters/event_type_filter.rbs +19 -0
  241. data/sig/pg_eventstore/query_builders/filters/filter_row.rbs +21 -0
  242. data/sig/pg_eventstore/query_builders/filters/marker_filter.rbs +13 -0
  243. data/sig/pg_eventstore/query_builders/filters/marker_filter_row.rbs +19 -0
  244. data/sig/pg_eventstore/query_builders/filters/stream_filter.rbs +24 -0
  245. data/sig/pg_eventstore/query_builders/index_based_events_filtering.rbs +60 -0
  246. data/sig/pg_eventstore/query_builders/partitions_filtering.rbs +29 -10
  247. data/sig/pg_eventstore/query_builders/read_cursor/stream_cursor.rbs +47 -0
  248. data/sig/pg_eventstore/query_builders/streams_global_index_filtering.rbs +27 -0
  249. data/sig/pg_eventstore/query_builders/subscription_events_filtering.rbs +26 -0
  250. data/sig/pg_eventstore/query_strategy/async.rbs +17 -0
  251. data/sig/pg_eventstore/query_strategy/foreground.rbs +11 -0
  252. data/sig/pg_eventstore/query_strategy.rbs +7 -0
  253. data/sig/pg_eventstore/raw_event.rbs +20 -0
  254. data/sig/pg_eventstore/sql_builder.rbs +32 -10
  255. data/sig/pg_eventstore/stream.rbs +10 -18
  256. data/sig/pg_eventstore/stream_global_index.rbs +14 -0
  257. data/sig/pg_eventstore/subscriptions/callback_handlers/events_processor_handlers.rbs +5 -4
  258. data/sig/pg_eventstore/subscriptions/callback_handlers/events_subscription_position_worker_handlers.rbs +9 -0
  259. data/sig/pg_eventstore/subscriptions/callback_handlers/subscription_feeder_handlers.rbs +17 -12
  260. data/sig/pg_eventstore/subscriptions/callback_handlers/subscription_runner_handlers.rbs +17 -6
  261. data/sig/pg_eventstore/subscriptions/event_subscription_position_queries.rbs +30 -0
  262. data/sig/pg_eventstore/subscriptions/events_processor.rbs +12 -5
  263. data/sig/pg_eventstore/subscriptions/events_processor_consumer/multiple.rbs +17 -0
  264. data/sig/pg_eventstore/subscriptions/events_processor_consumer/replica.rbs +17 -0
  265. data/sig/pg_eventstore/subscriptions/events_processor_consumer/single.rbs +17 -0
  266. data/sig/pg_eventstore/subscriptions/events_processor_consumer.rbs +14 -0
  267. data/sig/pg_eventstore/subscriptions/events_subscription_position_worker.rbs +28 -0
  268. data/sig/pg_eventstore/subscriptions/queries/subscription_queries.rbs +7 -39
  269. data/sig/pg_eventstore/subscriptions/replica_subscription_handler.rbs +33 -0
  270. data/sig/pg_eventstore/subscriptions/replica_subscription_runner.rbs +4 -0
  271. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/collection.rbs +14 -0
  272. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/index_read_strategy.rbs +23 -0
  273. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy/replication_strategy.rbs +23 -0
  274. data/sig/pg_eventstore/subscriptions/subscription_feed_strategy.rbs +11 -0
  275. data/sig/pg_eventstore/subscriptions/subscription_feeder.rbs +13 -10
  276. data/sig/pg_eventstore/subscriptions/subscription_handler_performance.rbs +1 -1
  277. data/sig/pg_eventstore/subscriptions/subscription_runner.rbs +13 -2
  278. data/sig/pg_eventstore/subscriptions/subscription_runners_feeder.rbs +1 -8
  279. data/sig/pg_eventstore/subscriptions/subscriptions_lifecycle.rbs +4 -6
  280. data/sig/pg_eventstore/subscriptions/subscriptions_manager.rbs +29 -43
  281. data/sig/pg_eventstore/synchronized_array.rbs +4 -0
  282. data/sig/pg_eventstore/utils.rbs +10 -11
  283. data/sig/pg_eventstore/web/application.rbs +13 -3
  284. data/sig/pg_eventstore/web/paginator/base_collection.rbs +2 -0
  285. data/sig/pg_eventstore/web/paginator/event_types_collection.rbs +4 -0
  286. data/sig/pg_eventstore/web/paginator/events_collection.rbs +11 -11
  287. data/sig/pg_eventstore/web/paginator/helpers.rbs +6 -15
  288. data/sig/pg_eventstore/web/paginator/markers_collection.rbs +13 -0
  289. data/sig/pg_eventstore/web/paginator/stream_contexts_collection.rbs +4 -0
  290. data/sig/pg_eventstore/web/paginator/stream_names_collection.rbs +4 -0
  291. data/sig/pg_eventstore/web/paginator/streams_collection.rbs +30 -0
  292. data/sig/pg_eventstore.rbs +8 -26
  293. metadata +175 -20
  294. data/Dockerfile +0 -3
  295. data/lib/pg_eventstore/commands/all_stream_read_grouped.rb +0 -69
  296. data/lib/pg_eventstore/commands/regular_stream_read_grouped.rb +0 -31
  297. data/lib/pg_eventstore/subscriptions/queries/subscription_service_queries.rb +0 -78
  298. data/lib/pg_eventstore/web/views/home/partials/system_stream_filter.erb +0 -15
  299. data/sig/pg_eventstore/commands/all_stream_read_grouped.rbs +0 -16
  300. data/sig/pg_eventstore/commands/regular_stream_read_grouped.rbs +0 -8
  301. data/sig/pg_eventstore/subscriptions/queries/subscription_service_queries.rbs +0 -19
  302. data/sig/pg_eventstore/subscriptions/synchronized_array.rbs +0 -4
  303. /data/sig/interfaces/{_raw_event_handler.rbs → raw_event_handler.rbs} +0 -0
@@ -3,46 +3,36 @@ module PgEventstore
3
3
  extend Forwardable
4
4
 
5
5
  @set_name: String
6
- @subscription_feeder: PgEventstore::SubscriptionFeeder
7
- @subscriptions_lifecycle: PgEventstore::SubscriptionsLifecycle
8
- @subscriptions_set_lifecycle: PgEventstore::SubscriptionsSetLifecycle
9
-
10
- def self.callbacks: () -> PgEventstore::Callbacks
11
-
12
- # _@param_ `config`
13
- #
14
- # _@param_ `set_name`
15
- #
16
- # _@param_ `max_retries` — max number of retries of failed SubscriptionsSet
17
- #
18
- # _@param_ `retries_interval` — a delay between retries of failed SubscriptionsSet
6
+ @subscription_feeder: SubscriptionFeeder
7
+ @subscriptions_lifecycle: SubscriptionsLifecycle
8
+ @subscriptions_set_lifecycle: SubscriptionsSetLifecycle
9
+
10
+ def self.callbacks: () -> Callbacks
11
+
19
12
  def initialize: (
20
- config: PgEventstore::Config,
13
+ config: Config,
21
14
  set_name: String,
22
15
  ?max_retries: Integer?,
23
16
  ?retries_interval: Integer?,
24
17
  ?force_lock: bool
25
18
  ) -> void
26
19
 
20
+ def create_replication: (
21
+ String subscription_name,
22
+ Symbol primary_config_name,
23
+ ?options: ::Hash[untyped, untyped],
24
+ ?max_events_to_replicate: Integer,
25
+ ?pull_interval: Integer | Float,
26
+ ?max_retries: Integer,
27
+ ?retries_interval: Integer | Float,
28
+ ?restart_terminator: _RestartTerminator?,
29
+ ?failed_subscription_notifier: _FailedSubscriptionNotifier?,
30
+ ?graceful_shutdown_timeout: Integer | Float,
31
+ ?in_batches: bool,
32
+ ) -> void
33
+
27
34
  def config_name: () -> Symbol
28
35
 
29
- # _@param_ `subscription_name` — subscription's name
30
- #
31
- # _@param_ `handler` — subscription's handler
32
- #
33
- # _@param_ `options` — request options
34
- #
35
- # _@param_ `middlewares` — provide a list of middleware names to override a config's middlewares
36
- #
37
- # _@param_ `pull_interval` — an interval in seconds to determine how often to query new events of the given subscription.
38
- #
39
- # _@param_ `max_retries` — max number of retries of failed Subscription
40
- #
41
- # _@param_ `retries_interval` — a delay between retries of failed Subscription
42
- #
43
- # _@param_ `restart_terminator` — a callable object which is invoked with PgEventstore::Subscription instance to determine whether restarts should be stopped(true - stops restarts, false - continues restarts)
44
- #
45
- # _@param_ `failed_subscription_notifier` - a callable object which is invoked with PgEventstore::Subscription instance and error instance after the related subscription died due to error and no longer can be automatically restarted due to max retries number reached. You can use this hook to send a notification about failed subscription.
46
36
  def subscribe: (
47
37
  String subscription_name,
48
38
  handler: _SubscriptionHandler,
@@ -54,26 +44,22 @@ module PgEventstore
54
44
  ?restart_terminator: _RestartTerminator?,
55
45
  ?failed_subscription_notifier: _FailedSubscriptionNotifier?,
56
46
  ?graceful_shutdown_timeout: Integer | Float,
47
+ ?in_batches: bool,
57
48
  ) -> void
58
49
 
59
- def subscriptions: () -> ::Array[PgEventstore::Subscription]
50
+ def subscriptions: () -> ::Array[Subscription]
60
51
 
61
- def subscriptions_set: () -> PgEventstore::SubscriptionsSet?
52
+ def subscriptions_set: () -> SubscriptionsSet?
62
53
 
63
- # _@param_ `middlewares`
64
- #
65
- # _@param_ `handler`
66
- def create_raw_event_handler: (::Array[Symbol]? middlewares, _SubscriptionHandler handler) -> _RawEventHandler
54
+ def deserializer: (::Array[Symbol]? middlewares) -> EventDeserializer
67
55
 
68
- # _@param_ `middlewares`
69
- def select_middlewares: (?::Array[Symbol]? middlewares) -> ::Array[PgEventstore::Middleware]
56
+ def select_middlewares: (?::Array[Symbol]? middlewares) -> ::Array[Middleware]
70
57
 
71
- def start!: () -> PgEventstore::BasicRunner
58
+ def start!: () -> BasicRunner
72
59
 
73
- def start: () -> PgEventstore::BasicRunner?
60
+ def start: () -> BasicRunner?
74
61
 
75
- # Returns the value of attribute config.
76
- attr_accessor config: PgEventstore::Config
62
+ attr_accessor config: Config
77
63
 
78
64
  private
79
65
 
@@ -0,0 +1,4 @@
1
+ module PgEventstore
2
+ class SynchronizedArray[unchecked out Elem] < Array[Elem]
3
+ end
4
+ end
@@ -1,35 +1,34 @@
1
1
  module PgEventstore
2
2
  class Utils
3
+ def self.assert!: (boolish truthy, String? message) -> void
4
+
5
+ def self.assert_node_role!: (Config config, Array[Symbol] expected_roles) -> void
6
+
3
7
  def self.benchmark: { -> untyped } -> Float
4
8
 
5
- # _@param_ `object`
6
- def self.deep_transform_keys: (untyped object) { (untyped key) -> untyped } -> Object
9
+ def self.deep_transform_keys: (untyped object) { (untyped key) -> untyped } -> untyped
7
10
 
8
- # _@param_ `object`
9
- def self.deep_dup: (untyped object) -> Object
11
+ def self.deep_dup: (untyped object) -> untyped
10
12
 
11
13
  def self.deprecation_warning: (String message) -> void
12
14
 
13
- # _@param_ `array`
14
- #
15
- # _@return_ — positional variables, based on array size. Example: "$1, $2, $3"
15
+ def self.missing_implementation!: (untyped obj) -> void
16
+
16
17
  def self.positional_vars: (::Array[untyped] array) -> String
17
18
 
18
- # _@param_ `error`
19
19
  def self.error_info: (StandardError error) -> ::Hash[untyped, untyped]
20
20
 
21
21
  def self.read_pid: (String file_path) -> String?
22
22
 
23
23
  def self.remove_file: (String file_path) -> void
24
24
 
25
- # _@param_ `str`
26
25
  def self.underscore_str: (String str) -> String
27
26
 
28
27
  def self.original_global_position: (Hash[untyped, untyped] raw_event) -> Integer
29
28
 
30
- def self.unwrap_exception: (WrappedException | StandardError wrapped_exception)-> StandardError
29
+ def self.unwrap_exception: (WrappedException | StandardError wrapped_exception) -> StandardError
31
30
 
32
- def self.wrap_exception: (StandardError exception, **untyped extra)-> WrappedException
31
+ def self.wrap_exception: (StandardError exception, **untyped extra) -> WrappedException
33
32
 
34
33
  def self.write_to_file: (String file_path, String content) -> void
35
34
  end
@@ -11,7 +11,7 @@ module PgEventstore
11
11
 
12
12
  def asset_url: (String path) -> String
13
13
 
14
- def connection: -> PgEventstore::Connection
14
+ def connection: -> Connection
15
15
 
16
16
  def current_config: -> Symbol
17
17
 
@@ -19,13 +19,15 @@ module PgEventstore
19
19
 
20
20
  def escape_empty_string: (String? string) -> String?
21
21
 
22
- def events_filter: -> Array[String]?
22
+ def events_filter: -> Array[String | Hash[untyped, untyped]]
23
23
 
24
24
  def flash_message=: (({ message: String, kind: String }) val)-> String
25
25
 
26
26
  def h: (String text) -> String
27
27
 
28
- def paginated_json_response: (PgEventstore::Web::Paginator::BaseCollection collection) -> void
28
+ def markers_filter: -> Array[String]
29
+
30
+ def paginated_json_response: (Paginator::BaseCollection collection) -> void
29
31
 
30
32
  def redirect_back_url: (fallback_url: String) -> String
31
33
 
@@ -38,6 +40,14 @@ module PgEventstore
38
40
  def system_stream: -> String?
39
41
 
40
42
  def unescape_empty_string: (String? string) -> String?
43
+
44
+ def extract_event_types_filter: (Hash[untyped, untyped] options) -> Array[String | Hash[untyped, untyped]]
45
+
46
+ def extract_streams_filter: (Hash[untyped, untyped] options) -> Array[Hash[untyped, untyped]]
47
+
48
+ private
49
+
50
+ def normalize_markers: (Hash[untyped, untyped] hash) -> Array[String]
41
51
  end
42
52
  end
43
53
  end
@@ -2,6 +2,8 @@ module PgEventstore
2
2
  module Web
3
3
  module Paginator
4
4
  class BaseCollection
5
+ MIN_QUERY_SIZE_FOR_ADVANCE_SEARCH: Integer
6
+
5
7
  def initialize: (
6
8
  Symbol config_name,
7
9
  starting_id: (String | Integer)?,
@@ -18,6 +18,10 @@ module PgEventstore
18
18
  def next_page_starting_id: () -> String?
19
19
 
20
20
  def direction_operator: () -> String
21
+
22
+ private
23
+
24
+ def compute_event_type_filter: (SQLBuilder builder) -> void
21
25
  end
22
26
  end
23
27
  end
@@ -1,14 +1,14 @@
1
1
  module PgEventstore
2
2
  module Web
3
3
  module Paginator
4
- class EventsCollection < PgEventstore::Web::Paginator::BaseCollection
4
+ class EventsCollection < BaseCollection
5
5
  SQL_DIRECTIONS: ::Hash[String, Symbol]
6
6
  PER_PAGE: ::Hash[String, Integer]
7
7
  MAX_NUMBER_TO_COUNT: Integer
8
8
 
9
- @stream: PgEventstore::Stream
9
+ @_collection: Array[Event]
10
10
 
11
- def collection: () -> ::Array[PgEventstore::Event]
11
+ def collection: () -> ::Array[Event]
12
12
 
13
13
  def next_page_starting_id: () -> Integer?
14
14
 
@@ -16,17 +16,17 @@ module PgEventstore
16
16
 
17
17
  def total_count: () -> Integer
18
18
 
19
- # _@param_ `event`
20
- def event_global_position: (PgEventstore::Event? event) -> Integer?
19
+ def event_global_position: (Event? event) -> Integer?
21
20
 
22
- # _@param_ `sql_builder`
23
- def estimate_count: (PgEventstore::SQLBuilder sql_builder) -> Integer
21
+ def estimate_count: (SQLBuilder sql_builder) -> Integer
24
22
 
25
- # _@param_ `sql_builder`
26
- def regular_count: (PgEventstore::SQLBuilder sql_builder) -> Integer
23
+ def regular_count: (SQLBuilder sql_builder) -> Integer
27
24
 
28
- # _@param_ `sql_builder`
29
- def global_position: (PgEventstore::SQLBuilder sql_builder) -> Integer?
25
+ def global_position: (SQLBuilder sql_builder) -> Integer?
26
+
27
+ private
28
+
29
+ def _collection: -> Array[Event]
30
30
  end
31
31
  end
32
32
  end
@@ -4,36 +4,27 @@ module PgEventstore
4
4
  module Helpers
5
5
  def empty_characters_fallback: (String str)-> String
6
6
 
7
- # _@param_ `collection`
8
- def previous_page_link: (PgEventstore::Web::Paginator::BaseCollection collection) -> String
7
+ def event_marker_path: (String marker) -> String
9
8
 
10
- # _@param_ `collection`
11
- def next_page_link: (PgEventstore::Web::Paginator::BaseCollection collection) -> String
9
+ def previous_page_link: (BaseCollection collection) -> String
10
+
11
+ def next_page_link: (BaseCollection collection) -> String
12
12
 
13
13
  def first_page_link: () -> String
14
14
 
15
- # _@param_ `per_page` — string representation of items per page. E.g. "10", "20", etc.
16
15
  def per_page_url: (String per_page) -> String
17
16
 
18
- # _@param_ `order` — "asc"/"desc"
19
17
  def sort_url: (String order) -> String
20
18
 
21
- # _@param_ `number` — total number of events by the current filter
22
19
  def total_count: (Integer number) -> String
23
20
 
24
- # _@param_ `number`
25
- #
26
- # _@param_ `delimiter`
27
21
  def number_with_delimiter: (Integer number, ?delimiter: String) -> String
28
22
 
29
- # _@param_ `event`
30
- def stream_path: (PgEventstore::Event event) -> String
23
+ def stream_path: (Stream stream) -> String
31
24
 
32
- # _@param_ `starting_id`
33
25
  def build_starting_id_link: ((String | Integer)? starting_id) -> String
34
26
 
35
- # _@param_ `params`
36
- def build_path: ((::Hash[untyped, untyped] | ::Array[untyped]) params) -> String
27
+ def build_path: ((::Hash[untyped, untyped] | ::Array[untyped]) params, ?base_url: String) -> String
37
28
  end
38
29
  end
39
30
  end
@@ -0,0 +1,13 @@
1
+ module PgEventstore
2
+ module Web
3
+ module Paginator
4
+ class MarkersCollection < BaseCollection
5
+ PER_PAGE: Maintenance
6
+
7
+ private
8
+
9
+ def direction_operator: -> String
10
+ end
11
+ end
12
+ end
13
+ end
@@ -9,6 +9,10 @@ module PgEventstore
9
9
  def next_page_starting_id: () -> String?
10
10
 
11
11
  def direction_operator: () -> String
12
+
13
+ private
14
+
15
+ def compute_context_filter: (SQLBuilder builder) -> void
12
16
  end
13
17
  end
14
18
  end
@@ -9,6 +9,10 @@ module PgEventstore
9
9
  def next_page_starting_id: () -> String?
10
10
 
11
11
  def direction_operator: () -> String
12
+
13
+ private
14
+
15
+ def compute_stream_name_filter: (SQLBuilder builder) -> void
12
16
  end
13
17
  end
14
18
  end
@@ -0,0 +1,30 @@
1
+ module PgEventstore
2
+ module Web
3
+ module Paginator
4
+ class StreamsCollection < BaseCollection
5
+ SQL_DIRECTIONS: ::Hash[String, Symbol]
6
+ PER_PAGE: ::Hash[String, Integer]
7
+ MAX_NUMBER_TO_COUNT: Integer
8
+
9
+ @collection: Array[Stream]
10
+ @total_count: Integer
11
+
12
+ def collection: -> Array[Stream]
13
+
14
+ def next_page_starting_id: -> Integer?
15
+
16
+ def prev_page_starting_id: -> Integer?
17
+
18
+ def total_count: -> Integer
19
+
20
+ private
21
+
22
+ def estimate_count: (SQLBuilder sql_builder) -> Integer
23
+
24
+ def regular_count: (SQLBuilder sql_builder) -> Integer
25
+
26
+ def starting_position: (SQLBuilder sql_builder) -> Integer?
27
+ end
28
+ end
29
+ end
30
+ end
@@ -1,20 +1,9 @@
1
1
  module PgEventstore
2
- DEFAULT_CONFIG: Symbol
2
+ extend Extensions::ActsAsConfigurable
3
3
 
4
- # _@param_ `name` — a name to assign to a config
5
- #
6
- # _@return_ — a result of the given block
7
- def self.configure: (?name: Symbol) { (PgEventstore::Config) -> untyped } -> Object
4
+ attr_accessor logger: untyped
8
5
 
9
- def self.available_configs: () -> ::Array[Symbol]
10
-
11
- # _@param_ `name`
12
- def self.config: (?Symbol name) -> PgEventstore::Config
13
-
14
- # _@param_ `name`
15
- def self.connection: (?Symbol name) -> PgEventstore::Connection
16
-
17
- def self.maintenance: (?Symbol name) -> PgEventstore::Maintenance
6
+ def self.maintenance: (?Symbol name) -> Maintenance
18
7
 
19
8
  def self.subscriptions_manager: (
20
9
  ?Symbol config_name,
@@ -22,19 +11,12 @@ module PgEventstore
22
11
  ?max_retries: Integer?,
23
12
  ?retries_interval: Integer?,
24
13
  ?force_lock: bool
25
- ) -> PgEventstore::SubscriptionsManager
26
-
27
- # _@param_ `name`
28
- def self.client: (?Symbol name) -> PgEventstore::Client
29
-
30
- def self.logger: () -> Logger?
31
-
32
- # _@param_ `logger`
33
- def self.logger=: (Logger? logger) -> Logger?
14
+ ) -> SubscriptionsManager
34
15
 
35
- def self.init_variables: () -> void
16
+ def self.client: (?Symbol name) -> Client
36
17
 
37
- def self.mutex: () -> Thread::Mutex
18
+ private
38
19
 
39
- def self.mutex=: (Thread::Mutex value) -> Thread::Mutex
20
+ def self.connection_options: (Config config) ->
21
+ { uri: String, pool_size: Integer, pool_timeout: Integer }
40
22
  end