Packages

weber - is Elixir MVC web framework.

Current section

Files

Jump to
weber lib mix tasks weber.ex
Raw

lib/mix/tasks/weber.ex

defmodule Mix.Tasks.Weber do
@moduledoc """
Create a new weber project template.
Usage:
mix weber.new /home/user/myWebApp - Creates myWebApp directory with weber project skeleton.
mix weber --version - Prints weber version.
mix weber --help - Prints help.
"""
@shortdoc "Create a new weber project"
use Mix.Task
@version Weber.Mixfile.project[:version]
def run([]) do
usage
end
def run(["--help"]) do
usage
end
def run(["--version"]) do
Mix.shell.info "Weber v#{@version}"
end
def usage do
Mix.shell.info """
Usage:
mix weber.new /home/user/testWebApp -- creates new weber web application
mix weber --version -- shows weber version
mix weber --help -- shows weber help
"""
end
defmodule New do
@doc """
Create default weber based project.
"""
def run([directoryName]) do
# create project directory
case File.mkdir(directoryName) do
:ok -> :ok
err -> :io.format("[Weber error] Can't create project directory. Error: ~p~n", [err])
end
#
# create project skeleton
#
path = Path.expand directoryName
baseName = Path.basename directoryName
vars = [
{"path", path},
{"projectNamespace", Mix.Utils.camelize(baseName)},
{"projectName", baseName}
] |> Enum.into HashDict.new
template = "default"
skelRoot = File.cwd! <> "/templates/" <> template
File.cd skelRoot
skelFiles = Weber.Utils.get_all_files(".")
for file <- skelFiles do
baseFile = String.slice(file, 1, 1024)
destination = path <> replace(baseFile, vars)
dir = :filename.dirname(destination)
if !:filelib.is_dir(dir), do: Mix.Generator.create_directory dir
File.cp_r file, destination, fn _, _ -> true end
{:ok, origin} = File.read destination
compiled = replace(origin, vars)
File.write destination, compiled, []
end
end
defp replace(text, vars) do
case Enum.uniq(Regex.scan(~r/\#\{([^\}]+)\}/, text)) do
[] -> text
data -> replace_act(text, vars, data)
end
end
defp replace_act(text, _vars, []) do
text
end
defp replace_act(text, vars, [[entry, key] | tail]) do
replace_act(String.replace(text, entry, HashDict.get(vars, key), []), vars, tail)
end
end
end