Packages

A convention-first web framework for Gleam

Current section

Files

Jump to
refrakt src refrakt@cli@new.erl
Raw

src/refrakt@cli@new.erl

-module(refrakt@cli@new).
-compile([no_auto_import, nowarn_unused_vars, nowarn_unused_function, nowarn_nomatch, inline]).
-define(FILEPATH, "src/refrakt/cli/new.gleam").
-export([run/2]).
-file("src/refrakt/cli/new.gleam", 153).
-spec parse_db_flag(list(binary())) -> refrakt@cli@types:db_choice().
parse_db_flag(Flags) ->
case Flags of
[<<"--db"/utf8>>, <<"postgres"/utf8>> | _] ->
postgres;
[<<"--db"/utf8>>, <<"sqlite"/utf8>> | _] ->
sqlite;
[<<"--db"/utf8>>, <<"pg"/utf8>> | _] ->
postgres;
[<<"--no-db"/utf8>> | _] ->
no_db;
[_ | Rest] ->
parse_db_flag(Rest);
[] ->
no_db
end.
-file("src/refrakt/cli/new.gleam", 11).
-spec run(binary(), list(binary())) -> nil.
run(Path, Flags) ->
Db = parse_db_flag(Flags),
Name = case gleam@string:split(Path, <<"/"/utf8>>) of
[] ->
Path;
Parts ->
Last@1 = case gleam@list:last(Parts) of
{ok, Last} -> Last;
_assert_fail ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"refrakt/cli/new"/utf8>>,
function => <<"run"/utf8>>,
line => 18,
value => _assert_fail,
start => 470,
'end' => 508,
pattern_start => 481,
pattern_end => 489})
end,
Last@1
end,
gleam_stdlib:println(
<<<<"Creating "/utf8, Path/binary>>/binary, "..."/utf8>>
),
gleam_stdlib:println(<<""/utf8>>),
Dirs = [Path,
<<Path/binary, "/src"/utf8>>,
<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>,
<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/web"/utf8>>,
<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/web/layouts"/utf8>>,
<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/web/components"/utf8>>,
<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/web/forms"/utf8>>,
<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/web/middleware"/utf8>>,
<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/domain"/utf8>>,
<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/data"/utf8>>,
<<Path/binary, "/priv/static/css"/utf8>>,
<<Path/binary, "/priv/static/js"/utf8>>,
<<Path/binary, "/test"/utf8>>,
<<<<<<Path/binary, "/test/"/utf8>>/binary, Name/binary>>/binary,
"/web"/utf8>>],
gleam@list:each(
Dirs,
fun(Dir) -> _assert_subject = simplifile:create_directory_all(Dir),
case _assert_subject of
{ok, _} -> _assert_subject;
_assert_fail@1 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"refrakt/cli/new"/utf8>>,
function => <<"run"/utf8>>,
line => 45,
value => _assert_fail@1,
start => 1172,
'end' => 1227,
pattern_start => 1183,
pattern_end => 1188})
end end
),
Files = [{<<Path/binary, "/gleam.toml"/utf8>>,
refrakt@cli@templates:gleam_toml(Name, Db)},
{<<Path/binary, "/.gitignore"/utf8>>, refrakt@cli@templates:gitignore()},
{<<Path/binary, "/README.md"/utf8>>, refrakt@cli@templates:readme(Name)},
{<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
".gleam"/utf8>>,
refrakt@cli@templates:main_module(Name, Db)},
{<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/config.gleam"/utf8>>,
refrakt@cli@templates:config_module(Name)},
{<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/context.gleam"/utf8>>,
refrakt@cli@templates:context_module(Name, Db)},
{<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/router.gleam"/utf8>>,
refrakt@cli@templates:router_module(Name, Db)},
{<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/web/home_handler.gleam"/utf8>>,
refrakt@cli@templates:home_handler(Name)},
{<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/web/error_handler.gleam"/utf8>>,
refrakt@cli@templates:error_handler(Name)},
{<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/web/layouts/root_layout.gleam"/utf8>>,
refrakt@cli@templates:root_layout()},
{<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/web/components/flash.gleam"/utf8>>,
refrakt@cli@templates:flash_component()},
{<<Path/binary, "/priv/static/css/app.css"/utf8>>,
refrakt@cli@templates:app_css()},
{<<Path/binary, "/priv/static/js/app.js"/utf8>>,
refrakt@cli@templates:app_js()},
{<<<<<<Path/binary, "/test/"/utf8>>/binary, Name/binary>>/binary,
"_test.gleam"/utf8>>,
refrakt@cli@templates:main_test(Name)},
{<<<<<<Path/binary, "/test/"/utf8>>/binary, Name/binary>>/binary,
"/web/home_handler_test.gleam"/utf8>>,
refrakt@cli@templates:home_handler_test(Name)}],
Files@1 = case Db of
postgres ->
[{<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/data/repo.gleam"/utf8>>,
refrakt@cli@templates:repo_module(Name, Db)} |
Files];
sqlite ->
[{<<<<<<Path/binary, "/src/"/utf8>>/binary, Name/binary>>/binary,
"/data/repo.gleam"/utf8>>,
refrakt@cli@templates:repo_module(Name, Db)} |
Files];
no_db ->
Files
end,
gleam@list:each(
Files@1,
fun(File) ->
{File_path, Content} = File,
_assert_subject@1 = simplifile:write(File_path, Content),
case _assert_subject@1 of
{ok, _} -> _assert_subject@1;
_assert_fail@2 ->
erlang:error(#{gleam_error => let_assert,
message => <<"Pattern match failed, no pattern matched the value."/utf8>>,
file => <<?FILEPATH/utf8>>,
module => <<"refrakt/cli/new"/utf8>>,
function => <<"run"/utf8>>,
line => 102,
value => _assert_fail@2,
start => 2899,
'end' => 2954,
pattern_start => 2910,
pattern_end => 2915})
end
end
),
Gleam_paths = gleam@list:filter_map(
Files@1,
fun(File@1) ->
{Fp, _} = File@1,
case gleam_stdlib:string_ends_with(Fp, <<".gleam"/utf8>>) of
true ->
{ok, Fp};
false ->
{error, nil}
end
end
),
refrakt_format_ffi:format_files(Gleam_paths),
gleam_stdlib:println(<<<<" "/utf8, Path/binary>>/binary, "/"/utf8>>),
gleam_stdlib:println(<<" gleam.toml"/utf8>>),
gleam_stdlib:println(<<" .gitignore"/utf8>>),
gleam_stdlib:println(<<" README.md"/utf8>>),
gleam_stdlib:println(<<" src/"/utf8>>),
gleam_stdlib:println(
<<<<" "/utf8, Name/binary>>/binary, ".gleam"/utf8>>
),
gleam_stdlib:println(
<<<<" "/utf8, Name/binary>>/binary, "/config.gleam"/utf8>>
),
gleam_stdlib:println(
<<<<" "/utf8, Name/binary>>/binary, "/router.gleam"/utf8>>
),
gleam_stdlib:println(
<<<<" "/utf8, Name/binary>>/binary, "/web/"/utf8>>
),
gleam_stdlib:println(<<" home_handler.gleam"/utf8>>),
gleam_stdlib:println(<<" error_handler.gleam"/utf8>>),
gleam_stdlib:println(
<<<<" "/utf8, Name/binary>>/binary, "/web/layouts/"/utf8>>
),
gleam_stdlib:println(<<" root_layout.gleam"/utf8>>),
gleam_stdlib:println(
<<<<" "/utf8, Name/binary>>/binary, "/web/components/"/utf8>>
),
gleam_stdlib:println(<<" flash.gleam"/utf8>>),
case Db of
postgres ->
gleam_stdlib:println(
<<<<" "/utf8, Name/binary>>/binary, "/data/"/utf8>>
),
gleam_stdlib:println(<<" repo.gleam"/utf8>>);
sqlite ->
gleam_stdlib:println(
<<<<" "/utf8, Name/binary>>/binary, "/data/"/utf8>>
),
gleam_stdlib:println(<<" repo.gleam"/utf8>>);
no_db ->
nil
end,
gleam_stdlib:println(<<" priv/static/"/utf8>>),
gleam_stdlib:println(<<" css/app.css"/utf8>>),
gleam_stdlib:println(<<" js/app.js"/utf8>>),
gleam_stdlib:println(<<" test/"/utf8>>),
gleam_stdlib:println(
<<<<" "/utf8, Name/binary>>/binary, "_test.gleam"/utf8>>
),
gleam_stdlib:println(
<<<<" "/utf8, Name/binary>>/binary, "/web/"/utf8>>
),
gleam_stdlib:println(<<" home_handler_test.gleam"/utf8>>),
gleam_stdlib:println(<<""/utf8>>),
gleam_stdlib:println(<<"Run your app:"/utf8>>),
gleam_stdlib:println(<<" cd "/utf8, Path/binary>>),
gleam_stdlib:println(<<" gleam run"/utf8>>),
gleam_stdlib:println(<<" → http://localhost:4000"/utf8>>).