Class: Exwiw::CLI
- Inherits:
-
Object
- Object
- Exwiw::CLI
- Defined in:
- lib/exwiw/cli.rb
Constant Summary collapse
- KNOWN_SUBCOMMANDS =
%w[export explain].freeze
- DEFAULT_CONFIG_PATHS =
Config file loaded automatically when –config is omitted, if one exists in the current directory. Kept at the project root (rather than under exwiw/) so that config-relative paths like ‘schema_dir: exwiw/schema` read naturally. Both extensions are accepted; .yml wins when both are present.
%w[exwiw.yml exwiw.yaml].freeze
- ALLOWED_CONFIG_KEYS =
Keys accepted in the config file. Anything outside this set is rejected so a typo surfaces immediately instead of being silently ignored. These mirror the non-connection CLI options (plus ‘adapter`).
%w[ adapter schema_dir output_dir output_format insert_only after_insert_hook log_level target_table target_collection ids ids_field ids_column ].freeze
- REJECTED_CONNECTION_KEYS =
Database connection settings are environment-specific (and sometimes secret-adjacent), so they must be passed via CLI/env, never the committed config file. ‘adapter` is the one connection-ish key allowed in config.
%w[host port user database uri password].freeze
- EXPORT_ONLY_CONFIG_KEYS =
Keys that only make sense for ‘export`. They are skipped when merging config for `explain` so a shared config file does not trip validate_explain_only!.
%w[output_dir output_format insert_only after_insert_hook].freeze
Class Method Summary collapse
Instance Method Summary collapse
-
#initialize(argv) ⇒ CLI
constructor
A new instance of CLI.
- #run ⇒ Object
Constructor Details
#initialize(argv) ⇒ CLI
Returns a new instance of CLI.
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 |
# File 'lib/exwiw/cli.rb', line 53 def initialize(argv) @argv = argv.dup @subcommand = if !@argv.empty? && !@argv.first.start_with?("-") && KNOWN_SUBCOMMANDS.include?(@argv.first) @argv.shift else "export" end @help = @argv.empty? @database_host = nil @database_port = nil @database_user = nil @database_password = ENV["DATABASE_PASSWORD"] @connection_uri = nil @output_dir = nil @schema_dir = nil @config_file_path = nil @database_adapter = nil @database_name = nil @target_table_name = nil @target_collection_name = nil @ids = [] @ids_field = nil @ids_column = nil @output_format = nil @insert_only = nil @after_insert_hook_path = nil # nil (not :info) so we can tell "user passed --log-level" from the default, # letting a config-file value fill in; the :info default is applied later. @log_level = nil parser.parse!(@argv) end |
Class Method Details
.start(argv) ⇒ Object
49 50 51 |
# File 'lib/exwiw/cli.rb', line 49 def self.start(argv) new(argv).run end |
Instance Method Details
#run ⇒ Object
90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 |
# File 'lib/exwiw/cli.rb', line 90 def run if @help puts parser.help return end connection_config = ConnectionConfig.new( adapter: @database_adapter, host: @database_host, port: @database_port, user: @database_user, password: @database_password, database_name: @database_name, uri: @connection_uri, ) dump_target = DumpTarget.new( table_name: @target_table_name, ids: @ids, ids_field: @ids_field, ) logger = build_logger case @subcommand when "export" confirm_output_dir_clear! Runner.new( connection_config: connection_config, output_dir: @output_dir, schema_dir: @schema_dir, dump_target: dump_target, output_format: @output_format, insert_only: @insert_only, after_insert_hook_path: @after_insert_hook_path, cli_options: , logger: logger, ).run when "explain" ExplainRunner.new( connection_config: connection_config, schema_dir: @schema_dir, dump_target: dump_target, logger: logger, io: $stdout, ).run end end |