functions/keywords_or_a_hash.rb

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

gather = proc { |*args, **kwargs| [args, kwargs] }
p gather.call({})
p gather.call(**{})
p gather.call({limit: 3})
p gather.call(limit: 3)

def pass_along(*args, **kwargs)
  yield(*args, **kwargs)
end

empty = {}
p(pass_along(**empty) { |*seen| seen })
p(pass_along(empty) { |*seen| seen })

def fetch_rows(*tables, limit:)
  [tables, limit]
end

p fetch_rows(:users, limit: 5)
[
  -> { fetch_rows(limit: 1, offset: 2) },
  -> { fetch_rows(limit: 1, true => false) },
  -> { fetch_rows(limit: 1, offset: 2, order: 3) },
].each do |attempt|
  begin
    attempt.call
  rescue ArgumentError => error
    puts error.message
  end
end

flagged = Hash.ruby2_keywords_hash(limit: 1)
def echo(value)
  value
end
p echo(flagged).equal?(flagged)
p Hash.ruby2_keywords_hash?(flagged)

def twice(value) = yield(yield(value))
p(twice(2) { |held| held * 3 })
p fetch_rows(*[:users, :posts], limit: 2)

Output:

[[{}], {}]
[[], {}]
[[{limit: 3}], {}]
[[], {limit: 3}]
[]
[{}]
[[:users], 5]
unknown keyword: :offset
unknown keyword: true
unknown keywords: :offset, :order
true
true
18
[[:users, :posts], 2]