Last Update: 2023-06-13 07:51:16 -0700

New Feature

  • The symbol_matcher method in the symbol_matchers plugin now supports a block to allow for type conversion of matched segments:

    symbol_matcher(:date, /(\d\d\d\d)-(\d\d)-(\d\d)/) do |y, m, d|
      [Date.new(y.to_i, m.to_i, d.to_i)]
    route do |r|
      r.on :date do |date|
        # date is an instance of Date

    As shown above, the block should return an array of objects to yield to the match block.

    If you have a segment match the passed regexp, but decide during block processing that you do not want to treat it as a match, you can have the block return nil or false. This is useful if you want to make sure you are using valid data:

    symbol_matcher(:date, /(\d\d\d\d)-(\d\d)-(\d\d)/) do |y, m, d|
      y = y.to_i
      m = m.to_i
      d = d.to_i
      [Date.new(y, m, d)] if Date.valid_date?(y, m, d)

    When providing a block when using the symbol_matchers method, that symbol may not work with the params_capturing plugin.