ruby-grape / grape

An opinionated framework for creating REST-like APIs in Ruby.
http://www.ruby-grape.org
MIT License
9.86k stars 1.22k forks source link

Grape::Util::Accept::Header : empty range in char class: /^([a-z*]+)\/([a-z0-9*&\^\- #2457

Closed dblock closed 3 weeks ago

dblock commented 3 weeks ago

Coming from https://github.com/kaminari/kaminari-grape/issues/1, that gem throws empty range in char class.

RegexpError:
  empty range in char class: /^([a-z*]+)\/([a-z0-9*&\^\-_cannot load such file -- kaminari-grape.+]+)(?:;([a-z0-9=;]+))?$/
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/grape-2.1.0/lib/grape/util/accept/header.rb:7:in `<module:Header>'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/grape-2.1.0/lib/grape/util/accept/header.rb:6:in `<module:Accept>'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/grape-2.1.0/lib/grape/util/accept/header.rb:5:in `<module:Util>'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/grape-2.1.0/lib/grape/util/accept/header.rb:4:in `<module:Grape>'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/grape-2.1.0/lib/grape/util/accept/header.rb:3:in `<top (required)>'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/kernel.rb:26:in `require'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/kernel.rb:26:in `require'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/cref.rb:91:in `const_get'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/cref.rb:91:in `get'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/loader/eager_load.rb:173:in `block in actual_eager_load_dir'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/loader/helpers.rb:47:in `block in ls'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/loader/helpers.rb:25:in `each'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/loader/helpers.rb:25:in `ls'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/loader/eager_load.rb:168:in `actual_eager_load_dir'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/loader/eager_load.rb:17:in `block (2 levels) in eager_load'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/loader/eager_load.rb:16:in `each'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/loader/eager_load.rb:16:in `block in eager_load'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/loader/eager_load.rb:10:in `synchronize'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/loader/eager_load.rb:10:in `eager_load'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/grape-2.1.0/lib/grape.rb:74:in `<top (required)>'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/kernel.rb:34:in `require'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/kernel.rb:34:in `require'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/kaminari-grape-1.0.1/lib/kaminari/grape.rb:4:in `<top (required)>'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/kernel.rb:34:in `require'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/kernel.rb:34:in `require'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/bundler-2.3.26/lib/bundler.rb:186:in `require'
# ./slack-gamebot.rb:4:in `<top (required)>'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/kernel.rb:34:in `require'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/kernel.rb:34:in `require'
# ./spec/spec_helper.rb:11:in `<top (required)>'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/kernel.rb:34:in `require'
# /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/kernel.rb:34:in `require'
# ./spec/slack-gamebot/version_spec.rb:1:in `<top (required)>'
# ------------------
# --- Caused by: ---
# LoadError:
#   cannot load such file -- kaminari-grape
#   /Users/dblock/.rvm/gems/ruby-3.0.5/gems/zeitwerk-2.6.16/lib/zeitwerk/kernel.rb:34:in `require'

Not sure why/how it happens, but it's caused by this line which may be incorrect.

ALLOWED_CHARACTERS = %r{^([a-z*]+)/([a-z0-9*&\^\-_#{$ERROR_INFO}.+]+)(?:;([a-z0-9=;]+))?$}.freeze
dblock commented 3 weeks ago

@ericproulx this was introduced in https://github.com/ruby-grape/grape/pull/2363 I believe

ericproulx commented 3 weeks ago

I'll remove the class. Its not used anymore since #2389