Sinatra 自定義路由匹配器

2023-12-19 16:14 更新

如上顯示,Sinatra 內(nèi)置了對于使用字符串和正則表達(dá)式作為路由匹配的支持。但是,它并沒有只限于此。你可以非常容易地定義你自己的匹配器:

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

以上內(nèi)容是否對您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號
微信公眾號

編程獅公眾號