lib/roda/plugins/param_matchers.rb in roda-2.5.1 vs lib/roda/plugins/param_matchers.rb in roda-2.6.0
- old
+ new
@@ -2,38 +2,68 @@
module RodaPlugins
# The param_matchers plugin adds hash matchers that operate
# on the request's params.
#
# It adds a :param matcher for matching on any param with the
- # same name, yielding the value of the param.
+ # same name, yielding the value of the param:
#
# r.on :param => 'foo' do |value|
# # Matches '?foo=bar', '?foo='
# # Doesn't match '?bar=foo'
# end
#
# It adds a :param! matcher for matching on any non-empty param
- # with the same name, yielding the value of the param.
+ # with the same name, yielding the value of the param:
#
# r.on(:param! => 'foo') do |value|
# # Matches '?foo=bar'
# # Doesn't match '?foo=', '?bar=foo'
# end
+ #
+ # It also adds :params and :params! matchers, for matching multiple
+ # params at the same time:
+ #
+ # r.on :params => ['foo', 'baz'] do |value|
+ # # Matches '?foo=bar&baz=quuz', '?foo=&baz='
+ # # Doesn't match '?foo=bar', '?baz='
+ # end
+ #
+ # r.on :params! => ['foo', 'baz'] do |value|
+ # # Matches '?foo=bar&baz=quuz'
+ # # Doesn't match '?foo=bar', '?baz=', '?foo=&baz=', '?foo=bar&baz='
+ # end
+ #
module ParamMatchers
module RequestMethods
# Match the given parameter if present, even if the parameter is empty.
- # Adds any match to the captures.
+ # Adds match to the captures.
def match_param(key)
if v = self[key]
@captures << v
end
end
# Match the given parameter if present and not empty.
- # Adds any match to the captures.
+ # Adds match to the captures.
def match_param!(key)
if (v = self[key]) && !v.empty?
@captures << v
+ end
+ end
+
+ # Match all given parameters if present, even if any/all parameters is empty.
+ # Adds all matches to the captures.
+ def match_params(keys)
+ keys.each do |key|
+ return false unless match_param(key)
+ end
+ end
+
+ # Match all given parameters if present and not empty.
+ # Adds all matches to the captures.
+ def match_params!(keys)
+ keys.each do |key|
+ return false unless match_param!(key)
end
end
end
end