class EventStore::Stream

Public Class Methods

new(url) click to toggle source
# File lib/eventstore/client.rb, line 78
def initialize url
  @page_url = url
  @id_pointer = url
end

Public Instance Methods

events() click to toggle source
# File lib/eventstore/client.rb, line 82
def events
  event_from 0
end
events_from(event_id, direction=:newer) click to toggle source
# File lib/eventstore/client.rb, line 85
def events_from event_id, direction=:newer
  if event_id.is_a?(Fixnum)
    event_id = "#{@page_url}/#{event_id}"
  end
  if direction == :newer
    @id_pointer = "#{event_id}/forward/20"
  else
    @id_pointer = "#{event_id}/backward/20"
  end
  Enumerator.new do |yielder|
    while @id_pointer
      feed_data = feed_data_from_pointer
      break if feed_data.chomp == ""
      feed = Feedjira::Feed.parse feed_data
      entries = feed.entries
      if direction == :newer
        entries = entries.reverse
      end
      entries.each do |entry|
        yielder << { body: fetch_event_body(entry.url),
          type: entry.summary,
          updated: entry.updated,
          id: entry.id
        }
      end
      @id_pointer = entries.length == 0 ? nil : feed.send(direction)
    end
  end
end

Private Instance Methods

feed_data() click to toggle source
# File lib/eventstore/client.rb, line 115
def feed_data
  self.class.get(@page_url).body
end
feed_data_from_pointer() click to toggle source
# File lib/eventstore/client.rb, line 118
def feed_data_from_pointer
  self.class.get(@id_pointer).body
end
fetch_event_body(url) click to toggle source
# File lib/eventstore/client.rb, line 121
def fetch_event_body url
  JSON.load(
    self.class.get(url, {
      headers: { 'Accept' => 'application/json' }}
    ).body
  )
end