lib/hyper-operation/railway/validations.rb in hyper-operation-1.0.alpha1.4 vs lib/hyper-operation/railway/validations.rb in hyper-operation-1.0.alpha1.5
- old
+ new
@@ -26,10 +26,12 @@
add_error(param, symbol, message) if instance_eval(&block)
true
rescue Exit => e
raise e unless e.state == :failed
add_error(param, symbol, message)
+ # use a bogus exit state which will skip adding
+ # a validation error (see catch block in process_validations method)
raise Exit.new(:abort_from_add_error, e.result)
end
end
end
end
@@ -45,19 +47,24 @@
when :success
add_validation_error(i, "illegal use of succeed! in validation")
when :failed
add_validation_error(i, "param validation #{i+1} aborted")
end
- @state = :failed
+ @state = :abort
return # break does not work in Opal
rescue AccessViolation => e
add_validation_error(i, e)
- @state = :failed
+ @state = :abort
@last_result = e
return # break does not work in Opal
rescue Exception => e
add_validation_error(i, e)
end
+ end
+ ensure
+ if @operation.has_errors?
+ @last_result ||= ValidationException.new(@operation.instance_variable_get('@errors'))
+ @state ||= :failed
end
end
end
end
end