Packages
surgex
2.1.0
6.0.1
6.0.0
5.1.1
5.1.0
5.0.0
5.0.0-git-015aa39a
4.15.2
4.15.1
4.15.1-git-98b3
4.15.0
4.15.0-git-943e
4.15.0-git-5806
4.14.1
4.14.0
4.13.1
4.13.0
4.12.0
4.11.0
4.11.0-git-97d4
4.11.0-git-14c8
4.10.0
4.10.0-git-37f2
4.9.0
4.9.0-git-9d5f
4.8.1-git-80a7
4.8.0
4.8.0-git-fbda
4.8.0-git-e058
4.7.0
4.7.0-git-5414
4.6.1
4.6.0
4.5.0
4.4.0
4.3.0
4.2.1
4.2.0
4.1.1
4.1.1-git-9f6b
4.1.1-git-6f0cd
4.1.0
4.1.0-git-e934
4.1.0-git-8c28
4.1.0-git-56a9
4.1.0-git-55fd
4.0.0
3.2.8
3.2.7
3.2.6
3.2.5
3.2.4
3.2.3
3.2.2
3.2.1
3.2.0
retired
3.1.0
3.0.0
2.24.1
2.24.0
retired
2.23.0
2.22.0
2.21.0
2.20.1
2.20.0
2.19.0
2.18.1
2.18.0
2.17.0
2.16.0
2.15.0
2.14.0
2.13.0
2.12.1
2.12.0
2.11.0
2.10.0
2.9.0
2.8.0
2.7.0
2.6.0
2.5.1
2.5.0
2.4.0
retired
2.3.0
2.2.1
2.2.0
2.1.1
2.1.0
2.0.0
1.6.0
1.5.2
1.5.1
1.5.0
1.4.0
1.3.1
retired
1.3.0
retired
1.2.1
1.2.0
1.1.0
1.0.0
0.5.2
0.5.1
0.5.0
0.4.3
0.4.2
0.4.1
0.4.0
0.3.3
0.3.2
0.3.1
0.3.0
0.2.0
0.1.0
All Things Elixir @ Surge Ventures Inc, the creators of Fresha
Current section
Files
Jump to
Current section
Files
lib/surgex/refactor/map_filenames.ex
defmodule Surgex.Refactor.MapFilenames do
@moduledoc """
Maps module names to filenames and finds non-matches.
"""
def call(filenames, opts) do
scanned = scan(filenames)
Enum.each(scanned, fn {filename, new_filename} ->
IO.puts("#{filename} => #{new_filename}")
end)
if length(scanned) == 0 do
IO.puts("No files found.")
end
if Keyword.get(opts, :fix, false) do
fixed = fix(scanned)
IO.puts("Renamed #{length(fixed)} file(s).")
fixed
else
scanned
end
end
def scan(filenames) do
filenames
|> Enum.map(&scan_map/1)
|> Enum.filter(&(&1))
end
defp scan_map(filename) do
module_match =
filename
|> File.stream!()
|> Enum.find_value(&Regex.run(~r/^defmodule ([\w.]+)/, &1))
with [_, module_name] <- module_match do
new_filename_wo_ext =
module_name
|> String.split(".")
|> List.last()
|> Macro.underscore()
new_filename = Path.join(
Path.dirname(filename),
new_filename_wo_ext <> Path.extname(filename))
if filename != new_filename do
{filename, new_filename}
end
else
_ -> nil
end
end
def fix(scanned_tuples) do
Enum.filter(scanned_tuples, fn {filename, new_filename} ->
File.rename(filename, new_filename)
true
end)
end
end