Make exception API compatible with what Ruby expects #42
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Ruby expects that the first argument to Exception#initialize is a
string (or nil), since that is what Kernel#raise uses. Breaking that
assumption is a very bad idea.
This problem was introduced in 16be09a.
A backwards compatible approach would have added a response keyword
argument. Unfortunately, that ship has sailed, unless we want to break
backwards compatibility again.
Try to restore backwards compatibility and align with standard Ruby
exception behavior by checking whether the first message to #initialize
is an STMP::Response. If so, use it as the response. If not, treat it
as the exception message.
This prevents issues in code that does something like:
Before this change, you'll get a NoMethodError later inside of
SMTPError#message, with no indication of the actual problem.