Skip to content
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
27 changes: 27 additions & 0 deletions lib/maru/builder/description.ex
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,17 @@ defmodule Maru.Builder.Description do
Parse and build description block.
"""

@doc """
Define headers of description.
"""
defmacro headers([do: block]) do

quote do
@desc put_in(@desc, [:headers], [])
unquote(block)
end
end

@doc """
Define detail of description.
"""
Expand Down Expand Up @@ -33,4 +44,20 @@ defmodule Maru.Builder.Description do
end
end

defmacro need(name, options) do
desc = Keyword.get(options, :desc)
type = Keyword.get(options, :type)
header = %{attr_name: case is_atom(name) do
true -> Atom.to_string(name)
_ -> name
end, type: case is_atom(type) do
true -> Atom.to_string(type)
_ -> type
end, description: desc} |> Macro.escape
quote do
@desc update_in(@desc, [:headers], &(&1 ++[unquote(header)]))
end
end


end
2 changes: 1 addition & 1 deletion lib/maru/router.ex
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
defmodule Maru.Router do
@moduledoc false

defmacro __using__(opts) do
quote do
use Maru.Builder, unquote(opts)
Expand Down
15 changes: 15 additions & 0 deletions test/builder/dsls_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -101,13 +101,24 @@ defmodule Maru.Builder.DSLsTest do
end

test "description with block" do
alias Maru.Struct.Parameter, as: P
alias Maru.Struct.Parameter.Information, as: PI

defmodule DescTestWithBlock do
use Maru.Router

desc "desc test" do
detail """
this is detail
"""
headers do
need :token, type: :string, desc: "ok"
need "access-token", type: :string, desc: "ok"
end

params do
requires :test, type: :string, desc: "ok"
end

responses do
status 200, desc: "ok"
Expand All @@ -120,6 +131,10 @@ defmodule Maru.Builder.DSLsTest do
assert %{
summary: "desc test",
detail: "this is detail\n",
headers: [
%{attr_name: "token", type: "string", description: "ok"},
%{attr_name: "access-token", type: "string", description: "ok"}
],
responses: [
%{code: 200, description: "ok"},
%{code: 500, description: "error"},
Expand Down
1 change: 1 addition & 0 deletions test/builder/exceptions_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -93,6 +93,7 @@ defmodule Maru.Builder.ExceptionsTest do
params do
requires :a
end

get "/a" do
unwarn(params)
text(conn, "a")
Expand Down
9 changes: 5 additions & 4 deletions test/tasks/routes_test.exs
Original file line number Diff line number Diff line change
Expand Up @@ -5,7 +5,6 @@ defmodule Maru.Tasks.RoutesTest do

defmodule Router do
use Maru.Router

get do
text(conn, "ok")
end
Expand All @@ -28,10 +27,12 @@ defmodule Maru.Tasks.RoutesTest do
defmodule Router2 do
use Maru.Router

desc "test endpoint"
get do
text(conn, "ok")
desc "test endpoint" do
get do
text(conn, "ok")
end
end

end

defmodule API2 do
Expand Down