#!/usr/bin/env ruby # encoding: utf-8 $LOAD_PATH <<::File.expand_path('../../lib', __FILE__) require 'local_pac' module LocalPac module Cli class Main < Thor class_option :config_file, type: :string, desc: 'Config file' class_option :log_level, default: 'info', type: :string, desc: 'Log level for ui logging' class_option :debug_mode, type: :boolean, desc: 'Run application in debug mode' no_commands { include LocalPac::Cli::Helper } desc 'serve', 'Serve pacfiles' option :access_log, type: :string, desc: 'File to write access log to' option :listen, type: :string, desc: 'Listen for requests' option :environment, type: :string, desc: 'Rack environment for application' option :with, type: :string, default: 'puma', desc: 'Server used to serve proxy pac' def serve LocalPac.config = LocalPac::Config.new(options[:config_file]) if options[:config_file] LocalPac.config.access_log = options[:access_log] if options[:access_log] LocalPac.config.log_level = options[:log_level] if options[:log_level] LocalPac.config.debug_mode = options[:debug_mode] if options[:debug_mode] LocalPac.config.environment = options[:environment] if options[:environment] LocalPac.config.listen = options[:listen] if options[:listen] LocalPac.config.lock LocalPac.ui_logger.level = LocalPac.config.log_level LocalPac.enable_debug_mode if LocalPac.config.debug_mode LocalPac.ui_logger.debug('Options: ' + options.to_s) LocalPac.ui_logger.debug("Config:\n" + LocalPac.config.to_s) command_klass = case options[:with].to_sym when :puma ServerCommands::Puma when :rackup ServerCommands::Rackup else ServerCommands::Rackup end command = command_klass.new( listen: LocalPac.config.listen, environment: LocalPac.config.environment, ) ENV['DEBUG'] = LocalPac.config.debug_mode.to_s if LocalPac.config.debug_mode ENV['ACCESS_LOG'] = LocalPac.config.access_log.to_s if LocalPac.config.access_log ENV['LOG_LEVEL'] = LocalPac.config.log_level.to_s if LocalPac.config.log_level Server.new(command).start end desc 'init', 'Create files/directories to use local_pac in dir or $PWD' option :force, type: :boolean, default: false, desc: 'Overwrite existing files?' option :pre_seed, type: :boolean, default: false, desc: 'Add some example files to git repository' option :config_file, type: :string, desc: 'Path to config file' option :local_storage, type: :string, desc: 'Path to local storage' option :pid_file, type: :string, desc: 'Path to pid file' option :access_log, type: :string, desc: 'Path to access log' option :sass_cache, type: :string, desc: 'Path to sass cache' option :reload_config_signal, type: :string, desc: 'Signal to reload config' option :reload_storage_signal, type: :string, desc: 'Signal to reload local storage' option :api_key, type: :string, desc: 'API key for communication between git hook and web application' option :listen, type: :string, desc: 'Listen statement for rack server' option :environment, type: :string, desc: 'Default environment for rack server' option :create_pid_directory, type: :boolean, desc: 'Create pid directory', default: true option :create_log_directory, type: :boolean, desc: 'Create log directory', default: true option :create_sass_cache, type: :boolean, desc: 'Create sass cache directory', default: true option :create_local_storage, type: :boolean, desc: 'Create local storage directory', default: true option :create_pre_receive_hook, type: :boolean, desc: 'Create pre receive hook', default: true option :create_config_file, type: :boolean, desc: 'Create config_directory', default: true def init LocalPac.config = LocalPac::Config.new(options[:config_file]) if options[:config_file] LocalPac.config.log_level = options[:log_level] if options[:log_level] LocalPac.config.debug_mode = options[:debug_mode] if options[:debug_mode] LocalPac.config.local_storage = options[:local_storage] if options[:local_storage] LocalPac.config.pid_file = options[:pid_file] if options[:pid_file] LocalPac.config.access_log = options[:access_log] if options[:access_log] LocalPac.config.sass_cache = options[:sass_cache] if options[:sass_cache] LocalPac.config.reload_config_signal = options[:reload_config_signal] if options[:reload_config_signal] LocalPac.config.reload_storage_signal = options[:reload_storage_signal] if options[:reload_storage_signal] LocalPac.config.log_level = options[:log_level] if options[:log_level] LocalPac.config.api_key = options[:api_key] if options[:api_key] LocalPac.config.listen = options[:listen] if options[:listen] LocalPac.config.environment = options[:environment] if options[:environment] LocalPac.config.lock LocalPac.ui_logger.level = LocalPac.config.log_level LocalPac.enable_debug_mode if LocalPac.config.debug_mode LocalPac.ui_logger.debug('Options: ' + options.to_s) LocalPac.ui_logger.debug("Config:\n" + LocalPac.config.to_s) Initializer.new( force: options[:force], pre_seed: options[:pre_seed], create_pid_directory: options[:create_pid_directory], create_log_directory: options[:create_log_directory], create_sass_cache: options[:create_sass_cache], create_local_storage: options[:create_local_storage], create_pre_receive_hook: options[:create_pre_receive_hook], create_config_file: options[:create_config_file], ).run end desc 'status', 'Show status of local_pac: configuration, known proxy pacs, server running etc.' def status LocalPac.config = LocalPac::Config.new(options[:config_file]) if options[:config_file] LocalPac.config.log_level = options[:log_level] if options[:log_level] LocalPac.config.debug_mode = options[:debug_mode] if options[:debug_mode] LocalPac.config.lock LocalPac.ui_logger.level = LocalPac.config.log_level LocalPac.enable_debug_mode if LocalPac.config.debug_mode ApplicationStatus.new.show end desc 'reload', 'Reload configuration, local storage etc.' option :pid_file, type: :string, desc: 'Pid file of daemon' subcommand 'reload', LocalPac::Cli::Reload end end end LocalPac::Cli::Main.start