From: eregontp@... Date: 2020-01-12T16:45:59+00:00 Subject: [ruby-core:96808] [Ruby master Bug#16500] Argument is added to both splat and last &block argument Issue #16500 has been updated by Eregon (Benoit Daloze). FWIW the 2.6 behavior is detailed in ruby/spec: https://github.com/ruby/spec/blob/84d606aa8e85a8fef6521b3402dae612d04288c4/language/send_spec.rb#L424-L445 From commit https://github.com/ruby/spec/commit/01992ab93dd893d9e8bf79db9f5ff7d250952097 which shows RubyGems used to rely on the 2.6 behavior. What I want to say is existing code relies on 2.6 behavior. It's probably good to always evaluate positional arguments before the block argument for consistency, but it's an incompatible change. ---------------------------------------- Bug #16500: Argument is added to both splat and last &block argument https://bugs.ruby-lang.org/issues/16500#change-83803 * Author: anatolik (Anatol Pomozov) * Status: Open * Priority: Normal * Assignee: ioquatix (Samuel Williams) * Target version: * ruby -v: 2.7.0 * Backport: 2.5: UNKNOWN, 2.6: UNKNOWN, 2.7: UNKNOWN ---------------------------------------- Here is a followup for a ruby2.7 issue discussed here https://gitlab.com/groups/gitlab-org/-/epics/2380 I run gitlab with ruby2.7. gitlab/lib/api/api_guard.rb calls Rack's `use` method: ```ruby use Rack::OAuth2::Server::Resource::Bearer, 'The API' do |request| # The authenticator only fetches the raw token string # Must yield access token to store it in the env request.access_token end ``` The `use` method looks like: ```ruby def use(middleware, *args, &block) if @map mapping, @map = @map, nil @use << proc { |app| generate_map app, mapping } end @use << proc { |app| middleware.new(app, *args, &block) } end ``` For some reason, a `Proc` object was set to `&block` *and* added to `args`. It sounds wrong. A `Proc` should only be set to `&block`, and `args` should contain only one argument. -- https://bugs.ruby-lang.org/ Unsubscribe: