pg_eventstore 1.2.0 → 1.3.1

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 (27) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +10 -0
  3. data/lib/pg_eventstore/subscriptions/queries/subscription_queries.rb +5 -2
  4. data/lib/pg_eventstore/subscriptions/queries/subscriptions_set_queries.rb +15 -0
  5. data/lib/pg_eventstore/subscriptions/subscription_runner_commands/reset_position.rb +3 -1
  6. data/lib/pg_eventstore/subscriptions/subscription_runner_commands/restore.rb +8 -0
  7. data/lib/pg_eventstore/version.rb +1 -1
  8. data/lib/pg_eventstore/web/application.rb +16 -0
  9. data/lib/pg_eventstore/web/paginator/event_types_collection.rb +2 -2
  10. data/lib/pg_eventstore/web/paginator/stream_contexts_collection.rb +5 -4
  11. data/lib/pg_eventstore/web/paginator/stream_names_collection.rb +2 -2
  12. data/lib/pg_eventstore/web/public/javascripts/pg_eventstore.js +11 -0
  13. data/lib/pg_eventstore/web/subscriptions/helpers.rb +15 -0
  14. data/lib/pg_eventstore/web/subscriptions/with_state/set_collection.rb +35 -0
  15. data/lib/pg_eventstore/web/subscriptions/with_state/subscriptions.rb +39 -0
  16. data/lib/pg_eventstore/web/subscriptions/with_state/subscriptions_set.rb +40 -0
  17. data/lib/pg_eventstore/web/views/home/dashboard.erb +3 -3
  18. data/lib/pg_eventstore/web/views/subscriptions/index.erb +13 -1
  19. data/lib/pg_eventstore/web.rb +3 -0
  20. data/pg_eventstore.gemspec +1 -1
  21. data/sig/pg_eventstore/subscriptions/queries/subscription_queries.rbs +1 -1
  22. data/sig/pg_eventstore/subscriptions/queries/subscriptions_set_queries.rbs +2 -0
  23. data/sig/pg_eventstore/web/subscriptions/helpers.rbs +4 -0
  24. data/sig/pg_eventstore/web/subscriptions/with_state/set_collection.rbs +21 -0
  25. data/sig/pg_eventstore/web/subscriptions/with_state/subscriptions.rbs +23 -0
  26. data/sig/pg_eventstore/web/subscriptions/with_state/subscriptions_set.rbs +23 -0
  27. metadata +18 -6
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 7d3773773af377d169523f80ce08e439e019c33b94acd369f9927bf116d9bd4e
4
- data.tar.gz: 3d131cf8aab4cc5f2996bc7f78c200d9b0c2455f2430863681056d569852d24e
3
+ metadata.gz: 2d3a11216fa9cddbd742f03508ab289eeb194f39380fb67719b817ddb6839a7e
4
+ data.tar.gz: 6a3f35566a0076d37087064e80cf7c79250fd2a0b1ec25b0096cd2e08121084b
5
5
  SHA512:
6
- metadata.gz: 5b6af4853352632ce2b50306b200c5790e0f41e2063de53fe827985237665c48af5aa080072d8c1612888193f9a82050672888fc3bde0af31a77a35743a69e33
7
- data.tar.gz: ee65c7f22d76c2b530783c1eeea8416962c5c969d50188f4a6c0a0d22746b1045ff5fc0b2d9a8ee3dcdeb6d8df6a4d46087ae09c7093fead0d3276bc11f45a98
6
+ metadata.gz: 1738f6653ff45eec24bbf8803bb36a80ccd2123873e4eba308a75b5be206a73a434c9aa6af7ba6c02cd1ea4c28531ca77dea2114d1a04c1584a1538d2adf603f
7
+ data.tar.gz: 2f40af96cfa32af630a89f96900d86df163f0b75781f8d30f06a304f3002577e7fa9dec831e274bc5f3d138c2fc58512fcdbf5a2713bf3928321ba10b943bc0b
data/CHANGELOG.md CHANGED
@@ -1,5 +1,15 @@
1
1
  ## [Unreleased]
2
2
 
3
+ ## [1.3.1]
4
+ - Swap "Search" button and "Add filter" button on Dashboard page
5
+
6
+ ## [1.3.0]
7
+ - Add ability to filter subscriptions by state in admin UI
8
+ - Reset error-related subscription's attributes on subscription restore
9
+ - Reset total processed events number when user changes subscription's position
10
+ - Allow to search event type, stream context and stream name by substring in web UI
11
+ - Relax sinatra version requirement to v3+
12
+
3
13
  ## [1.2.0]
4
14
  - Implement `failed_subscription_notifier` subscription hook.
5
15
 
@@ -45,10 +45,13 @@ module PgEventstore
45
45
  pg_result.map(&method(:deserialize))
46
46
  end
47
47
 
48
+ # @param state [String, nil]
48
49
  # @return [Array<String>]
49
- def set_collection
50
+ def set_collection(state = nil)
51
+ builder = SQLBuilder.new.from('subscriptions').select('set').group('set').order('set ASC')
52
+ builder.where('state = ?', state) if state
50
53
  connection.with do |conn|
51
- conn.exec('SELECT set FROM subscriptions GROUP BY set ORDER BY set ASC')
54
+ conn.exec_params(*builder.to_exec_params)
52
55
  end.map { |attrs| attrs['set'] }
53
56
  end
54
57
 
@@ -27,6 +27,21 @@ module PgEventstore
27
27
  pg_result.to_a.map(&method(:deserialize))
28
28
  end
29
29
 
30
+ # @param name [String, nil]
31
+ # @param state [String]
32
+ # @return [Array<Hash>]
33
+ def find_all_by_subscription_state(name:, state:)
34
+ builder = SQLBuilder.new.select('subscriptions_set.*').from('subscriptions_set')
35
+ builder.join('JOIN subscriptions ON subscriptions.locked_by = subscriptions_set.id')
36
+ builder.order('subscriptions_set.name ASC, subscriptions_set.id ASC')
37
+ builder.where('subscriptions_set.name = ? and subscriptions.state = ?', name, state)
38
+ builder.group('subscriptions_set.id')
39
+ pg_result = connection.with do |conn|
40
+ conn.exec_params(*builder.to_exec_params)
41
+ end
42
+ pg_result.to_a.map(&method(:deserialize))
43
+ end
44
+
30
45
  # @return [Array<String>]
31
46
  def set_names
32
47
  builder = SQLBuilder.new.select('name').from('subscriptions_set').group('name').order('name ASC')
@@ -17,7 +17,9 @@ module PgEventstore
17
17
  def exec_cmd(subscription_runner)
18
18
  subscription_runner.within_state(:stopped) do
19
19
  subscription_runner.clear_chunk
20
- subscription_runner.subscription.update(last_chunk_greatest_position: nil, current_position: data['position'])
20
+ subscription_runner.subscription.update(
21
+ last_chunk_greatest_position: nil, current_position: data['position'], total_processed_events: 0
22
+ )
21
23
  end
22
24
  end
23
25
  end
@@ -7,6 +7,14 @@ module PgEventstore
7
7
  # @param subscription_runner [PgEventstore::SubscriptionRunner]
8
8
  # @return [void]
9
9
  def exec_cmd(subscription_runner)
10
+ subscription_runner.within_state(:dead) do
11
+ subscription_runner.subscription.update(
12
+ restart_count: 0,
13
+ last_restarted_at: nil,
14
+ last_error: nil,
15
+ last_error_occurred_at: nil
16
+ )
17
+ end
10
18
  subscription_runner.restore
11
19
  end
12
20
  end
@@ -2,5 +2,5 @@
2
2
 
3
3
  module PgEventstore
4
4
  # @return [String]
5
- VERSION = "1.2.0"
5
+ VERSION = "1.3.1"
6
6
  end
@@ -102,6 +102,22 @@ module PgEventstore
102
102
  erb :'subscriptions/index'
103
103
  end
104
104
 
105
+ get '/subscriptions/:state' do
106
+ @set_collection = Subscriptions::WithState::SetCollection.new(connection, state: params[:state])
107
+ @current_set = params[:set_name] || @set_collection.names.first
108
+ subscriptions_set = Subscriptions::WithState::SubscriptionsSet.new(
109
+ connection, @current_set, state: params[:state]
110
+ ).subscriptions_set
111
+ subscriptions = Subscriptions::WithState::Subscriptions.new(
112
+ connection, @current_set, state: params[:state]
113
+ ).subscriptions
114
+ @association = Subscriptions::SubscriptionsToSetAssociation.new(
115
+ subscriptions_set: subscriptions_set,
116
+ subscriptions: subscriptions
117
+ )
118
+ erb :'subscriptions/index'
119
+ end
120
+
105
121
  post '/change_config' do
106
122
  config = params[:config]&.to_sym
107
123
  config = :default unless PgEventstore.available_configs.include?(config)
@@ -16,7 +16,7 @@ module PgEventstore
16
16
  where('context is not null and stream_name is not null').
17
17
  group('event_type').order("event_type #{order}").limit(per_page)
18
18
  sql_builder.where("event_type #{direction_operator} ?", starting_id) if starting_id
19
- sql_builder.where('event_type ilike ?', "#{options[:query]}%")
19
+ sql_builder.where('event_type ilike ?', "%#{options[:query]}%")
20
20
  connection.with do |conn|
21
21
  conn.exec_params(*sql_builder.to_exec_params)
22
22
  end.to_a
@@ -32,7 +32,7 @@ module PgEventstore
32
32
  SQLBuilder.new.select('event_type').from('partitions').
33
33
  where('context is not null and stream_name is not null').
34
34
  where("event_type #{direction_operator} ?", starting_id).
35
- where('event_type ilike ?', "#{options[:query]}%").
35
+ where('event_type ilike ?', "%#{options[:query]}%").
36
36
  group('event_type').order("event_type #{order}").limit(1).offset(per_page)
37
37
 
38
38
  connection.with do |conn|
@@ -12,10 +12,11 @@ module PgEventstore
12
12
  @_collection ||=
13
13
  begin
14
14
  sql_builder =
15
- SQLBuilder.new.select('context').from('partitions').where('stream_name is null and event_type is null')
16
- .limit(per_page).order("context #{order}")
15
+ SQLBuilder.new.select('context').from('partitions').
16
+ where('stream_name is null and event_type is null').
17
+ limit(per_page).order("context #{order}")
17
18
  sql_builder.where("context #{direction_operator} ?", starting_id) if starting_id
18
- sql_builder.where('context ilike ?', "#{options[:query]}%")
19
+ sql_builder.where('context ilike ?', "%#{options[:query]}%")
19
20
  connection.with do |conn|
20
21
  conn.exec_params(*sql_builder.to_exec_params)
21
22
  end.to_a
@@ -29,7 +30,7 @@ module PgEventstore
29
30
  starting_id = collection.first['context']
30
31
  sql_builder =
31
32
  SQLBuilder.new.select('context').from('partitions').where('stream_name is null and event_type is null').
32
- where("context #{direction_operator} ?", starting_id).where('context ilike ?', "#{options[:query]}%").
33
+ where("context #{direction_operator} ?", starting_id).where('context ilike ?', "%#{options[:query]}%").
33
34
  limit(1).offset(per_page).order("context #{order}")
34
35
 
35
36
  connection.with do |conn|
@@ -14,7 +14,7 @@ module PgEventstore
14
14
  sql_builder =
15
15
  SQLBuilder.new.select('stream_name').from('partitions').
16
16
  where('event_type is null and context = ?', options[:context]).
17
- where('stream_name ilike ?', "#{options[:query]}%")
17
+ where('stream_name ilike ?', "%#{options[:query]}%")
18
18
  sql_builder.where("stream_name #{direction_operator} ?", starting_id) if starting_id
19
19
  sql_builder.limit(per_page).order("stream_name #{order}")
20
20
  connection.with do |conn|
@@ -31,7 +31,7 @@ module PgEventstore
31
31
  sql_builder =
32
32
  SQLBuilder.new.select('stream_name').from('partitions').
33
33
  where("stream_name #{direction_operator} ?", starting_id).
34
- where('stream_name ilike ?', "#{options[:query]}%").
34
+ where('stream_name ilike ?', "%#{options[:query]}%").
35
35
  where('event_type is null and context = ?', options[:context]).
36
36
  limit(1).offset(per_page).order("stream_name #{order}")
37
37
 
@@ -215,3 +215,14 @@ $(function(){
215
215
  $(this).find('form').attr('action', $clickedLink.data('url'));
216
216
  });
217
217
  });
218
+
219
+ // Display subscriptions of the selected state
220
+ $(function(){
221
+ "use strict";
222
+
223
+ let $subscriptionsState = $('#subscriptions-state');
224
+ $subscriptionsState.change(function(){
225
+ let $selected = $(this).find('option:selected');
226
+ window.location.href = $selected.data('url');
227
+ });
228
+ });
@@ -13,6 +13,21 @@ module PgEventstore
13
13
  url("/subscriptions?#{encoded_params}")
14
14
  end
15
15
 
16
+ # @param state [String]
17
+ # @return [String]
18
+ def subscriptions_state_url(state:, **params)
19
+ params = params.compact
20
+ return url("/subscriptions/#{state}") if params.empty?
21
+
22
+ encoded_params = Rack::Utils.build_nested_query(params)
23
+ url("/subscriptions/#{state}?#{encoded_params}")
24
+ end
25
+
26
+ # @return [String, nil]
27
+ def subscriptions_state
28
+ params[:state] if PgEventstore::RunnerState::STATES.include?(params[:state])
29
+ end
30
+
16
31
  # @param set_id [Integer]
17
32
  # @param id [Integer]
18
33
  # @param cmd [String]
@@ -0,0 +1,35 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PgEventstore
4
+ module Web
5
+ module Subscriptions
6
+ module WithState
7
+ class SetCollection
8
+ # @!attribute connection
9
+ # @return [PgEventstore::Connection]
10
+ attr_reader :connection
11
+ private :connection
12
+
13
+ # @param connection [PgEventstore::Connection]
14
+ # @param state [String]
15
+ def initialize(connection, state:)
16
+ @connection = connection
17
+ @state = state
18
+ end
19
+
20
+ # @return [Array<String>]
21
+ def names
22
+ @set_collection ||= subscription_queries.set_collection(@state)
23
+ end
24
+
25
+ private
26
+
27
+ # @return [PgEventstore::SubscriptionQueries]
28
+ def subscription_queries
29
+ SubscriptionQueries.new(connection)
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,39 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PgEventstore
4
+ module Web
5
+ module Subscriptions
6
+ module WithState
7
+ class Subscriptions
8
+ # @!attribute connection
9
+ # @return [PgEventstore::Connection]
10
+ attr_reader :connection
11
+ private :connection
12
+
13
+ # @param connection [PgEventstore::Connection]
14
+ # @param current_set [String, nil]
15
+ # @param state [String]
16
+ def initialize(connection, current_set, state:)
17
+ @connection = connection
18
+ @current_set = current_set
19
+ @state = state
20
+ end
21
+
22
+ # @return [Array<PgEventstore::Subscription>]
23
+ def subscriptions
24
+ @subscriptions ||= subscription_queries.find_all(set: @current_set, state: @state).map do |attrs|
25
+ Subscription.new(**attrs)
26
+ end
27
+ end
28
+
29
+ private
30
+
31
+ # @return [PgEventstore::SubscriptionQueries]
32
+ def subscription_queries
33
+ SubscriptionQueries.new(connection)
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,40 @@
1
+ # frozen_string_literal: true
2
+
3
+ module PgEventstore
4
+ module Web
5
+ module Subscriptions
6
+ module WithState
7
+ class SubscriptionsSet
8
+ # @!attribute connection
9
+ # @return [PgEventstore::Connection]
10
+ attr_reader :connection
11
+ private :connection
12
+
13
+ # @param connection [PgEventstore::Connection]
14
+ # @param current_set [String, nil]
15
+ # @param state [String]
16
+ def initialize(connection, current_set, state:)
17
+ @connection = connection
18
+ @current_set = current_set
19
+ @state = state
20
+ end
21
+
22
+ # @return [Array<PgEventstore::SubscriptionsSet>]
23
+ def subscriptions_set
24
+ @subscriptions_set ||=
25
+ subscriptions_set_queries.find_all_by_subscription_state(name: @current_set, state: @state).map do |attrs|
26
+ PgEventstore::SubscriptionsSet.new(**attrs)
27
+ end
28
+ end
29
+
30
+ private
31
+
32
+ # @return [PgEventstore::SubscriptionsSetQueries]
33
+ def subscriptions_set_queries
34
+ SubscriptionsSetQueries.new(connection)
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -39,9 +39,6 @@
39
39
  <div class="ln_solid"></div>
40
40
  <div class="item form-group">
41
41
  <div class="col-md-6 col-sm-6 offset-md-5">
42
- <div class="btn-group">
43
- <button type="submit" class="btn btn-success">Search</button>
44
- </div>
45
42
  <div class="btn-group">
46
43
  <div class="dropdown">
47
44
  <button class="btn btn-secondary dropdown-toggle" type="button"
@@ -54,6 +51,9 @@
54
51
  </div>
55
52
  </div>
56
53
  </div>
54
+ <div class="btn-group">
55
+ <button type="submit" class="btn btn-success">Search</button>
56
+ </div>
57
57
  </div>
58
58
  </div>
59
59
  </form>
@@ -4,6 +4,18 @@
4
4
  <div class="title_left">
5
5
  <h3>Subscriptions</h3>
6
6
  </div>
7
+ <div class="title_right">
8
+ <div class="col-md-5 col-sm-5 form-group pull-right top_search">
9
+ <div class="input-group">
10
+ <select class="form-control" id="subscriptions-state" autocomplete="off">
11
+ <option value="" data-url="<%= subscriptions_url %>" <% unless subscriptions_state %> selected <% end %>>All</option>
12
+ <% PgEventstore::RunnerState::STATES.values.each do |state| %>
13
+ <option value="<%= state %>" <% if state == subscriptions_state %> selected <% end %> data-url="<%= subscriptions_state_url(state: state) %>"><%= state.capitalize %></option>
14
+ <% end %>
15
+ </select>
16
+ </div>
17
+ </div>
18
+ </div>
7
19
  </div>
8
20
 
9
21
  <div class="clearfix"></div>
@@ -11,7 +23,7 @@
11
23
  <ul class="nav nav-tabs bg-white">
12
24
  <% @set_collection.names.each do |set_name| %>
13
25
  <li class="nav-item">
14
- <a class="nav-link <%= "active bg-dark text-white" if @current_set == set_name %>" href="<%= subscriptions_url(set_name: set_name) %>">
26
+ <a class="nav-link <%= "active bg-dark text-white" if @current_set == set_name %>" href="<%= subscriptions_state ? subscriptions_state_url(state: subscriptions_state, set_name: set_name) : subscriptions_url(set_name: set_name) %>">
15
27
  <%= set_name %>
16
28
  </a>
17
29
  </li>
@@ -13,6 +13,9 @@ require_relative 'web/subscriptions/set_collection'
13
13
  require_relative 'web/subscriptions/subscriptions'
14
14
  require_relative 'web/subscriptions/subscriptions_set'
15
15
  require_relative 'web/subscriptions/subscriptions_to_set_association'
16
+ require_relative 'web/subscriptions/with_state/set_collection'
17
+ require_relative 'web/subscriptions/with_state/subscriptions'
18
+ require_relative 'web/subscriptions/with_state/subscriptions_set'
16
19
  require_relative 'web/subscriptions/helpers'
17
20
  require_relative 'web/application'
18
21
 
@@ -37,5 +37,5 @@ Gem::Specification.new do |spec|
37
37
 
38
38
  spec.add_dependency "pg", "~> 1.5"
39
39
  spec.add_dependency "connection_pool", "~> 2.4"
40
- spec.add_dependency "sinatra", "~> 4.0"
40
+ spec.add_dependency "sinatra", ">= 3", '< 5'
41
41
  end
@@ -12,7 +12,7 @@ module PgEventstore
12
12
  # _@param_ `attrs`
13
13
  def find_all: (::Hash[untyped, untyped] attrs) -> ::Array[::Hash[untyped, untyped]]
14
14
 
15
- def set_collection: () -> ::Array[String]
15
+ def set_collection: (?String? state) -> ::Array[String]
16
16
 
17
17
  # _@param_ `id`
18
18
  def find!: (Integer id) -> ::Hash[untyped, untyped]
@@ -11,6 +11,8 @@ module PgEventstore
11
11
  # The same as #find_all, but returns first result
12
12
  def find_by: (::Hash[untyped, untyped] attrs) -> ::Hash[untyped, untyped]?
13
13
 
14
+ def find_all_by_subscription_state: (name: String?, state: String) -> ::Array[::Hash[untyped, untyped]]
15
+
14
16
  # _@param_ `id`
15
17
  def find!: (Integer id) -> ::Hash[untyped, untyped]
16
18
 
@@ -5,6 +5,10 @@ module PgEventstore
5
5
  # _@param_ `set_name`
6
6
  def subscriptions_url: (?set_name: String?) -> String
7
7
 
8
+ def subscriptions_state_url: (state: String, **untyped params) -> String
9
+
10
+ def subscriptions_state: -> String?
11
+
8
12
  # _@param_ `set_id`
9
13
  #
10
14
  # _@param_ `id`
@@ -0,0 +1,21 @@
1
+ module PgEventstore
2
+ module Web
3
+ module Subscriptions
4
+ module WithState
5
+ class SetCollection
6
+ @state: String
7
+
8
+ attr_reader connection: PgEventstore::Connection
9
+
10
+ def initialize: (PgEventstore::Connection connection, state: String) -> void
11
+
12
+ def names: -> Array[String]
13
+
14
+ private
15
+
16
+ def subscription_queries: -> PgEventstore::SubscriptionQueries
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,23 @@
1
+ module PgEventstore
2
+ module Web
3
+ module Subscriptions
4
+ module WithState
5
+ class Subscriptions
6
+ @current_set: String?
7
+
8
+ @state: String
9
+
10
+ attr_reader connection: PgEventstore::Connection
11
+
12
+ def initialize: (PgEventstore::Connection connection, String? current_set, state: String) -> void
13
+
14
+ def subscriptions: -> Array[PgEventstore::Subscription]
15
+
16
+ private
17
+
18
+ def subscription_queries: -> PgEventstore::SubscriptionQueries
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
@@ -0,0 +1,23 @@
1
+ module PgEventstore
2
+ module Web
3
+ module Subscriptions
4
+ module WithState
5
+ class SubscriptionsSet
6
+ @current_set: String?
7
+
8
+ @state: String
9
+
10
+ attr_reader connection: PgEventstore::Connection
11
+
12
+ def initialize: (PgEventstore::Connection connection, String? current_set, state: String) -> untyped
13
+
14
+ def subscriptions_set: -> Array[PgEventstore::SubscriptionsSet]
15
+
16
+ private
17
+
18
+ def subscriptions_set_queries: -> PgEventstore::SubscriptionsSetQueries
19
+ end
20
+ end
21
+ end
22
+ end
23
+ end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: pg_eventstore
3
3
  version: !ruby/object:Gem::Version
4
- version: 1.2.0
4
+ version: 1.3.1
5
5
  platform: ruby
6
6
  authors:
7
7
  - Ivan Dzyzenko
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2024-07-29 00:00:00.000000000 Z
11
+ date: 2024-08-28 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: pg
@@ -42,16 +42,22 @@ dependencies:
42
42
  name: sinatra
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
- - - "~>"
45
+ - - ">="
46
+ - !ruby/object:Gem::Version
47
+ version: '3'
48
+ - - "<"
46
49
  - !ruby/object:Gem::Version
47
- version: '4.0'
50
+ version: '5'
48
51
  type: :runtime
49
52
  prerelease: false
50
53
  version_requirements: !ruby/object:Gem::Requirement
51
54
  requirements:
52
- - - "~>"
55
+ - - ">="
56
+ - !ruby/object:Gem::Version
57
+ version: '3'
58
+ - - "<"
53
59
  - !ruby/object:Gem::Version
54
- version: '4.0'
60
+ version: '5'
55
61
  description: EventStore implementation using PostgreSQL
56
62
  email:
57
63
  - ivan.dzyzenko@gmail.com
@@ -182,6 +188,9 @@ files:
182
188
  - lib/pg_eventstore/web/subscriptions/subscriptions.rb
183
189
  - lib/pg_eventstore/web/subscriptions/subscriptions_set.rb
184
190
  - lib/pg_eventstore/web/subscriptions/subscriptions_to_set_association.rb
191
+ - lib/pg_eventstore/web/subscriptions/with_state/set_collection.rb
192
+ - lib/pg_eventstore/web/subscriptions/with_state/subscriptions.rb
193
+ - lib/pg_eventstore/web/subscriptions/with_state/subscriptions_set.rb
185
194
  - lib/pg_eventstore/web/views/home/dashboard.erb
186
195
  - lib/pg_eventstore/web/views/home/partials/event_filter.erb
187
196
  - lib/pg_eventstore/web/views/home/partials/events.erb
@@ -278,6 +287,9 @@ files:
278
287
  - sig/pg_eventstore/web/subscriptions/subscriptions.rbs
279
288
  - sig/pg_eventstore/web/subscriptions/subscriptions_set.rbs
280
289
  - sig/pg_eventstore/web/subscriptions/subscriptions_to_set_association.rbs
290
+ - sig/pg_eventstore/web/subscriptions/with_state/set_collection.rbs
291
+ - sig/pg_eventstore/web/subscriptions/with_state/subscriptions.rbs
292
+ - sig/pg_eventstore/web/subscriptions/with_state/subscriptions_set.rbs
281
293
  homepage: https://github.com/yousty/pg_eventstore
282
294
  licenses:
283
295
  - MIT