From 82b76383d7800bd1fad215522e1d7adc5127145c Mon Sep 17 00:00:00 2001 From: Andrzej Danilowski Date: Tue, 21 Jul 2026 10:59:36 +0200 Subject: [PATCH 1/3] Fix Ruby SDK silently swallowing API errors (SIGN-17019) Add nil guard on e.code before range comparison to prevent NoMethodError on timeout/connection failures, and re-raise unmatched ApiError exceptions so 5XX errors propagate instead of returning nil. Co-Authored-By: Claude Opus 4.6 (1M context) --- integration_test.rb | 274 ++++++++++++++++++ sdks/ruby/lib/dropbox-sign/api/account_api.rb | 12 +- sdks/ruby/lib/dropbox-sign/api/api_app_api.rb | 13 +- .../lib/dropbox-sign/api/bulk_send_job_api.rb | 6 +- .../ruby/lib/dropbox-sign/api/embedded_api.rb | 6 +- sdks/ruby/lib/dropbox-sign/api/fax_api.rb | 13 +- .../ruby/lib/dropbox-sign/api/fax_line_api.rb | 19 +- sdks/ruby/lib/dropbox-sign/api/o_auth_api.rb | 6 +- sdks/ruby/lib/dropbox-sign/api/report_api.rb | 3 +- .../dropbox-sign/api/signature_request_api.rb | 56 ++-- sdks/ruby/lib/dropbox-sign/api/team_api.rb | 28 +- .../ruby/lib/dropbox-sign/api/template_api.rb | 31 +- .../dropbox-sign/api/unclaimed_draft_api.rb | 12 +- sdks/ruby/templates/api.mustache | 3 +- 14 files changed, 415 insertions(+), 67 deletions(-) create mode 100644 integration_test.rb diff --git a/integration_test.rb b/integration_test.rb new file mode 100644 index 000000000..27e2b2fb9 --- /dev/null +++ b/integration_test.rb @@ -0,0 +1,274 @@ +#!/usr/bin/env ruby +# Integration test for verifying the fix in the Dropbox Sign Ruby SDK +# +# This script uses Typhoeus mocking (the SDK's HTTP client) to test error handling. +# Run from the repo root: +# cd repos/ruby && bundle install && cd ../.. +# ruby -I repos/ruby/lib integration_test.rb +# +# Or with bundler: +# BUNDLE_GEMFILE=repos/ruby/Gemfile bundle exec ruby -I repos/ruby/lib integration_test.rb + +$LOAD_PATH.unshift File.join(__dir__, 'repos/ruby/lib') + +begin + require 'dropbox-sign' + require 'typhoeus' +rescue LoadError => e + puts "Missing dependency: #{e.message}" + puts "\nTo run this test, install from the local SDK:" + puts " cd repos/ruby && bundle install && cd ../.." + puts " ruby -I repos/ruby/lib integration_test.rb" + exit 1 +end + +class SDKErrorHandlingTest + def initialize + @config = Dropbox::Sign::Configuration.default + @config.username = "test_api_key" + @api_client = Dropbox::Sign::ApiClient.new(@config) + @account_api = Dropbox::Sign::AccountApi.new(@api_client) + @test_results = [] + end + + def run_all_tests + puts "=" * 80 + puts "Dropbox Sign Ruby SDK - Error Handling Integration Test" + puts "=" * 80 + puts "" + + test_connection_failure + test_server_error_500 + test_server_error_503 + test_timeout_error + test_client_error_400 + test_client_error_404 + test_success_response + + print_summary + end + + private + + def test_connection_failure + test("Connection failure (code=0, libcurl error)") do + response = Typhoeus::Response.new( + code: 0, + return_message: "Connection refused" + ) + Typhoeus.stub(/account/).and_return(response) + + begin + @account_api.account_get + { status: :fail, reason: "No error raised (returned nil)" } + rescue Dropbox::Sign::ApiError => e + if e.code == 0 + { status: :pass, reason: "ApiError raised with code=0: #{e.message}" } + else + { status: :fail, reason: "Wrong error code: #{e.code}" } + end + rescue => e + { status: :fail, reason: "Wrong exception: #{e.class}: #{e.message}" } + end + end + end + + def test_server_error_500 + test("Server error (HTTP 500)") do + response = Typhoeus::Response.new( + code: 500, + body: '{"error":{"error_msg":"Internal server error","error_name":"ServerError"}}', + headers: { 'Content-Type' => 'application/json' } + ) + Typhoeus.stub(/account/).and_return(response) + + begin + @account_api.account_get + { status: :fail, reason: "No error raised (returned nil)" } + rescue Dropbox::Sign::ApiError => e + if e.code == 500 + { status: :pass, reason: "ApiError raised with code=500" } + else + { status: :fail, reason: "Wrong error code: #{e.code}" } + end + rescue => e + { status: :fail, reason: "Wrong exception: #{e.class}: #{e.message}" } + end + end + end + + def test_server_error_503 + test("Server error (HTTP 503)") do + response = Typhoeus::Response.new( + code: 503, + body: '{"error":{"error_msg":"Service unavailable","error_name":"ServiceUnavailable"}}', + headers: { 'Content-Type' => 'application/json' } + ) + Typhoeus.stub(/account/).and_return(response) + + begin + @account_api.account_get + { status: :fail, reason: "No error raised (returned nil)" } + rescue Dropbox::Sign::ApiError => e + if e.code == 503 + { status: :pass, reason: "ApiError raised with code=503" } + else + { status: :fail, reason: "Wrong error code: #{e.code}" } + end + rescue => e + { status: :fail, reason: "Wrong exception: #{e.class}: #{e.message}" } + end + end + end + + def test_timeout_error + test("Timeout error") do + response = Typhoeus::Response.new( + code: 0, + return_message: "Timeout was reached", + mock: true + ) + response.instance_variable_set(:@options, response.instance_variable_get(:@options).merge(return_code: :operation_timedout)) + Typhoeus.stub(/account/).and_return(response) + + begin + @account_api.account_get + { status: :fail, reason: "No error raised" } + rescue Dropbox::Sign::ApiError => e + { status: :pass, reason: "ApiError raised (code=#{e.code.inspect}, msg=#{e.message})" } + rescue NoMethodError => e + { status: :fail, reason: "NoMethodError (nil comparison bug): #{e.message}" } + rescue => e + { status: :fail, reason: "Unexpected: #{e.class}: #{e.message}" } + end + end + end + + def test_client_error_400 + test("Client error (HTTP 400)") do + response = Typhoeus::Response.new( + code: 400, + body: '{"error":{"error_msg":"Bad request","error_name":"BadRequest"}}', + headers: { 'Content-Type' => 'application/json' } + ) + Typhoeus.stub(/account/).and_return(response) + + begin + @account_api.account_get + { status: :fail, reason: "No error raised" } + rescue Dropbox::Sign::ApiError => e + if e.code == 400 + { status: :pass, reason: "ApiError raised with code=400" } + else + { status: :fail, reason: "Wrong error code: #{e.code}" } + end + rescue => e + { status: :fail, reason: "Wrong exception: #{e.class}: #{e.message}" } + end + end + end + + def test_client_error_404 + test("Client error (HTTP 404)") do + response = Typhoeus::Response.new( + code: 404, + body: '{"error":{"error_msg":"Not found","error_name":"NotFound"}}', + headers: { 'Content-Type' => 'application/json' } + ) + Typhoeus.stub(/account/).and_return(response) + + begin + @account_api.account_get + { status: :fail, reason: "No error raised" } + rescue Dropbox::Sign::ApiError => e + if e.code == 404 + { status: :pass, reason: "ApiError raised with code=404" } + else + { status: :fail, reason: "Wrong error code: #{e.code}" } + end + rescue => e + { status: :fail, reason: "Wrong exception: #{e.class}: #{e.message}" } + end + end + end + + def test_success_response + test("Success response (HTTP 200)") do + response = Typhoeus::Response.new( + code: 200, + body: '{"account":{"account_id":"abc123","email_address":"test@example.com"}}', + headers: { 'Content-Type' => 'application/json' } + ) + Typhoeus.stub(/account/).and_return(response) + + begin + result = @account_api.account_get + if result && result.account + { status: :pass, reason: "Request succeeded, got account_id=#{result.account.account_id}" } + else + { status: :fail, reason: "Unexpected result: #{result.inspect}" } + end + rescue => e + { status: :fail, reason: "Unexpected error: #{e.class}: #{e.message}" } + end + end + end + + def test(name) + Typhoeus::Expectation.clear + print " Testing: #{name}..." + + result = yield + @test_results << result.merge(name: name) + + case result[:status] + when :pass + puts " PASS" + puts " #{result[:reason]}" if result[:reason] + when :fail + puts " FAIL" + puts " #{result[:reason]}" if result[:reason] + when :warn + puts " WARN" + puts " #{result[:reason]}" if result[:reason] + end + end + + def print_summary + passed = @test_results.count { |r| r[:status] == :pass } + failed = @test_results.count { |r| r[:status] == :fail } + warned = @test_results.count { |r| r[:status] == :warn } + total = @test_results.size + + puts "" + puts "=" * 80 + puts "SUMMARY" + puts "=" * 80 + puts " Total: #{total}" + puts " Passed: #{passed}" + puts " Failed: #{failed}" + puts " Warned: #{warned}" + puts "" + + if failed > 0 + puts "FAILED TESTS:" + @test_results.select { |r| r[:status] == :fail }.each do |r| + puts " - #{r[:name]}" + puts " Reason: #{r[:reason]}" + end + puts "" + puts "The bug is NOT fixed." + exit 1 + elsif warned > 0 + puts "Some tests raised warnings. Review the output above." + exit 0 + else + puts "All tests passed! The fix is working correctly." + exit 0 + end + end +end + +# Run tests +tester = SDKErrorHandlingTest.new +tester.run_all_tests diff --git a/sdks/ruby/lib/dropbox-sign/api/account_api.rb b/sdks/ruby/lib/dropbox-sign/api/account_api.rb index 454dd2144..93a66cc2f 100644 --- a/sdks/ruby/lib/dropbox-sign/api/account_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/account_api.rb @@ -111,7 +111,7 @@ def account_create_with_http_info(account_create_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -123,6 +123,7 @@ def account_create_with_http_info(account_create_request, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -205,7 +206,7 @@ def account_get_with_http_info(opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -217,6 +218,7 @@ def account_get_with_http_info(opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -314,7 +316,7 @@ def account_update_with_http_info(account_update_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -326,6 +328,7 @@ def account_update_with_http_info(account_update_request, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -423,7 +426,7 @@ def account_verify_with_http_info(account_verify_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -435,6 +438,7 @@ def account_verify_with_http_info(account_verify_request, opts = {}) e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/lib/dropbox-sign/api/api_app_api.rb b/sdks/ruby/lib/dropbox-sign/api/api_app_api.rb index a6fb78541..55a35c719 100644 --- a/sdks/ruby/lib/dropbox-sign/api/api_app_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/api_app_api.rb @@ -111,7 +111,7 @@ def api_app_create_with_http_info(api_app_create_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -123,6 +123,7 @@ def api_app_create_with_http_info(api_app_create_request, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -190,6 +191,7 @@ def api_app_delete_with_http_info(client_id, opts = {}) begin data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options) rescue Dropbox::Sign::ApiError => e + raise e end if @api_client.config.debugging @@ -272,7 +274,7 @@ def api_app_get_with_http_info(client_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -284,6 +286,7 @@ def api_app_get_with_http_info(client_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -366,7 +369,7 @@ def api_app_list_with_http_info(opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -378,6 +381,7 @@ def api_app_list_with_http_info(opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -481,7 +485,7 @@ def api_app_update_with_http_info(client_id, api_app_update_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -493,6 +497,7 @@ def api_app_update_with_http_info(client_id, api_app_update_request, opts = {}) e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/lib/dropbox-sign/api/bulk_send_job_api.rb b/sdks/ruby/lib/dropbox-sign/api/bulk_send_job_api.rb index 5f628409e..69bd2006d 100644 --- a/sdks/ruby/lib/dropbox-sign/api/bulk_send_job_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/bulk_send_job_api.rb @@ -102,7 +102,7 @@ def bulk_send_job_get_with_http_info(bulk_send_job_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -114,6 +114,7 @@ def bulk_send_job_get_with_http_info(bulk_send_job_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -196,7 +197,7 @@ def bulk_send_job_list_with_http_info(opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -208,6 +209,7 @@ def bulk_send_job_list_with_http_info(opts = {}) e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/lib/dropbox-sign/api/embedded_api.rb b/sdks/ruby/lib/dropbox-sign/api/embedded_api.rb index 5724c4923..efbc7f927 100644 --- a/sdks/ruby/lib/dropbox-sign/api/embedded_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/embedded_api.rb @@ -117,7 +117,7 @@ def embedded_edit_url_with_http_info(template_id, embedded_edit_url_request, opt range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -129,6 +129,7 @@ def embedded_edit_url_with_http_info(template_id, embedded_edit_url_request, opt e.message end + raise e end if @api_client.config.debugging @@ -211,7 +212,7 @@ def embedded_sign_url_with_http_info(signature_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -223,6 +224,7 @@ def embedded_sign_url_with_http_info(signature_id, opts = {}) e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/lib/dropbox-sign/api/fax_api.rb b/sdks/ruby/lib/dropbox-sign/api/fax_api.rb index aac2bc905..f4cfda3a6 100644 --- a/sdks/ruby/lib/dropbox-sign/api/fax_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/fax_api.rb @@ -81,6 +81,7 @@ def fax_delete_with_http_info(fax_id, opts = {}) begin data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options) rescue Dropbox::Sign::ApiError => e + raise e end if @api_client.config.debugging @@ -163,7 +164,7 @@ def fax_files_with_http_info(fax_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -175,6 +176,7 @@ def fax_files_with_http_info(fax_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -257,7 +259,7 @@ def fax_get_with_http_info(fax_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -269,6 +271,7 @@ def fax_get_with_http_info(fax_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -363,7 +366,7 @@ def fax_list_with_http_info(opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -375,6 +378,7 @@ def fax_list_with_http_info(opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -472,7 +476,7 @@ def fax_send_with_http_info(fax_send_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -484,6 +488,7 @@ def fax_send_with_http_info(fax_send_request, opts = {}) e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/lib/dropbox-sign/api/fax_line_api.rb b/sdks/ruby/lib/dropbox-sign/api/fax_line_api.rb index 02d224ccb..3c8a86155 100644 --- a/sdks/ruby/lib/dropbox-sign/api/fax_line_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/fax_line_api.rb @@ -111,7 +111,7 @@ def fax_line_add_user_with_http_info(fax_line_add_user_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -123,6 +123,7 @@ def fax_line_add_user_with_http_info(fax_line_add_user_request, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -228,7 +229,7 @@ def fax_line_area_code_get_with_http_info(country, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -240,6 +241,7 @@ def fax_line_area_code_get_with_http_info(country, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -337,7 +339,7 @@ def fax_line_create_with_http_info(fax_line_create_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -349,6 +351,7 @@ def fax_line_create_with_http_info(fax_line_create_request, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -431,6 +434,7 @@ def fax_line_delete_with_http_info(fax_line_delete_request, opts = {}) begin data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options) rescue Dropbox::Sign::ApiError => e + raise e end if @api_client.config.debugging @@ -514,7 +518,7 @@ def fax_line_get_with_http_info(number, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -526,6 +530,7 @@ def fax_line_get_with_http_info(number, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -614,7 +619,7 @@ def fax_line_list_with_http_info(opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -626,6 +631,7 @@ def fax_line_list_with_http_info(opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -723,7 +729,7 @@ def fax_line_remove_user_with_http_info(fax_line_remove_user_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -735,6 +741,7 @@ def fax_line_remove_user_with_http_info(fax_line_remove_user_request, opts = {}) e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/lib/dropbox-sign/api/o_auth_api.rb b/sdks/ruby/lib/dropbox-sign/api/o_auth_api.rb index ae9af5a5c..24acc4fa4 100644 --- a/sdks/ruby/lib/dropbox-sign/api/o_auth_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/o_auth_api.rb @@ -111,7 +111,7 @@ def oauth_token_generate_with_http_info(o_auth_token_generate_request, opts = {} range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -123,6 +123,7 @@ def oauth_token_generate_with_http_info(o_auth_token_generate_request, opts = {} e.message end + raise e end if @api_client.config.debugging @@ -220,7 +221,7 @@ def oauth_token_refresh_with_http_info(o_auth_token_refresh_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -232,6 +233,7 @@ def oauth_token_refresh_with_http_info(o_auth_token_refresh_request, opts = {}) e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/lib/dropbox-sign/api/report_api.rb b/sdks/ruby/lib/dropbox-sign/api/report_api.rb index ee776ff00..9bbaf033d 100644 --- a/sdks/ruby/lib/dropbox-sign/api/report_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/report_api.rb @@ -111,7 +111,7 @@ def report_create_with_http_info(report_create_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -123,6 +123,7 @@ def report_create_with_http_info(report_create_request, opts = {}) e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/lib/dropbox-sign/api/signature_request_api.rb b/sdks/ruby/lib/dropbox-sign/api/signature_request_api.rb index d2b968496..cb68136fa 100644 --- a/sdks/ruby/lib/dropbox-sign/api/signature_request_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/signature_request_api.rb @@ -111,7 +111,7 @@ def signature_request_bulk_create_embedded_with_template_with_http_info(signatur range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -123,6 +123,7 @@ def signature_request_bulk_create_embedded_with_template_with_http_info(signatur e.message end + raise e end if @api_client.config.debugging @@ -220,7 +221,7 @@ def signature_request_bulk_send_with_template_with_http_info(signature_request_b range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -232,6 +233,7 @@ def signature_request_bulk_send_with_template_with_http_info(signature_request_b e.message end + raise e end if @api_client.config.debugging @@ -299,6 +301,7 @@ def signature_request_cancel_with_http_info(signature_request_id, opts = {}) begin data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options) rescue Dropbox::Sign::ApiError => e + raise e end if @api_client.config.debugging @@ -396,7 +399,7 @@ def signature_request_create_embedded_with_http_info(signature_request_create_em range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -408,6 +411,7 @@ def signature_request_create_embedded_with_http_info(signature_request_create_em e.message end + raise e end if @api_client.config.debugging @@ -505,7 +509,7 @@ def signature_request_create_embedded_with_template_with_http_info(signature_req range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -517,6 +521,7 @@ def signature_request_create_embedded_with_template_with_http_info(signature_req e.message end + raise e end if @api_client.config.debugging @@ -620,7 +625,7 @@ def signature_request_edit_with_http_info(signature_request_id, signature_reques range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -632,6 +637,7 @@ def signature_request_edit_with_http_info(signature_request_id, signature_reques e.message end + raise e end if @api_client.config.debugging @@ -735,7 +741,7 @@ def signature_request_edit_embedded_with_http_info(signature_request_id, signatu range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -747,6 +753,7 @@ def signature_request_edit_embedded_with_http_info(signature_request_id, signatu e.message end + raise e end if @api_client.config.debugging @@ -850,7 +857,7 @@ def signature_request_edit_embedded_with_template_with_http_info(signature_reque range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -862,6 +869,7 @@ def signature_request_edit_embedded_with_template_with_http_info(signature_reque e.message end + raise e end if @api_client.config.debugging @@ -965,7 +973,7 @@ def signature_request_edit_with_template_with_http_info(signature_request_id, si range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -977,6 +985,7 @@ def signature_request_edit_with_template_with_http_info(signature_request_id, si e.message end + raise e end if @api_client.config.debugging @@ -1066,7 +1075,7 @@ def signature_request_files_with_http_info(signature_request_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1078,6 +1087,7 @@ def signature_request_files_with_http_info(signature_request_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -1160,7 +1170,7 @@ def signature_request_files_as_data_uri_with_http_info(signature_request_id, opt range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1172,6 +1182,7 @@ def signature_request_files_as_data_uri_with_http_info(signature_request_id, opt e.message end + raise e end if @api_client.config.debugging @@ -1257,7 +1268,7 @@ def signature_request_files_as_file_url_with_http_info(signature_request_id, opt range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1269,6 +1280,7 @@ def signature_request_files_as_file_url_with_http_info(signature_request_id, opt e.message end + raise e end if @api_client.config.debugging @@ -1351,7 +1363,7 @@ def signature_request_get_with_http_info(signature_request_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1363,6 +1375,7 @@ def signature_request_get_with_http_info(signature_request_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -1451,7 +1464,7 @@ def signature_request_list_with_http_info(opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1463,6 +1476,7 @@ def signature_request_list_with_http_info(opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -1545,7 +1559,7 @@ def signature_request_release_hold_with_http_info(signature_request_id, opts = { range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1557,6 +1571,7 @@ def signature_request_release_hold_with_http_info(signature_request_id, opts = { e.message end + raise e end if @api_client.config.debugging @@ -1660,7 +1675,7 @@ def signature_request_remind_with_http_info(signature_request_id, signature_requ range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1672,6 +1687,7 @@ def signature_request_remind_with_http_info(signature_request_id, signature_requ e.message end + raise e end if @api_client.config.debugging @@ -1739,6 +1755,7 @@ def signature_request_remove_with_http_info(signature_request_id, opts = {}) begin data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options) rescue Dropbox::Sign::ApiError => e + raise e end if @api_client.config.debugging @@ -1836,7 +1853,7 @@ def signature_request_send_with_http_info(signature_request_send_request, opts = range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1848,6 +1865,7 @@ def signature_request_send_with_http_info(signature_request_send_request, opts = e.message end + raise e end if @api_client.config.debugging @@ -1945,7 +1963,7 @@ def signature_request_send_with_template_with_http_info(signature_request_send_w range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1957,6 +1975,7 @@ def signature_request_send_with_template_with_http_info(signature_request_send_w e.message end + raise e end if @api_client.config.debugging @@ -2060,7 +2079,7 @@ def signature_request_update_with_http_info(signature_request_id, signature_requ range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -2072,6 +2091,7 @@ def signature_request_update_with_http_info(signature_request_id, signature_requ e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/lib/dropbox-sign/api/team_api.rb b/sdks/ruby/lib/dropbox-sign/api/team_api.rb index 1002a2d6b..4fbe8cb85 100644 --- a/sdks/ruby/lib/dropbox-sign/api/team_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/team_api.rb @@ -114,7 +114,7 @@ def team_add_member_with_http_info(team_add_member_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -126,6 +126,7 @@ def team_add_member_with_http_info(team_add_member_request, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -223,7 +224,7 @@ def team_create_with_http_info(team_create_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -235,6 +236,7 @@ def team_create_with_http_info(team_create_request, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -296,6 +298,7 @@ def team_delete_with_http_info(opts = {}) begin data, status_code, headers = @api_client.call_api(:DELETE, local_var_path, new_options) rescue Dropbox::Sign::ApiError => e + raise e end if @api_client.config.debugging @@ -372,7 +375,7 @@ def team_get_with_http_info(opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -384,6 +387,7 @@ def team_get_with_http_info(opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -463,7 +467,7 @@ def team_info_with_http_info(opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -475,6 +479,7 @@ def team_info_with_http_info(opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -554,7 +559,7 @@ def team_invites_with_http_info(opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -566,6 +571,7 @@ def team_invites_with_http_info(opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -662,7 +668,7 @@ def team_members_with_http_info(team_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -674,6 +680,7 @@ def team_members_with_http_info(team_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -771,7 +778,7 @@ def team_remove_member_with_http_info(team_remove_member_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -783,6 +790,7 @@ def team_remove_member_with_http_info(team_remove_member_request, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -879,7 +887,7 @@ def team_sub_teams_with_http_info(team_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -891,6 +899,7 @@ def team_sub_teams_with_http_info(team_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -988,7 +997,7 @@ def team_update_with_http_info(team_update_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1000,6 +1009,7 @@ def team_update_with_http_info(team_update_request, opts = {}) e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/lib/dropbox-sign/api/template_api.rb b/sdks/ruby/lib/dropbox-sign/api/template_api.rb index c43bf9e06..a649223c1 100644 --- a/sdks/ruby/lib/dropbox-sign/api/template_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/template_api.rb @@ -117,7 +117,7 @@ def template_add_user_with_http_info(template_id, template_add_user_request, opt range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -129,6 +129,7 @@ def template_add_user_with_http_info(template_id, template_add_user_request, opt e.message end + raise e end if @api_client.config.debugging @@ -226,7 +227,7 @@ def template_create_with_http_info(template_create_request, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -238,6 +239,7 @@ def template_create_with_http_info(template_create_request, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -335,7 +337,7 @@ def template_create_embedded_draft_with_http_info(template_create_embedded_draft range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -347,6 +349,7 @@ def template_create_embedded_draft_with_http_info(template_create_embedded_draft e.message end + raise e end if @api_client.config.debugging @@ -414,6 +417,7 @@ def template_delete_with_http_info(template_id, opts = {}) begin data, status_code, headers = @api_client.call_api(:POST, local_var_path, new_options) rescue Dropbox::Sign::ApiError => e + raise e end if @api_client.config.debugging @@ -503,7 +507,7 @@ def template_files_with_http_info(template_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -515,6 +519,7 @@ def template_files_with_http_info(template_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -597,7 +602,7 @@ def template_files_as_data_uri_with_http_info(template_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -609,6 +614,7 @@ def template_files_as_data_uri_with_http_info(template_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -694,7 +700,7 @@ def template_files_as_file_url_with_http_info(template_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -706,6 +712,7 @@ def template_files_as_file_url_with_http_info(template_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -788,7 +795,7 @@ def template_get_with_http_info(template_id, opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -800,6 +807,7 @@ def template_get_with_http_info(template_id, opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -896,7 +904,7 @@ def template_list_with_http_info(opts = {}) range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -908,6 +916,7 @@ def template_list_with_http_info(opts = {}) e.message end + raise e end if @api_client.config.debugging @@ -1011,7 +1020,7 @@ def template_remove_user_with_http_info(template_id, template_remove_user_reques range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1023,6 +1032,7 @@ def template_remove_user_with_http_info(template_id, template_remove_user_reques e.message end + raise e end if @api_client.config.debugging @@ -1126,7 +1136,7 @@ def template_update_files_with_http_info(template_id, template_update_files_requ range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -1138,6 +1148,7 @@ def template_update_files_with_http_info(template_id, template_update_files_requ e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/lib/dropbox-sign/api/unclaimed_draft_api.rb b/sdks/ruby/lib/dropbox-sign/api/unclaimed_draft_api.rb index 53ede8998..bf6e1587c 100644 --- a/sdks/ruby/lib/dropbox-sign/api/unclaimed_draft_api.rb +++ b/sdks/ruby/lib/dropbox-sign/api/unclaimed_draft_api.rb @@ -111,7 +111,7 @@ def unclaimed_draft_create_with_http_info(unclaimed_draft_create_request, opts = range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -123,6 +123,7 @@ def unclaimed_draft_create_with_http_info(unclaimed_draft_create_request, opts = e.message end + raise e end if @api_client.config.debugging @@ -220,7 +221,7 @@ def unclaimed_draft_create_embedded_with_http_info(unclaimed_draft_create_embedd range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -232,6 +233,7 @@ def unclaimed_draft_create_embedded_with_http_info(unclaimed_draft_create_embedd e.message end + raise e end if @api_client.config.debugging @@ -329,7 +331,7 @@ def unclaimed_draft_create_embedded_with_template_with_http_info(unclaimed_draft range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -341,6 +343,7 @@ def unclaimed_draft_create_embedded_with_template_with_http_info(unclaimed_draft e.message end + raise e end if @api_client.config.debugging @@ -444,7 +447,7 @@ def unclaimed_draft_edit_and_resend_with_http_info(signature_request_id, unclaim range_code = "4XX".split('').first range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "Dropbox::Sign::ErrorResponse" @@ -456,6 +459,7 @@ def unclaimed_draft_edit_and_resend_with_http_info(signature_request_id, unclaim e.message end + raise e end if @api_client.config.debugging diff --git a/sdks/ruby/templates/api.mustache b/sdks/ruby/templates/api.mustache index e5611a33d..cade90e77 100644 --- a/sdks/ruby/templates/api.mustache +++ b/sdks/ruby/templates/api.mustache @@ -307,7 +307,7 @@ module {{moduleName}} range_code_left = "#{range_code}00".to_i range_code_right = "#{range_code}99".to_i <%={{ }}=%> - if e.code >= range_code_left && e.code <= range_code_right + if e.code && e.code >= range_code_left && e.code <= range_code_right body = @api_client.convert_to_type( JSON.parse("[#{e.response_body}]", :symbolize_names => true)[0], "{{moduleName}}::{{{dataType}}}" @@ -338,6 +338,7 @@ module {{moduleName}} {{/dataType}} {{/responses}} {{/returnType}} + raise e end {{/useCustomTemplateCode}} From 85287e52aa943817c11839813128ec37f53c7708 Mon Sep 17 00:00:00 2001 From: Andrzej Danilowski Date: Tue, 21 Jul 2026 11:03:48 +0200 Subject: [PATCH 2/3] Do not commit test script --- integration_test.rb | 274 -------------------------------------------- 1 file changed, 274 deletions(-) delete mode 100644 integration_test.rb diff --git a/integration_test.rb b/integration_test.rb deleted file mode 100644 index 27e2b2fb9..000000000 --- a/integration_test.rb +++ /dev/null @@ -1,274 +0,0 @@ -#!/usr/bin/env ruby -# Integration test for verifying the fix in the Dropbox Sign Ruby SDK -# -# This script uses Typhoeus mocking (the SDK's HTTP client) to test error handling. -# Run from the repo root: -# cd repos/ruby && bundle install && cd ../.. -# ruby -I repos/ruby/lib integration_test.rb -# -# Or with bundler: -# BUNDLE_GEMFILE=repos/ruby/Gemfile bundle exec ruby -I repos/ruby/lib integration_test.rb - -$LOAD_PATH.unshift File.join(__dir__, 'repos/ruby/lib') - -begin - require 'dropbox-sign' - require 'typhoeus' -rescue LoadError => e - puts "Missing dependency: #{e.message}" - puts "\nTo run this test, install from the local SDK:" - puts " cd repos/ruby && bundle install && cd ../.." - puts " ruby -I repos/ruby/lib integration_test.rb" - exit 1 -end - -class SDKErrorHandlingTest - def initialize - @config = Dropbox::Sign::Configuration.default - @config.username = "test_api_key" - @api_client = Dropbox::Sign::ApiClient.new(@config) - @account_api = Dropbox::Sign::AccountApi.new(@api_client) - @test_results = [] - end - - def run_all_tests - puts "=" * 80 - puts "Dropbox Sign Ruby SDK - Error Handling Integration Test" - puts "=" * 80 - puts "" - - test_connection_failure - test_server_error_500 - test_server_error_503 - test_timeout_error - test_client_error_400 - test_client_error_404 - test_success_response - - print_summary - end - - private - - def test_connection_failure - test("Connection failure (code=0, libcurl error)") do - response = Typhoeus::Response.new( - code: 0, - return_message: "Connection refused" - ) - Typhoeus.stub(/account/).and_return(response) - - begin - @account_api.account_get - { status: :fail, reason: "No error raised (returned nil)" } - rescue Dropbox::Sign::ApiError => e - if e.code == 0 - { status: :pass, reason: "ApiError raised with code=0: #{e.message}" } - else - { status: :fail, reason: "Wrong error code: #{e.code}" } - end - rescue => e - { status: :fail, reason: "Wrong exception: #{e.class}: #{e.message}" } - end - end - end - - def test_server_error_500 - test("Server error (HTTP 500)") do - response = Typhoeus::Response.new( - code: 500, - body: '{"error":{"error_msg":"Internal server error","error_name":"ServerError"}}', - headers: { 'Content-Type' => 'application/json' } - ) - Typhoeus.stub(/account/).and_return(response) - - begin - @account_api.account_get - { status: :fail, reason: "No error raised (returned nil)" } - rescue Dropbox::Sign::ApiError => e - if e.code == 500 - { status: :pass, reason: "ApiError raised with code=500" } - else - { status: :fail, reason: "Wrong error code: #{e.code}" } - end - rescue => e - { status: :fail, reason: "Wrong exception: #{e.class}: #{e.message}" } - end - end - end - - def test_server_error_503 - test("Server error (HTTP 503)") do - response = Typhoeus::Response.new( - code: 503, - body: '{"error":{"error_msg":"Service unavailable","error_name":"ServiceUnavailable"}}', - headers: { 'Content-Type' => 'application/json' } - ) - Typhoeus.stub(/account/).and_return(response) - - begin - @account_api.account_get - { status: :fail, reason: "No error raised (returned nil)" } - rescue Dropbox::Sign::ApiError => e - if e.code == 503 - { status: :pass, reason: "ApiError raised with code=503" } - else - { status: :fail, reason: "Wrong error code: #{e.code}" } - end - rescue => e - { status: :fail, reason: "Wrong exception: #{e.class}: #{e.message}" } - end - end - end - - def test_timeout_error - test("Timeout error") do - response = Typhoeus::Response.new( - code: 0, - return_message: "Timeout was reached", - mock: true - ) - response.instance_variable_set(:@options, response.instance_variable_get(:@options).merge(return_code: :operation_timedout)) - Typhoeus.stub(/account/).and_return(response) - - begin - @account_api.account_get - { status: :fail, reason: "No error raised" } - rescue Dropbox::Sign::ApiError => e - { status: :pass, reason: "ApiError raised (code=#{e.code.inspect}, msg=#{e.message})" } - rescue NoMethodError => e - { status: :fail, reason: "NoMethodError (nil comparison bug): #{e.message}" } - rescue => e - { status: :fail, reason: "Unexpected: #{e.class}: #{e.message}" } - end - end - end - - def test_client_error_400 - test("Client error (HTTP 400)") do - response = Typhoeus::Response.new( - code: 400, - body: '{"error":{"error_msg":"Bad request","error_name":"BadRequest"}}', - headers: { 'Content-Type' => 'application/json' } - ) - Typhoeus.stub(/account/).and_return(response) - - begin - @account_api.account_get - { status: :fail, reason: "No error raised" } - rescue Dropbox::Sign::ApiError => e - if e.code == 400 - { status: :pass, reason: "ApiError raised with code=400" } - else - { status: :fail, reason: "Wrong error code: #{e.code}" } - end - rescue => e - { status: :fail, reason: "Wrong exception: #{e.class}: #{e.message}" } - end - end - end - - def test_client_error_404 - test("Client error (HTTP 404)") do - response = Typhoeus::Response.new( - code: 404, - body: '{"error":{"error_msg":"Not found","error_name":"NotFound"}}', - headers: { 'Content-Type' => 'application/json' } - ) - Typhoeus.stub(/account/).and_return(response) - - begin - @account_api.account_get - { status: :fail, reason: "No error raised" } - rescue Dropbox::Sign::ApiError => e - if e.code == 404 - { status: :pass, reason: "ApiError raised with code=404" } - else - { status: :fail, reason: "Wrong error code: #{e.code}" } - end - rescue => e - { status: :fail, reason: "Wrong exception: #{e.class}: #{e.message}" } - end - end - end - - def test_success_response - test("Success response (HTTP 200)") do - response = Typhoeus::Response.new( - code: 200, - body: '{"account":{"account_id":"abc123","email_address":"test@example.com"}}', - headers: { 'Content-Type' => 'application/json' } - ) - Typhoeus.stub(/account/).and_return(response) - - begin - result = @account_api.account_get - if result && result.account - { status: :pass, reason: "Request succeeded, got account_id=#{result.account.account_id}" } - else - { status: :fail, reason: "Unexpected result: #{result.inspect}" } - end - rescue => e - { status: :fail, reason: "Unexpected error: #{e.class}: #{e.message}" } - end - end - end - - def test(name) - Typhoeus::Expectation.clear - print " Testing: #{name}..." - - result = yield - @test_results << result.merge(name: name) - - case result[:status] - when :pass - puts " PASS" - puts " #{result[:reason]}" if result[:reason] - when :fail - puts " FAIL" - puts " #{result[:reason]}" if result[:reason] - when :warn - puts " WARN" - puts " #{result[:reason]}" if result[:reason] - end - end - - def print_summary - passed = @test_results.count { |r| r[:status] == :pass } - failed = @test_results.count { |r| r[:status] == :fail } - warned = @test_results.count { |r| r[:status] == :warn } - total = @test_results.size - - puts "" - puts "=" * 80 - puts "SUMMARY" - puts "=" * 80 - puts " Total: #{total}" - puts " Passed: #{passed}" - puts " Failed: #{failed}" - puts " Warned: #{warned}" - puts "" - - if failed > 0 - puts "FAILED TESTS:" - @test_results.select { |r| r[:status] == :fail }.each do |r| - puts " - #{r[:name]}" - puts " Reason: #{r[:reason]}" - end - puts "" - puts "The bug is NOT fixed." - exit 1 - elsif warned > 0 - puts "Some tests raised warnings. Review the output above." - exit 0 - else - puts "All tests passed! The fix is working correctly." - exit 0 - end - end -end - -# Run tests -tester = SDKErrorHandlingTest.new -tester.run_all_tests From 7441f8c4a53cb0e7c257b7ec80461614a19105a7 Mon Sep 17 00:00:00 2001 From: Andrzej Danilowski Date: Wed, 22 Jul 2026 08:33:21 +0200 Subject: [PATCH 3/3] Add error handling spec for 5XX, timeout, and connection failures (SIGN-17019) Co-Authored-By: Claude Opus 4.6 (1M context) --- sdks/ruby/spec/api/error_handling_spec.rb | 73 +++++++++++++++++++++++ 1 file changed, 73 insertions(+) create mode 100644 sdks/ruby/spec/api/error_handling_spec.rb diff --git a/sdks/ruby/spec/api/error_handling_spec.rb b/sdks/ruby/spec/api/error_handling_spec.rb new file mode 100644 index 000000000..b58460063 --- /dev/null +++ b/sdks/ruby/spec/api/error_handling_spec.rb @@ -0,0 +1,73 @@ +=begin +#Dropbox Sign API + +#Dropbox Sign v3 API + +The version of the OpenAPI document: 3.0.0 +Contact: apisupport@hellosign.com +Generated by: https://openapi-generator.tech +Generator version: 7.12.0 + +=end + +require 'spec_helper' +require_relative '../test_utils' + +describe 'Error Handling' do + context 'ApiError propagation' do + api = Dropbox::Sign::AccountApi.new + + it 'raises ApiError for 5XX server errors' do + set_expected_response(500, '{"error":{"error_msg":"Internal server error","error_name":"server_error"}}') + + expect { + api.account_get({ email_address: "test@example.com" }) + }.to raise_error(Dropbox::Sign::ApiError) { |e| + expect(e.code).to eq(500) + } + end + + it 'raises ApiError for 503 server errors' do + set_expected_response(503, '{"error":{"error_msg":"Service unavailable","error_name":"service_unavailable"}}') + + expect { + api.account_get({ email_address: "test@example.com" }) + }.to raise_error(Dropbox::Sign::ApiError) { |e| + expect(e.code).to eq(503) + } + end + + it 'raises ApiError for connection failures' do + Typhoeus.stub(/hellosign.com/) do + Typhoeus::Response.new( + :code => 0, + :return_message => "Connection refused" + ) + end + + expect { + api.account_get({ email_address: "test@example.com" }) + }.to raise_error(Dropbox::Sign::ApiError) { |e| + expect(e.code).to eq(0) + } + end + + it 'raises ApiError for timeout errors' do + Typhoeus.stub(/hellosign.com/) do + response = Typhoeus::Response.new( + :code => 0, + :return_message => "Timeout was reached", + :mock => true + ) + response.instance_variable_set(:@options, response.instance_variable_get(:@options).merge(return_code: :operation_timedout)) + response + end + + expect { + api.account_get({ email_address: "test@example.com" }) + }.to raise_error(Dropbox::Sign::ApiError) { |e| + expect(e.message).to include("timed out") + } + end + end +end