Current section

Files

Jump to
dogma lib dogma documentation rules_list.ex
Raw

lib/dogma/documentation/rules_list.ex

defmodule Dogma.Documentation.RuleList do
@shortdoc "Generate documentation file detailing all rules"
@moduledoc "Generate documentation file detailing all rules"
def write! do
File.write!( "docs/rules.md", rules_doc )
IO.puts "Generated docs/rules.md"
end
@doc """
Generate a string documenting all the available rules.
Gets the information from the `@moduledoc`s of each Rule module.
"""
def rules_doc do
modules = all_rule_modules
contents = modules |> Enum.map(&contents_entry/1)
docs = modules |> Enum.map(&moduledoc/1) |> Enum.join("\n")
"""
# Dogma Rules
These are the rules included in Dogma by default. Currently there are
#{length modules} of them.
## Contents
#{contents}
---
#{docs}
"""
end
defp all_rule_modules do
Dogma.RuleSet.All.rules
|> Enum.map(&( &1.__struct__ ))
end
defp contents_entry(rule) do
name = rule |> printable_name
id = name |> String.downcase
"""
* [#{name}](##{id})
"""
end
defp moduledoc(module) do
{_, doc} = Code.get_docs( module, :moduledoc )
"""
### #{printable_name module}
#{doc}
"""
end
defp printable_name(rule) do
rule
|> Module.split
|> List.last
end
end