callables/keyword_forwarding.rb
tests/_examples/callables/keyword_forwarding.rb in the metorex repository.
# `ruby2_keywords` keeps the keyword hash a splat gathered marked, so the
# splat can pass it on as keywords again.
class Relay
ruby2_keywords def gather(*args)
args
end
def keywords(**given)
given
end
def positional(one)
one
end
end
relay = Relay.new
gathered = relay.gather 1, name: "ada"
p gathered
marked = gathered.last
p Hash.ruby2_keywords_hash? marked
original = { name: "ada" }
p Hash.ruby2_keywords_hash? original
p relay.keywords(*relay.gather(**original))
p Hash.ruby2_keywords_hash? relay.positional(*relay.gather(**original))
plain = -> *args { args }
p plain.call(2, name: "ada").last.class
marking = -> *args { args }
marking.ruby2_keywords
p Hash.ruby2_keywords_hash? marking.call(2, name: "ada").last
Output:
[1, {name: "ada"}]
true
false
{name: "ada"}
false
Hash
true