Skip to content

Commit

Permalink
smarter insert tracking now support models which has belongs to
Browse files Browse the repository at this point in the history
  • Loading branch information
izelnakri committed Jul 16, 2016
1 parent 6875067 commit b3c2a24
Showing 1 changed file with 20 additions and 12 deletions.
32 changes: 20 additions & 12 deletions lib/paper_trail.ex
Original file line number Diff line number Diff line change
Expand Up @@ -45,16 +45,34 @@ defmodule PaperTrail do
@doc """
Inserts a record to the database with a related version insertion in one transaction
"""
def insert(struct, meta \\ nil) do
def insert(changeset, meta \\ nil) do
Multi.new
|> Multi.insert(:model, struct)
|> Multi.insert(:model, changeset)
|> Multi.run(:version, fn %{model: model} ->
version = make_version_struct(%{event: "create"}, model, meta)
Repo.insert(version)
end)
|> Repo.transaction
end

def make_version_struct(%{event: "create"}, model, meta) do
IO.puts "make_version_struct called"
filter_item_changes(model) |> inspect |> IO.puts
%Version{
event: "create",
item_type: model.__struct__ |> Module.split |> List.last,
item_id: model.id,
item_changes: filter_item_changes(model),
meta: meta
}
end

def filter_item_changes(model) do
relationships = model.__struct__.__schema__(:associations)

Map.drop(model, [:__struct__, :__meta__] ++ relationships)
end

# might make the changeset version

@doc """
Expand Down Expand Up @@ -83,16 +101,6 @@ defmodule PaperTrail do
|> Repo.transaction
end

defp make_version_struct(%{event: "create"}, model, meta) do
%Version{
event: "create",
item_type: model.__struct__ |> Module.split |> List.last,
item_id: model.id,
item_changes: Map.drop(model, [:__struct__, :__meta__]),
meta: meta
}
end

defp make_version_struct(%{event: "update"}, changeset, meta) do
%Version{
event: "update",
Expand Down

0 comments on commit b3c2a24

Please sign in to comment.