pg_eventstore 1.2.0 → 1.3.1

Sign up to get free protection for your applications and to get access to all the features.
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