Current section
Files
Jump to
Current section
Files
lib/perspective/event_chain/reader/reader.ex
defmodule Perspective.EventChain.Reader do
def since(nil) do
all()
end
def since(target_id) do
{:ok, should_drop?} = Agent.start_link(fn -> true end)
result =
Stream.drop_while(all(), fn %{id: id} ->
drop_this_item? = Agent.get(should_drop?, fn result -> result end)
if target_id == id do
Agent.update(should_drop?, fn _ -> false end)
end
drop_this_item?
end)
Process.exit(should_drop?, :normal)
result
end
def all do
manifest_pages()
|> read_pages
|> convert_to_events
end
defp manifest_pages do
Perspective.EventChain.PageManifest.pages()
end
defp read_pages(pages) do
Stream.map(pages, fn page ->
page
|> Perspective.StorageConfig.path()
|> Perspective.LoadLocalFile.load()
end)
end
def convert_to_events(binaries) do
Stream.flat_map(binaries, fn binary ->
Perspective.Deserialize.deserialize(binary)
end)
end
end