module Roda::RodaPlugins::BacktrackingArray::RequestMethods
Constants
- PATH_INFO
- SCRIPT_NAME
Private Instance Methods
_match_array(arg, rest=nil)
click to toggle source
When matching for a single array, after a successful array element match, attempt to match all remaining elements. If the remaining elements could not be matched, reset the state and continue to the next entry in the array.
Calls superclass method
# File lib/roda/plugins/backtracking_array.rb, line 36 def _match_array(arg, rest=nil) return super unless rest env = @env script = env[SCRIPT_NAME] path = env[PATH_INFO] caps = captures.dup arg.each do |v| if match(v, rest) if v.is_a?(String) captures.push(v) end if match_all(rest) return true end # Matching all remaining elements failed, reset state captures.replace(caps) env[SCRIPT_NAME] = script env[PATH_INFO] = path end end false end
match(v, rest = nil)
click to toggle source
When matching an array, include the remaining arguments, otherwise, just match the single argument.
Calls superclass method
# File lib/roda/plugins/backtracking_array.rb, line 80 def match(v, rest = nil) if v.is_a?(Array) _match_array(v, rest) else super(v) end end
match_all(args)
click to toggle source
If any of the args are an array, handle backtracking such that if a later matcher fails, we roll back to the current matcher and proceed to the next entry in the array.
# File lib/roda/plugins/backtracking_array.rb, line 65 def match_all(args) args = args.dup until args.empty? arg = args.shift if match(arg, args) return true if arg.is_a?(Array) else return end end true end