Для Ruby версии 2.1 вы можете расширить StandardError:
class StandardError
attr_accessor :original
end
, а при возникновении исключения просто установить это свойство:
def reraise ex, original
ex.original = original
raise ex
end
rescue StandardError => e
reraise ArgumentError.new('Message'), e
end
При таком подходе вы сможетевызывать стандартные ошибки ruby и устанавливать для них родительские ошибки, а не только ваши пользовательские ошибки.
Для ruby 2.1 и выше вы можете использовать Exception#cause
, как указано в другом ответе.