Guest User

Untitled

a guest
Aug 20th, 2018
87
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 0.89 KB | None | 0 0
  1. #!/usr/bin/env ruby
  2. require 'byebug'
  3. require 'dry-validation'
  4.  
  5. module MyPredicates
  6.  
  7. include Dry::Logic::Predicates
  8.  
  9. predicate(:nested_one?) do |value|
  10. (value.is_a? Hash) && value.key?(:alpha)
  11. end
  12.  
  13. predicate(:nested_two?) do |value|
  14. (value.is_a? Hash) && value.key?(:bravo)
  15. end
  16.  
  17. end
  18.  
  19. NestedSchemaOne = Dry::Validation.Schema do
  20. required(:alpha).filled
  21. required(:bravo).filled
  22. end
  23.  
  24. NestedSchemaTwo = Dry::Validation.Schema do
  25. required(:charlie).filled
  26. required(:delta).filled
  27. end
  28.  
  29. ParentSchema = Dry::Validation.Schema do
  30. configure do
  31. predicates(MyPredicates)
  32. end
  33.  
  34. required(:foo).filled
  35.  
  36. required(:nested) do
  37. (nested_one?.then(schema(NestedSchemaOne))).or(
  38. nested_two?.then(schema(NestedSchemaTwo)))
  39. end
  40.  
  41. end
  42.  
  43. print(ParentSchema.(
  44. foo: 'bar',
  45. nested: { alpha: '123' }
  46. ).messages)
  47. print(ParentSchema.(
  48. foo: 'bar2',
  49. nested: { charlie: '123' }
  50. ).messages)
Add Comment
Please, Sign In to add comment