Address Ruby 2.7 kwargs edge case#1425
Merged
composerinteralia merged 1 commit intomasterfrom Jul 16, 2020
Merged
Conversation
2eacfe8 to
18f7f03
Compare
Closes #1423 5c071d4 fixed most kwarg deprecation warnings coming from within factory_bot, but using the Ruby 3-style argument forwarding does not handle every case. To handle the case of `initialize_with` being used with a method that takes a final hash argument, this commit adds an additional branch to this code to use `ruby2_keywords` for Ruby >= 2.7 and < 3.0. On 3.0 we use the 3.0-style forwarding. I added a tests that was outputting a deprecation warning on Ruby 2.7 before this change, but that no longer outputs the warning after this change. Yes, this is a bit of a mess, but I don't see a better way. I got inspiration here from this [fantastic blog post on argument delegating with Ruby 2.7 and 3][delegating]. [delegating]: https://eregon.me/blog/2019/11/10/the-delegation-challenge-of-ruby27.html#the-delegation-challenge.
18f7f03 to
cb8be1c
Compare
emilford
approved these changes
Jul 16, 2020
emilford
left a comment
There was a problem hiding this comment.
Looks good to me. Thanks for linking to the blog post.
This was referenced Jul 16, 2020
machupicchubeta
added a commit
to machupicchubeta/kirico
that referenced
this pull request
Mar 6, 2021
…guments, using the latest version of it `bundle update factory_bot` It seems that `initialize_with` of `factory_bot` raised `ArgumentError` related to keyword arguments of Ruby `3.0.0`. It seems that the latest version `factory_bot` `6.1.0` revised the error. CHANGELOG: - https://github.com/thoughtbot/factory_bot/blob/v6.1.0/NEWS.md Error was (Some excerpts): ``` Failures: 1) Kirico::Form when the form is for general use validations Failure/Error: def initialize(fd:, company_count: Kirico::CompanyCount.new, company:, records: []) @fd = fd @company_count = company_count @Company = company @records = records end ArgumentError: wrong number of arguments (given 1, expected 0; required keywords: fd, company) # ./lib/kirico/models/form.rb:21:in `initialize' # ./spec/factories/form.rb:6:in `block (3 levels) in <top (required)>' # ./spec/kirico/models/form_spec.rb:7:in `block (3 levels) in <top (required)>' # ./spec/kirico/models/form_spec.rb:14:in `block (4 levels) in <top (required)>' # ./spec/kirico/models/form_spec.rb:15:in `block (4 levels) in <top (required)>' ``` Refs. - thoughtbot/factory_bot@2eacfe8 - thoughtbot/factory_bot#1425 - thoughtbot/factory_bot#1423 - thoughtbot/factory_bot@5c071d4 - thoughtbot/factory_bot#1415
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #1423
5c071d4 fixed most kwarg deprecation warnings coming from within
factory_bot, but using the Ruby 3-style argument forwarding does not
handle every case.
To handle the case of
initialize_withbeing used with a method thattakes a final hash argument, this commit adds an additional branch to
this code to use
ruby2_keywordsfor Ruby >= 2.7 and < 3.0. On 3.0 weuse the 3.0-style forwarding.
I added a tests that was outputting a deprecation warning on Ruby 2.7
before this change, but that no longer outputs the warning after this
change.
Yes, this is a bit of a mess, but I don't see a better way. I got
inspiration here from this fantastic blog post on argument delegating
with Ruby 2.7 and 3.