Class: Meta::Utils::KeywordArgs
- Inherits:
-
Object
- Object
- Meta::Utils::KeywordArgs
- Defined in:
- lib/meta/utils/kwargs/check.rb,
lib/meta/utils/kwargs/builder.rb,
lib/meta/utils/kwargs/checker.rb
Defined Under Namespace
Modules: Checker Classes: Argument, Builder
Class Method Summary collapse
Instance Method Summary collapse
- #check(args) ⇒ Object
-
#initialize(arguments, permit_extras = false, final_consumer = nil) ⇒ KeywordArgs
constructor
A new instance of KeywordArgs.
Constructor Details
#initialize(arguments, permit_extras = false, final_consumer = nil) ⇒ KeywordArgs
Returns a new instance of KeywordArgs.
25 26 27 28 29 |
# File 'lib/meta/utils/kwargs/builder.rb', line 25 def initialize(arguments, permit_extras = false, final_consumer = nil) @arguments = arguments @permit_extras = permit_extras @final_consumer = final_consumer end |
Class Method Details
.check(args:, schema:) ⇒ Object
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 |
# File 'lib/meta/utils/kwargs/check.rb', line 32 def check(args:, schema:) schemas = build_schemas(schema) # 不接受额外的关键字参数 extras = args.keys - schemas.keys raise "不接受额外的关键字参数:#{extras.join(', ')}" unless extras.empty? # 通过 schema 导出关键字参数 missing = [] result = schemas.map do |name, spec| if args.include?(name) [name, args[name]] elsif spec.include?(:default) [name, spec[:default]] else missing << name end end.to_h # 检查以上导出过程中是否找到缺失的参数 if missing.empty? result else raise "缺失必要的关键字参数:#{missing.join(', ')}" end end |
Instance Method Details
#check(args) ⇒ Object
31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 |
# File 'lib/meta/utils/kwargs/builder.rb', line 31 def check(args) args = args.dup final_args = {} @arguments.each do |argument| argument.consume(final_args, args) end # 做最终的修饰 @final_consumer.call(final_args, args) if @final_consumer # 处理剩余字段 unless args.keys.empty? if @permit_extras final_args.merge!(args) else extras = args.keys raise "不接受额外的关键字参数:#{extras.join(', ')}" unless extras.empty? end end final_args end |