Current section

Files

Jump to
shield lib mix tasks shield.install.ex
Raw

lib/mix/tasks/shield.install.ex

defmodule Mix.Tasks.Shield.Install do
use Mix.Task
import Mix.Generator
@shield Path.expand("../..", __DIR__)
@version Mix.Project.config[:version]
@shortdoc "Creates default views and controllers inside current application."
# File mappings
@controllers [
{:eex, "web/controllers/app_controller.ex", "web/controllers/shield/app_controller.ex"},
{:eex, "web/controllers/client_controller.ex", "web/controllers/shield/client_controller.ex"},
{:eex, "web/controllers/token_controller.ex", "web/controllers/shield/token_controller.ex"},
{:eex, "web/controllers/user_controller.ex", "web/controllers/shield/user_controller.ex"},
]
@views [
{:eex, "web/views/app_view.ex", "web/views/shield/app_view.ex"},
{:eex, "web/views/changeset_view.ex", "web/views/shield/changeset_view.ex"},
{:eex, "web/views/client_view.ex", "web/views/shield/client_view.ex"},
{:eex, "web/views/error_view.ex", "web/views/shield/error_view.ex"},
{:eex, "web/views/token_view.ex", "web/views/shield/token_view.ex"},
{:eex, "web/views/user_view.ex", "web/views/shield/user_view.ex"},
]
@models [
{:eex, "web/models/app.ex", "web/models/authable/app.ex"},
{:eex, "web/models/client.ex", "web/models/authable/client.ex"},
{:eex, "web/models/token.ex", "web/models/authable/token.ex"},
{:eex, "web/models/user.ex", "web/models/authable/user.ex"},
]
@migrations [
{:eex, "priv/repo/migrations/20160503214613_create_user.exs", "priv/repo/migrations/20160503214613_create_user.exs"},
{:eex, "priv/repo/migrations/20160504001808_create_token.exs", "priv/repo/migrations/20160504001808_create_token.exs"},
{:eex, "priv/repo/migrations/20160504001852_create_client.exs", "priv/repo/migrations/20160504001852_create_client.exs"},
{:eex, "priv/repo/migrations/20160504007852_create_app.exs", "priv/repo/migrations/20160504007852_create_app.exs"},
]
@moduledoc """
Installs shield controllers and views.
## Examples
mix shield.install
"""
def run([version]) when version in ~w(-v --version) do
Mix.shell.info "Shield v#{@version}"
end
def run(argv) do
unless Version.match? System.version, "~> 1.2" do
Mix.raise "Shield v#{@version} requires at least Elixir v1.2.\n " <>
"You have #{System.version}. Please update accordingly"
end
multi_cp()
end
defp multi_cp() do
Mix.Phoenix.copy_from shield_paths, "./deps/shield/", "", [], @controllers
Mix.Phoenix.copy_from shield_paths, "./deps/shield/", "", [], @views
Mix.Phoenix.copy_from authable_paths, "./deps/authable/", "", [], @models
Mix.Phoenix.copy_from authable_paths, "./deps/authable/", "", [], @migrations
print_controllers_info
print_ecto_info
end
defp shield_paths do
[".", :shield]
end
defp authable_paths do
[".", :authable]
end
defp print_controllers_info do
Mix.shell.info """
Add following routes to web/router.ex file:
pipeline :api do
plug :accepts, ["json"]
end
scope "/", Shield do
pipe_through :api
resources "/clients", ClientController, except: [:new, :edit]
get "/apps", AppController, :index
get "/apps/:id", AppController, :show
delete "/apps/:id", AppController, :delete
post "/apps/authorize", AppController, :authorize
get "/tokens/:id", TokenController, :show
post "/tokens", TokenController, :create
post "/users/register", UserController, :register
post "/users/login", UserController, :login
delete "/users/logout", UserController, :logout
get "/users/me", UserController, :me
end
"""
nil
end
defp print_ecto_info do
Mix.shell.info """
Before moving on, configure your database in config/dev.exs and run:
$ mix ecto.create
$ mix ecto.migrate -r Authable.Repo
"""
nil
end
end