Guest User

Untitled

a guest
Jan 18th, 2019
94
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 1.78 KB | None | 0 0
  1. class MessageToValidator
  2. def initialize(message)
  3. @message = message
  4. end
  5.  
  6. def validate
  7. result = {message: @message}
  8.  
  9. valid = if @message[:to]
  10. true
  11. else
  12. false
  13. end
  14.  
  15. result.merge(valid: valid, validator: self.class.name, message: @message)
  16. end
  17. end
  18.  
  19. class MessageFromValidator
  20. def initialize(message)
  21. @message = message
  22. end
  23.  
  24. def validate
  25. result = {message: @message}
  26.  
  27. valid = if @message[:from]
  28. true
  29. else
  30. false
  31. end
  32.  
  33. result.merge(valid: valid, validator: self.class.name, message: @message)
  34. end
  35. end
  36.  
  37. class MessageProcessor
  38. VALIDATORS = [MessageToValidator, MessageFromValidator]
  39. def initialize(message)
  40. @message = message
  41. end
  42.  
  43. def process
  44. validation_results = VALIDATORS.map {|v| v.new(@message).validate}
  45.  
  46. if validation_results.all? { |r| r[:valid] }
  47. puts "Proceed with further message processing"
  48. else
  49. failures = validation_results.select {|r| !r[:valid] }
  50. puts "Handle these known issues: #{failures}"
  51. end
  52.  
  53. rescue => exception
  54. # Handle unexpected
  55. puts "Something unexpected happened"
  56. end
  57. end
  58.  
  59. # OUTPUT
  60. # $ ruby example.rb
  61. #
  62. #
  63. # message {:id=>1, :to=>"x", :from=>"y"}
  64. # Proceed with further message processing
  65. # ---
  66. # message {:id=>2, :to=>"x"}
  67. # Handle these known issues: [{:message=>{:id=>2, :to=>"x"}, :valid=>false, :validator=>"MessageFromValidator"}]
  68. # ---
  69. # message {:id=>3, :from=>"y"}
  70. # Handle these known issues: [{:message=>{:id=>3, :from=>"y"}, :valid=>false, :validator=>"MessageToValidator"}]
  71. # ---
  72. # message {}
  73. # Handle these known issues: [{:message=>{}, :valid=>false, :validator=>"MessageToValidator"}, {:message=>{}, :valid=>false, :validator=>"MessageFromValidator"}]
  74. # ---
  75. # message #<Object:0x007f84a200d4c0>
  76. # Something unexpected happened
  77. # ---
Add Comment
Please, Sign In to add comment