From a6b7d34220fb23f61d9d071e0031fafcba6200cc Mon Sep 17 00:00:00 2001 From: eksperimental Date: Sat, 13 May 2017 14:37:35 +0700 Subject: [PATCH 1/3] Support default configuations --- lib/ex_doc.ex | 28 ++++++++++++++++++++++++---- lib/mix/tasks/docs.ex | 2 +- test/ex_doc_test.exs | 14 ++++++++++++++ 3 files changed, 39 insertions(+), 5 deletions(-) diff --git a/lib/ex_doc.ex b/lib/ex_doc.ex index 9591ffed8..29baaf236 100644 --- a/lib/ex_doc.ex +++ b/lib/ex_doc.ex @@ -9,6 +9,24 @@ defmodule ExDoc do You can find more details about these options in the `ExDoc.CLI` module. """ + + @default %{ + :formatter => "html", + :output => "./doc", + :source_ref => "master", + :retriever => ExDoc.Retriever, + } + + @spec default :: map + def default do + @default + end + + @spec default(atom) :: term + def default(field) do + Map.get(default(), field) + end + defstruct [ assets: nil, canonical: nil, @@ -16,15 +34,16 @@ defmodule ExDoc do extra_section: nil, extras: [], filter_prefix: nil, - formatter: "html", + formatter: @default[:formatter], formatter_opts: [], homepage_url: nil, logo: nil, main: nil, - output: "doc", + output: @default[:output], project: nil, - retriever: ExDoc.Retriever, + retriever: @default[:retriever], source_beam: nil, + source_ref: @default[:source_ref], source_root: nil, source_url: nil, source_url_pattern: nil, @@ -48,6 +67,7 @@ defmodule ExDoc do project: nil | String.t, retriever: :atom, source_beam: nil | String.t, + source_ref: nil | String.t, source_root: nil | String.t, source_url: nil | String.t, source_url_pattern: nil | String.t, @@ -114,7 +134,7 @@ defmodule ExDoc do # Helpers defp normalize_options(options) do - pattern = options[:source_url_pattern] || guess_url(options[:source_url], options[:source_ref] || "master") + pattern = options[:source_url_pattern] || guess_url(options[:source_url], options[:source_ref] || ExDoc.Config.default(:source_ref)) options = Keyword.put(options, :source_url_pattern, pattern) if is_bitstring(options[:output]) do diff --git a/lib/mix/tasks/docs.ex b/lib/mix/tasks/docs.ex index 3b1f1fea1..ca2cfe1cd 100644 --- a/lib/mix/tasks/docs.ex +++ b/lib/mix/tasks/docs.ex @@ -138,7 +138,7 @@ defmodule Mix.Tasks.Docs do defp get_formatters(options) do case Keyword.get_values(options, :formatter) do - [] -> options[:formatters] || ["html"] + [] -> options[:formatters] || [ExDoc.Config.default(:formatter)] values -> values end end diff --git a/test/ex_doc_test.exs b/test/ex_doc_test.exs index aff051510..482883dde 100644 --- a/test/ex_doc_test.exs +++ b/test/ex_doc_test.exs @@ -49,6 +49,20 @@ defmodule ExDocTest do fn -> ExDoc.generate_docs project, version, options end end + test "default configuration" do + assert Map.get(%ExDoc.Config{}, :formatter) == "html" + assert ExDoc.Config.default(:formatter) == "html" + + assert Map.get(%ExDoc.Config{}, :output) == "./doc" + assert ExDoc.Config.default(:output) == "./doc" + + assert Map.get(%ExDoc.Config{}, :source_ref) == "master" + assert ExDoc.Config.default(:source_ref) == "master" + + assert Map.get(%ExDoc.Config{}, :retriever) == ExDoc.Retriever + assert ExDoc.Config.default(:retriever) == ExDoc.Retriever + end + test "version" do assert ExDoc.version =~ ~r{\d+\.\d+\.\d+} end From f0175a8b605eeff2acef625e2aaaea378a21ec3e Mon Sep 17 00:00:00 2001 From: eksperimental Date: Sat, 13 May 2017 23:53:23 +0700 Subject: [PATCH 2/3] Remove ExDoc.Config.default/0 --- lib/ex_doc.ex | 7 +------ 1 file changed, 1 insertion(+), 6 deletions(-) diff --git a/lib/ex_doc.ex b/lib/ex_doc.ex index 29baaf236..7761404cd 100644 --- a/lib/ex_doc.ex +++ b/lib/ex_doc.ex @@ -17,14 +17,9 @@ defmodule ExDoc do :retriever => ExDoc.Retriever, } - @spec default :: map - def default do - @default - end - @spec default(atom) :: term def default(field) do - Map.get(default(), field) + Map.get(@default, field) end defstruct [ From eef9174b2db5b9e4cf8469a4c75af5213af1bdc4 Mon Sep 17 00:00:00 2001 From: eksperimental Date: Sun, 14 May 2017 00:06:59 +0700 Subject: [PATCH 3/3] Raise if key is not present in ExDoc.Config.default/1 --- lib/ex_doc.ex | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/lib/ex_doc.ex b/lib/ex_doc.ex index 7761404cd..4c6f1d6bd 100644 --- a/lib/ex_doc.ex +++ b/lib/ex_doc.ex @@ -19,7 +19,7 @@ defmodule ExDoc do @spec default(atom) :: term def default(field) do - Map.get(@default, field) + Map.fetch!(@default, field) end defstruct [ @@ -29,16 +29,16 @@ defmodule ExDoc do extra_section: nil, extras: [], filter_prefix: nil, - formatter: @default[:formatter], + formatter: @default.formatter, formatter_opts: [], homepage_url: nil, logo: nil, main: nil, - output: @default[:output], + output: @default.output, project: nil, - retriever: @default[:retriever], + retriever: @default.retriever, source_beam: nil, - source_ref: @default[:source_ref], + source_ref: @default.source_ref, source_root: nil, source_url: nil, source_url_pattern: nil,