Compatibility is essential in Ruby. So, we need strong evidence when we break it.
I do not think the current behavior is weird.
<something>.abs returns positive value, consistently.
A programmer who knows -i.abs is evaluated as -(i.abs) can get an expected result. As a note, - in -1 is not an operator, so -1.abs == (-1).abs == 1. -i.to_s is also explained in the same way.
I agree that the behavior may be confusing for beginners.