Packages
surgex
4.5.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 Enum.empty?(scanned) 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))
case module_match do
[_, module_name] ->
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
_ ->
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