Current section

Files

Jump to
surface lib mix tasks surface surface.init file_patchers text.ex
Raw

lib/mix/tasks/surface/surface.init/file_patchers/text.ex

defmodule Mix.Tasks.Surface.Init.FilePatchers.Text do
@moduledoc false
def append_line(code, text, already_patched_text) do
already_patched_regex = Regex.compile!("^#{Regex.escape(already_patched_text)}$", "m")
if Regex.match?(already_patched_regex, code) do
{:already_patched, code}
else
{:patched, String.trim_trailing(code) <> "\n\n#{text}"}
end
end
def prepend_text(code, text, already_patched_text) do
if String.contains?(code, already_patched_text) do
{:already_patched, code}
else
{:patched, "#{text}\n\n" <> String.trim_leading(code)}
end
end
def replace_line_text(code, line_text, replacement) do
already_patched? = Regex.match?(to_regex(replacement), code)
line_text_regex = to_regex(line_text)
patchable? = Regex.match?(line_text_regex, code)
cond do
already_patched? ->
{:already_patched, code}
patchable? ->
{:patched, Regex.replace(line_text_regex, code, replacement)}
true ->
{:cannot_patch, code}
end
end
def replace_text(code, text, replacement, already_patched_text) do
already_patched? = String.contains?(code, already_patched_text)
patchable? = String.contains?(code, text)
cond do
already_patched? ->
{:already_patched, code}
patchable? ->
{:patched, String.replace(code, text, replacement)}
true ->
{:cannot_patch, code}
end
end
def remove_text(code, text) do
if String.contains?(code, text) do
{:patched, String.replace(code, text, "")}
else
{:already_patched, code}
end
end
defp to_regex(string) do
Regex.compile!("^#{Regex.escape(string)}$", "m")
end
end