Class: Pindo::Options::OptionItem
- Inherits:
-
Object
- Object
- Pindo::Options::OptionItem
- Defined in:
- lib/pindo/options/core/option_item.rb
Overview
OptionItem 类定义单个参数的所有属性和行为(简化版)
Constant Summary collapse
- Boolean =
Boolean 类型标记
:boolean
Instance Attribute Summary collapse
-
#aliases ⇒ Object
Array<Symbol>: 参数别名.
-
#default_value ⇒ Object
Any: 默认值.
-
#description ⇒ Object
String: 参数描述.
-
#env_name ⇒ Object
String: 环境变量名.
-
#example ⇒ Object
String: 使用示例.
-
#key ⇒ Object
核心属性.
-
#optional ⇒ Object
Boolean: 是否可选(默认为 true).
-
#type ⇒ Object
Class: 数据类型 (String/Integer/Boolean).
-
#value_block ⇒ Object
Proc: 获取参数值的 block(交互式输入).
-
#verify_block ⇒ Object
Proc: 自定义验证逻辑.
Instance Method Summary collapse
-
#auto_convert_value(value) ⇒ Any
自动类型转换.
-
#boolean? ⇒ Boolean
判断是否是 Boolean 类型.
-
#fetch_env_value ⇒ String?
从环境变量读取值.
-
#initialize(key:, **options) ⇒ OptionItem
constructor
初始化方法.
-
#to_claide_option ⇒ Array
转换为 CLAide 选项格式(用于 –help 输出).
-
#valid?(value) ⇒ Boolean
验证参数值.
Constructor Details
#initialize(key:, **options) ⇒ OptionItem
初始化方法
24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 |
# File 'lib/pindo/options/core/option_item.rb', line 24 def initialize(key:, **) raise ArgumentError, "key must be a Symbol" unless key.is_a?(Symbol) @key = key @description = [:description] || [:desc] || "" @type = [:type] || String @env_name = [:env_name] @aliases = [:aliases] || [] @default_value = [:default_value] || [:default] @optional = .fetch(:optional, true) @verify_block = [:verify_block] @value_block = [:value_block] @example = [:example] validate_type! end |
Instance Attribute Details
#aliases ⇒ Object
Array<Symbol>: 参数别名
11 12 13 |
# File 'lib/pindo/options/core/option_item.rb', line 11 def aliases @aliases end |
#default_value ⇒ Object
Any: 默认值
12 13 14 |
# File 'lib/pindo/options/core/option_item.rb', line 12 def default_value @default_value end |
#description ⇒ Object
String: 参数描述
8 9 10 |
# File 'lib/pindo/options/core/option_item.rb', line 8 def description @description end |
#env_name ⇒ Object
String: 环境变量名
10 11 12 |
# File 'lib/pindo/options/core/option_item.rb', line 10 def env_name @env_name end |
#example ⇒ Object
String: 使用示例
16 17 18 |
# File 'lib/pindo/options/core/option_item.rb', line 16 def example @example end |
#key ⇒ Object
核心属性
7 8 9 |
# File 'lib/pindo/options/core/option_item.rb', line 7 def key @key end |
#optional ⇒ Object
Boolean: 是否可选(默认为 true)
13 14 15 |
# File 'lib/pindo/options/core/option_item.rb', line 13 def optional @optional end |
#type ⇒ Object
Class: 数据类型 (String/Integer/Boolean)
9 10 11 |
# File 'lib/pindo/options/core/option_item.rb', line 9 def type @type end |
#value_block ⇒ Object
Proc: 获取参数值的 block(交互式输入)
15 16 17 |
# File 'lib/pindo/options/core/option_item.rb', line 15 def value_block @value_block end |
#verify_block ⇒ Object
Proc: 自定义验证逻辑
14 15 16 |
# File 'lib/pindo/options/core/option_item.rb', line 14 def verify_block @verify_block end |
Instance Method Details
#auto_convert_value(value) ⇒ Any
自动类型转换
57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 |
# File 'lib/pindo/options/core/option_item.rb', line 57 def auto_convert_value(value) return nil if value.nil? case @type when Boolean, :boolean # Boolean 转换 if value.is_a?(String) return true if value.downcase == 'true' || value == '1' return false if value.downcase == 'false' || value == '0' end !!value when Integer value.to_i else # String 或其他类型 value.to_s end rescue StandardError => e raise ArgumentError, "参数 '#{@key}' 类型转换失败: #{e.}" end |
#boolean? ⇒ Boolean
判断是否是 Boolean 类型
42 43 44 |
# File 'lib/pindo/options/core/option_item.rb', line 42 def boolean? @type == Boolean || @type == :boolean end |
#fetch_env_value ⇒ String?
从环境变量读取值
48 49 50 51 52 |
# File 'lib/pindo/options/core/option_item.rb', line 48 def fetch_env_value return nil unless @env_name value = ENV[@env_name] value if value && !value.empty? end |
#to_claide_option ⇒ Array
转换为 CLAide 选项格式(用于 –help 输出)
94 95 96 97 98 99 |
# File 'lib/pindo/options/core/option_item.rb', line 94 def to_claide_option option_string = build_option_string description_text = build_description_text [option_string, description_text] end |
#valid?(value) ⇒ Boolean
验证参数值
81 82 83 84 85 86 87 88 89 90 |
# File 'lib/pindo/options/core/option_item.rb', line 81 def valid?(value) return true unless @verify_block begin @verify_block.call(value) true rescue StandardError => e raise ArgumentError, "参数 '#{@key}' 验证失败: #{e.}" end end |