lib/evostream/cli/option.rb in evostream-event-1.0.0.pre.58 vs lib/evostream/cli/option.rb in evostream-event-1.0.0.pre.59

- old
+ new

@@ -1,48 +1,101 @@ # frozen_string_literal: true +# :reek:InstanceVariableAssumption +# :reek:TooManyConstants +# :reek:TooManyStatements + module Evostream module CLI + # Class for parsing option used in CLI software class Options - CASE_HELP = ['-h', '--help'] - CASE_CMD = ['-c', '--commands'] - CASE_SERVER = ['-s', '--server'] - CASE_ENV = ['-e', '--environment'] + CASE_HELP = ['-h', '--help'].freeze + CASE_CMD = ['-c', '--commands'].freeze + CASE_HOST = ['--server'].freeze + CASE_PORT = ['--port'].freeze + CASE_SEARCH = ['-s', '--search'].freeze + CASE_CONFIG = ['--config'].freeze - def initialize + attr_reader :search + + def initialize(configuration) + @search = nil @file = File.read(File.join(__dir__, 'help')) + @config = configuration end # Parse options and execute action if necessary + # rubocop:disable Style/EmptyCaseCondition + # rubocop:disable Metrics/PerceivedComplexity + # rubocop:disable Metrics/CyclomaticComplexity + # rubocop:disable Metrics/AbcSize def parse(argv) @command_line_args = argv case when include(CASE_HELP) then display_help when include(CASE_CMD) then display_command + when include(CASE_HOST) then use_host + when include(CASE_PORT) then use_port + when include(CASE_SEARCH) then search_in_response + when include(CASE_CONFIG) then use_config_file when @command_line_args.empty? then display_no_command end end + # rubocop:enable Style/EmptyCaseCondition + # rubocop:enable Metrics/AbcSize + # rubocop:enable Metrics/CyclomaticComplexity + # rubocop:enable Metrics/PerceivedComplexity private def include(case_parse) case_parse.any? { |value| @command_line_args.include?(value) } end def display_help puts @file + raise CodeError::Finished end def display_command puts 'Commands :' Evostream::Commands::Command.descendants.each do |cmd| puts " - #{cmd.to_s.split('::').last}" end + raise CodeError::Finished end + def use_host + @config.change_host(parameter('--server')) + end + + def use_port + @config.change_port(parameter('--port')) + end + + def search_in_response + CASE_SEARCH.each do |search| + @search = parameter(search) if args_has_present?(search) + end + end + + def use_config_file + file = File.join(parameter('--config')) + @config.load_custom_file(file) + end + def display_no_command - puts 'No command executed !!'.red display_help + raise CodeError::Syntax::OptionInvalid + end + + def parameter(search_case) + param = @command_line_args.find_index(search_case) + @command_line_args[param + 1] + end + + def args_has_present?(ind) + @command_line_args.find_index(ind) end end end end