Class: Meta::Utils::KeywordArgs::Argument

Inherits:
Object
  • Object
show all
Defined in:
lib/meta/utils/kwargs/builder.rb

Constant Summary collapse

DEFAULT_TRANSFORMER =
->(value) { value }

Instance Method Summary collapse

Constructor Details

#initialize(name:, normalizer: DEFAULT_TRANSFORMER, validator: nil, default: nil, alias_names: []) ⇒ Argument

Returns a new instance of Argument.



58
59
60
61
62
63
64
# File 'lib/meta/utils/kwargs/builder.rb', line 58

def initialize(name:, normalizer: DEFAULT_TRANSFORMER, validator: nil, default: nil, alias_names: [])
  @key_name = name
  @consumer_names = [name] + alias_names
  # TODO: 当且仅当 value 是 nil 时,才使用 default
  @normalizer = default ? ->(value) { normalizer.call(value || default) } : normalizer
  @validator = validator
end

Instance Method Details

#consume(final_args, args) ⇒ Object



66
67
68
69
70
71
# File 'lib/meta/utils/kwargs/builder.rb', line 66

def consume(final_args, args)
  @consumer_names.each do |name|
    return true if consume_name(final_args, args, name)
  end
  return false
end

#consume_name(final_args, args, consumer_name) ⇒ Object



73
74
75
76
77
78
79
80
81
82
83
# File 'lib/meta/utils/kwargs/builder.rb', line 73

def consume_name(final_args, args, consumer_name)
  # TODO: default 未起作用
  if args.key?(consumer_name)
    value = @normalizer.call(args.delete(consumer_name))
    @validator.call(value) if @validator
    final_args[@key_name] = value
    true
  else
    false
  end
end