The double splat operator gathers keyword options into a hash.

Double Splat

double_splat.rb
def describe_user(name, **options)
  role = options[:role] || "guest"
  format = options[:format] || "short"
  "#{name}:#{role}:#{format}"
end

format = 
description = describe_user("Ada", role: "admin", format: format)

puts "format=#{format}"
puts "description=#{description}"
def describe_user(name, **options)
  role = options[:role] || "guest"
  format = options[:format] || "short"
  "#{name}:#{role}:#{format}"
end

format = 
description = describe_user("Ada", role: "admin", format: format)

puts "format=#{format}"
puts "description=#{description}"
def describe_user(name, **options)
  role = options[:role] || "guest"
  format = options[:format] || "short"
  "#{name}:#{role}:#{format}"
end

format = 
description = describe_user("Ada", role: "admin", format: format)

puts "format=#{format}"
puts "description=#{description}"
double splat `**options` captures keyword arguments that were not listed separately.