Skip to content

Commit

Permalink
add shared handle_info callbacks PR feedback
Browse files Browse the repository at this point in the history
  • Loading branch information
ddink committed Sep 11, 2024
1 parent 44ecc04 commit 837458b
Showing 1 changed file with 8 additions and 34 deletions.
42 changes: 8 additions & 34 deletions lib/beacon/content.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3944,48 +3944,27 @@ defmodule Beacon.Content do
@doc type: :info_handlers
@spec create_info_handler(map()) :: {:ok, InfoHandler.t()} | {:error, Changeset.t()}
def create_info_handler(attrs) do
msg = retrieve_msg(attrs)

changeset =
%InfoHandler{}
|> InfoHandler.changeset(attrs)
|> validate_info_handler(msg)

changeset = InfoHandler.changeset(%InfoHandler{}, attrs)
site = Changeset.get_field(changeset, :site)

changeset
|> validate_info_handler()
|> repo(site).insert()
|> tap(&maybe_broadcast_updated_content_event(&1, :info_handler))
end

@spec validate_info_handler(Changeset.t(), [String.t()], [String.t()]) :: Changeset.t()
defp validate_info_handler(changeset, msg, imports \\ []) do
@spec validate_info_handler(Changeset.t(), [String.t()]) :: Changeset.t()
defp validate_info_handler(changeset, imports \\ []) do
code = Changeset.get_field(changeset, :code)
msg = Changeset.get_field(changeset, :msg)
site = Changeset.get_field(changeset, :site)
metadata = %Beacon.Template.LoadMetadata{site: site}
var = ["socket"] ++ msg
var = ["socket", msg]
imports = ["Phoenix.LiveView"] ++ imports

do_validate_template(changeset, :code, :elixir, code, metadata, var, imports)
end

@spec retrieve_msg(map(), InfoHandler.t()) :: [String.t()]
defp retrieve_msg(attrs, info_handler \\ %{}) do
case Map.get(attrs, :msg) do
nil ->
case Map.get(attrs, "msg") do
nil ->
[Map.get(info_handler, :msg)]

msg ->
[msg]
end

msg ->
[msg]
end
end

@doc """
Creates a info handler, raising an error if unsuccessful.
Expand Down Expand Up @@ -4074,16 +4053,11 @@ defmodule Beacon.Content do
@doc type: :info_handlers
@spec update_info_handler(InfoHandler.t(), map()) :: {:ok, InfoHandler.t()}
def update_info_handler(%InfoHandler{} = info_handler, attrs) do
msg = retrieve_msg(attrs, info_handler)

changeset =
info_handler
|> InfoHandler.changeset(attrs)
|> validate_info_handler(msg, ["Phoenix.Component"])

changeset = InfoHandler.changeset(info_handler, attrs)
site = Changeset.get_field(changeset, :site)

changeset
|> validate_info_handler(["Phoenix.Component"])
|> repo(site).update()
|> tap(&maybe_broadcast_updated_content_event(&1, :info_handler))
end
Expand Down

0 comments on commit 837458b

Please sign in to comment.