Class: PgEventstore::Web::Paginator::StreamContextsCollection
- Inherits:
-
BaseCollection
- Object
- BaseCollection
- PgEventstore::Web::Paginator::StreamContextsCollection
- Defined in:
- lib/pg_eventstore/web/paginator/stream_contexts_collection.rb,
sig/pg_eventstore/web/paginator/stream_contexts_collection.rbs
Constant Summary collapse
- PER_PAGE =
10
Constants inherited from BaseCollection
BaseCollection::MIN_QUERY_SIZE_FOR_ADVANCE_SEARCH
Instance Attribute Summary
Attributes inherited from BaseCollection
#config_name, #options, #order, #per_page, #starting_id
Instance Method Summary collapse
- #collection ⇒ Array<Hash<String => String>>
- #compute_context_filter(builder) ⇒ void
- #direction_operator ⇒ String
- #next_page_starting_id ⇒ String?
Methods inherited from BaseCollection
#connection, #count, #initialize, #prev_page_starting_id, #total_count
Constructor Details
This class inherits a constructor from PgEventstore::Web::Paginator::BaseCollection
Instance Method Details
#collection ⇒ Array<Hash<String => String>>
11 12 13 14 15 16 17 18 19 20 21 22 23 |
# File 'lib/pg_eventstore/web/paginator/stream_contexts_collection.rb', line 11 def collection @collection ||= begin sql_builder = SQLBuilder.new.select('context').from('partitions') sql_builder.where('stream_name is null and event_type is null') sql_builder.where("context #{direction_operator} ?", starting_id) if starting_id compute_context_filter(sql_builder) sql_builder.limit(per_page).order("context #{order}") connection.with do |conn| conn.exec_params(*sql_builder.to_exec_params) end.to_a end end |
#compute_context_filter(builder) ⇒ void
This method returns an undefined value.
50 51 52 53 54 55 56 57 |
# File 'lib/pg_eventstore/web/paginator/stream_contexts_collection.rb', line 50 def compute_context_filter(builder) query = [:query].to_s if query.size < MIN_QUERY_SIZE_FOR_ADVANCE_SEARCH builder.where('context like ?', "#{query}%") else builder.where('context ilike ?', "%#{query}%") end end |
#direction_operator ⇒ String
44 45 46 |
# File 'lib/pg_eventstore/web/paginator/stream_contexts_collection.rb', line 44 def direction_operator order == :asc ? '>=' : '<=' end |
#next_page_starting_id ⇒ String?
26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/pg_eventstore/web/paginator/stream_contexts_collection.rb', line 26 def next_page_starting_id return unless collection.size == per_page starting_id = collection.first['context'] sql_builder = SQLBuilder.new.select('context').from('partitions') sql_builder.where('stream_name is null and event_type is null') sql_builder.where("context #{direction_operator} ?", starting_id) compute_context_filter(sql_builder) sql_builder.limit(1).offset(per_page).order("context #{order}") connection.with do |conn| conn.exec_params(*sql_builder.to_exec_params) end.to_a.dig(0, 'context') end |