From 67b4f373da235c10bb730502a1cc9ed358e01296 Mon Sep 17 00:00:00 2001 From: eksperimental Date: Tue, 23 May 2017 10:49:46 +0700 Subject: [PATCH] Raise if version is not provided in Docs task --- lib/mix/tasks/docs.ex | 11 +++++++++- test/mix/tasks/docs_test.exs | 40 +++++++++++++++++++++--------------- 2 files changed, 33 insertions(+), 18 deletions(-) diff --git a/lib/mix/tasks/docs.ex b/lib/mix/tasks/docs.ex index f36dcab7c..86a842e56 100644 --- a/lib/mix/tasks/docs.ex +++ b/lib/mix/tasks/docs.ex @@ -122,7 +122,7 @@ defmodule Mix.Tasks.Docs do end project = to_string(config[:name] || config[:app]) - version = config[:version] || "dev" + version = fetch_version!(config) options = config |> get_docs_opts() @@ -140,6 +140,15 @@ defmodule Mix.Tasks.Docs do end end + defp fetch_version!(config) do + case Keyword.fetch(config, :version) do + {:ok, version} -> + version + :error -> + raise ArgumentError, ":version key is required in config, got: #{inspect(config)}" + end + end + defp get_formatters(options) do case Keyword.get_values(options, :formatter) do [] -> options[:formatters] || [ExDoc.Config.default(:formatter)] diff --git a/test/mix/tasks/docs_test.exs b/test/mix/tasks/docs_test.exs index ebcd42819..b81379c31 100644 --- a/test/mix/tasks/docs_test.exs +++ b/test/mix/tasks/docs_test.exs @@ -32,42 +32,42 @@ defmodule Mix.Tasks.DocsTest do end test "accepts modules in :main" do - assert [{"ex_doc", "dev", [formatter: "html", deps: _, main: "Sample", source_beam: _, ]}] = - run([], [app: :ex_doc, docs: [main: Sample]]) + assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: _, main: "Sample", source_beam: _, ]}] = + run([], [app: :ex_doc, version: "1.2.3-dev", docs: [main: Sample]]) end test "accepts files in :main" do - assert [{"ex_doc", "dev", [formatter: "html", deps: _, source_beam: _, main: "another"]}] = - run([], [app: :ex_doc, docs: [main: "another"]]) + assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: _, source_beam: _, main: "another"]}] = + run([], [app: :ex_doc, version: "1.2.3-dev", docs: [main: "another"]]) end test "accepts output in :output" do - assert [{"ex_doc", "dev", [formatter: "html", deps: _, source_beam: _, output: "hello"]}] = - run([], [app: :ex_doc, docs: [output: "hello"]]) + assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: _, source_beam: _, output: "hello"]}] = + run([], [app: :ex_doc, version: "1.2.3-dev", docs: [output: "hello"]]) end test "parses output with lower preference than options" do - assert [{"ex_doc", "dev", [formatter: "html", deps: _, source_beam: _, output: "world"]}] = - run(~w(-o world), [app: :ex_doc, docs: [output: "world"]]) + assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: _, source_beam: _, output: "world"]}] = + run(~w(-o world), [app: :ex_doc, version: "1.2.3-dev", docs: [output: "world"]]) end test "includes dependencies" do - assert [{"ex_doc", "dev", [formatter: "html", deps: deps, source_beam: _]}] = - run([], [app: :ex_doc, docs: []]) + assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: deps, source_beam: _]}] = + run([], [app: :ex_doc, version: "1.2.3-dev", docs: []]) assert List.keyfind(deps, Application.app_dir(:earmark), 0) == {Application.app_dir(:earmark), "https://hexdocs.pm/earmark/#{Application.spec(:earmark, :vsn)}/"} end test "allows custom dependency paths" do - assert [{"ex_doc", "dev", [formatter: "html", deps: deps, source_beam: _]}] = - run([], [app: :ex_doc, docs: [deps: [earmark: "foo"]]]) + assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: deps, source_beam: _]}] = + run([], [app: :ex_doc, version: "1.2.3-dev", docs: [deps: [earmark: "foo"]]]) assert List.keyfind(deps, Application.app_dir(:earmark), 0) == {Application.app_dir(:earmark), "foo"} end test "accepts lazy docs" do - assert [{"ex_doc", "dev", [formatter: "html", deps: _, source_beam: _, main: "another"]}] = - run([], [app: :ex_doc, docs: fn -> [main: "another"] end]) + assert [{"ex_doc", "1.2.3-dev", [formatter: "html", deps: _, source_beam: _, main: "another"]}] = + run([], [app: :ex_doc, version: "1.2.3-dev", docs: fn -> [main: "another"] end]) end test "accepts options from root" do @@ -85,13 +85,13 @@ defmodule Mix.Tasks.DocsTest do version: "1.2.3-dev", ]) - assert [{"ex_doc", "dev", _}] = run([], [app: :ex_doc]) + assert [{"ex_doc", "1.2.3-dev", _}] = run([], [app: :ex_doc, version: "1.2.3-dev"]) end test "supports umbrella project" do Mix.Project.in_project(:umbrella, "test/fixtures/umbrella", fn _mod -> - assert [{"umbrella", "dev", [formatter: "html", deps: deps, source_beam: _]}] = - run([], [app: :umbrella, apps_path: "apps/"]) + assert [{"umbrella", "1.2.3-dev", [formatter: "html", deps: deps, source_beam: _]}] = + run([], [app: :umbrella, apps_path: "apps/", version: "1.2.3-dev"]) assert List.keyfind(deps, Application.app_dir(:foo), 0) == {Application.app_dir(:foo), "https://hexdocs.pm/foo/0.1.0/"} @@ -99,4 +99,10 @@ defmodule Mix.Tasks.DocsTest do {Application.app_dir(:bar), "https://hexdocs.pm/bar/0.1.0/"} end) end + + test "raise when version is not provided" do + assert_raise ArgumentError, ~r/:version key is required in config, got: /, fn -> + run([], [app: :ex_doc]) + end + end end