Skip to content

Removed namespace option #17

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

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
16 changes: 2 additions & 14 deletions lib/fun_with_flags/ui/router.ex
Original file line number Diff line number Diff line change
Expand Up @@ -29,12 +29,6 @@ defmodule FunWithFlags.UI.Router do
plug :match
plug :dispatch

@doc false
def call(conn, opts) do
conn = extract_namespace(conn, opts)
super(conn, opts)
end


get "/" do
conn
Expand Down Expand Up @@ -273,7 +267,7 @@ defmodule FunWithFlags.UI.Router do


defp redirect_to(conn, uri) do
path = Path.join(conn.assigns[:namespace], uri)
path = Path.join(Templates.base_path(conn), uri)

conn
|> put_resp_header("location", path)
Expand All @@ -282,12 +276,6 @@ defmodule FunWithFlags.UI.Router do
end


defp extract_namespace(conn, opts) do
ns = opts[:namespace] || ""
Plug.Conn.assign(conn, :namespace, "/" <> ns)
end


defp assign_csrf_token(conn, _opts) do
csrf_token = Plug.CSRFProtection.get_csrf_token()
Plug.Conn.assign(conn, :csrf_token, csrf_token)
Expand All @@ -297,7 +285,7 @@ defmodule FunWithFlags.UI.Router do
# Custom CSRF protection plug. It wraps the default plug provided
# by `Plug`, it calls `Plug.Conn.fetch_session/1` (no-op if already
# fetched), and it bails out gracefully if no session is configured.
#
#
defp protect_from_forgery(conn, opts) do
try do
conn
Expand Down
10 changes: 9 additions & 1 deletion lib/fun_with_flags/ui/templates.ex
Original file line number Diff line number Diff line change
Expand Up @@ -72,6 +72,14 @@ defmodule FunWithFlags.UI.Templates do


def path(conn, path) do
Path.join(conn.assigns[:namespace], path)
Path.join(base_path(conn), path)
end


# https://github.com/thoughtbot/bamboo/blob/master/lib/bamboo/plug/sent_email_viewer/email_preview_plug.ex#L107
def base_path(%{script_name: []}), do: ""

def base_path(%{script_name: script_name}) do
"/" <> Enum.join(script_name, "/")
end
end
27 changes: 13 additions & 14 deletions test/fun_with_flags/ui/templates_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -12,8 +12,7 @@ defmodule FunWithFlags.UI.TemplatesTest do
end

setup do
conn = Plug.Conn.assign(%Plug.Conn{}, :namespace, "/pear")
conn = Plug.Conn.assign(conn, :csrf_token, Plug.CSRFProtection.get_csrf_token())
conn = Plug.Conn.assign(%Plug.Conn{}, :csrf_token, Plug.CSRFProtection.get_csrf_token())
{:ok, conn: conn}
end

Expand All @@ -27,7 +26,7 @@ defmodule FunWithFlags.UI.TemplatesTest do
test "it includes the right content", %{conn: conn} do
out = Templates._head(conn: conn, title: "Coconut")
assert String.contains?(out, "<title>FunWithFlags - Coconut</title>")
assert String.contains?(out, ~s{href="/pear/assets/style.css"})
assert String.contains?(out, ~s{href="/assets/style.css"})
end
end

Expand All @@ -49,9 +48,9 @@ defmodule FunWithFlags.UI.TemplatesTest do
test "it includes the right content", %{conn: conn, flags: flags} do
out = Templates.index(conn: conn, flags: flags)
assert String.contains?(out, "<title>FunWithFlags - List</title>")
assert String.contains?(out, ~s{<a href="/pear/new" class="btn btn-secondary">New Flag</a>})
assert String.contains?(out, ~s{<a href="/pear/flags/pineapple">pineapple</a>})
assert String.contains?(out, ~s{<a href="/pear/flags/papaya">papaya</a>})
assert String.contains?(out, ~s{<a href="/new" class="btn btn-secondary">New Flag</a>})
assert String.contains?(out, ~s{<a href="/flags/pineapple">pineapple</a>})
assert String.contains?(out, ~s{<a href="/flags/papaya">papaya</a>})
end
end

Expand All @@ -70,7 +69,7 @@ defmodule FunWithFlags.UI.TemplatesTest do
test "it includes the right content", %{conn: conn, flag: flag} do
out = Templates.details(conn: conn, flag: flag)
assert String.contains?(out, "<title>FunWithFlags - avocado</title>")
assert String.contains?(out, ~s{<a href="/pear/new" class="btn btn-secondary">New Flag</a>})
assert String.contains?(out, ~s{<a href="/new" class="btn btn-secondary">New Flag</a>})
assert String.contains?(out, "<h1>avocado</h1>")
end

Expand All @@ -82,10 +81,10 @@ defmodule FunWithFlags.UI.TemplatesTest do

test "it includes the global toggle, the new actor and new group forms, and the global delete form", %{conn: conn, flag: flag} do
out = Templates.details(conn: conn, flag: flag)
assert String.contains?(out, ~s{<form id="fwf-global-toggle-form" action="/pear/flags/avocado/boolean" method="post"})
assert String.contains?(out, ~s{<form id="fwf-new-actor-form" action="/pear/flags/avocado/actors" method="post"})
assert String.contains?(out, ~s{<form id="fwf-new-group-form" action="/pear/flags/avocado/groups" method="post"})
assert String.contains?(out, ~s{<form id="fwf-delete-flag-form" action="/pear/flags/avocado" method="post">})
assert String.contains?(out, ~s{<form id="fwf-global-toggle-form" action="/flags/avocado/boolean" method="post"})
assert String.contains?(out, ~s{<form id="fwf-new-actor-form" action="/flags/avocado/actors" method="post"})
assert String.contains?(out, ~s{<form id="fwf-new-group-form" action="/flags/avocado/groups" method="post"})
assert String.contains?(out, ~s{<form id="fwf-delete-flag-form" action="/flags/avocado" method="post">})
end

test "with no boolean gate, it includes both the enabled and disable boolean buttons", %{conn: conn, flag: flag} do
Expand Down Expand Up @@ -139,10 +138,10 @@ defmodule FunWithFlags.UI.TemplatesTest do
out = Templates.details(conn: conn, flag: flag)

assert String.contains?(out, ~s{<div id="actor_moss:123"})
assert String.contains?(out, ~s{<form action="/pear/flags/avocado/actors/moss:123" method="post"})
assert String.contains?(out, ~s{<form action="/flags/avocado/actors/moss:123" method="post"})

assert String.contains?(out, ~s{<div id="group_rocks"})
assert String.contains?(out, ~s{<form action="/pear/flags/avocado/groups/rocks" method="post"})
assert String.contains?(out, ~s{<form action="/flags/avocado/groups/rocks" method="post"})
end
end

Expand All @@ -156,7 +155,7 @@ defmodule FunWithFlags.UI.TemplatesTest do
test "it includes the right content", %{conn: conn} do
out = Templates.new(conn: conn)
assert String.contains?(out, "<title>FunWithFlags - New Flag</title>")
assert String.contains?(out, ~s{<form id="new-flag-form" action="/pear/flags" method="post">})
assert String.contains?(out, ~s{<form id="new-flag-form" action="/flags" method="post">})
end
end

Expand Down