Skip to content

Commit 4d378f6

Browse files
committed
change the web layer according to previous refactoring add template to render the chunk
1 parent ca61d2b commit 4d378f6

File tree

4 files changed

+46
-32
lines changed

4 files changed

+46
-32
lines changed

lib/diff_web/controllers/page_controller.ex

Lines changed: 20 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -28,18 +28,13 @@ defmodule DiffWeb.PageController do
2828
end
2929
end
3030

31-
def expand_context(conn, %{"file_name" => file_name} = params) do
32-
%{
33-
"version" => version,
34-
"package" => package,
35-
"from_line" => from_line,
36-
"direction" => direction
37-
} = params
38-
39-
case parse_version(version) do
31+
def expand_context(conn, %{"file_name" => _file_name} = params) do
32+
case parse_version(params["version"]) do
4033
{:ok, version} ->
4134
version = to_string(version)
42-
do_expand_context(conn, package, version, file_name, from_line, direction)
35+
params = Map.update!(params, "version", fn _ -> version end)
36+
37+
do_expand_context(conn, params)
4338

4439
:error ->
4540
conn
@@ -96,10 +91,22 @@ defmodule DiffWeb.PageController do
9691
end
9792
end
9893

99-
defp do_expand_context(conn, package, version, file_name, from_line, direction) do
100-
case Diff.Hex.get_chunk(package, version, file_name, from_line, direction) do
94+
defp do_expand_context(conn, params) do
95+
chunk_extractor_params =
96+
for {key, val} <- params, into: %{} do
97+
{String.to_existing_atom(key), val}
98+
end
99+
100+
case Diff.Hex.get_chunk(chunk_extractor_params) do
101101
{:ok, chunk} ->
102-
json(conn, %{chunk: chunk})
102+
rendered_chunk =
103+
Phoenix.View.render_to_string(DiffWeb.RenderView, "render_context_chunk.html",
104+
chunk: chunk
105+
)
106+
107+
conn
108+
|> put_status(200)
109+
|> json(%{chunk: rendered_chunk, lines: length(chunk)})
103110

104111
{:error, %{errors: errors}} ->
105112
conn

lib/diff_web/router.ex

Lines changed: 5 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -15,7 +15,11 @@ defmodule DiffWeb.Router do
1515
pipe_through :browser
1616

1717
live "/", SearchLiveView
18-
get "/diff/:package/:version/expand/:from_line/:direction", PageController, :expand_context
18+
19+
get "/diff/:package/:version/expand/:from_line/:to_line/:right_line/",
20+
PageController,
21+
:expand_context
22+
1923
get "/diff/:package/:versions", PageController, :diff
2024
get "/diffs", PageController, :diffs
2125
end
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
<%= for line <- @chunk do %>
2+
<tr class="ghd-line ghd-line-type-context expanded">
3+
<td class="ghd-line-number">
4+
<div class="ghd-line-number-from">
5+
<%= line_number(line.from_line_number) %>
6+
</div>
7+
<div class="ghd-line-number-to">
8+
<%= line_number(line.to_line_number) %>
9+
</div>
10+
</td>
11+
<td class="ghd-text">
12+
<div class="ghd-text-internal"><%= line_text(line.text) %></div>
13+
</td>
14+
</tr>
15+
<% end %>

test/diff_web/controllers/page_controller_test.exs

Lines changed: 6 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -42,35 +42,23 @@ defmodule DiffWeb.PageControllerTest do
4242
end
4343
end
4444

45-
describe "/GET /diff/:package/:versions/expand/:from_line/:direction" do
45+
describe "/GET /diff/:package/:versions/expand/:from/:to/:right_line" do
4646
setup :verify_on_exit!
4747

4848
test "requires file_name query param", %{conn: conn} do
49-
conn = get(conn, "/diff/phoenix/1.4.5/expand/1/down")
49+
conn = get(conn, "/diff/phoenix/1.4.5/expand/1/1/1")
5050
assert %{"error" => "missing query parameter: file_name"} = json_response(conn, 400)
5151
end
5252

53-
test "doesn't accept direction other that up or down", %{conn: conn} do
54-
conn = get(conn, "/diff/phoenix/1.4.5/expand/1/left?file_name=mix.exs")
55-
assert %{"errors" => %{"direction" => error}} = json_response(conn, 400)
56-
assert error =~ ~r/direction must be either \"up\" or \"down\"/
57-
end
58-
59-
test "doesn't accept negative from_line", %{conn: conn} do
60-
conn = get(conn, "/diff/phoenix/1.4.5/expand/-2/up?file_name=mix.exs")
53+
test "doesn't accept when to_line is less than from_line", %{conn: conn} do
54+
conn = get(conn, "/diff/phoenix/1.4.5/expand/2/1/1?file_name=mix.exs")
6155
assert json_response(conn, 400)
6256
end
6357

6458
test "returns chunk of the file", %{conn: conn} do
65-
conn = get(conn, "/diff/phoenix/1.4.5/expand/2/up?file_name=mix.exs")
59+
conn = get(conn, "/diff/phoenix/1.4.5/expand/1/4/1?file_name=mix.exs")
6660
assert %{"chunk" => chunk} = json_response(conn, 200)
67-
68-
assert [
69-
%{"line_text" => "defmodule Phoenix.MixProject do"},
70-
%{"line_text" => " use Mix.Project"}
71-
] = chunk
72-
73-
assert 2 = length(chunk)
61+
assert chunk =~ "defmodule Phoenix.MixProject do"
7462
end
7563
end
7664
end

0 commit comments

Comments
 (0)