Module: Pindo::Options::OptionInitializer
- Defined in:
- lib/pindo/options/core/option_initializer.rb
Overview
参数初始化器提供统一的参数初始化流程:解析 → 配置 → 注册
Class Method Summary collapse
Class Method Details
.initialize(command_instance, argv, option_items, command_name, directory: nil, enable_cache: false) ⇒ OptionConfiguration
初始化命令参数
20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 |
# File 'lib/pindo/options/core/option_initializer.rb', line 20 def self.initialize(command_instance, argv, option_items, command_name, directory: nil, enable_cache: false) # 1. 解析参数值(从命令行和环境变量) raw_values = OptionValueParser.parse(argv, option_items) # 2. 如果启用缓存,合并缓存值到 raw_values # 注意:如果是 --help 参数,跳过缓存逻辑 is_help_flag = argv.flag?('help') if enable_cache && !is_help_flag # 安全获取当前目录,如果目录不存在则使用临时目录 working_dir = directory || (Dir.pwd rescue Dir.tmpdir) state = GlobalOptionsState.instance state.prepare_cache(command_name, working_dir) cached_values = state.load_cached_values # 缓存值优先级:命令行参数 > 缓存 > 默认值 # 只有在命令行未提供的参数才使用缓存 cached_values.each do |key, value| raw_values[key] = value unless raw_values.key?(key) end end # 3. 创建参数配置(自动处理验证等) = OptionConfiguration.new(option_items, raw_values) # 4. 设置全局状态(帮助模式下跳过) unless is_help_flag # 安全获取当前目录,如果目录不存在则使用临时目录 working_dir = directory || (Dir.pwd rescue Dir.tmpdir) GlobalOptionsState.instance.set_command( command_name, , directory: working_dir, enable_cache: enable_cache ) end end |