lib/roku_builder/controller.rb in roku_builder-3.12.8 vs lib/roku_builder/controller.rb in roku_builder-3.13.0

- old
+ new

@@ -5,239 +5,89 @@ # Controls all interaction with other classes class Controller # Run the builder # @param options [Hash] The options hash - def self.run(options:, logger:) - if options[:debug] - logger.level = Logger::DEBUG - elsif options[:verbose] - logger.level = Logger::INFO - else - logger.level = Logger::WARN - end + def self.run(options:) + options = Options.new(options: options) - # Validate Options - options_code = validate_options(options: options) - ErrorHandler.handle_options_codes(options_code: options_code, options: options, logger: logger) + initialize_logger(options: options) - # Configure Gem - configure_code = configure(options: options, logger: logger) - ErrorHandler.handle_configure_codes(configure_code: configure_code, logger: logger) - # Load Config - load_code, config, configs = ConfigManager.load_config(options: options, logger: logger) - ErrorHandler.handle_load_codes(options: options, load_code: load_code, logger: logger) + config = Config.new(options: options) + config.configure + config.load + config.validate + config.parse - # Check Configs - configs_code = validate_configs(configs: configs) - ErrorHandler.handle_configs_codes(configs_code: configs_code, logger: logger) - # Check devices - device_code, configs = check_devices(options: options, config: config, configs: configs, logger: logger) - ErrorHandler.handle_device_codes(device_code: device_code, logger: logger) + device_code = check_devices(options: options, config: config) + ErrorHandler.handle_device_codes(device_code: device_code, logger: Logger.instance) # Run Commands - command_code = execute_commands(options: options, configs: configs, logger: logger) - ErrorHandler.handle_command_codes(command_code: command_code, logger: logger) + command_code = execute_commands(options: options, config: config) + ErrorHandler.handle_command_codes(command_code: command_code, logger: Logger.instance) end - # Validates the user options - # @param options [Hash] The options hash - # @return [Integer] Status code for command validation - def self.validate_options(options:) - command_result = validate_command_options(options: options) - return command_result unless command_result == VALID - source_result = validate_source_options(options: options) - return source_result unless source_result == VALID - combination_result = validate_option_combinations(options: options) - return combination_result unless combination_result == VALID - return validate_depricated_commands(options: options) - end - private_class_method :validate_options - - # Validates use of command options - # @param options [Hash] The options hash - # @return [Integer] Status code for command validation - def self.validate_command_options(options:) - all_commands = options.keys & commands - return EXTRA_COMMANDS if all_commands.count > 1 - return NO_COMMANDS if all_commands.count < 1 - VALID - end - private_class_method :validate_command_options - - # Validates use of source options - # @param options [Hash] The options hash - # @return [Integer] Status code for command validation - def self.validate_source_options(options:) - all_sources = options.keys & sources - return EXTRA_SOURCES if all_sources.count > 1 - if (options.keys & source_commands).count == 1 - return NO_SOURCE unless all_sources.count == 1 + def self.initialize_logger(options:) + if options[:debug] + Logger.set_debug + elsif options[:verbose] + Logger.set_info + else + Logger.set_warn end - VALID end - private_class_method :validate_source_options - # Validates proper option combinations - # @param options [Hash] The options hash - # @return [Integer] Status code for command validation - def self.validate_option_combinations(options:) - all_sources = options.keys & sources - if all_sources.include?(:current) - return BAD_CURRENT unless options[:build] or options[:sideload] - end - if options[:in] - return BAD_IN_FILE unless options[:sideload] - end - VALID - end - private_class_method :validate_option_combinations - - # Validate depricated options adn commands - # @param options [Hash] The Options hash - # @return [Integer] Status code for command validation - def self.validate_depricated_commands(options:) - depricated = options.keys & depricated_options.keys - if depricated.count > 0 - return DEPRICATED - end - VALID - end - private_class_method :validate_depricated_commands - - # Validate config hash - # @param configs [Hash] The Configs hash - # @return [Integer] Status code for command validation - def self.validate_configs(configs:) - unless Dir.exist?(configs[:out][:folder]) - return MISSING_OUT_FOLDER - end - VALID - end - private_class_method :validate_configs - # Run commands # @param options [Hash] The options hash # @return [Integer] Return code for options handeling # @param logger [Logger] system logger - def self.execute_commands(options:, configs:, logger:) - command = (commands & options.keys).first + def self.execute_commands(options:, config:) + command = options.command if ControllerCommands.simple_commands.keys.include?(command) params = ControllerCommands.simple_commands[command] - params[:configs] = configs - params[:logger] = logger + params[:config] = config ControllerCommands.simple_command(**params) else params = ControllerCommands.method(command.to_s).parameters.collect{|a|a[1]} args = {} params.each do |key| case key when :options args[:options] = options - when :configs - args[:configs] = configs - when :logger - args[:logger] = logger + when :config + args[:config] = config end end ControllerCommands.send(command, args) end end private_class_method :execute_commands # Ensure that the selected device is accessable # @param options [Hash] The options hash # @param logger [Logger] system logger - def self.check_devices(options:, config:, configs:, logger:) - command = (options.keys & commands).first - if device_commands.include?(command) + def self.check_devices(options:, config:) + if options.device_command? ping = Net::Ping::External.new - host = configs[:device_config][:ip] - return [GOOD_DEVICE, configs] if ping.ping? host, 1, 0.2, 1 - return [BAD_DEVICE, nil] if options[:device_given] - config[:devices].each_pair {|key, value| + host = config.parsed[:device_config][:ip] + return GOOD_DEVICE if ping.ping? host, 1, 0.2, 1 + return BAD_DEVICE if options[:device_given] + config.raw[:devices].each_pair {|key, value| unless key == :default host = value[:ip] if ping.ping? host, 1, 0.2, 1 - configs[:device_config] = value - configs[:device_config][:logger] = logger - return [CHANGED_DEVICE, configs] + config.parsed[:device_config] = value + return CHANGED_DEVICE end end } - return [NO_DEVICES, nil] + return NO_DEVICES end - return [GOOD_DEVICE, configs] + return GOOD_DEVICE end private_class_method :check_devices - - # List of command options - # @return [Array<Symbol>] List of command symbols that can be used in the options hash - def self.commands - [:sideload, :package, :test, :deeplink,:configure, :validate, :delete, - :navigate, :navigator, :text, :build, :monitor, :update, :screencapture, - :key, :genkey, :screen, :screens, :applist, :print, :profile, :dostage, - :dounstage] - end - - # List of depricated options - # @return [Hash] Hash of depricated options and the warning message for each - def self.depricated_options - {deeplink_depricated: "-L and --deeplink are depricated. Use -o or --deeplink-options." } - end - - # List of source options - # @return [Array<Symbol>] List of source symbols that can be used in the options hash - def self.sources - [:ref, :set_stage, :working, :current, :in] - end - - # List of commands requiring a source option - # @return [Array<Symbol>] List of command symbols that require a source in the options hash - def self.source_commands - [:sideload, :package, :test, :build, :key, :update, :print] - end - - # List of commands the activate the exclude files - # @return [Array<Symbol] List of commands the will activate the exclude files lists - def self.exclude_commands - [:build, :package] - end - - # List of commands that require a device - # @return [Array<Symbol>] List of commands that require a device - def self.device_commands - [:sideload, :package, :test, :deeplink, :delete, :navigate, :navigator, - :text, :monitor, :screencapture, :applist, :profile, :key, :genkey ] - end - - - # Configure the gem - # @param options [Hash] The options hash - # @return [Integer] Success or failure code - # @param logger [Logger] system logger - def self.configure(options:, logger:) - if options[:configure] - source_config = File.expand_path(File.join(File.dirname(__FILE__), "..", '..', 'config.json.example')) - target_config = File.expand_path(options[:config]) - if File.exist?(target_config) - unless options[:edit_params] - return CONFIG_OVERWRITE - end - else - ### Copy Config File ### - FileUtils.copy(source_config, target_config) - end - if options[:edit_params] - ConfigManager.edit_config(config: target_config, options: options, logger: logger) - end - return SUCCESS - end - nil - end - private_class_method :configure # Run a system command # @param command [String] The command to be run # @return [String] The output of the command def self.system(command:)