Current section
Files
Jump to
Current section
Files
examples/file_management.ex
defmodule MyCLI do
@moduledoc """
MyCLI provides file operations such as copy, move, and delete using the Nexus.CLI DSL.
"""
use Nexus.CLI, otp_app: :nexus_cli
defcommand :version do
description "Shows the version of the CLI"
end
defcommand :folder do
description "Performs folder operations like merging"
subcommand :merge do
description "Merges two or more directories"
value {:list, :string}, required: true, as: :targets
flag :level do
description "The level of the folder that will be merged"
value :integer, required: false
short :l
end
flag :recursive do
description "IF the merge should operate recursively"
value :boolean, required: false, default: false
short :rc
end
end
end
defcommand :file do
description "Performs file operations such as copy, move, and delete."
subcommand :copy do
description "Copies files from source to destination."
value :string, required: true, as: :source
value :string, required: true, as: :dest
flag :level do
value :integer, required: false
end
flag :verbose do
short :v
description "Enables verbose output."
end
flag :recursive do
short :rc
description "Copies directories recursively."
end
end
subcommand :move do
description "Moves files from source to destination."
value :string, required: true, as: :source
value :string, required: true, as: :dest
flag :force do
short :f
description "Forces the move without confirmation."
end
flag :verbose do
short :v
description "Enables verbose output."
end
end
subcommand :delete do
description "Deletes specified files or directories."
value {:list, :string}, required: true, as: :targets
flag :force do
short :f
description "Forces deletion without confirmation."
end
flag :recursive do
short :rc
description "Deletes directories recursively."
end
flag :verbose do
short :v
description "Enables verbose output."
end
end
end
@impl Nexus.CLI
def handle_input(:version, _) do
# `version/0` comes from Nexus.CLI or the callback this module defined
vsn = version()
IO.puts(vsn)
end
def handle_input([:folder, :merge], %{args: args, flags: flags}) do
if flags.recursive do
IO.puts("Recursive merging enabled")
end
if level = flags.level do
IO.puts("Set level of merging to #{level}")
end
Enum.each(args.targets, fn target ->
IO.puts("Merged #{target}")
end)
:ok
end
def handle_input([:file, :copy], %{args: args, flags: flags}) do
if flags.verbose do
IO.puts("Copying from #{args.source} to #{args.dest}")
end
if flags.recursive do
IO.puts("Recursive copy enabled")
end
# Implement actual copy logic here
IO.puts("Copied #{args.source} to #{args.dest}")
:ok
end
def handle_input([:file, :move], %{args: args, flags: flags}) do
if flags.verbose do
IO.puts("Moving from #{args.source} to #{args.dest}")
end
if flags.force do
IO.puts("Force move enabled")
end
# Implement actual move logic here
IO.puts("Moved #{args.source} to #{args.dest}")
:ok
end
def handle_input([:file, :delete], %{args: args, flags: flags}) do
if flags.verbose do
IO.puts("Deleting targets: #{Enum.join(args.targets, ", ")}")
end
if flags.recursive do
IO.puts("Recursive delete enabled")
end
if flags.force do
IO.puts("Force delete enabled")
end
# Implement actual delete logic here
Enum.each(args.targets, fn target ->
IO.puts("Deleted #{target}")
end)
:ok
end
end