Packages
surface
0.12.1
0.12.3
0.12.2
0.12.1
0.12.0
0.11.5
0.11.4
0.11.3
0.11.2
0.11.1
0.11.0
0.10.0
0.9.5
0.9.4
0.9.3
0.9.2
0.9.1
0.9.0
0.8.4
0.8.3
0.8.2
0.8.1
0.8.0
0.7.6
0.7.5
0.7.4
0.7.3
0.7.2
0.7.1
0.7.0
0.6.1
0.6.0
0.5.2
0.5.1
0.5.0
0.4.1
0.4.0
0.3.2
0.3.1
0.3.0
0.2.1
0.2.0
0.1.1
0.1.0
0.1.0-alpha.2
0.1.0-alpha.1
0.1.0-alpha.0
A component based library for Phoenix LiveView
Current section
Files
Jump to
Current section
Files
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