callables/keyword_forwarding_parens.rb
tests/_examples/callables/keyword_forwarding_parens.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