# frozen-string-literal: true
# Build from official params_capturing plugin
class RodaCapture
module RequestMethods
def captures_hash
@captures_hash ||= {}
end
private
# Add the symbol to the list of capture names if capturing
def _match_symbol(sym)
@_sym_captures << sym if @_sym_captures
super
end
# If all arguments are strings or symbols, turn on param capturing during
# the matching, but turn it back off before yielding to the block. Add
# any captures to the params based on the param capture names added by
# the matchers.
def if_match(args)
@_sym_captures = [] if args.all? { |x| x.is_a?(Symbol) }
super do |*a|
if @_sym_captures
@_sym_captures.zip(a).each do |k, v|
captures_hash[k] = v
end
@_sym_captures = nil
end
yield(*a)
end
end
end
end