Skip to content

Commit

Permalink
make options list always from predefined value
Browse files Browse the repository at this point in the history
  • Loading branch information
izelnakri committed May 30, 2021
1 parent aa9fea2 commit d27007f
Show file tree
Hide file tree
Showing 2 changed files with 38 additions and 99 deletions.
68 changes: 23 additions & 45 deletions lib/paper_trail.ex
Original file line number Diff line number Diff line change
Expand Up @@ -16,24 +16,26 @@ defmodule PaperTrail do
defdelegate get_item_type(data), to: Serializer
defdelegate get_model_id(model), to: Serializer

@default_transaction_options [
origin: nil,
meta: nil,
originator: nil,
prefix: nil,
model_key: :model,
version_key: :version,
ecto_options: []
]

@doc """
Inserts a record to the database with a related version insertion in one transaction
"""
@spec insert(changeset :: Ecto.Changeset.t(model), options :: Keyword.t()) ::
@spec insert(
changeset :: Ecto.Changeset.t(model),
options :: Keyword.t()
) ::
{:ok, %{model: model, version: Version.t()}} | {:error, Ecto.Changeset.t(model) | term}
when model: struct
def insert(
changeset,
options \\ [
origin: nil,
meta: nil,
originator: nil,
prefix: nil,
model_key: :model,
version_key: :version,
ecto_options: []
]
) do
def insert(changeset, options \\ @default_transaction_options) do
PaperTrail.Multi.new()
|> PaperTrail.Multi.insert(changeset, options)
|> PaperTrail.Multi.commit()
Expand All @@ -44,18 +46,7 @@ defmodule PaperTrail do
"""
@spec insert!(changeset :: Ecto.Changeset.t(model), options :: Keyword.t()) :: model
when model: struct
def insert!(
changeset,
options \\ [
origin: nil,
meta: nil,
originator: nil,
prefix: nil,
model_key: :model,
version_key: :version,
ecto_options: []
]
) do
def insert!(changeset, options \\ @default_transaction_options) do
changeset
|> insert(options)
|> model_or_error(:insert)
Expand All @@ -67,10 +58,7 @@ defmodule PaperTrail do
@spec insert_or_update(changeset :: Ecto.Changeset.t(model), options :: Keyword.t()) ::
{:ok, %{model: model, version: Version.t()}} | {:error, Ecto.Changeset.t(model) | term}
when model: struct
def insert_or_update(
changeset,
options \\ [origin: nil, meta: nil, originator: nil, prefix: nil]
) do
def insert_or_update(changeset, options \\ @default_transaction_options) do
PaperTrail.Multi.new()
|> PaperTrail.Multi.insert_or_update(changeset, options)
|> PaperTrail.Multi.commit()
Expand All @@ -81,10 +69,7 @@ defmodule PaperTrail do
"""
@spec insert_or_update!(changeset :: Ecto.Changeset.t(model), options :: Keyword.t()) :: model
when model: struct
def insert_or_update!(
changeset,
options \\ [origin: nil, meta: nil, originator: nil, prefix: nil]
) do
def insert_or_update!(changeset, options \\ @default_transaction_options) do
changeset
|> insert_or_update(options)
|> model_or_error(:insert_or_update)
Expand All @@ -96,7 +81,7 @@ defmodule PaperTrail do
@spec update(changeset :: Ecto.Changeset.t(model), options :: Keyword.t()) ::
{:ok, %{model: model, version: Version.t()}} | {:error, Ecto.Changeset.t(model) | term}
when model: struct
def update(changeset, options \\ [origin: nil, meta: nil, originator: nil, prefix: nil]) do
def update(changeset, options \\ @default_transaction_options) do
PaperTrail.Multi.new()
|> PaperTrail.Multi.update(changeset, options)
|> PaperTrail.Multi.commit()
Expand All @@ -107,7 +92,7 @@ defmodule PaperTrail do
"""
@spec update!(changeset :: Ecto.Changeset.t(model), options :: Keyword.t()) :: model
when model: struct
def update!(changeset, options \\ [origin: nil, meta: nil, originator: nil, prefix: nil]) do
def update!(changeset, options \\ @default_transaction_options) do
changeset
|> update(options)
|> model_or_error(:update)
Expand All @@ -119,10 +104,7 @@ defmodule PaperTrail do
@spec delete(model_or_changeset :: model | Ecto.Changeset.t(model), options :: Keyword.t()) ::
{:ok, %{model: model, version: Version.t()}} | {:error, Ecto.Changeset.t(model) | term}
when model: struct
def delete(
model_or_changeset,
options \\ [origin: nil, meta: nil, originator: nil, prefix: nil]
) do
def delete(model_or_changeset, options \\ @default_transaction_options) do
PaperTrail.Multi.new()
|> PaperTrail.Multi.delete(model_or_changeset, options)
|> PaperTrail.Multi.commit()
Expand All @@ -134,10 +116,7 @@ defmodule PaperTrail do
@spec delete!(model_or_changeset :: model | Ecto.Changeset.t(model), options :: Keyword.t()) ::
model
when model: struct
def delete!(
model_or_changeset,
options \\ [origin: nil, meta: nil, originator: nil, prefix: nil]
) do
def delete!(model_or_changeset, options \\ @default_transaction_options) do
model_or_changeset
|> delete(options)
|> model_or_error(:delete)
Expand All @@ -156,8 +135,7 @@ defmodule PaperTrail do
@spec model_or_error(
result :: {:error, reason :: term},
action :: :insert | :insert_or_update | :update | :delete
) ::
no_return
) :: no_return
defp model_or_error({:error, %Ecto.Changeset{} = changeset}, action) do
raise Ecto.InvalidChangesetError, action: action, changeset: changeset
end
Expand Down
69 changes: 15 additions & 54 deletions lib/paper_trail/multi.ex
Original file line number Diff line number Diff line change
Expand Up @@ -22,20 +22,18 @@ defmodule PaperTrail.Multi do
defdelegate get_item_type(data), to: Serializer
defdelegate get_model_id(model), to: Serializer

def insert(
%Ecto.Multi{} = multi,
changeset,
options \\ [
origin: nil,
meta: nil,
originator: nil,
prefix: nil,
model_key: :model,
version_key: :version,
initial_version_key: :initial_version,
ecto_options: []
]
) do
@default_transaction_options [
origin: nil,
meta: nil,
originator: nil,
prefix: nil,
model_key: :model,
version_key: :version,
initial_version_key: :initial_version,
ecto_options: []
]

def insert(%Ecto.Multi{} = multi, changeset, options \\ @default_transaction_options) do
model_key = options[:model_key] || :model
version_key = options[:version_key] || :version
initial_version_key = options[:initial_version_key] || :initial_version
Expand Down Expand Up @@ -88,20 +86,7 @@ defmodule PaperTrail.Multi do
end
end

def update(
%Ecto.Multi{} = multi,
changeset,
options \\ [
origin: nil,
meta: nil,
originator: nil,
prefix: nil,
model_key: :model,
version_key: :version,
initial_version_key: :initial_version,
ecto_options: []
]
) do
def update(%Ecto.Multi{} = multi, changeset, options \\ @default_transaction_options) do
model_key = options[:model_key] || :model
version_key = options[:version_key] || :version
initial_version_key = options[:initial_version_key] || :initial_version
Expand Down Expand Up @@ -149,19 +134,7 @@ defmodule PaperTrail.Multi do
end
end

def insert_or_update(
%Ecto.Multi{} = multi,
changeset,
options \\ [
origin: nil,
meta: nil,
originator: nil,
prefix: nil,
model_key: :model,
version_key: :version,
ecto_options: []
]
) do
def insert_or_update(%Ecto.Multi{} = multi, changeset, options \\ @default_transaction_options) do
case get_state(changeset) do
:built ->
insert(multi, changeset, options)
Expand All @@ -176,19 +149,7 @@ defmodule PaperTrail.Multi do
end
end

def delete(
%Ecto.Multi{} = multi,
struct,
options \\ [
origin: nil,
meta: nil,
originator: nil,
prefix: nil,
model_key: :model,
version_key: :version,
ecto_options: []
]
) do
def delete(%Ecto.Multi{} = multi, struct, options \\ @default_transaction_options) do
model_key = options[:model_key] || :model
version_key = options[:version_key] || :version
ecto_options = options[:ecto_options] || []
Expand Down

0 comments on commit d27007f

Please sign in to comment.