Skip to content
This repository was archived by the owner on Dec 8, 2020. It is now read-only.

Adds to_event support for arbitrary structs #351

Open
wants to merge 1 commit into
base: master
Choose a base branch
from
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
17 changes: 17 additions & 0 deletions lib/timber/eventable.ex
Original file line number Diff line number Diff line change
Expand Up @@ -49,6 +49,8 @@ defimpl Timber.Eventable, for: Map do
end

defimpl Timber.Eventable, for: Any do
@upper_word_regex ~r/(^[A-Z]+$)|[A-Z][a-z0-9]*/

def to_event(%{__exception__: true} = error) do
message = Exception.message(error)
module_name = Timber.Utils.Module.name(error.__struct__)
Expand All @@ -60,4 +62,19 @@ defimpl Timber.Eventable, for: Any do
}
}
end

def to_event(%{__struct__: module} = struct) do
event_data = struct |> Map.from_struct()

event_namespace =
module
|> Module.split()
|> List.last()
|> String.split(@upper_word_regex, trim: true, include_captures: true)
|> Stream.map(&String.downcase/1)
|> Enum.join("_")
|> String.to_atom()

Map.new([{event_namespace, event_data}])
end
end
11 changes: 10 additions & 1 deletion test/lib/timber/eventable_test.exs
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
defmodule Timber.EventableTest do
use Timber.TestCase

alias Timber.Eventable
alias Timber.{Eventable, TestStruct}

describe "Timber.Eventable.to_event/1" do
test "map with a single root key" do
Expand Down Expand Up @@ -31,5 +31,14 @@ defmodule Timber.EventableTest do
}
}
end

test "struct" do
struct = %TestStruct{}
event = Eventable.to_event(struct)

assert event == %{
test_struct: %{life: 42}
}
end
end
end
4 changes: 4 additions & 0 deletions test/support/test_struct.ex
Original file line number Diff line number Diff line change
@@ -0,0 +1,4 @@
defmodule Timber.TestStruct do
@moduledoc false
defstruct life: 42
end