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:



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. 创建参数配置(自动处理验证等)
  options = 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,
      options,
      directory: working_dir,
      enable_cache: enable_cache
    )
  end

  options
end