pg_eventstore 0.10.1 → 1.0.0.rc1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (83) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +11 -0
  3. data/README.md +26 -0
  4. data/db/migrations/1_create_events.sql +12 -11
  5. data/db/migrations/2_create_subscriptions.sql +6 -2
  6. data/db/migrations/3_create_subscription_commands.sql +9 -5
  7. data/db/migrations/4_create_subscriptions_set_commands.sql +1 -1
  8. data/db/migrations/5_partitions.sql +1 -0
  9. data/docs/configuration.md +1 -1
  10. data/docs/how_it_works.md +14 -1
  11. data/lib/pg_eventstore/commands/append.rb +1 -1
  12. data/lib/pg_eventstore/commands/event_modifiers/prepare_link_event.rb +30 -8
  13. data/lib/pg_eventstore/commands/event_modifiers/prepare_regular_event.rb +8 -10
  14. data/lib/pg_eventstore/commands/link_to.rb +14 -7
  15. data/lib/pg_eventstore/errors.rb +10 -12
  16. data/lib/pg_eventstore/event.rb +9 -1
  17. data/lib/pg_eventstore/event_deserializer.rb +1 -0
  18. data/lib/pg_eventstore/queries/event_queries.rb +33 -6
  19. data/lib/pg_eventstore/queries/links_resolver.rb +53 -0
  20. data/lib/pg_eventstore/queries/partition_queries.rb +8 -0
  21. data/lib/pg_eventstore/queries/subscription_command_queries.rb +27 -7
  22. data/lib/pg_eventstore/queries/subscription_queries.rb +70 -35
  23. data/lib/pg_eventstore/queries/subscriptions_set_command_queries.rb +13 -1
  24. data/lib/pg_eventstore/queries/subscriptions_set_queries.rb +18 -4
  25. data/lib/pg_eventstore/queries.rb +1 -0
  26. data/lib/pg_eventstore/query_builders/events_filtering_query.rb +4 -17
  27. data/lib/pg_eventstore/subscriptions/command_handlers/subscription_feeder_commands.rb +10 -2
  28. data/lib/pg_eventstore/subscriptions/command_handlers/subscription_runners_commands.rb +9 -7
  29. data/lib/pg_eventstore/subscriptions/commands_handler.rb +3 -2
  30. data/lib/pg_eventstore/subscriptions/events_processor.rb +10 -2
  31. data/lib/pg_eventstore/subscriptions/subscription.rb +29 -12
  32. data/lib/pg_eventstore/subscriptions/subscription_feeder.rb +20 -16
  33. data/lib/pg_eventstore/subscriptions/subscription_runner.rb +1 -1
  34. data/lib/pg_eventstore/subscriptions/subscription_runners_feeder.rb +3 -4
  35. data/lib/pg_eventstore/subscriptions/subscriptions_set.rb +22 -1
  36. data/lib/pg_eventstore/version.rb +1 -1
  37. data/lib/pg_eventstore/web/application.rb +180 -0
  38. data/lib/pg_eventstore/web/paginator/base_collection.rb +56 -0
  39. data/lib/pg_eventstore/web/paginator/event_types_collection.rb +50 -0
  40. data/lib/pg_eventstore/web/paginator/events_collection.rb +105 -0
  41. data/lib/pg_eventstore/web/paginator/helpers.rb +119 -0
  42. data/lib/pg_eventstore/web/paginator/stream_contexts_collection.rb +48 -0
  43. data/lib/pg_eventstore/web/paginator/stream_ids_collection.rb +50 -0
  44. data/lib/pg_eventstore/web/paginator/stream_names_collection.rb +51 -0
  45. data/lib/pg_eventstore/web/public/fonts/vendor/FontAwesome.otf +0 -0
  46. data/lib/pg_eventstore/web/public/fonts/vendor/fontawesome-webfont.eot +0 -0
  47. data/lib/pg_eventstore/web/public/fonts/vendor/fontawesome-webfont.svg +685 -0
  48. data/lib/pg_eventstore/web/public/fonts/vendor/fontawesome-webfont.ttf +0 -0
  49. data/lib/pg_eventstore/web/public/fonts/vendor/fontawesome-webfont.woff +0 -0
  50. data/lib/pg_eventstore/web/public/fonts/vendor/fontawesome-webfont.woff2 +0 -0
  51. data/lib/pg_eventstore/web/public/images/favicon.ico +0 -0
  52. data/lib/pg_eventstore/web/public/javascripts/gentelella.js +334 -0
  53. data/lib/pg_eventstore/web/public/javascripts/pg_eventstore.js +162 -0
  54. data/lib/pg_eventstore/web/public/javascripts/vendor/bootstrap.bundle.min.js +7 -0
  55. data/lib/pg_eventstore/web/public/javascripts/vendor/bootstrap.bundle.min.js.map +1 -0
  56. data/lib/pg_eventstore/web/public/javascripts/vendor/jquery.autocomplete.min.js +8 -0
  57. data/lib/pg_eventstore/web/public/javascripts/vendor/jquery.min.js +4 -0
  58. data/lib/pg_eventstore/web/public/javascripts/vendor/jquery.min.js.map +1 -0
  59. data/lib/pg_eventstore/web/public/javascripts/vendor/select2.full.min.js +2 -0
  60. data/lib/pg_eventstore/web/public/stylesheets/pg_eventstore.css +5 -0
  61. data/lib/pg_eventstore/web/public/stylesheets/vendor/bootstrap.min.css +7 -0
  62. data/lib/pg_eventstore/web/public/stylesheets/vendor/bootstrap.min.css.map +1 -0
  63. data/lib/pg_eventstore/web/public/stylesheets/vendor/font-awesome.min.css +4 -0
  64. data/lib/pg_eventstore/web/public/stylesheets/vendor/font-awesome.min.css.map +7 -0
  65. data/lib/pg_eventstore/web/public/stylesheets/vendor/gentelella.min.css +13 -0
  66. data/lib/pg_eventstore/web/public/stylesheets/vendor/select2-bootstrap4.min.css +3 -0
  67. data/lib/pg_eventstore/web/public/stylesheets/vendor/select2.min.css +2 -0
  68. data/lib/pg_eventstore/web/subscriptions/helpers.rb +76 -0
  69. data/lib/pg_eventstore/web/subscriptions/set_collection.rb +34 -0
  70. data/lib/pg_eventstore/web/subscriptions/subscriptions.rb +33 -0
  71. data/lib/pg_eventstore/web/subscriptions/subscriptions_set.rb +33 -0
  72. data/lib/pg_eventstore/web/subscriptions/subscriptions_to_set_association.rb +32 -0
  73. data/lib/pg_eventstore/web/views/home/dashboard.erb +147 -0
  74. data/lib/pg_eventstore/web/views/home/partials/event_filter.erb +15 -0
  75. data/lib/pg_eventstore/web/views/home/partials/events.erb +22 -0
  76. data/lib/pg_eventstore/web/views/home/partials/pagination_links.erb +3 -0
  77. data/lib/pg_eventstore/web/views/home/partials/stream_filter.erb +31 -0
  78. data/lib/pg_eventstore/web/views/layouts/application.erb +116 -0
  79. data/lib/pg_eventstore/web/views/subscriptions/index.erb +220 -0
  80. data/lib/pg_eventstore/web.rb +22 -0
  81. data/lib/pg_eventstore.rb +5 -0
  82. data/pg_eventstore.gemspec +2 -1
  83. metadata +61 -2
@@ -0,0 +1,51 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PgEventstore
4
+ module Web
5
+ module Paginator
6
+ class StreamNamesCollection < BaseCollection
7
+ PER_PAGE = 10
8
+
9
+ # @return [Array<Hash>]
10
+ def collection
11
+ @_collection ||=
12
+ begin
13
+ sql_builder =
14
+ SQLBuilder.new.select('stream_name').from('partitions').
15
+ where('event_type is null and context = ?', options[:context]).
16
+ where('stream_name like ?', "#{options[:query]}%")
17
+ sql_builder.where("stream_name #{direction_operator} ?", starting_id) if starting_id
18
+ sql_builder.limit(per_page).order("stream_name #{order}")
19
+ connection.with do |conn|
20
+ conn.exec_params(*sql_builder.to_exec_params)
21
+ end.to_a
22
+ end
23
+ end
24
+
25
+ # @return [String, nil]
26
+ def next_page_starting_id
27
+ return unless collection.size == per_page
28
+
29
+ starting_id = collection.first['stream_name']
30
+ sql_builder =
31
+ SQLBuilder.new.select('stream_name').from('partitions').
32
+ where("stream_name #{direction_operator} ?", starting_id).
33
+ where('stream_name like ?', "#{options[:query]}%").
34
+ where('event_type is null and context = ?', options[:context]).
35
+ limit(1).offset(per_page).order("stream_name #{order}")
36
+
37
+ connection.with do |conn|
38
+ conn.exec_params(*sql_builder.to_exec_params)
39
+ end.to_a.dig(0, 'stream_name')
40
+ end
41
+
42
+ private
43
+
44
+ # @return [String]
45
+ def direction_operator
46
+ order == :asc ? '>=' : '<='
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end