Module: Roda::RodaPlugins::SymbolMatchers
- Defined in:
- lib/roda/plugins/symbol_matchers.rb
Overview
The symbol_matchers plugin allows you do define custom regexps to use for specific symbols. For example, if you have a route such as:
r.on :username do
# ...
end
By default this will match all nonempty segments. However, if your usernames
must be 6-20 characters, and can only contain a-z and 0-9, you can do:
plugin :symbol_matchers
symbol_matcher :username, /([a-z0-9]{6,20})/
Then the route will only if the path is /foobar123, but not if it is
/foo, /FooBar123, or /foobar_123.
Note that this feature does not apply to just symbols, but also to embedded colons in strings, so the following:
r.on "users/:username" do
# ...
end
Would match /users/foobar123, but not /users/foo, /users/FooBar123,
or /users/foobar_123.
By default, this plugin sets up the following symbol matchers:
:d :: /(\d+)/, a decimal segment :format :: /(?:.(\w+))?/, an optional format/extension :opt :: /(?:/([^/]+))?, an optional segment :optd :: /(?:/(\d+))?, an optional decimal segment :rest :: /(.*)/, all remaining characters, if any :w :: /(\w+)/, a alphanumeric segment
Note that because of how segment matching works, :format, :opt, and :optd are only going to work inside of a string, like this:
r.is "album:opt" do |id| end
# matches /album (yielding nil) and /album/foo (yielding "foo")
# does not match /album/ or /album/foo/bar
If using this plugin with the params_capturing plugin, this plugin should be loaded first.
Defined Under Namespace
Modules: ClassMethods, RequestMethods
Class Method Summary collapse
Class Method Details
.configure(app) ⇒ Object
51 52 53 54 55 56 57 58 |
# File 'lib/roda/plugins/symbol_matchers.rb', line 51 def self.configure(app) app.symbol_matcher(:d, /(\d+)/) app.symbol_matcher(:format, /(?:\.(\w+))?/) app.symbol_matcher(:opt, /(?:\/([^\/]+))?/) app.symbol_matcher(:optd, /(?:\/(\d+))?/) app.symbol_matcher(:rest, /(.*)/) app.symbol_matcher(:w, /(\w+)/) end |