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

初始化命令参数

Parameters:

  • command_instance (Object)

    命令实例

  • argv (CLAide::ARGV)

    命令行参数

  • option_items (Array<OptionItem>)

    参数项列表

  • command_name (String)

    命令名称

  • directory (String, nil) (defaults to: nil)

    工作目录(默认:当前目录)

  • enable_cache (Boolean) (defaults to: false)

    是否启用缓存(默认:false)

Returns:



19
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
# File 'lib/pindo/options/core/option_initializer.rb', line 19

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
  if enable_cache
    state = GlobalOptionsState.instance
    state.prepare_cache(command_name, directory || Dir.pwd)
    cached_values = state.load_cached_values

    # 缓存值优先级:命令行参数 > 缓存 > 默认值
    # 只有在命令行未提供的参数才使用缓存
    cached_values.each do |key, value|
      raw_values[key] = value unless raw_values.key?(key)
    end
  end

  # 3. 创建参数配置(自动处理验证等,传入命令实例用于 value_block)
  options = OptionConfiguration.new(option_items, raw_values, command_instance: command_instance)

  # 4. 设置全局状态
  GlobalOptionsState.instance.set_command(
    command_name,
    options,
    directory: directory || Dir.pwd,
    enable_cache: enable_cache
  )

  options
end