Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- class MessageToValidator
- def initialize(message)
- @message = message
- end
- def validate
- result = {message: @message}
- valid = if @message[:to]
- true
- else
- false
- end
- result.merge(valid: valid, validator: self.class.name, message: @message)
- end
- end
- class MessageFromValidator
- def initialize(message)
- @message = message
- end
- def validate
- result = {message: @message}
- valid = if @message[:from]
- true
- else
- false
- end
- result.merge(valid: valid, validator: self.class.name, message: @message)
- end
- end
- class MessageProcessor
- VALIDATORS = [MessageToValidator, MessageFromValidator]
- def initialize(message)
- @message = message
- end
- def process
- validation_results = VALIDATORS.map {|v| v.new(@message).validate}
- if validation_results.all? { |r| r[:valid] }
- puts "Proceed with further message processing"
- else
- failures = validation_results.select {|r| !r[:valid] }
- puts "Handle these known issues: #{failures}"
- end
- rescue => exception
- # Handle unexpected
- puts "Something unexpected happened"
- end
- end
- # OUTPUT
- # $ ruby example.rb
- #
- #
- # message {:id=>1, :to=>"x", :from=>"y"}
- # Proceed with further message processing
- # ---
- # message {:id=>2, :to=>"x"}
- # Handle these known issues: [{:message=>{:id=>2, :to=>"x"}, :valid=>false, :validator=>"MessageFromValidator"}]
- # ---
- # message {:id=>3, :from=>"y"}
- # Handle these known issues: [{:message=>{:id=>3, :from=>"y"}, :valid=>false, :validator=>"MessageToValidator"}]
- # ---
- # message {}
- # Handle these known issues: [{:message=>{}, :valid=>false, :validator=>"MessageToValidator"}, {:message=>{}, :valid=>false, :validator=>"MessageFromValidator"}]
- # ---
- # message #<Object:0x007f84a200d4c0>
- # Something unexpected happened
- # ---
Add Comment
Please, Sign In to add comment