module Roda::RodaPlugins::ParamsCapturing::RequestMethods

def _match_string(str)

capture names if param capturing.
Add the capture names from this string to list of param
def _match_string(str)
  cap_len = @captures.length
  if (ret = super) && (pc = @_params_captures) && (cap_len != @captures.length)
    # Handle use with placeholder_string_matchers plugin
    pc.concat(str.scan(/(?<=:)\w+/))
  end
  ret
end

def _match_symbol(sym)

Add the symbol to the list of param capture names if param capturing.
def _match_symbol(sym)
  if pc = @_params_captures
    pc << sym.to_s
  end
  super
end

def if_match(args)

the matchers.
any captures to the params based on the param capture names added by
the matching, but turn it back off before yielding to the block. Add
If all arguments are strings or symbols, turn on param capturing during
def if_match(args)
  params = self.params
  if args.all?{|x| x.is_a?(String) || x.is_a?(Symbol)}
    pc = @_params_captures = []
  end
  super do |*a|
    if pc
      @_params_captures = nil
      pc.zip(a).each do |k,v|
        params[k] = v
      end
    end
    params['captures'].concat(a) 
    yield(*a)
  end
end

def params

Lazily initialize captures entry when params is called.
def params
  ret = super
  ret['captures'] ||= []
  ret
end