Packages
mazurka
0.2.10
1.0.8
1.0.7
1.0.6
1.0.5
1.0.4
1.0.3
1.0.2
1.0.1
1.0.0
0.3.39
0.3.38
0.3.37
0.3.36
0.3.35
0.3.34
0.3.33
0.3.32
0.3.31
0.3.30
0.3.29
0.3.28
0.3.27
0.3.26
0.3.25
0.3.24
0.3.23
0.3.22
0.3.21
0.3.20
0.3.19
0.3.18
0.3.17
0.3.16
0.3.15
0.3.14
0.3.13
0.3.12
0.3.11
0.3.10
0.3.9
0.3.8
0.3.7
0.3.6
0.3.5
0.3.4
0.3.3
0.3.2
0.3.1
0.3.0
0.2.10
0.2.9
0.2.8
0.2.7
0.2.6
0.2.5
0.2.4
0.2.3
0.2.2
0.2.1
0.2.0
0.1.10
0.1.9
0.1.8
0.1.7
0.1.6
0.1.5
0.1.4
0.1.3
0.1.2
0.1.1
0.1.0
hypermedia api toolkit
Current section
Files
Jump to
Current section
Files
lib/mix/compile.mazurka.ex
defmodule Mix.Tasks.Compile.Mazurka do
use Mix.Task
@recursive true
def run(args) do
{opts, _, _} = OptionParser.parse(args, switches: [force: :boolean])
project = Mix.Project.config
options = project[:mazurka_options] || []
source_paths = options[:paths] || ["res"]
erlc_options = project[:erlc_options] || []
compile_path = Mix.Project.compile_path(project)
compile_opts = [native: Keyword.get(options, :native, Mix.env == :prod),
timeout: Keyword.get(options, :timeout, 10_000),
debug: Keyword.get(options, :debug, false),
erlc_options: erlc_options]
if opts[:file] do
prepare_file(opts[:file], compile_path, compile_opts)
else
extract_targets(source_paths, compile_path, compile_opts)
end
end
def manifests, do: []
defp extract_targets(source_paths, compile_path, opts) do
Mix.Utils.extract_files(source_paths, ["md"])
|> Enum.flat_map(&(prepare_file(&1, compile_path, opts)))
end
defp prepare_file(file, compile_path, opts) do
file(file)
|> Enum.map(&(prepare_module(&1, file, compile_path, opts)))
end
defp file(src, opts \\ []) do
{:ok, resources} = :mazurka_dsl.parse_file(src, opts)
resources
|> Enum.flat_map(&(Mazurka.Compiler.Markdown.compile(&1, src, opts)))
end
defp prepare_module({module, generate, type}, file, compile_path, opts) do
source = "#{file} (#{type})"
target = Path.join(compile_path, "#{module}.beam")
{vsn, compile} = generate.(opts)
if is_stale?(target, vsn) do
{:ok, _name, _main, beam} = compile.()
File.write!(target, beam)
Mix.shell.info "Compiled #{source}"
:ok
else
:noop
end
end
defp is_stale?(path, version) do
case :beam_lib.version(to_char_list(path)) do
{:ok, {_, [prev | _]}} ->
prev != version
_error ->
true
end
end
end