Class: RubyEventStore::Browser::Stream
- Inherits:
-
Object
- Object
- RubyEventStore::Browser::Stream
- Defined in:
- lib/ruby_event_store/browser/stream.rb
Constant Summary collapse
- HEAD =
Object.new
Instance Attribute Summary collapse
-
#event_store ⇒ Object
readonly
Returns the value of attribute event_store.
-
#params ⇒ Object
readonly
Returns the value of attribute params.
-
#url_builder ⇒ Object
readonly
Returns the value of attribute url_builder.
Instance Method Summary collapse
- #as_json ⇒ Object
- #count ⇒ Object
- #direction ⇒ Object
- #events ⇒ Object
- #events_backward(position) ⇒ Object
- #events_forward(position) ⇒ Object
- #first_page_link ⇒ Object
-
#initialize(event_store:, params:, url_builder:) ⇒ Stream
constructor
A new instance of Stream.
- #last_page_link ⇒ Object
- #links ⇒ Object
- #next_event? ⇒ Boolean
- #next_page_link(event_id) ⇒ Object
- #position ⇒ Object
- #prev_event? ⇒ Boolean
- #prev_page_link(event_id) ⇒ Object
- #stream_name ⇒ Object
Constructor Details
#initialize(event_store:, params:, url_builder:) ⇒ Stream
Returns a new instance of Stream.
8 9 10 11 12 |
# File 'lib/ruby_event_store/browser/stream.rb', line 8 def initialize(event_store:, params:, url_builder:) @event_store = event_store @params = params @url_builder = url_builder end |
Instance Attribute Details
#event_store ⇒ Object (readonly)
Returns the value of attribute event_store.
6 7 8 |
# File 'lib/ruby_event_store/browser/stream.rb', line 6 def event_store @event_store end |
#params ⇒ Object (readonly)
Returns the value of attribute params.
6 7 8 |
# File 'lib/ruby_event_store/browser/stream.rb', line 6 def params @params end |
#url_builder ⇒ Object (readonly)
Returns the value of attribute url_builder.
6 7 8 |
# File 'lib/ruby_event_store/browser/stream.rb', line 6 def url_builder @url_builder end |
Instance Method Details
#as_json ⇒ Object
14 15 16 17 18 19 |
# File 'lib/ruby_event_store/browser/stream.rb', line 14 def as_json { data: events.map { |e| JsonApiEvent.new(e).to_h }, links: links } end |
#count ⇒ Object
84 85 86 |
# File 'lib/ruby_event_store/browser/stream.rb', line 84 def count Integer(params.fetch(:count, PAGE_SIZE)) end |
#direction ⇒ Object
88 89 90 91 92 93 94 95 |
# File 'lib/ruby_event_store/browser/stream.rb', line 88 def direction case params[:direction] when 'forward' :forward else :backward end end |
#events ⇒ Object
21 22 23 24 25 26 27 28 |
# File 'lib/ruby_event_store/browser/stream.rb', line 21 def events @events ||= case direction when :forward events_forward(position).reverse when :backward events_backward(position) end end |
#events_backward(position) ⇒ Object
51 52 53 54 55 56 |
# File 'lib/ruby_event_store/browser/stream.rb', line 51 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) ⇒ Object
44 45 46 47 48 49 |
# File 'lib/ruby_event_store/browser/stream.rb', line 44 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 ⇒ Object
76 77 78 |
# File 'lib/ruby_event_store/browser/stream.rb', line 76 def first_page_link url_builder.call(id: stream_name, position: :head, direction: :backward, count: count) end |
#last_page_link ⇒ Object
80 81 82 |
# File 'lib/ruby_event_store/browser/stream.rb', line 80 def last_page_link url_builder.call(id: stream_name, position: :head, direction: :forward, count: count) end |
#links ⇒ Object
30 31 32 33 34 35 36 37 38 39 40 41 42 |
# File 'lib/ruby_event_store/browser/stream.rb', line 30 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? ⇒ Boolean
58 59 60 61 |
# File 'lib/ruby_event_store/browser/stream.rb', line 58 def next_event? return if events.empty? events_backward(events.last.event_id).any? end |
#next_page_link(event_id) ⇒ Object
72 73 74 |
# File 'lib/ruby_event_store/browser/stream.rb', line 72 def next_page_link(event_id) url_builder.call(id: stream_name, position: event_id, direction: :backward, count: count) end |
#position ⇒ Object
97 98 99 100 101 102 103 104 |
# File 'lib/ruby_event_store/browser/stream.rb', line 97 def position case params[:position] when 'head', nil HEAD else params.fetch(:position) end end |
#prev_event? ⇒ Boolean
63 64 65 66 |
# File 'lib/ruby_event_store/browser/stream.rb', line 63 def prev_event? return if events.empty? events_forward(events.first.event_id).any? end |
#prev_page_link(event_id) ⇒ Object
68 69 70 |
# File 'lib/ruby_event_store/browser/stream.rb', line 68 def prev_page_link(event_id) url_builder.call(id: stream_name, position: event_id, direction: :forward, count: count) end |
#stream_name ⇒ Object
106 107 108 |
# File 'lib/ruby_event_store/browser/stream.rb', line 106 def stream_name params.fetch(:id) end |