Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Support Ruby 3.0 #114

Closed
olleolleolle opened this issue Apr 13, 2021 · 9 comments
Closed

Support Ruby 3.0 #114

olleolleolle opened this issue Apr 13, 2021 · 9 comments

Comments

@olleolleolle
Copy link
Member

olleolleolle commented Apr 13, 2021

This Issue is a placeholder for the test failures seen in https://travis-ci.org/github/sinatra/mustermann/jobs/766897981

We recently added (#112) 3.0 to the build matrix, and allowed failures for it.

Now, we would like to fix the test failures!

  1) Mustermann::Template level 4 operator + pattern "/{a}/{+b}" is expected to expand {:a=>"foo/bar", :b=>"foo/bar"}

     Failure/Error: it { should expand(a: 'foo/bar', b: 'foo/bar').to('/foo%2Fbar/foo/bar') }

     

     ArgumentError:

       wrong number of arguments (given 1, expected 0)

     # ./mustermann/lib/mustermann/ast/expander.rb:21:in `block in <class:Expander>'

     # ./mustermann/lib/mustermann/ast/translator.rb:114:in `translate'

     # ./mustermann/lib/mustermann/ast/translator.rb:42:in `t'

     # ./mustermann/lib/mustermann/ast/expander.rb:17:in `block (2 levels) in <class:Expander>'

     # ./mustermann/lib/mustermann/ast/expander.rb:16:in `block in <class:Expander>'

     # ./mustermann/lib/mustermann/ast/translator.rb:114:in `translate'

     # ./mustermann/lib/mustermann/ast/translator.rb:42:in `t'

     # ./mustermann/lib/mustermann/ast/expander.rb:30:in `block in <class:Expander>'

     # ./mustermann/lib/mustermann/ast/translator.rb:114:in `translate'

     # ./mustermann/lib/mustermann/ast/translator.rb:42:in `t'

     # ./mustermann/lib/mustermann/ast/expander.rb:17:in `block (2 levels) in <class:Expander>'

     # ./mustermann/lib/mustermann/ast/expander.rb:16:in `block in <class:Expander>'

     # ./mustermann/lib/mustermann/ast/translator.rb:114:in `translate'

     # ./mustermann/lib/mustermann/ast/translator.rb:42:in `t'

     # ./mustermann/lib/mustermann/ast/expander.rb:34:in `block in <class:Expander>'

     # ./mustermann/lib/mustermann/ast/translator.rb:114:in `translate'

     # ./mustermann/lib/mustermann/ast/expander.rb:81:in `add'

     # ./mustermann/lib/mustermann/expander.rb:50:in `block in add'

     # ./mustermann/lib/mustermann/expander.rb:44:in `each'

     # ./mustermann/lib/mustermann/expander.rb:44:in `add'

     # ./mustermann/lib/mustermann/expander.rb:31:in `initialize'

     # ./mustermann/lib/mustermann/ast/pattern.rb:107:in `new'

     # ./mustermann/lib/mustermann/ast/pattern.rb:107:in `expand'

     # ./support/lib/support/expand_matcher.rb:20:in `block (2 levels) in <top (required)>'

     # ./mustermann-contrib/spec/template_spec.rb:566:in `block (5 levels) in <top (required)>'

  2) Mustermann::Extension uses Sinatra-style patterns by default 

     Failure/Error: before { app.get('/:slug(.:extension)?') { params[:slug] } }

     

     ArgumentError:

       wrong number of arguments (given 4, expected 3)

     # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

     # ./mustermann/spec/extension_spec.rb:22:in `block (3 levels) in <top (required)>'

  3) Mustermann::Extension uses Sinatra-style patterns by default 

     Failure/Error: before { app.get('/:slug(.:extension)?') { params[:slug] } }

     

     ArgumentError:

       wrong number of arguments (given 4, expected 3)

     # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

     # ./mustermann/spec/extension_spec.rb:22:in `block (3 levels) in <top (required)>'

  4) Mustermann::Extension uses Sinatra-style patterns by default 

     Failure/Error: before { app.get('/:slug(.:extension)?') { params[:slug] } }

     

     ArgumentError:

       wrong number of arguments (given 4, expected 3)

     # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

     # ./mustermann/spec/extension_spec.rb:22:in `block (3 levels) in <top (required)>'

  5) Mustermann::Extension uses Sinatra-style patterns by default 

     Failure/Error: before { app.get('/:slug(.:extension)?') { params[:slug] } }

     

     ArgumentError:

       wrong number of arguments (given 4, expected 3)

     # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

     # ./mustermann/spec/extension_spec.rb:22:in `block (3 levels) in <top (required)>'

  6) Mustermann::Extension except 

     Failure/Error: before { app.get('/auth/*', except: '/auth/login') { 'ok' } }

     

     ArgumentError:

       wrong number of arguments (given 4, expected 3)

     # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

     # ./mustermann/spec/extension_spec.rb:30:in `block (3 levels) in <top (required)>'

  7) Mustermann::Extension except 

     Failure/Error: before { app.get('/auth/*', except: '/auth/login') { 'ok' } }

     

     ArgumentError:

       wrong number of arguments (given 4, expected 3)

     # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

     # ./mustermann/spec/extension_spec.rb:30:in `block (3 levels) in <top (required)>'

  8) Mustermann::Extension capture global 

     Failure/Error: app.get('/:slug(.:ext)?') { params[:slug] }

     

     ArgumentError:

       wrong number of arguments (given 4, expected 3)

     # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

     # ./mustermann/spec/extension_spec.rb:39:in `block (4 levels) in <top (required)>'

  9) Mustermann::Extension capture global 

     Failure/Error: app.get('/:slug(.:ext)?') { params[:slug] }

     

     ArgumentError:

       wrong number of arguments (given 4, expected 3)

     # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

     # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

     # ./mustermann/spec/extension_spec.rb:39:in `block (4 levels) in <top (required)>'

  10) Mustermann::Extension capture route local 

      Failure/Error: app.get('/:id', capture: /\d+/) { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:49:in `block (4 levels) in <top (required)>'

  11) Mustermann::Extension capture route local 

      Failure/Error: app.get('/:id', capture: /\d+/) { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:49:in `block (4 levels) in <top (required)>'

  12) Mustermann::Extension capture global and route local global is a hash 

      Failure/Error: app.get('/:id(.:ext)?', capture: { ext: 'png' }) { ?a }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:60:in `block (5 levels) in <top (required)>'

  13) Mustermann::Extension capture global and route local global is a hash 

      Failure/Error: app.get('/:id(.:ext)?', capture: { ext: 'png' }) { ?a }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:60:in `block (5 levels) in <top (required)>'

  14) Mustermann::Extension capture global and route local global is a hash 

      Failure/Error: app.get('/:id(.:ext)?', capture: { ext: 'png' }) { ?a }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:60:in `block (5 levels) in <top (required)>'

  15) Mustermann::Extension capture global and route local global is a hash 

      Failure/Error: app.get('/:id(.:ext)?', capture: { ext: 'png' }) { ?a }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:60:in `block (5 levels) in <top (required)>'

  16) Mustermann::Extension capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', capture: { ext: 'png' }) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:74:in `block (5 levels) in <top (required)>'

  17) Mustermann::Extension capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', capture: { ext: 'png' }) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:74:in `block (5 levels) in <top (required)>'

  18) Mustermann::Extension capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', capture: { ext: 'png' }) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:74:in `block (5 levels) in <top (required)>'

  19) Mustermann::Extension capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', capture: { ext: 'png' }) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:74:in `block (5 levels) in <top (required)>'

  20) Mustermann::Extension capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', capture: { ext: 'png' }) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:74:in `block (5 levels) in <top (required)>'

  21) Mustermann::Extension capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', capture: { ext: 'png' }) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:74:in `block (5 levels) in <top (required)>'

  22) Mustermann::Extension pattern except 

      Failure/Error: before { app.get('/auth/*', pattern: { except: '/auth/login' }) { 'ok' } }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:91:in `block (4 levels) in <top (required)>'

  23) Mustermann::Extension pattern except 

      Failure/Error: before { app.get('/auth/*', pattern: { except: '/auth/login' }) { 'ok' } }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:91:in `block (4 levels) in <top (required)>'

  24) Mustermann::Extension pattern capture route local 

      Failure/Error: app.get('/:id', pattern: { capture: /\d+/ }) { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:100:in `block (5 levels) in <top (required)>'

  25) Mustermann::Extension pattern capture route local 

      Failure/Error: app.get('/:id', pattern: { capture: /\d+/ }) { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:100:in `block (5 levels) in <top (required)>'

  26) Mustermann::Extension pattern capture global and route local global is a hash 

      Failure/Error: app.get('/:id(.:ext)?', pattern: { capture: { ext: 'png' }}) { ?a }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:111:in `block (6 levels) in <top (required)>'

  27) Mustermann::Extension pattern capture global and route local global is a hash 

      Failure/Error: app.get('/:id(.:ext)?', pattern: { capture: { ext: 'png' }}) { ?a }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:111:in `block (6 levels) in <top (required)>'

  28) Mustermann::Extension pattern capture global and route local global is a hash 

      Failure/Error: app.get('/:id(.:ext)?', pattern: { capture: { ext: 'png' }}) { ?a }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:111:in `block (6 levels) in <top (required)>'

  29) Mustermann::Extension pattern capture global and route local global is a hash 

      Failure/Error: app.get('/:id(.:ext)?', pattern: { capture: { ext: 'png' }}) { ?a }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:111:in `block (6 levels) in <top (required)>'

  30) Mustermann::Extension pattern capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', pattern: { capture: { ext: 'png' }}) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:125:in `block (6 levels) in <top (required)>'

  31) Mustermann::Extension pattern capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', pattern: { capture: { ext: 'png' }}) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:125:in `block (6 levels) in <top (required)>'

  32) Mustermann::Extension pattern capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', pattern: { capture: { ext: 'png' }}) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:125:in `block (6 levels) in <top (required)>'

  33) Mustermann::Extension pattern capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', pattern: { capture: { ext: 'png' }}) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:125:in `block (6 levels) in <top (required)>'

  34) Mustermann::Extension pattern capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', pattern: { capture: { ext: 'png' }}) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:125:in `block (6 levels) in <top (required)>'

  35) Mustermann::Extension pattern capture global and route local global is not a hash 

      Failure/Error: app.get('/:slug(.:ext)?', pattern: { capture: { ext: 'png' }}) { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:125:in `block (6 levels) in <top (required)>'

  36) Mustermann::Extension pattern greedy default 

      Failure/Error: before { app.get('/:name.:ext') { params[:name] }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:142:in `block (5 levels) in <top (required)>'

  37) Mustermann::Extension pattern greedy default 

      Failure/Error: before { app.get('/:name.:ext') { params[:name] }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:142:in `block (5 levels) in <top (required)>'

  38) Mustermann::Extension pattern greedy enabled 

      Failure/Error: before { app.get('/:name.:ext', pattern: { greedy: true }) { params[:name] }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:148:in `block (5 levels) in <top (required)>'

  39) Mustermann::Extension pattern greedy enabled 

      Failure/Error: before { app.get('/:name.:ext', pattern: { greedy: true }) { params[:name] }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:148:in `block (5 levels) in <top (required)>'

  40) Mustermann::Extension pattern greedy disabled 

      Failure/Error: before { app.get('/:name.:ext', pattern: { greedy: false }) { params[:name] }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:154:in `block (5 levels) in <top (required)>'

  41) Mustermann::Extension pattern greedy disabled 

      Failure/Error: before { app.get('/:name.:ext', pattern: { greedy: false }) { params[:name] }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:154:in `block (5 levels) in <top (required)>'

  42) Mustermann::Extension pattern greedy global 

      Failure/Error: app.get('/:name.:ext') { params[:name] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:162:in `block (5 levels) in <top (required)>'

  43) Mustermann::Extension pattern greedy global 

      Failure/Error: app.get('/:name.:ext') { params[:name] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:162:in `block (5 levels) in <top (required)>'

  44) Mustermann::Extension pattern space_matches_plus default 

      Failure/Error: before { app.get('/foo bar') { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:172:in `block (5 levels) in <top (required)>'

  45) Mustermann::Extension pattern space_matches_plus default 

      Failure/Error: before { app.get('/foo bar') { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:172:in `block (5 levels) in <top (required)>'

  46) Mustermann::Extension pattern space_matches_plus enabled 

      Failure/Error: before { app.get('/foo bar', pattern: { space_matches_plus: true }) { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:178:in `block (5 levels) in <top (required)>'

  47) Mustermann::Extension pattern space_matches_plus enabled 

      Failure/Error: before { app.get('/foo bar', pattern: { space_matches_plus: true }) { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:178:in `block (5 levels) in <top (required)>'

  48) Mustermann::Extension pattern space_matches_plus disabled 

      Failure/Error: before { app.get('/foo bar', pattern: { space_matches_plus: false }) { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:184:in `block (5 levels) in <top (required)>'

  49) Mustermann::Extension pattern space_matches_plus disabled 

      Failure/Error: before { app.get('/foo bar', pattern: { space_matches_plus: false }) { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:184:in `block (5 levels) in <top (required)>'

  50) Mustermann::Extension pattern space_matches_plus global 

      Failure/Error: app.get('/foo bar') { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:192:in `block (5 levels) in <top (required)>'

  51) Mustermann::Extension pattern space_matches_plus global 

      Failure/Error: app.get('/foo bar') { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:192:in `block (5 levels) in <top (required)>'

  52) Mustermann::Extension pattern uri_decode default 

      Failure/Error: before { app.get('/&') { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:202:in `block (5 levels) in <top (required)>'

  53) Mustermann::Extension pattern uri_decode default 

      Failure/Error: before { app.get('/&') { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:202:in `block (5 levels) in <top (required)>'

  54) Mustermann::Extension pattern uri_decode enabled 

      Failure/Error: before { app.get('/&', pattern: { uri_decode: true }) { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:208:in `block (5 levels) in <top (required)>'

  55) Mustermann::Extension pattern uri_decode enabled 

      Failure/Error: before { app.get('/&', pattern: { uri_decode: true }) { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:208:in `block (5 levels) in <top (required)>'

  56) Mustermann::Extension pattern uri_decode disabled 

      Failure/Error: before { app.get('/&', pattern: { uri_decode: false }) { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:214:in `block (5 levels) in <top (required)>'

  57) Mustermann::Extension pattern uri_decode disabled 

      Failure/Error: before { app.get('/&', pattern: { uri_decode: false }) { 'ok' }}

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:214:in `block (5 levels) in <top (required)>'

  58) Mustermann::Extension pattern uri_decode global 

      Failure/Error: app.get('/&') { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:222:in `block (5 levels) in <top (required)>'

  59) Mustermann::Extension pattern uri_decode global 

      Failure/Error: app.get('/&') { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:222:in `block (5 levels) in <top (required)>'

  60) Mustermann::Extension type identity 

      Failure/Error: app.get('/:foo') { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:235:in `block (4 levels) in <top (required)>'

  61) Mustermann::Extension type identity 

      Failure/Error: app.get('/:foo') { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:235:in `block (4 levels) in <top (required)>'

  62) Mustermann::Extension type rails 

      Failure/Error: app.get('/:slug(.:extension)') { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:245:in `block (4 levels) in <top (required)>'

  63) Mustermann::Extension type rails 

      Failure/Error: app.get('/:slug(.:extension)') { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:245:in `block (4 levels) in <top (required)>'

  64) Mustermann::Extension type rails 

      Failure/Error: app.get('/:slug(.:extension)') { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:245:in `block (4 levels) in <top (required)>'

  65) Mustermann::Extension type rails 

      Failure/Error: app.get('/:slug(.:extension)') { params[:slug] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:245:in `block (4 levels) in <top (required)>'

  66) Mustermann::Extension type shell 

      Failure/Error: app.get('/{foo,bar}') { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:257:in `block (4 levels) in <top (required)>'

  67) Mustermann::Extension type shell 

      Failure/Error: app.get('/{foo,bar}') { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:257:in `block (4 levels) in <top (required)>'

  68) Mustermann::Extension type simple 

      Failure/Error: app.get('/(a)') { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:267:in `block (4 levels) in <top (required)>'

  69) Mustermann::Extension type simple 

      Failure/Error: app.get('/(a)') { 'ok' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:267:in `block (4 levels) in <top (required)>'

  70) Mustermann::Extension type simple 

      Failure/Error: app.get('/foo{/segments*}{.ext}') { "%p %p" % [params[:segments], params[:ext]] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:277:in `block (4 levels) in <top (required)>'

  71) Mustermann::Extension type simple 

      Failure/Error: app.get('/foo{/segments*}{.ext}') { "%p %p" % [params[:segments], params[:ext]] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:277:in `block (4 levels) in <top (required)>'

  72) Mustermann::Extension type simple 

      Failure/Error: app.get('/foo{/segments*}{.ext}') { "%p %p" % [params[:segments], params[:ext]] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:277:in `block (4 levels) in <top (required)>'

  73) Mustermann::Extension type simple 

      Failure/Error: app.get('/foo{/segments*}{.ext}') { "%p %p" % [params[:segments], params[:ext]] }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1584:in `route'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1371:in `get'

      # ./mustermann/spec/extension_spec.rb:277:in `block (4 levels) in <top (required)>'

  74) Mustermann::Extension works with filters 

      Failure/Error: app.before('/auth/*', except: '/auth/login') { halt 'auth required' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1345:in `add_filter'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1332:in `before'

      # ./mustermann/spec/extension_spec.rb:290:in `block (3 levels) in <top (required)>'

  75) Mustermann::Extension works with filters 

      Failure/Error: app.before('/auth/*', except: '/auth/login') { halt 'auth required' }

      

      ArgumentError:

        wrong number of arguments (given 4, expected 3)

      # ./mustermann/lib/mustermann/extension.rb:28:in `compile!'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1345:in `add_filter'

      # ./vendor/bundle/ruby/3.0.0/gems/sinatra-1.4.8/lib/sinatra/base.rb:1332:in `before'

      # ./mustermann/spec/extension_spec.rb:290:in `block (3 levels) in <top (required)>'

Finished in 1.83 seconds (files took 1.15 seconds to load)

4089 examples, 75 failures
All the 75 test failures, right here
@olleolleolle
Copy link
Member Author

A wild guess: https://eregon.me/blog/2021/02/13/correct-delegation-in-ruby-2-27-3.html This blog post can help fix this issue.

@epergo
Copy link
Member

epergo commented Apr 15, 2021

The majority of those errors are related to the Mustermann extension for Sinatra

That extension is only valid for Sinatra versions under 2.0 because from 2.0 onwards Mustermann is used by default so updating this code to work with Ruby 3 would mean giving Ruby 3.0 support for legacy Sinatra versions, is that really needed/desired?

Sinatra 2.0 was released 4 years ago so IMHO we have 2 alternatives, either we get rid of this extension because it isn't needed anymore or we extract the extension to its own gem.

WDYT?

PD: I may be completely wrong in my analysis, a second look is more than welcome 😄

@olleolleolle
Copy link
Member Author

Getting rid of it sounds strong!

Extraction seems like a good secondary option!

@epergo
Copy link
Member

epergo commented Apr 15, 2021

Getting rid of it sounds strong!

😅 yeah maybe the second option is better, for it we would need to create a new repository in the organization because if we create the gem under this monorepo we will find the same issues (running the test suite with 3 will fail) right?

@rkh
Copy link
Member

rkh commented Apr 15, 2021

Maybe move it to a separate gem and officially deprecate it?

@epergo
Copy link
Member

epergo commented Apr 15, 2021

@rkh I've created this repository with the extension extracted as its own gem, WDYT?

If this works for you guys we could move it to the Sinatra org so is easier to find.

@olleolleolle
Copy link
Member Author

@epergo Quick work! I like this direction.

@zzak
Copy link
Member

zzak commented Apr 15, 2021

Nice! I've forked it to the org: https://github.com/sinatra/mustermann-sinatra-extension

@zzak
Copy link
Member

zzak commented May 10, 2021

cc #72

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

No branches or pull requests

5 participants