require "option_parser" require "./config" require "./fzf" module GX class Cli @config : Config def initialize() # Main execution starts here @config = Config.new ## FIXME: check that FZF is installed end def parse_command_line(args) # update add_args = { name: "", path: "" } delete_args = { name: "" } pparser = OptionParser.new do |parser| parser.banner = "Usage: gx-vault [options]\n\nGlobal options" parser.on("-c", "--config FILE", "Set configuration file") do |path| @config.path = path 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.banner = "Usage: gx-vault create [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("delete", "Delete vault") do @config.mode = Config::Mode::Add parser.banner = "Usage: gx-vault 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 parser.on("edit", "Edit configuration") do |flag| @config.mode = Config::Mode::Edit end end pparser.parse(args) end def run() @config.load_from_file # Correcting the fzf interaction part names_display = @config.vaults.map do |vault| vault.mounted? ? "#{vault.name} [#{ "open".colorize(:green) }]" : vault.name end selected_vault_name = Fzf.run(names_display.sort) puts ">> #{selected_vault_name}".colorize(:yellow) selected_vault = @config.vaults.find { |v| v.name == selected_vault_name } if selected_vault selected_vault.mounted? ? selected_vault.unmount : selected_vault.mount else STDERR.puts "Vault not found.".colorize(:red) end end end end