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:

  • 命令实例

  • 命令行参数

  • 参数项列表

  • 命令名称

  • (defaults to: nil)

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

  • (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