Current section

Files

Jump to
shopifex lib shopifex plug fetch_flash.ex
Raw

lib/shopifex/plug/fetch_flash.ex

defmodule Shopifex.Plug.FetchFlash do
import Plug.Conn
@moduledoc """
Fetches the flash in a way which maintains the session within Shopify iFrame
"""
def init(options) do
# initialize options
options
end
def call(conn, _) do
session_flash = Plug.Conn.get_session(conn, "phoenix_flash")
conn = persist_flash(conn, session_flash || %{})
register_before_send(conn, fn conn ->
flash = conn.private.phoenix_flash
flash_size = map_size(flash)
cond do
is_nil(session_flash) and flash_size == 0 ->
conn
flash_size > 0 and conn.status in 300..308 ->
Plug.Conn.put_session(conn, "phoenix_flash", flash)
flash_size > 0 and conn.status in 200..299 ->
flash = Map.take(flash, ["shop_url", "shop"])
Plug.Conn.put_session(conn, "phoenix_flash", flash)
true ->
Plug.Conn.delete_session(conn, "phoenix_flash")
end
end)
end
defp persist_flash(conn, value) do
Plug.Conn.put_private(conn, :phoenix_flash, value)
end
end