class RubyEventStore::Browser::GetEventsFromStream
Constants
- HEAD
Attributes
event_store[R]
params[R]
routing[R]
Public Class Methods
new(event_store:, params:, routing:)
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 10 def initialize(event_store:, params:, routing:) @event_store = event_store @params = params @routing = routing end
Public Instance Methods
as_json()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 16 def as_json { data: events.map { |e| JsonApiEvent.new(e, nil).to_h }, links: links } end
count()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 86 def count Integer(pagination_param[:count] || PAGE_SIZE) end
direction()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 90 def direction case pagination_param[:direction] when "forward" :forward else :backward end end
events()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 23 def events @events ||= case direction when :forward events_forward(position).reverse when :backward events_backward(position) end end
events_backward(position)
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 53 def events_backward(position) spec = event_store.read.limit(count).backward spec = spec.stream(stream_name) unless stream_name.eql?(SERIALIZED_GLOBAL_STREAM_NAME) spec = spec.from(position) unless position.equal?(HEAD) spec.to_a end
events_forward(position)
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 46 def events_forward(position) spec = event_store.read.limit(count) spec = spec.stream(stream_name) unless stream_name.eql?(SERIALIZED_GLOBAL_STREAM_NAME) spec = spec.from(position) unless position.equal?(HEAD) spec.to_a end
first_page_link()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 78 def first_page_link routing.paginated_events_from_stream_url(id: stream_name, position: :head, direction: :backward, count: count) end
last_page_link()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 82 def last_page_link routing.paginated_events_from_stream_url(id: stream_name, position: :head, direction: :forward, count: count) end
links()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 32 def links @links ||= {}.tap do |h| if prev_event? h[:prev] = prev_page_link(events.first.event_id) h[:first] = first_page_link end if next_event? h[:next] = next_page_link(events.last.event_id) h[:last] = last_page_link end end end
next_event?()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 60 def next_event? return if events.empty? events_backward(events.last.event_id).any? end
next_page_link(event_id)
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 74 def next_page_link(event_id) routing.paginated_events_from_stream_url(id: stream_name, position: event_id, direction: :backward, count: count) end
pagination_param()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 112 def pagination_param params[:page] || {} end
position()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 99 def position case pagination_param[:position] when "head", nil HEAD else pagination_param.fetch(:position) end end
prev_event?()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 65 def prev_event? return if events.empty? events_forward(events.first.event_id).any? end
prev_page_link(event_id)
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 70 def prev_page_link(event_id) routing.paginated_events_from_stream_url(id: stream_name, position: event_id, direction: :forward, count: count) end
stream_name()
click to toggle source
# File lib/ruby_event_store/browser/get_events_from_stream.rb, line 108 def stream_name params.fetch(:id) end