Current section

Files

Jump to
elixir_structure_manager lib core da redis.ex
Raw

lib/core/da/redis.ex

defmodule DA.Redis do
@moduledoc false
@regex ~r/_other_env\)(\s)+do(\s)+\[/
@secrets_manager_file "lib/infrastructure/driven_adapters/secrets/secrets_manager.ex"
@base "/priv/templates/adapters/"
def actions do
redis_child = get_redis_child_configuration()
%{
create: %{
"lib/infrastructure/driven_adapters/redis/redis_adapter.ex" => @base <> "redis/redis.ex"
},
transformations:
[
{:inject_dependency, ~s|{:redix, "~> 1.0"}|},
{
:insert_after,
"lib/config/app_config.ex",
"\n\s\s\s\s\s:redis_props,",
regex: ~r{defstruct(\s)+\[}
},
{
:insert_after,
"lib/config/app_config.ex",
"\n\s\s\s\s\s\s\sredis_props: load(:redis_props),",
regex: ~r{%__MODULE__{}
},
{
:insert_after,
"lib/application.ex",
"alias {app}.Infrastructure.Adapters.Redis.RedisAdapter\n ",
regex: ~r{Application(\s)+do(\s)+}
},
{
:insert_after,
"lib/infrastructure/entry_points/health_check.ex",
"\n\s\salias {app}.Infrastructure.Adapters.Redis.RedisAdapter",
regex: ~r{EntryPoint.HealthCheck do}
},
{
:insert_after,
"lib/infrastructure/entry_points/health_check.ex",
"\n\s\s\s\s\s\s%PlugCheckup.Check{name: \"redis\", module: {app}.Infrastructure.Adapters.Redis.RedisAdapter, function: :health},",
regex: ~r{def checks do(\s)+\[}
},
{
:append_end,
"config/dev.exs",
@base <> "redis/config_to_append_dev.ex"
},
{
:append_end,
"config/test.exs",
@base <> "redis/config_to_append.ex"
},
{
:append_end,
"config/prod.exs",
@base <> "redis/config_to_append.ex"
}
] ++ redis_child
}
end
def tokens(_opts) do
[]
end
defp get_redis_child_configuration do
with_secrets? = File.exists?(@secrets_manager_file)
regex =
if with_secrets? &&
String.contains?(File.read!("lib/application.ex"), "SecretManagerAdapter, []") do
~r/(\s)+{SecretManagerAdapter, \[\]}/
else
@regex
end
resolve_actions(with_secrets?, regex)
end
defp resolve_actions(true = _with_secrets?, regex) do
[
{
:insert_after,
@secrets_manager_file,
"\n\t\t\t## TODO: Uncomment to use redis with secrets\n\t\t\t# handle_redis_secrets(secret)",
regex: ~r/, \{:secret, secret\}\)/
},
{
:insert_before,
@secrets_manager_file,
@base <> "secrets_manager/handle_redis_secrets.ex",
regex: ~r/ defp get_secret_value/
},
{
:insert_after,
"lib/application.ex",
"\n\t\t\t{RedisAdapter, []},",
regex: regex
}
]
end
defp resolve_actions(_with_secrets?, _regex) do
[
{
:insert_after,
"lib/application.ex",
"\n\t\t\t{RedisAdapter, []},",
regex: @regex
}
]
end
end