Comments (5)
I should add that in this example, I don't care about validations, only coercion.
from validations.
@lasseebert I apologize for taking so long to reply.
Coercion can't be performed at the initialization time because of it can potentially raise TypeError
.
Because params are instantiated before your implementation of #call
is invoked, in case of failed coercion, your app will return server side error, without you are even able to control the flow.
Would you please explore the lazy coercion alternative? Thanks!
from validations.
If coercion is treated as some kind of special validation (not run on valid?
) it could instead be run (and memoized) the first time that attribute is accessed.
Something like
# lib/lotus/validations.rb
module Lotus
module Validations
# ...
module ClassMethods
def attribute(name, options = {})
attributes[name.to_sym] = validate_options!(name, options)
class_eval %{
def #{ name }
@coerced[:#{ name }]
end
}
end
# ...
end
def initialize(attributes)
@attributes = attributes
@coerced = Hash.new { |hash, key| hash[key] = coerce(attributes[key]) if attributes[key] }
end
# ...
end
end
I'm not sure that this is the way to go, but for me it was a gotcha that coercion is treated as a validation. Specially in the case when coercion is the only validation I'm using, then it does not make sense to call valid?
before using the attributes.
I guess that when using lotus-validations on it's own, it makes more sense to that you have to call some method before anything happens. My case was from a lotus application.
from validations.
Very nice, thank you very much! :)
from validations.
@lasseebert
from validations.
Related Issues (20)
- [Question] Validation Object receiving key arguments as string or symbol HOT 4
- Make validations a callable object HOT 2
- Fail on incomplete expression? HOT 1
- Error if each macro is used with a single check HOT 2
- Router params treated differently in RSpec HOT 4
- Wrap rule errors by namespace HOT 4
- +key?+ is not a valid predicate name HOT 1
- Unable to use I18n w/o manually requiring dry/validations/messages/i18n
- i18n and predicate are not working well HOT 2
- dry-validation val() doesn't work for predicates HOT 1
- Support for preprocessing? HOT 1
- Add a simple a helper method to shorten validate.success? with valid? [Law of Demeter] HOT 1
- Nested Validations Not Working HOT 2
- validate blocks raise an exception about missing messages HOT 3
- Upgrade to dry-validation v1.0 or remove dependency from Hanami HOT 7
- v2.0.0.alpha1, 2.0 suggestion. HOT 3
- Updating dry-validation ? HOT 3
- hanami-validations is not ruby 3 compatible HOT 3
- Unexpected value returned from `Hanami::Validations::Namespace` HOT 3
- Missing CSRF token makes params invalid in test HOT 6
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 validations.