class ActionHandler::ArgsMaker
Public Instance Methods
make_args(method, supplier, context: nil)
click to toggle source
# File lib/action_handler/args_maker.rb, line 11 def make_args(method, supplier, context: nil) supplier_args = [context].compact values = [] keywords = {} method.parameters.each do |kind, name| unless supplier.respond_to?(name) raise ActionHandler::ActionArgumentError.new( method, "parameter #{name} is not defined in #{supplier}", ) end case kind when :req values << supplier.send(name, *supplier_args) when :keyreq keywords[name] = supplier.send(name, *supplier_args) when :opt, :key raise ActionHandler::ActionArgumentError.new(method, <<~ERR) Do not use optional arguments. ActionHandler always injects arguments even if the value is nil, so the optional values never be used. ERR when :rest, :keyrest raise ActionHandler::ActionArgumentError.new( method, 'rest arguments cannot be used', ) end end values << keywords unless keywords.empty? values end