-
-
Notifications
You must be signed in to change notification settings - Fork 1.2k
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
fix: validators checking aliased param instead of original one #1852
Changes from 2 commits
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Original file line number | Diff line number | Diff line change |
---|---|---|
|
@@ -155,6 +155,16 @@ def initialize(value) | |
expect(last_response.status).to eq(400) | ||
expect(last_response.body).to eq('foo is empty') | ||
end | ||
|
||
it do | ||
subject.params do | ||
requires :foo, as: :bar, allow_blank: false | ||
end | ||
subject.get('/alias-not-blank-with-value') {} | ||
get '/alias-not-blank-with-value', foo: 'any' | ||
|
||
expect(last_response.status).to eq(200) | ||
There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I get status 400 here with the As the alias ( Given that alias is just for internal usage (inside There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. I'd tend to agree that this looks like a bug to me. Could you open an issue for this? There was a problem hiding this comment. Choose a reason for hiding this commentThe reason will be displayed to describe this comment to others. Learn more. (Thanks for looking at this!) |
||
end | ||
end | ||
|
||
context 'array without coerce type explicitly given' do | ||
|
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
This isn't reused, and we do a ton of things above, so I would just inline the two lines of the method here.
I think
delete
also always makes a copy, and we should assume anil
value is a thing, so to be consistent I what we do above:There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Errrr.... re-reading the code we move that
:as
to the "end". I understand why it works, but feels to me that it's wrong to rely on the order invalidations
which is not a visibly ordered array or hash.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I agree that relying on the order is not good, but that was the easier way I found to fix the bug so far.
Another approach would be set a variable to let others validators know about alias, but it seems to be a bigger change and I am not sure whether the outcome would be worth..
Please let me know whether you have more ideas.
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
I just don't think we can use on this approach to work reliably. There're no ordering guarantees. I think extracting
as
somehow is the proper way of doing it. Give it a try! We're here to help.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Check the new approach now please. Build is failing because of rubocop
lib/grape/endpoint.rb:6:3: C: Class has too many lines. [295/288]
.There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Run
rubocop -a ; rubocop --auto-gen-config
for this.