Sinatra 自定义路由匹配器

2023-12-19 16:14 更新

如上显示,Sinatra 内置了对于使用字符串和正则表达式作为路由匹配的支持。但是,它并没有只限于此。你可以非常容易地定义你自己的匹配器:

class AllButPattern
  Match = Struct.new(:captures)  # :captures键中存放的就是捕获的匹配文本

  def initialize(except)
    @except   = except
    @captures = Match.new([])
  end

  def match(str)
    @captures unless @except === str
  end
end

def all_but(pattern)
  AllButPattern.new(pattern)
end

get all_but("/index") do
  # ...
end

上面的例子可能太繁琐了,因为它也可以用更简单的方式表述:

get // do
  pass if request.path_info == "/index"
  # ...
end

或者,使用反向查找模式:

get %r{^(?!/index$)} do
  # ...
end

以上内容是否对您有帮助:
在线笔记
App下载
App下载

扫描二维码

下载编程狮App

公众号
微信公众号

编程狮公众号