feat: add support for version and verbose cli flags
All checks were successful
continuous-integration/drone/push Build is passing
All checks were successful
continuous-integration/drone/push Build is passing
This commit is contained in:
parent
9fc1ec3912
commit
27508ed5ac
2 changed files with 65 additions and 38 deletions
91
src/cli.cr
91
src/cli.cr
|
@ -8,6 +8,8 @@ require "./config"
|
|||
require "./fzf"
|
||||
|
||||
module GX
|
||||
VERSION="v0.1.9"
|
||||
|
||||
class Cli
|
||||
|
||||
@config : Config
|
||||
|
@ -29,41 +31,55 @@ module GX
|
|||
parser.on("-c", "--config FILE", "Set configuration file") do |path|
|
||||
@config.path = path
|
||||
end
|
||||
|
||||
parser.on("-v", "--verbose", "Set more verbosity") do |flag|
|
||||
@config.verbose = true
|
||||
end
|
||||
|
||||
parser.on("--version", "Show version") do |flag|
|
||||
@config.mode = Config::Mode::ShowVersion
|
||||
end
|
||||
|
||||
parser.on("-h", "--help", "Show this help") do |flag|
|
||||
STDOUT.puts parser
|
||||
exit(0)
|
||||
end
|
||||
|
||||
parser.separator("\nCommands")
|
||||
parser.on("create", "Create vault") do
|
||||
@config.mode = Config::Mode::Add
|
||||
parser.on("config", "Manage configuration") do
|
||||
parser.banner = "Usage: #{PROGRAM_NAME} config [commands] [options]\n\nGlobal options"
|
||||
parser.separator("\nCommands")
|
||||
|
||||
parser.banner = "Usage: #{PROGRAM_NAME} create [options]\n\nGlobal options"
|
||||
parser.separator("\nCommand options")
|
||||
parser.on("create", "Create vault") do
|
||||
@config.mode = Config::Mode::ConfigAdd
|
||||
|
||||
parser.on("-n", "--name", "Set vault name") do |name|
|
||||
add_args = add_args.merge({ name: name })
|
||||
parser.banner = "Usage: #{PROGRAM_NAME} config create [commands] [options]\n\nGlobal options"
|
||||
parser.separator("\nCommand options")
|
||||
|
||||
parser.on("-n", "--name", "Set vault name") do |name|
|
||||
add_args = add_args.merge({ name: name })
|
||||
end
|
||||
parser.on("-p", "--path", "Set vault encrypted path") do |path|
|
||||
add_args = add_args.merge({ path: path })
|
||||
end
|
||||
end
|
||||
parser.on("-p", "--path", "Set vault encrypted path") do |path|
|
||||
add_args = add_args.merge({ path: path })
|
||||
|
||||
parser.on("delete", "Delete vault") do
|
||||
@config.mode = Config::Mode::ConfigAdd
|
||||
|
||||
parser.banner = "Usage: #{PROGRAM_NAME} delete [options]\n\nGlobal options"
|
||||
parser.separator("\nCommand options")
|
||||
|
||||
parser.on("-n", "--name", "Set vault name") do |name|
|
||||
delete_args = delete_args.merge({ name: name })
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
parser.on("delete", "Delete vault") do
|
||||
@config.mode = Config::Mode::Add
|
||||
|
||||
parser.banner = "Usage: #{PROGRAM_NAME} delete [options]\n\nGlobal options"
|
||||
parser.separator("\nCommand options")
|
||||
|
||||
parser.on("-n", "--name", "Set vault name") do |name|
|
||||
delete_args = delete_args.merge({ name: name })
|
||||
parser.on("edit", "Edit configuration") do |flag|
|
||||
@config.mode = Config::Mode::ConfigEdit
|
||||
end
|
||||
end
|
||||
|
||||
parser.on("edit", "Edit configuration") do |flag|
|
||||
@config.mode = Config::Mode::Edit
|
||||
end
|
||||
|
||||
end
|
||||
pparser.parse(args)
|
||||
end
|
||||
|
@ -71,21 +87,28 @@ module GX
|
|||
def run()
|
||||
@config.load_from_file
|
||||
|
||||
case @config.mode
|
||||
when Config::Mode::ShowVersion
|
||||
STDOUT.puts "#{PROGRAM_NAME} #{VERSION}"
|
||||
when Config::Mode::Mount
|
||||
mount
|
||||
end
|
||||
end
|
||||
|
||||
def mount()
|
||||
names_display = {} of String => NamedTuple(filesystem: Filesystem, ansi_name: String)
|
||||
@config.filesystems.each do |filesystem|
|
||||
fs_str = filesystem.type.ljust(12,' ')
|
||||
result_name =
|
||||
if filesystem.mounted?
|
||||
"#{fs_str} #{filesystem.name} [open]"
|
||||
else
|
||||
"#{fs_str} #{filesystem.name}"
|
||||
end
|
||||
ansi_name =
|
||||
if filesystem.mounted?
|
||||
"#{fs_str.colorize(:dark_gray)} #{filesystem.name} [#{ "open".colorize(:green) }]"
|
||||
else
|
||||
"#{fs_str.colorize(:dark_gray)} #{filesystem.name}"
|
||||
end
|
||||
|
||||
suffix = ""
|
||||
suffix_ansi = ""
|
||||
if filesystem.mounted?
|
||||
suffix = "[open]"
|
||||
suffix_ansi = "[#{ "open".colorize(:green) }]"
|
||||
end
|
||||
|
||||
result_name = "#{fs_str} #{filesystem.name} #{suffix}".strip
|
||||
ansi_name = "#{fs_str.colorize(:dark_gray)} #{filesystem.name} #{suffix_ansi}".strip
|
||||
|
||||
names_display[result_name] = {
|
||||
filesystem: filesystem,
|
||||
|
@ -93,7 +116,7 @@ module GX
|
|||
}
|
||||
end
|
||||
|
||||
result_filesystem_name = Fzf.run(names_display.values.map(&.[:ansi_name]).sort)
|
||||
result_filesystem_name = Fzf.run(names_display.values.map(&.[:ansi_name]).sort).strip
|
||||
selected_filesystem = names_display[result_filesystem_name][:filesystem]
|
||||
puts ">> #{selected_filesystem.name}".colorize(:yellow)
|
||||
|
||||
|
|
|
@ -8,9 +8,11 @@ require "./filesystems"
|
|||
module GX
|
||||
class Config
|
||||
enum Mode
|
||||
Add
|
||||
Edit
|
||||
Run
|
||||
ConfigAdd
|
||||
ConfigDelete
|
||||
ConfigEdit
|
||||
ShowVersion
|
||||
Mount
|
||||
end
|
||||
|
||||
record NoArgs
|
||||
|
@ -19,6 +21,7 @@ module GX
|
|||
|
||||
getter filesystems : Array(Filesystem)
|
||||
getter home_dir : String
|
||||
property verbose : Bool
|
||||
property mode : Mode
|
||||
property path : String
|
||||
property args : AddArgs.class | DelArgs.class | NoArgs.class
|
||||
|
@ -31,7 +34,8 @@ module GX
|
|||
end
|
||||
@home_dir = ENV["HOME"]
|
||||
|
||||
@mode = Mode::Run
|
||||
@verbose = false
|
||||
@mode = Mode::Mount
|
||||
@filesystems = [] of Filesystem
|
||||
@path = File.join(@home_dir, ".config", DEFAULT_CONFIG_PATH)
|
||||
@args = NoArgs
|
||||
|
|
Loading…
Reference in a new issue