Comments (8)
Looks like unexpected expected behavior #671
Ah, that's it! It seems like the code conflates sets of params bundled using with
and sets of params bundled with optional
, that the PR seemingly targeted. We need to differentiate between "nesting" and "grouping", since the short-circuiting behavior is only desired sometimes.
from grape.
Possible fix ⬆️
from grape.
@dblock an example of spec that fails:
diff --git a/spec/grape/validations/validators/values_spec.rb b/spec/grape/validations/validators/values_spec.rb
index d8ef17c9..5d8daab9 100644
--- a/spec/grape/validations/validators/values_spec.rb
+++ b/spec/grape/validations/validators/values_spec.rb
@@ -261,6 +261,13 @@ describe Grape::Validations::Validators::ValuesValidator do
optional :name, type: String, values: %w[a b], allow_blank: true
end
get '/allow_blank'
+
+ params do
+ with(type: String) do
+ requires :type, values: ValuesModel.values
+ end
+ end
+ get 'values_wrapped_by_with_block'
end
end
@@ -730,4 +737,13 @@ describe Grape::Validations::Validators::ValuesValidator do
end
end
end
+
+ context 'when wrapped by with block' do
+ it 'rejects an invalid value' do
+ get 'values_wrapped_by_with_block'
+
+ expect(last_response.status).to eq 400
+ expect(last_response.body).to eq({ error: 'type is missing, type does not have a valid value' }.to_json)
+ end
+ end
end
Fails with:
Failures:
1) Grape::Validations::Validators::ValuesValidator when wrapped by with block rejects an invalid value
Failure/Error: expect(last_response.body).to eq({ error: 'type is missing, type does not have a valid value' }.to_json)
expected: "{\"error\":\"type is missing, type does not have a valid value\"}"
got: "{\"error\":\"type is missing\"}"
(compared using ==)
# ./spec/grape/validations/validators/values_spec.rb:746:in `block (3 levels) in <top (required)>'
Finished in 4.14 seconds (files took 1.71 seconds to load)
2189 examples, 1 failure
from grape.
Looks like a bug, appreciate a fix!
from grape.
Looks like unexpected expected behavior #671
from grape.
@eriklovmo Are you trying to fix it? Write some specs at least that fail?
from grape.
@eriklovmo Are you trying to fix it? Write some specs at least that fail?
I have not had time, unfortunately, but please see the fix from @numbata! @dblock
from grape.
Done in #2382. Thanks for acknowledging @dblock and thanks for the fix @numbata!
from grape.
Related Issues (20)
- undefined method `rewind' for #<Rack::Lint::Wrapper::InputWrapper w/Rack >= 3.0 HOT 4
- custom type not suppot multiple types, raise `Grape::Exceptions::ValidationErrors` HOT 1
- Route#options and Route#settings are confusing HOT 1
- Ruby 3.3 && cookiejar = ArgumentError HOT 1
- Use Rack's HeadersHash instead of {}
- endpoint method_missing vs override inspect HOT 2
- Values Validator => Proc's arity < 2 ? HOT 3
- Rails Edge requires Ruby >= 3.1
- Fix specs for Rack Edge
- Fix `params` warning method redefined
- Better tracking of gems deprecation
- Rack::Lint::Error => a header value must be a String or Array of Strings, but the value of 'content-type' is a NilClass HOT 2
- Recognize_path should account for HTTP method HOT 1
- Grape and Protecting Against Mass Assignment Abuse HOT 8
- Why do you convert PATH_INFO? Is there some RFC? HOT 2
- Add support for exclusive parameter groups (e.g. exactly_one_of) HOT 2
- Drop support rack ~> 1 ? HOT 2
- Replace Appraisals by eval_gemfile ? HOT 3
- DeprecatedConstantProxy without a deprecator is deprecated HOT 1
- Investigation memory allocations HOT 1
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from grape.