Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
61 changes: 61 additions & 0 deletions lib/ex_closeio/resources/event.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,61 @@
defmodule ExCloseio.Event do
@moduledoc """
Event handles communication with the event related
methods of the Close.io API.

See https://developer.close.io/#event-log
"""

import ExCloseio.Base
@url_part "/event/"

def get_page(params, api_key \\ :global) do
get(@url_part, api_key, params)
end

def get_events(params, api_key \\ :global) do
case get_page(params, api_key) do
{:ok, page} -> page["data"]
other -> other
end
end

def get_all_pages(params, api_key \\ :global) do
{:ok, first_page} = get_page(params, api_key)
get_all_pages_r([first_page], params, api_key)
end

def get_all_events(params, api_key \\ :global) do
pages = get_all_pages(params, api_key)
Enum.reduce(pages, [], fn(page, events) -> events ++ page["data"] end)
end

defp get_all_pages_r(pages, params, api_key \\ :global) do
current_page = List.last(pages)
case get_next_page(current_page, params, api_key) do
{:ok, next_page} -> get_all_pages_r(pages ++ [next_page], params, api_key)
nil -> pages
end
end

def get_next_page(page, params, api_key \\ :global)
def get_next_page(%{"cursor_next" => nil}, _params, _api_key) do
nil
end
def get_next_page(%{"cursor_next" => cursor}, params, api_key) do
get_page(Map.put(params, :_cursor, cursor), api_key)
end

def get_prev_page(page, params, api_key \\ :global)
def get_prev_page(%{"cursor_previous" => nil}, _params, _api_key) do
nil
end
def get_prev_page(%{"cursor_previous" => cursor}, params, api_key) do
get_page(Map.put(params, :_cursor, cursor), api_key)
end

def find(id, api_key \\ :global) do
get(@url_part <> id, api_key)
end

end
10 changes: 10 additions & 0 deletions test/ex_closeio_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -38,4 +38,14 @@ defmodule ExCloseioTest do
assert lead.id, lead_id
end

test "get events" do
ExCloseio.Event.get_events(%{object_type: "lead", action: "deleted"})
# If it didn't explode, it works.
end

test "get all events" do
ExCloseio.Event.get_all_events(%{})
# If it didn't explode, it works.
end

end