Packages

Kalevala is a world building toolkit for text based games.

Current section

Files

Jump to
kalevala lib mix tasks kalevala.gen.command.ex
Raw

lib/mix/tasks/kalevala.gen.command.ex

defmodule Mix.Tasks.Kalevala.Gen.Command do
@moduledoc """
Generate files for a new command (command / event / views)
"""
use Mix.Task
alias Mix.Generator
def run([command]) do
otp_app = Keyword.fetch!(Mix.Project.config(), :app)
main_module = String.capitalize(to_string(otp_app))
module = String.capitalize(command)
generate_file(["commands", "#{command}_command.ex"], command_template(main_module, module))
generate_file(["events", "#{command}_event.ex"], event_template(main_module, module))
generate_file(["views", "#{command}_view.ex"], view_template(main_module, module))
end
def generate_file(file, template) do
otp_app = Keyword.fetch!(Mix.Project.config(), :app)
file = Path.join(["lib", to_string(otp_app), "character" | file])
Generator.create_file(file, template)
end
def command_template(main_module, command) do
"""
defmodule #{main_module}.Character.#{command}Command do
use Kalevala.Character.Command
alias #{main_module}.Character.#{command}View
def run(conn, params) do
conn
end
end
"""
end
def event_template(main_module, command) do
"""
defmodule #{main_module}.Character.#{command}Event do
use Kalevala.Character.Event
alias #{main_module}.Character.#{command}View
end
"""
end
def view_template(main_module, command) do
"""
defmodule #{main_module}.Character.#{command}View do
use Kalevala.Character.View
end
"""
end
end