Packages
surgex
4.8.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/refactor.ex
defmodule Surgex.Refactor do
@moduledoc """
Tools for making code maintenance and refactors easier.
"""
def call(args) do
args
|> parse_args
|> call_task
end
defp parse_args(args) do
parse_result =
OptionParser.parse(
args,
switches: [fix: :boolean]
)
{opts, task, paths} =
case parse_result do
{opts, [task | paths], _} -> {opts, task, paths}
_ -> raise(ArgumentError, "No refactor task")
end
unless Keyword.get(opts, :fix, false) do
IO.puts("You're in a simulation mode, pass the --fix option to apply the action.")
IO.puts("")
end
filenames =
paths
|> expand_paths()
|> filter_elixir_files()
{task, filenames, opts}
end
defp call_task({task, filenames, opts}) do
"Elixir.Surgex.Refactor.#{Macro.camelize(task)}"
|> String.to_existing_atom()
|> apply(:call, [filenames, opts])
end
defp filter_elixir_files(paths) do
Enum.filter(paths, &String.match?(&1, ~r/\.exs?$/))
end
defp expand_paths([]), do: expand_paths(["."])
defp expand_paths(paths) when is_list(paths) do
paths
|> Enum.map(&expand_paths/1)
|> Enum.concat()
end
defp expand_paths(path) do
cond do
File.regular?(path) ->
[path]
File.dir?(path) ->
path
|> File.ls!()
|> Enum.map(&Path.join(path, &1))
|> Enum.map(&expand_paths/1)
|> Enum.concat()
true ->
[]
end
end
end