Class: RubyEventStore::Specification
- Inherits:
-
Object
- Object
- RubyEventStore::Specification
- Defined in:
- lib/ruby_event_store/specification.rb
Overview
Used for building and executing the query specification.
Constant Summary collapse
- DEFAULT_BATCH_SIZE =
100
Instance Attribute Summary collapse
-
#result ⇒ Object
readonly
Returns the value of attribute result.
Instance Method Summary collapse
-
#as_at ⇒ Specification
Sets the order of time sorting using transaction time / Find out more.
-
#as_of ⇒ Specification
Sets the order of time sorting using validity time / Find out more.
-
#backward ⇒ Specification
Sets the order of reading events to descending (backward from the start).
-
#between(time_range) ⇒ Specification
Limits the query to events within given time range.
-
#count ⇒ Integer
Calculates the size of result set based on the specification build up to this point.
-
#each {|Event| ... } ⇒ Enumerator?
Executes the query based on the specification built up to this point.
-
#each_batch {|Array<Event>| ... } ⇒ Enumerator?
Executes the query based on the specification built up to this point.
-
#event(event_id) ⇒ Event?
Reads single event from repository.
-
#event!(event_id) ⇒ Event
Reads single existing event from repository.
-
#events(event_ids) {|Event| ... } ⇒ Enumerator
Reads all events of given ids from repository.
-
#first ⇒ Event?
Executes the query based on the specification built up to this point.
-
#forward ⇒ Specification
Sets the order of reading events to ascending (forward from the start).
-
#from(start) ⇒ Specification
Limits the query to events before or after another event.
-
#in_batches(batch_size = DEFAULT_BATCH_SIZE) ⇒ Specification
(also: #in_batches_of)
Specifies that events should be obtained in batches.
-
#initialize(reader, result = SpecificationResult.new) ⇒ Specification
constructor
private
A new instance of Specification.
-
#last ⇒ Event?
Executes the query based on the specification built up to this point.
-
#limit(count) ⇒ Specification
Limits the query to specified number of events.
-
#map(&block) ⇒ Array
Executes the query based on the specification built up to this point and maps the result using provided block.
-
#newer_than(time) ⇒ Specification
Limits the query to events that occurred after given time.
-
#newer_than_or_equal(time) ⇒ Specification
Limits the query to events that occurred on or after given time.
-
#of_type(*types) ⇒ Specification
(also: #of_types)
Limits the query to certain event type(s).
-
#older_than(time) ⇒ Specification
Limits the query to events that occurred before given time.
-
#older_than_or_equal(time) ⇒ Specification
Limits the query to events that occurred on or before given time.
-
#read_first ⇒ Specification
Specifies that only first event should be read.
-
#read_last ⇒ Specification
Specifies that only last event should be read.
-
#reduce(accumulator = nil, &block) ⇒ Object
Reduces the results of the query based on the specification built up to this point result using provided block.
-
#stream(stream_name) ⇒ Specification
Limits the query to certain stream.
-
#to(stop) ⇒ Specification
Limits the query to events before or after another event.
-
#to_a ⇒ Array<Event>
Executes the query based on the specification built up to this point.
-
#with_id(event_ids) ⇒ Specification
Limits the query to certain events by given even ids.
Constructor Details
#initialize(reader, result = SpecificationResult.new) ⇒ Specification
This method is part of a private API. You should avoid using this method if possible, as it may be removed or be changed in the future.
Returns a new instance of Specification.
10 11 12 13 |
# File 'lib/ruby_event_store/specification.rb', line 10 def initialize(reader, result = SpecificationResult.new) @reader = reader @result = result end |
Instance Attribute Details
#result ⇒ Object (readonly)
Returns the value of attribute result.
333 334 335 |
# File 'lib/ruby_event_store/specification.rb', line 333 def result @result end |
Instance Method Details
#as_at ⇒ Specification
Sets the order of time sorting using transaction time / Find out more
125 126 127 |
# File 'lib/ruby_event_store/specification.rb', line 125 def as_at Specification.new(reader, result.dup { |r| r.time_sort_by = :as_at }) end |
#as_of ⇒ Specification
Sets the order of time sorting using validity time / Find out more
133 134 135 |
# File 'lib/ruby_event_store/specification.rb', line 133 def as_of Specification.new(reader, result.dup { |r| r.time_sort_by = :as_of }) end |
#backward ⇒ Specification
Sets the order of reading events to descending (backward from the start). / Find out more.
149 150 151 |
# File 'lib/ruby_event_store/specification.rb', line 149 def backward Specification.new(reader, result.dup { |r| r.direction = :backward }) end |
#between(time_range) ⇒ Specification
Limits the query to events within given time range. / Find out more.
113 114 115 116 117 118 119 |
# File 'lib/ruby_event_store/specification.rb', line 113 def between(time_range) if time_range.exclude_end? newer_than_or_equal(time_range.first).older_than(time_range.last) else newer_than_or_equal(time_range.first).older_than_or_equal(time_range.last) end end |
#count ⇒ Integer
Calculates the size of result set based on the specification build up to this point. / Find out more.
212 213 214 |
# File 'lib/ruby_event_store/specification.rb', line 212 def count reader.count(result) end |
#each {|Event| ... } ⇒ Enumerator?
Executes the query based on the specification built up to this point. Yields events read from the store if block given. Otherwise, returns enumerable collection. / Find out more.
181 182 183 184 185 |
# File 'lib/ruby_event_store/specification.rb', line 181 def each return to_enum unless block_given? each_batch { |batch| batch.each { |event| yield event } } end |
#each_batch {|Array<Event>| ... } ⇒ Enumerator?
Executes the query based on the specification built up to this point. Yields each batch of records that was retrieved from the store. / Find out more.
169 170 171 172 173 |
# File 'lib/ruby_event_store/specification.rb', line 169 def each_batch return to_enum(:each_batch) unless block_given? reader.each(in_batches(result.batch_size).result) { |batch| yield batch } end |
#event(event_id) ⇒ Event?
Reads single event from repository. Returns the event with specified id or nil if event is not found in specified collection of events. / Find out more.
308 309 310 |
# File 'lib/ruby_event_store/specification.rb', line 308 def event(event_id) reader.one(read_first.with_id([event_id]).result) end |
#event!(event_id) ⇒ Event
Reads single existing event from repository. Returns the event with specified id or raises [EventNotFound] error if event is not found in specified collection of events. / Find out more.
318 319 320 |
# File 'lib/ruby_event_store/specification.rb', line 318 def event!(event_id) event(event_id) or raise EventNotFound.new(event_id) end |
#events(event_ids) {|Event| ... } ⇒ Enumerator
Reads all events of given ids from repository. Yields each event (found by id in specified collection of events) read from the store if block given. Otherwise, returns enumerable collection. / Find out more.
329 330 331 |
# File 'lib/ruby_event_store/specification.rb', line 329 def events(event_ids) with_id(event_ids).each end |
#first ⇒ Event?
Executes the query based on the specification built up to this point. Returns the first event in specified collection of events. / Find out more.
270 271 272 |
# File 'lib/ruby_event_store/specification.rb', line 270 def first reader.one(read_first.result) end |
#forward ⇒ Specification
Sets the order of reading events to ascending (forward from the start). / Find out more.
141 142 143 |
# File 'lib/ruby_event_store/specification.rb', line 141 def forward Specification.new(reader, result.dup { |r| r.direction = :forward }) end |
#from(start) ⇒ Specification
Limits the query to events before or after another event. / Find out more.
29 30 31 32 |
# File 'lib/ruby_event_store/specification.rb', line 29 def from(start) raise InvalidPageStart if start.nil? || start.empty? Specification.new(reader, result.dup { |r| r.start = start }) end |
#in_batches(batch_size = DEFAULT_BATCH_SIZE) ⇒ Specification Also known as: in_batches_of
Specifies that events should be obtained in batches. / Find out more.
Looping through a collection of events from the store can be inefficient since it will try to instantiate all the events at once.
In that case, batch processing methods allow you to work with the records in batches, thereby greatly reducing memory consumption.
238 239 240 241 242 243 244 245 246 |
# File 'lib/ruby_event_store/specification.rb', line 238 def in_batches(batch_size = DEFAULT_BATCH_SIZE) Specification.new( reader, result.dup do |r| r.read_as = :batch r.batch_size = batch_size end ) end |
#last ⇒ Event?
Executes the query based on the specification built up to this point. Returns the last event in specified collection of events. / Find out more.
279 280 281 |
# File 'lib/ruby_event_store/specification.rb', line 279 def last reader.one(read_last.result) end |
#limit(count) ⇒ Specification
Limits the query to specified number of events. / Find out more.
158 159 160 161 |
# File 'lib/ruby_event_store/specification.rb', line 158 def limit(count) raise InvalidPageSize unless count && count > 0 Specification.new(reader, result.dup { |r| r.count = count }) end |
#map(&block) ⇒ Array
Executes the query based on the specification built up to this point and maps the result using provided block. / Find out more.
192 193 194 195 |
# File 'lib/ruby_event_store/specification.rb', line 192 def map(&block) raise ArgumentError.new("Block must be given") unless block_given? each.map(&block) end |
#newer_than(time) ⇒ Specification
Limits the query to events that occurred after given time. / Find out more.
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/ruby_event_store/specification.rb', line 81 def newer_than(time) raise ArgumentError unless time.respond_to?(:to_time) Specification.new( reader, result.dup do |r| r.newer_than_or_equal = nil r.newer_than = time end ) end |
#newer_than_or_equal(time) ⇒ Specification
Limits the query to events that occurred on or after given time. / Find out more.
97 98 99 100 101 102 103 104 105 106 |
# File 'lib/ruby_event_store/specification.rb', line 97 def newer_than_or_equal(time) raise ArgumentError unless time.respond_to?(:to_time) Specification.new( reader, result.dup do |r| r.newer_than_or_equal = time r.newer_than = nil end ) end |
#of_type(*types) ⇒ Specification Also known as: of_types
Limits the query to certain event type(s). / Find out more.
288 289 290 |
# File 'lib/ruby_event_store/specification.rb', line 288 def of_type(*types) Specification.new(reader, result.dup { |r| r.with_types = types.flatten }) end |
#older_than(time) ⇒ Specification
Limits the query to events that occurred before given time. / Find out more.
49 50 51 52 53 54 55 56 57 58 |
# File 'lib/ruby_event_store/specification.rb', line 49 def older_than(time) raise ArgumentError unless time.respond_to?(:to_time) Specification.new( reader, result.dup do |r| r.older_than = time r.older_than_or_equal = nil end ) end |
#older_than_or_equal(time) ⇒ Specification
Limits the query to events that occurred on or before given time. / Find out more.
65 66 67 68 69 70 71 72 73 74 |
# File 'lib/ruby_event_store/specification.rb', line 65 def older_than_or_equal(time) raise ArgumentError unless time.respond_to?(:to_time) Specification.new( reader, result.dup do |r| r.older_than = nil r.older_than_or_equal = time end ) end |
#read_first ⇒ Specification
Specifies that only first event should be read. / Find out more.
253 254 255 |
# File 'lib/ruby_event_store/specification.rb', line 253 def read_first Specification.new(reader, result.dup { |r| r.read_as = :first }) end |
#read_last ⇒ Specification
Specifies that only last event should be read. / Find out more.
261 262 263 |
# File 'lib/ruby_event_store/specification.rb', line 261 def read_last Specification.new(reader, result.dup { |r| r.read_as = :last }) end |
#reduce(accumulator = nil, &block) ⇒ Object
Reduces the results of the query based on the specification built up to this point result using provided block. / Find out more.
203 204 205 206 |
# File 'lib/ruby_event_store/specification.rb', line 203 def reduce(accumulator = nil, &block) raise ArgumentError.new("Block must be given") unless block_given? each.reduce(accumulator, &block) end |
#stream(stream_name) ⇒ Specification
Limits the query to certain stream. / Find out more.
20 21 22 |
# File 'lib/ruby_event_store/specification.rb', line 20 def stream(stream_name) Specification.new(reader, result.dup { |r| r.stream = Stream.new(stream_name) }) end |
#to(stop) ⇒ Specification
Limits the query to events before or after another event. / Find out more.
39 40 41 42 |
# File 'lib/ruby_event_store/specification.rb', line 39 def to(stop) raise InvalidPageStop if stop.nil? || stop.empty? Specification.new(reader, result.dup { |r| r.stop = stop }) end |
#to_a ⇒ Array<Event>
Executes the query based on the specification built up to this point. Returns array of domain events. / Find out more.
221 222 223 |
# File 'lib/ruby_event_store/specification.rb', line 221 def to_a each.to_a end |
#with_id(event_ids) ⇒ Specification
Limits the query to certain events by given even ids. / Find out more.
298 299 300 |
# File 'lib/ruby_event_store/specification.rb', line 298 def with_id(event_ids) Specification.new(reader, result.dup { |r| r.with_ids = event_ids }) end |