functions/keywords_from_a_hash_no_parens.rb

tests/_examples/functions/keywords_from_a_hash_no_parens.rb in the metorex repository.

# A call may spread a hash into the keywords and name more of them beside it.
# The one written later wins.
def settings(name, colour: nil, size: nil)
  [name, colour, size]
end

held = { colour: "red", size: 2 }
p settings("box", **held)
p settings("box", **held, size: 9)
p settings("box", size: 9, **held)

# A keyword the call leaves out is named in the message.
def needs(salt:, pepper:)
  [salt, pepper]
end

begin
  needs salt: 1
rescue ArgumentError => problem
  puts problem.message
end

begin
  needs
rescue ArgumentError => problem
  puts problem.message
end

Output:

["box", "red", 2]
["box", "red", 9]
["box", "red", 2]
missing keyword: :pepper
missing keywords: :salt, :pepper