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

Avoid 'last arg as keyword param' warning when building user middleware on Ruby 2.7 #1153

Commits on May 8, 2020

  1. Avoid 'last arg as keyword param' warning when building user middleware

    This change marks the methods which construct user middleware, so they are
    called with the 2.6 keyword argument behaviour in 2.7 (and avoid printing a
    warning about it).
    
    Some users add their own middleware & write their own constructors with named
    parameters, and use keyword arguments when adding their middleware to the
    builder:
    
    ```
    class MyMiddleware < Faraday::Middleware
      def initialize(app, my_argument:)
        @app = app
        @my_argument = my_argument
      end
    
    [...]
    
    connection = Faraday.new() do |configuration|
      configuration.use MyMiddleware, my_argument: 'hello'
    end
    ```
    
    This works great in 2.6 & 2.7, but 2.7 prints a deprecation warning:
    ```
    /Users/danielholz/.gem/ruby/2.7.0/gems/faraday-1.0.1/lib/faraday/dependency_loader.rb:21: warning: Using the last argument as keyword parameters is deprecated; maybe ** should be added to the call
    /Users/danielholz/code/some_project/lib/some_project/faraday_middleware.rb:2: warning: The called method `initialize' is defined here
    ```
    The warning is a bit frustrating, since the calling code is not in the user's
    code, so they cannot add `**` to the call. The best option for them is to
    change their middleware to accept a Hash as a positional parameter & pass a
    Hash when adding their middleware (and checking for required parameters
    themselves).
    
    I tried an alternative to `ruby2_keywords` by adding an explicit `**kwargs`
    argument to `Faraday::RackBuilder#use`, `Faraday::RackBuilder#use_symbol`,
    `Faraday::RackBuilder::Handler#initialize`, and
    `Faraday::DependencyLoader#new`, but it hit the explicit delegation of keyword
    arguments issue
    (https://www.ruby-lang.org/en/news/2019/12/12/separation-of-positional-and-keyword-arguments-in-ruby-3-0/#why-deprecated)
    in 2.6.
    dgholz committed May 8, 2020
    Copy the full SHA
    eab584e View commit details
    Browse the repository at this point in the history
  2. Copy the full SHA
    980a98b View commit details
    Browse the repository at this point in the history
  3. Decrease the scope of stub middleware classes

    Co-authored-by: Olle Jonsson <olle.jonsson@gmail.com>
    dgholz and olleolleolle committed May 8, 2020
    Copy the full SHA
    1538b70 View commit details
    Browse the repository at this point in the history
  4. Copy the full SHA
    0642990 View commit details
    Browse the repository at this point in the history
  5. Copy the full SHA
    9e759f0 View commit details
    Browse the repository at this point in the history
  6. Copy the full SHA
    e8f9364 View commit details
    Browse the repository at this point in the history
  7. Copy the full SHA
    b46f64d View commit details
    Browse the repository at this point in the history
  8. Copy the full SHA
    c858c47 View commit details
    Browse the repository at this point in the history
  9. Copy the full SHA
    8cd00a5 View commit details
    Browse the repository at this point in the history
  10. Copy the full SHA
    e40a305 View commit details
    Browse the repository at this point in the history
  11. Copy the full SHA
    6d41c57 View commit details
    Browse the repository at this point in the history
  12. Copy the full SHA
    385cd6d View commit details
    Browse the repository at this point in the history
  13. Copy the full SHA
    c97b62f View commit details
    Browse the repository at this point in the history

Commits on May 14, 2020

  1. Spec fix: derive test middleware from Faraday::Middleware

    We don't have a specific base class for Request middleware like we have for response ones (Faraday::Response::Middleware), so cat_request should probably inherit from Faraday::Middleware instead.
    olleolleolle committed May 14, 2020
    Copy the full SHA
    faadb91 View commit details
    Browse the repository at this point in the history