Run one validator from another
Open
Nobody has claimed this yet.
feature request
- Dominant language
- Ruby
- Stars
- 10k
- Forks
- 1.2k
- Avg merge
- 14h 38m
- Merged PRs (30d)
- 92
Description
I am trying to build a validator for array e. g.
# complex validator, which will fail if array contains a string longer that allowed
class MyArrayValidator < Grape::Validations::Base
def validate_param!(attr_name, params)
if params[attr_name].any? { |element| element.size > @option }
fail Grape::Exceptions::Validation, params: [@scope.full_name(attr_name)], message: "array should not contain strings longer than #{@option}"
end
end
end
But there is a length validator (described in docs), so it's definitely a good idea to reuse it like that:
class MyArrayValidator < Grape::Validations::Base
def validate_param!(attr_name, params)
params[attr_name].each do |element|
run_validator!(element, length: @option)
end
end
end
Contributor guide
First steps
- Read the whole issue, then the project's contributing guide.
- Comment on the issue to say you are picking it up — it saves two people doing the same work.
- Fork the repository and make your change on a branch.
- Open a pull request that references the issue number.
Research direction
Start with Grape::Validations::Base and the existing length validator described in the documentation. Determine how one validator can invoke another for each array element, then verify that the custom array validator reports the expected validation failure for an overlong string.
Written by the indexing model from the issue text.
Assessment
- Tech stack
- ruby
- Domain
- api
- Issue type
- Feature
- Difficulty
- 3/5
- Estimated time
- 1-2 days
- Activity status
- Stale
- Clarity
- Mostly clear
- Newbie friendliness
- 35/100