From 24a2479a9747925d255b11d26b067596263ceeb5 Mon Sep 17 00:00:00 2001 From: Jorge Morante Date: Wed, 20 Sep 2023 09:02:32 +0200 Subject: [PATCH] very simple option validation --- src/fingers/commands/load_config.cr | 23 +++++++++++++++++++---- src/fingers/config.cr | 4 ++++ 2 files changed, 23 insertions(+), 4 deletions(-) diff --git a/src/fingers/commands/load_config.cr b/src/fingers/commands/load_config.cr index e540007..af6162e 100644 --- a/src/fingers/commands/load_config.cr +++ b/src/fingers/commands/load_config.cr @@ -7,8 +7,15 @@ require "../../tmux" class Fingers::Commands::LoadConfig < Fingers::Commands::Base @fingers_options_names : Array(String) | Nil + property config : Fingers::Config + DISALLOWED_CHARS = /cimqn/ + def initialize(*args) + super(*args) + @config = Fingers::Config.new + end + def run validate_options! parse_tmux_conf @@ -24,8 +31,6 @@ class Fingers::Commands::LoadConfig < Fingers::Commands::Base Fingers.reset_config - config = Fingers::Config.new - config.tmux_version = `tmux -V`.chomp.split(" ").last options.each do |option, value| @@ -58,6 +63,7 @@ class Fingers::Commands::LoadConfig < Fingers::Commands::Base end if option.match(/pattern/) + check_pattern!(value) user_defined_patterns.push(value) end end @@ -132,8 +138,7 @@ class Fingers::Commands::LoadConfig < Fingers::Commands::Base def valid_option?(option) option_method = option_to_method(option) - # TODO validate option - true + @config.members.includes?(option_method) || option_method.match(/pattern_[0-9]+/) || option_method == "skip_wizard" end def fingers_options_names @@ -144,6 +149,16 @@ class Fingers::Commands::LoadConfig < Fingers::Commands::Base `tmux set-option -ug #{option}` end + def check_pattern!(pattern) + begin + Regex.new(pattern) + rescue e: ArgumentError + puts "[tmux-fingers] Invalid pattern: #{pattern}" + puts "[tmux-fingers] #{e.message}" + exit(1) + end + end + def validate_options! errors = [] of String diff --git a/src/fingers/config.cr b/src/fingers/config.cr index 9cd83d9..58b1fd0 100644 --- a/src/fingers/config.cr +++ b/src/fingers/config.cr @@ -87,6 +87,10 @@ module Fingers def save to_json(File.open(::Fingers::Dirs::CONFIG_PATH, "w")) end + + def members : Array(String) + JSON.parse(to_json).as_h.keys + end end def self.config