50 lines
1.5 KiB
Ruby
50 lines
1.5 KiB
Ruby
require 'sinatra/version'
|
|
fail "no need to load the Mustermann extension for #{::Sinatra::VERSION}" if ::Sinatra::VERSION >= '2.0.0'
|
|
|
|
require 'mustermann'
|
|
|
|
module Mustermann
|
|
# Sinatra 1.x extension switching default pattern parsing over to Mustermann.
|
|
#
|
|
# @example With classic Sinatra application
|
|
# require 'sinatra'
|
|
# require 'mustermann'
|
|
#
|
|
# register Mustermann
|
|
# get('/:id', capture: /\d+/) { ... }
|
|
#
|
|
# @example With modular Sinatra application
|
|
# require 'sinatra/base'
|
|
# require 'mustermann'
|
|
#
|
|
# class MyApp < Sinatra::Base
|
|
# register Mustermann
|
|
# get('/:id', capture: /\d+/) { ... }
|
|
# end
|
|
#
|
|
# @see file:README.md#Sinatra_Integration "Sinatra Integration" in the README
|
|
module Extension
|
|
def compile!(verb, path, block, except: nil, capture: nil, pattern: { }, **options)
|
|
if path.respond_to? :to_str
|
|
pattern[:except] = except if except
|
|
pattern[:capture] = capture if capture
|
|
|
|
if settings.respond_to? :pattern and settings.pattern?
|
|
pattern.merge! settings.pattern do |key, local, global|
|
|
next local unless local.is_a? Hash
|
|
next global.merge(local) if global.is_a? Hash
|
|
Hash.new(global).merge! local
|
|
end
|
|
end
|
|
|
|
path = Mustermann.new(path, **pattern)
|
|
condition { params.merge! path.params(captures: Array(params[:captures]), offset: -1) }
|
|
end
|
|
|
|
super(verb, path, block, options)
|
|
end
|
|
|
|
private :compile!
|
|
end
|
|
end
|