Where communities thrive


  • Join over 1.5M+ people
  • Join over 100K+ communities
  • Free without limits
  • Create your own community
People
Activity
Krzysztof Wawer
@wafcio
you have key method and optional method for hash keys
Lorenzo Arribas
@larribas
yes, but take for instance the example in the IO page. If you try to validate:
schema.call(email: 'jane@doe.org', age: nil, extra_parameter: "I'm in!")
that would work, right?
Krzysztof Wawer
@wafcio
what do you want validate ?
you can write key(:email) … , key(:age) …, optional(:extra_parameter) … if I good understand
Lorenzo Arribas
@larribas
The thing is, I want to validate a Hash of settings, and I want the settings to be accurate so I can store them in my DB
And I don't want to store extra keys I don't use for anything
That is, I want to validate that what the client is sending me is exactly what I am asking. No more, no less
Krzysztof Wawer
@wafcio
so if hash contains more keys you want to return error, right ?
Lorenzo Arribas
@larribas
yep!
that's right
Krzysztof Wawer
@wafcio
I don’t think so that it is validation part
for sure you are not able to do it by dry-validation right now
Lorenzo Arribas
@larribas
hmm ok. don't you think it would be useful?
Krzysztof Wawer
@wafcio
in some specific case it can be useful, but you can remove extra keys and save only keys which you want
of course it depend on your use case
but as alway you can fork dry-validation, write your feature and send pull-request
Lorenzo Arribas
@larribas
ok. thanks!
Piotr Solnica
@solnic
@larribas hey, it is a feature I plan to add. Right now unexpected keys are ignored but there will be feature to treat unexpected keys as a rule violation
Lorenzo Arribas
@larribas
@solnic Good to know, thanks!

I'm curious to know what do you think of another feature (that promises to be more challenging). I have a tree of nodes (represented as a hash). Each node has some validation constraints, and a "children" key which is an array of descendants.

Currently, I am validating each node separately and traversing the tree via a recursive function, but do you think it would be fitting if one could define a recursive validation right from the schema? Or perhaps it is too awkward?

Piotr Solnica
@solnic
@larribas I want dry-v to support even awkward use cases as that is one of the reasons why it was created
Could you provide a gist presenting your usecase?
Lorenzo Arribas
@larribas
Piotr Solnica
@solnic
@larribas one thing I plan to add is to be able to treat a schema as a rule
so, theoretically you’d be able to apply schema recursively
this would be an interesting use case
it would also help in re-using schemas
Lorenzo Arribas
@larribas
reusing schemas would be a great addition
but even so, referencing the same schema from inside of it may require some kind of lazy evaluation or delayed const_get-ish thing, right?
Piotr Solnica
@solnic
@larribas nah, it would just require some additional interface to specify “validate with self"
as in apply all rules from self
API ideas most welcome :)
Andy Holland
@AMHOL
I always love self
:p
Lorenzo Arribas
@larribas
:P
Piotr Solnica
@solnic
@wafcio so, what kind of issues did you have with dry-v?
Krzysztof Wawer
@wafcio

so my opinion about dry-validation - it has freaky error format: sometime I see

errors = schema.call(email: 'jane@doe.org', age: 17).messages

puts errors.inspect
# { :age => [["age must be greater than 18"], 17] }

another time I see

errors = schema.call(email: nil, age: 19).messages

puts errors.inspect
# { :email => [["email must be filled", nil]] }

I caused that I droped dry-validation today.

Piotr Solnica
@solnic
wow what happened with the formating here?
Krzysztof Wawer
@wafcio
I have always problem with formatting in this strange style and strange new line keys
maybe I will back to dry-validation when I will have more time
Piotr Solnica
@solnic
I’m not sure what the problem is, it gives you errors
Krzysztof Wawer
@wafcio
I wanted use drop validation in API where I need return validation keys
and when I saw
[[„invalid”, nil]]
I said WHAT ???
invalid was my translation message
Piotr Solnica
@solnic
so what’s the problem?
first array includes compiled error messages, the second argument is the original input value
Krzysztof Wawer
@wafcio
and for this I must write own wrapper, and when I open README and saw that sometimes there is construction like