lib/roda/plugins/param_matchers.rb



class Roda
  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.
    #
    #   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.
    #
    #   r.on(:param! => 'foo') do |value|
    #     # Matches '?foo=bar'
    #     # Doesn't match '?foo=', '?bar=foo'
    #   end
    module ParamMatchers
      module RequestMethods
        # Match the given parameter if present, even if the parameter is empty.
        # Adds any 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.
        def match_param!(key)
          if (v = self[key]) && !v.empty?
            @captures << v
          end
        end
      end
    end

    register_plugin(:param_matchers, ParamMatchers)
  end
end