moneykit 0.0.2 → 0.0.3
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/lib/moneykit/api/access_token_api.rb +53 -55
- data/lib/moneykit/api/account_numbers_api.rb +24 -24
- data/lib/moneykit/api/accounts_api.rb +86 -80
- data/lib/moneykit/api/identity_api.rb +29 -28
- data/lib/moneykit/api/institutions_api.rb +50 -48
- data/lib/moneykit/api/link_session_api.rb +47 -50
- data/lib/moneykit/api/links_api.rb +74 -81
- data/lib/moneykit/api/products_api.rb +31 -33
- data/lib/moneykit/api/transactions_api.rb +112 -87
- data/lib/moneykit/api/users_api.rb +96 -79
- data/lib/moneykit/api_client.rb +64 -71
- data/lib/moneykit/api_error.rb +14 -16
- data/lib/moneykit/configuration.rb +42 -45
- data/lib/moneykit/models/account.rb +62 -78
- data/lib/moneykit/models/account_balances.rb +58 -63
- data/lib/moneykit/models/account_group.rb +47 -47
- data/lib/moneykit/models/account_identity.rb +69 -89
- data/lib/moneykit/models/account_numbers.rb +50 -49
- data/lib/moneykit/models/account_numbers_link_product.rb +52 -54
- data/lib/moneykit/models/account_numbers_product_settings.rb +49 -48
- data/lib/moneykit/models/account_type.rb +23 -23
- data/lib/moneykit/models/account_with_account_numbers.rb +68 -89
- data/lib/moneykit/models/accounts_link_product.rb +46 -46
- data/lib/moneykit/models/ach_number.rb +48 -49
- data/lib/moneykit/models/address.rb +66 -75
- data/lib/moneykit/models/api_error_auth_expired_access_token_response.rb +63 -62
- data/lib/moneykit/models/api_error_auth_unauthorized_response.rb +60 -62
- data/lib/moneykit/models/api_error_rate_limit_exceeded_response.rb +63 -62
- data/lib/moneykit/models/app.rb +46 -50
- data/lib/moneykit/models/bacs_number.rb +45 -46
- data/lib/moneykit/models/balances.rb +58 -64
- data/lib/moneykit/models/basic_account_details.rb +55 -61
- data/lib/moneykit/models/country.rb +13 -14
- data/lib/moneykit/models/create_link_session_request.rb +83 -96
- data/lib/moneykit/models/create_link_session_response.rb +40 -37
- data/lib/moneykit/models/currency.rb +193 -193
- data/lib/moneykit/models/cursor.rb +40 -39
- data/lib/moneykit/models/cursor_pagination.rb +40 -38
- data/lib/moneykit/models/cursors.rb +40 -39
- data/lib/moneykit/models/customer_app.rb +46 -49
- data/lib/moneykit/models/customer_user.rb +59 -69
- data/lib/moneykit/models/eft_number.rb +48 -52
- data/lib/moneykit/models/email.rb +46 -48
- data/lib/moneykit/models/email1.rb +50 -53
- data/lib/moneykit/models/exchange_token_request.rb +40 -37
- data/lib/moneykit/models/exchange_token_response.rb +46 -49
- data/lib/moneykit/models/generate_access_token_response.rb +51 -58
- data/lib/moneykit/models/get_account_numbers_response.rb +48 -53
- data/lib/moneykit/models/get_account_response.rb +47 -52
- data/lib/moneykit/models/get_accounts_response.rb +47 -50
- data/lib/moneykit/models/get_institutions_response.rb +47 -50
- data/lib/moneykit/models/get_transactions_response.rb +68 -87
- data/lib/moneykit/models/get_user_accounts_response.rb +42 -42
- data/lib/moneykit/models/get_user_links_response.rb +42 -42
- data/lib/moneykit/models/get_user_transactions_response.rb +64 -82
- data/lib/moneykit/models/http_validation_error.rb +68 -71
- data/lib/moneykit/models/identity.rb +49 -49
- data/lib/moneykit/models/identity_link_product.rb +52 -54
- data/lib/moneykit/models/identity_product_settings.rb +49 -48
- data/lib/moneykit/models/identity_response.rb +47 -50
- data/lib/moneykit/models/institution.rb +77 -96
- data/lib/moneykit/models/institution_error_not_found_response.rb +63 -64
- data/lib/moneykit/models/institution_styling_response.rb +77 -93
- data/lib/moneykit/models/international_number.rb +46 -49
- data/lib/moneykit/models/introspect_client_response.rb +61 -73
- data/lib/moneykit/models/jwk_set.rb +41 -42
- data/lib/moneykit/models/link.rb +78 -100
- data/lib/moneykit/models/link1.rb +78 -100
- data/lib/moneykit/models/link2.rb +78 -100
- data/lib/moneykit/models/link3.rb +78 -100
- data/lib/moneykit/models/link4.rb +78 -100
- data/lib/moneykit/models/link_common.rb +78 -99
- data/lib/moneykit/models/link_error.rb +19 -19
- data/lib/moneykit/models/link_error_bad_state_response.rb +64 -72
- data/lib/moneykit/models/link_error_deleted_response.rb +63 -64
- data/lib/moneykit/models/link_error_forbidden_action_response.rb +60 -62
- data/lib/moneykit/models/link_error_not_found_response.rb +63 -64
- data/lib/moneykit/models/link_error_unauthorized_access_response.rb +63 -64
- data/lib/moneykit/models/link_permission_scope.rb +14 -15
- data/lib/moneykit/models/link_permissions.rb +43 -43
- data/lib/moneykit/models/link_products.rb +52 -63
- data/lib/moneykit/models/link_response.rb +90 -118
- data/lib/moneykit/models/link_session_customer_user.rb +58 -68
- data/lib/moneykit/models/link_session_customer_user_email.rb +50 -52
- data/lib/moneykit/models/link_session_customer_user_phone.rb +60 -67
- data/lib/moneykit/models/link_session_error_forbidden_config_response.rb +60 -62
- data/lib/moneykit/models/link_session_error_invalid_token_exchange.rb +60 -62
- data/lib/moneykit/models/link_session_setting_overrides.rb +61 -72
- data/lib/moneykit/models/link_state.rb +15 -16
- data/lib/moneykit/models/link_state_changed_webhook.rb +110 -134
- data/lib/moneykit/models/location_inner.rb +41 -46
- data/lib/moneykit/models/money_kit_env.rb +12 -13
- data/lib/moneykit/models/money_link_features.rb +49 -48
- data/lib/moneykit/models/moneylink_features.rb +50 -49
- data/lib/moneykit/models/numbers.rb +60 -73
- data/lib/moneykit/models/owner.rb +59 -72
- data/lib/moneykit/models/phone.rb +60 -68
- data/lib/moneykit/models/phone_number.rb +55 -59
- data/lib/moneykit/models/phone_number_type.rb +14 -15
- data/lib/moneykit/models/product.rb +14 -15
- data/lib/moneykit/models/products.rb +52 -64
- data/lib/moneykit/models/products1.rb +48 -56
- data/lib/moneykit/models/products_settings.rb +48 -55
- data/lib/moneykit/models/provider.rb +15 -16
- data/lib/moneykit/models/refresh_products_request.rb +43 -45
- data/lib/moneykit/models/requested_link_permission.rb +52 -60
- data/lib/moneykit/models/response401_disconnect_links_id_delete.rb +71 -77
- data/lib/moneykit/models/response401_exchange_token_link_session_exchange_token_post.rb +66 -72
- data/lib/moneykit/models/response401_get_account_links_id_accounts_account_id_get.rb +71 -77
- data/lib/moneykit/models/response401_get_account_numbers_links_id_accounts_numbers_get.rb +71 -77
- data/lib/moneykit/models/response401_get_accounts_links_id_accounts_get.rb +71 -77
- data/lib/moneykit/models/response401_get_identities_links_id_identity_get.rb +71 -77
- data/lib/moneykit/models/response401_get_institution_institutions_institution_id_get.rb +66 -72
- data/lib/moneykit/models/response401_get_institution_styling_institutions_institution_id_styling_get.rb +66 -72
- data/lib/moneykit/models/response401_get_institutions_institutions_get.rb +66 -72
- data/lib/moneykit/models/response401_get_link_links_id_get.rb +71 -77
- data/lib/moneykit/models/response401_get_transactions_diff_links_id_transactions_sync_get.rb +71 -77
- data/lib/moneykit/models/response401_get_transactions_links_id_transactions_get.rb +71 -77
- data/lib/moneykit/models/response401_get_user_accounts_users_id_accounts_get.rb +66 -72
- data/lib/moneykit/models/response401_get_user_links_users_id_links_get.rb +66 -72
- data/lib/moneykit/models/response401_get_user_transactions_users_id_transactions_get.rb +66 -72
- data/lib/moneykit/models/response401_get_well_known_jwks_well_known_jwks_json_get.rb +66 -72
- data/lib/moneykit/models/response401_instrospect_client_auth_introspect_get.rb +66 -72
- data/lib/moneykit/models/response401_refresh_products_links_id_products_post.rb +71 -77
- data/lib/moneykit/models/response401_update_link_links_id_patch.rb +71 -77
- data/lib/moneykit/models/settings.rb +61 -73
- data/lib/moneykit/models/supported_version.rb +11 -12
- data/lib/moneykit/models/transaction.rb +87 -114
- data/lib/moneykit/models/transaction_diff.rb +54 -62
- data/lib/moneykit/models/transaction_sync_response.rb +57 -72
- data/lib/moneykit/models/transaction_type.rb +12 -13
- data/lib/moneykit/models/transaction_type_filter.rb +12 -13
- data/lib/moneykit/models/transactions.rb +58 -57
- data/lib/moneykit/models/transactions1.rb +55 -63
- data/lib/moneykit/models/transactions_link_product.rb +52 -54
- data/lib/moneykit/models/transactions_product_settings.rb +57 -56
- data/lib/moneykit/models/update_link_request.rb +53 -52
- data/lib/moneykit/models/user_accounts_out.rb +40 -40
- data/lib/moneykit/models/user_links_out.rb +40 -40
- data/lib/moneykit/models/user_transactions_paged_response.rb +40 -40
- data/lib/moneykit/models/validation_error.rb +53 -64
- data/lib/moneykit/version.rb +10 -12
- data/lib/moneykit.rb +9 -11
- data/lib/plaid_compatible/money_kit_plaid_compatible/api/plaid_api.rb +203 -207
- data/lib/plaid_compatible/money_kit_plaid_compatible/api_client.rb +75 -76
- data/lib/plaid_compatible/money_kit_plaid_compatible/api_error.rb +19 -19
- data/lib/plaid_compatible/money_kit_plaid_compatible/configuration.rb +38 -40
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_balance.rb +59 -61
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_base.rb +71 -87
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_identity.rb +77 -98
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_subtype.rb +85 -86
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/account_type.rb +18 -19
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/accounts_get_request.rb +59 -61
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/accounts_get_request_options.rb +44 -41
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/accounts_get_response.rb +55 -60
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/address.rb +49 -47
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/address_data.rb +65 -69
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_numbers.rb +63 -73
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_request.rb +59 -61
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_request_options.rb +44 -41
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/auth_get_response.rb +61 -72
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/country_code.rb +15 -16
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/email.rb +49 -50
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/http_validation_error.rb +43 -41
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/identity_get_request.rb +59 -61
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/identity_get_request_options.rb +44 -41
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/identity_get_response.rb +55 -60
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/institution.rb +65 -71
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/institutions_get_by_id_request.rb +60 -61
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/institutions_get_by_id_response.rb +49 -50
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item.rb +85 -96
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_error_webhook.rb +65 -77
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_get_request.rb +55 -55
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_get_response.rb +55 -59
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_public_token_exchange_request.rb +55 -55
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_public_token_exchange_response.rb +54 -59
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_remove_request.rb +55 -55
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_remove_response.rb +44 -41
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_investments.rb +49 -47
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_last_webhook.rb +50 -48
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_nullable.rb +55 -59
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/item_status_transactions.rb +49 -47
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/link_token_create_request.rb +100 -121
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/link_token_create_request_user.rb +66 -66
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/link_token_create_response.rb +54 -59
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_ach.rb +59 -65
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_bacs.rb +54 -59
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_eft.rb +59 -68
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/numbers_international.rb +54 -59
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/owner.rb +63 -73
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/personal_finance_category.rb +49 -50
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/phone_number.rb +54 -59
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/plaid_error.rb +88 -103
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/plaid_error_type.rb +26 -27
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/products.rb +16 -17
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/removed_transaction.rb +43 -39
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transaction.rb +107 -134
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_get_request.rb +69 -79
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_get_request_options.rb +66 -68
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_get_response.rb +65 -76
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_refresh_request.rb +55 -55
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_refresh_response.rb +44 -41
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_sync_request.rb +69 -75
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_sync_request_options.rb +50 -46
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/transactions_sync_response.rb +72 -89
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/validation_error.rb +56 -65
- data/lib/plaid_compatible/money_kit_plaid_compatible/models/webhook_environment_values.rb +15 -16
- data/lib/plaid_compatible/money_kit_plaid_compatible/version.rb +13 -13
- data/lib/plaid_compatible/money_kit_plaid_compatible.rb +12 -12
- data/moneykit.gemspec +21 -25
- metadata +1 -1
| @@ -1,14 +1,12 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            # | 
| 3 | 
            -
             | 
| 4 | 
            -
            # | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
            =end
         | 
| 1 | 
            +
            # #Plaid Compatibility Layer
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # The version of the OpenAPI document: 0.1.0
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            # Generated by: https://openapi-generator.tech
         | 
| 8 | 
            +
            # OpenAPI Generator version: 5.1.1
         | 
| 9 | 
            +
            #
         | 
| 12 10 |  | 
| 13 11 | 
             
            require 'date'
         | 
| 14 12 | 
             
            require 'json'
         | 
| @@ -17,7 +15,8 @@ require 'tempfile' | |
| 17 15 | 
             
            require 'faraday'
         | 
| 18 16 | 
             
            require 'faraday/multipart'
         | 
| 19 17 |  | 
| 20 | 
            -
            module MoneyKit | 
| 18 | 
            +
            module MoneyKit
         | 
| 19 | 
            +
              module PlaidCompatible
         | 
| 21 20 | 
             
              class ApiClient
         | 
| 22 21 | 
             
                # The Configuration object holding settings to be used in the API client.
         | 
| 23 22 | 
             
                attr_accessor :config
         | 
| @@ -34,10 +33,10 @@ module MoneyKit::PlaidCompatible | |
| 34 33 | 
             
                # @option config [Configuration] Configuration for initializing the object, default to Configuration.default
         | 
| 35 34 | 
             
                def initialize(config = Configuration.default)
         | 
| 36 35 | 
             
                  @config = config
         | 
| 37 | 
            -
                  @user_agent =  | 
| 36 | 
            +
                  @user_agent = 'Plaid Ruby v1.0.0'
         | 
| 38 37 | 
             
                  @default_headers = {
         | 
| 39 38 | 
             
                    'Content-Type' => 'application/json',
         | 
| 40 | 
            -
                    'User-Agent' => @user_agent | 
| 39 | 
            +
                    'User-Agent' => @user_agent
         | 
| 41 40 | 
             
                  }
         | 
| 42 41 | 
             
                  @connection = create_connection
         | 
| 43 42 | 
             
                end
         | 
| @@ -57,7 +56,7 @@ module MoneyKit::PlaidCompatible | |
| 57 56 | 
             
                # @return [Array<(Object, Integer, Hash)>] an array of 3 elements:
         | 
| 58 57 | 
             
                #   the data deserialized from response body (could be nil), response status code and response headers.
         | 
| 59 58 | 
             
                def call_api(http_method, path, opts = {})
         | 
| 60 | 
            -
                  if opts[:header_params][ | 
| 59 | 
            +
                  if opts[:header_params]['Content-Type'] == 'multipart/form-data'
         | 
| 61 60 | 
             
                    connection.request :multipart
         | 
| 62 61 | 
             
                    connection.request :url_encoded
         | 
| 63 62 | 
             
                  end
         | 
| @@ -67,32 +66,30 @@ module MoneyKit::PlaidCompatible | |
| 67 66 | 
             
                      build_request(http_method, path, req, opts)
         | 
| 68 67 | 
             
                    end
         | 
| 69 68 |  | 
| 70 | 
            -
                    if @config.debugging
         | 
| 71 | 
            -
                      @config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
         | 
| 72 | 
            -
                    end
         | 
| 69 | 
            +
                    @config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n" if @config.debugging
         | 
| 73 70 |  | 
| 74 71 | 
             
                    unless response.success?
         | 
| 75 72 | 
             
                      if response.status == 0
         | 
| 76 73 | 
             
                        # Errors from libcurl will be made visible here
         | 
| 77 | 
            -
                         | 
| 78 | 
            -
             | 
| 74 | 
            +
                        raise ApiError.new(code: 0,
         | 
| 75 | 
            +
                                           message: response.return_message)
         | 
| 79 76 | 
             
                      else
         | 
| 80 77 | 
             
                        raw_body = response.body
         | 
| 81 78 | 
             
                        # Gracefully handle malformed body which is possible during API outage/maintanance
         | 
| 82 79 | 
             
                        parsed_body = begin
         | 
| 83 | 
            -
             | 
| 84 | 
            -
             | 
| 85 | 
            -
             | 
| 86 | 
            -
             | 
| 87 | 
            -
                         | 
| 88 | 
            -
             | 
| 89 | 
            -
             | 
| 90 | 
            -
             | 
| 91 | 
            -
             | 
| 80 | 
            +
                          JSON.parse(raw_body)
         | 
| 81 | 
            +
                        rescue JSON::ParserError
         | 
| 82 | 
            +
                          nil
         | 
| 83 | 
            +
                        end
         | 
| 84 | 
            +
                        raise ApiError.new(code: response.status,
         | 
| 85 | 
            +
                                           response_headers: response.headers,
         | 
| 86 | 
            +
                                           response_body: raw_body,
         | 
| 87 | 
            +
                                           data: parsed_body),
         | 
| 88 | 
            +
                              response.reason_phrase
         | 
| 92 89 | 
             
                      end
         | 
| 93 90 | 
             
                    end
         | 
| 94 91 | 
             
                  rescue Faraday::TimeoutError
         | 
| 95 | 
            -
                     | 
| 92 | 
            +
                    raise ApiError, 'Connection timed out'
         | 
| 96 93 | 
             
                  end
         | 
| 97 94 |  | 
| 98 95 | 
             
                  if opts[:return_type]
         | 
| @@ -101,7 +98,7 @@ module MoneyKit::PlaidCompatible | |
| 101 98 | 
             
                  else
         | 
| 102 99 | 
             
                    data = nil
         | 
| 103 100 | 
             
                  end
         | 
| 104 | 
            -
                   | 
| 101 | 
            +
                  [data, response.status, response.headers]
         | 
| 105 102 | 
             
                end
         | 
| 106 103 |  | 
| 107 104 | 
             
                # Builds the HTTP request
         | 
| @@ -124,20 +121,18 @@ module MoneyKit::PlaidCompatible | |
| 124 121 | 
             
                  update_params_for_auth! header_params, query_params, opts[:auth_names]
         | 
| 125 122 |  | 
| 126 123 | 
             
                  req_opts = {
         | 
| 127 | 
            -
                    : | 
| 128 | 
            -
                    : | 
| 129 | 
            -
                    : | 
| 130 | 
            -
                    : | 
| 131 | 
            -
                    : | 
| 132 | 
            -
                    : | 
| 124 | 
            +
                    method: http_method,
         | 
| 125 | 
            +
                    headers: header_params,
         | 
| 126 | 
            +
                    params: query_params,
         | 
| 127 | 
            +
                    params_encoding: @config.params_encoding,
         | 
| 128 | 
            +
                    timeout: @config.timeout,
         | 
| 129 | 
            +
                    verbose: @config.debugging
         | 
| 133 130 | 
             
                  }
         | 
| 134 131 |  | 
| 135 | 
            -
                  if [ | 
| 132 | 
            +
                  if %i[post patch put delete].include?(http_method)
         | 
| 136 133 | 
             
                    req_body = build_request_body(header_params, form_params, opts[:body])
         | 
| 137 | 
            -
                    req_opts.update : | 
| 138 | 
            -
                    if @config.debugging
         | 
| 139 | 
            -
                      @config.logger.debug "HTTP request body param ~BEGIN~\n#{req_body}\n~END~\n"
         | 
| 140 | 
            -
                    end
         | 
| 134 | 
            +
                    req_opts.update body: req_body
         | 
| 135 | 
            +
                    @config.logger.debug "HTTP request body param ~BEGIN~\n#{req_body}\n~END~\n" if @config.debugging
         | 
| 141 136 | 
             
                  end
         | 
| 142 137 | 
             
                  request.headers = header_params
         | 
| 143 138 | 
             
                  request.body = req_body
         | 
| @@ -159,16 +154,16 @@ module MoneyKit::PlaidCompatible | |
| 159 154 | 
             
                  elsif header_params['Content-Type'] == 'multipart/form-data'
         | 
| 160 155 | 
             
                    data = {}
         | 
| 161 156 | 
             
                    form_params.each do |key, value|
         | 
| 162 | 
            -
                      case value
         | 
| 163 | 
            -
             | 
| 164 | 
            -
             | 
| 165 | 
            -
             | 
| 166 | 
            -
             | 
| 167 | 
            -
             | 
| 168 | 
            -
             | 
| 169 | 
            -
             | 
| 170 | 
            -
             | 
| 171 | 
            -
             | 
| 157 | 
            +
                      data[key] = case value
         | 
| 158 | 
            +
                                  when ::File, ::Tempfile
         | 
| 159 | 
            +
                                    # TODO: hardcode to application/octet-stream, need better way to detect content type
         | 
| 160 | 
            +
                                    Faraday::Multipart::Post::UploadIO.new(value.path, 'application/octet-stream', value.path)
         | 
| 161 | 
            +
                                  when ::Array, nil
         | 
| 162 | 
            +
                                    # let Faraday handle Array and nil parameters
         | 
| 163 | 
            +
                                    value
         | 
| 164 | 
            +
                                  else
         | 
| 165 | 
            +
                                    value.to_s
         | 
| 166 | 
            +
                                  end
         | 
| 172 167 | 
             
                    end
         | 
| 173 168 | 
             
                  elsif body
         | 
| 174 169 | 
             
                    data = body.is_a?(String) ? body : body.to_json
         | 
| @@ -187,7 +182,7 @@ module MoneyKit::PlaidCompatible | |
| 187 182 | 
             
                # @param [String] mime MIME
         | 
| 188 183 | 
             
                # @return [Boolean] True if the MIME is application/json
         | 
| 189 184 | 
             
                def json_mime?(mime)
         | 
| 190 | 
            -
                  (mime == '*/*') || !(mime =~  | 
| 185 | 
            +
                  (mime == '*/*') || !(mime =~ %r{Application/.*json(?!p)(;.*)?}i).nil?
         | 
| 191 186 | 
             
                end
         | 
| 192 187 |  | 
| 193 188 | 
             
                # Deserialize the response to the given return type.
         | 
| @@ -209,16 +204,14 @@ module MoneyKit::PlaidCompatible | |
| 209 204 | 
             
                  # ensuring a default content type
         | 
| 210 205 | 
             
                  content_type = response.headers['Content-Type'] || 'application/json'
         | 
| 211 206 |  | 
| 212 | 
            -
                   | 
| 207 | 
            +
                  raise "Content-Type is not supported: #{content_type}" unless json_mime?(content_type)
         | 
| 213 208 |  | 
| 214 209 | 
             
                  begin
         | 
| 215 | 
            -
                    data = JSON.parse("[#{body}]", : | 
| 210 | 
            +
                    data = JSON.parse("[#{body}]", symbolize_names: true)[0]
         | 
| 216 211 | 
             
                  rescue JSON::ParserError => e
         | 
| 217 | 
            -
                     | 
| 218 | 
            -
             | 
| 219 | 
            -
                     | 
| 220 | 
            -
                      raise e
         | 
| 221 | 
            -
                    end
         | 
| 212 | 
            +
                    raise e unless %w[String Date DateTime].include?(return_type)
         | 
| 213 | 
            +
             | 
| 214 | 
            +
                    data = body
         | 
| 222 215 | 
             
                  end
         | 
| 223 216 |  | 
| 224 217 | 
             
                  convert_to_type data, return_type
         | 
| @@ -230,6 +223,7 @@ module MoneyKit::PlaidCompatible | |
| 230 223 | 
             
                # @return [Mixed] Data in a particular type
         | 
| 231 224 | 
             
                def convert_to_type(data, return_type)
         | 
| 232 225 | 
             
                  return nil if data.nil?
         | 
| 226 | 
            +
             | 
| 233 227 | 
             
                  case return_type
         | 
| 234 228 | 
             
                  when 'String'
         | 
| 235 229 | 
             
                    data.to_s
         | 
| @@ -250,11 +244,11 @@ module MoneyKit::PlaidCompatible | |
| 250 244 | 
             
                    data
         | 
| 251 245 | 
             
                  when /\AArray<(.+)>\z/
         | 
| 252 246 | 
             
                    # e.g. Array<Pet>
         | 
| 253 | 
            -
                    sub_type =  | 
| 247 | 
            +
                    sub_type = ::Regexp.last_match(1)
         | 
| 254 248 | 
             
                    data.map { |item| convert_to_type(item, sub_type) }
         | 
| 255 | 
            -
                  when /\AHash | 
| 249 | 
            +
                  when /\AHash<String, (.+)>\z/
         | 
| 256 250 | 
             
                    # e.g. Hash<String, Integer>
         | 
| 257 | 
            -
                    sub_type =  | 
| 251 | 
            +
                    sub_type = ::Regexp.last_match(1)
         | 
| 258 252 | 
             
                    {}.tap do |hash|
         | 
| 259 253 | 
             
                      data.each { |k, v| hash[k] = convert_to_type(v, sub_type) }
         | 
| 260 254 | 
             
                    end
         | 
| @@ -272,14 +266,14 @@ module MoneyKit::PlaidCompatible | |
| 272 266 | 
             
                #
         | 
| 273 267 | 
             
                # @see Configuration#temp_folder_path
         | 
| 274 268 | 
             
                def prepare_file(response)
         | 
| 275 | 
            -
                  content_disposition = response.headers[ | 
| 269 | 
            +
                  content_disposition = response.headers['Content-Disposition']
         | 
| 276 270 | 
             
                  if content_disposition && content_disposition =~ /filename=/i
         | 
| 277 271 | 
             
                    filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
         | 
| 278 272 | 
             
                    prefix = sanitize_filename(filename)
         | 
| 279 273 | 
             
                  else
         | 
| 280 | 
            -
                    prefix =  | 
| 274 | 
            +
                    prefix = 'download-'
         | 
| 281 275 | 
             
                  end
         | 
| 282 | 
            -
                  prefix  | 
| 276 | 
            +
                  prefix += '-' unless prefix.end_with?('-')
         | 
| 283 277 | 
             
                  encoding = response.body.encoding
         | 
| 284 278 | 
             
                  tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
         | 
| 285 279 | 
             
                  @tempfile = tempfile
         | 
| @@ -288,7 +282,7 @@ module MoneyKit::PlaidCompatible | |
| 288 282 | 
             
                  @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder " \
         | 
| 289 283 | 
             
                                      "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file " \
         | 
| 290 284 | 
             
                                      "will be deleted automatically with GC. It's also recommended to delete the temp file " \
         | 
| 291 | 
            -
                                       | 
| 285 | 
            +
                                      'explicitly with `tempfile.delete`'
         | 
| 292 286 | 
             
                end
         | 
| 293 287 |  | 
| 294 288 | 
             
                # Sanitize filename by removing path.
         | 
| @@ -297,12 +291,12 @@ module MoneyKit::PlaidCompatible | |
| 297 291 | 
             
                # @param [String] filename the filename to be sanitized
         | 
| 298 292 | 
             
                # @return [String] the sanitized filename
         | 
| 299 293 | 
             
                def sanitize_filename(filename)
         | 
| 300 | 
            -
                  filename.gsub( | 
| 294 | 
            +
                  filename.gsub(%r{.*[/\\]}, '')
         | 
| 301 295 | 
             
                end
         | 
| 302 296 |  | 
| 303 297 | 
             
                def build_request_url(path)
         | 
| 304 298 | 
             
                  # Add leading and trailing slashes to path
         | 
| 305 | 
            -
                  path = "/#{path}".gsub( | 
| 299 | 
            +
                  path = "/#{path}".gsub(%r{/+}, '/')
         | 
| 306 300 | 
             
                  @config.base_url + path
         | 
| 307 301 | 
             
                end
         | 
| 308 302 |  | 
| @@ -315,10 +309,11 @@ module MoneyKit::PlaidCompatible | |
| 315 309 | 
             
                  Array(auth_names).each do |auth_name|
         | 
| 316 310 | 
             
                    auth_setting = @config.auth_settings[auth_name]
         | 
| 317 311 | 
             
                    next unless auth_setting
         | 
| 312 | 
            +
             | 
| 318 313 | 
             
                    case auth_setting[:in]
         | 
| 319 314 | 
             
                    when 'header' then header_params[auth_setting[:key]] = auth_setting[:value]
         | 
| 320 315 | 
             
                    when 'query'  then query_params[auth_setting[:key]] = auth_setting[:value]
         | 
| 321 | 
            -
                    else  | 
| 316 | 
            +
                    else raise ArgumentError, 'Authentication token must be in `query` of `header`'
         | 
| 322 317 | 
             
                    end
         | 
| 323 318 | 
             
                  end
         | 
| 324 319 | 
             
                end
         | 
| @@ -336,6 +331,7 @@ module MoneyKit::PlaidCompatible | |
| 336 331 | 
             
                # @return [String] the Accept header (e.g. application/json)
         | 
| 337 332 | 
             
                def select_header_accept(accepts)
         | 
| 338 333 | 
             
                  return nil if accepts.nil? || accepts.empty?
         | 
| 334 | 
            +
             | 
| 339 335 | 
             
                  # use JSON when present, otherwise use all of the provided
         | 
| 340 336 | 
             
                  json_accept = accepts.find { |s| json_mime?(s) }
         | 
| 341 337 | 
             
                  json_accept || accepts.join(',')
         | 
| @@ -347,6 +343,7 @@ module MoneyKit::PlaidCompatible | |
| 347 343 | 
             
                def select_header_content_type(content_types)
         | 
| 348 344 | 
             
                  # use application/json by default
         | 
| 349 345 | 
             
                  return 'application/json' if content_types.nil? || content_types.empty?
         | 
| 346 | 
            +
             | 
| 350 347 | 
             
                  # use JSON when present, otherwise use the first one
         | 
| 351 348 | 
             
                  json_content_type = content_types.find { |s| json_mime?(s) }
         | 
| 352 349 | 
             
                  json_content_type || content_types.first
         | 
| @@ -357,12 +354,13 @@ module MoneyKit::PlaidCompatible | |
| 357 354 | 
             
                # @return [String] JSON string representation of the object
         | 
| 358 355 | 
             
                def object_to_http_body(model)
         | 
| 359 356 | 
             
                  return model if model.nil? || model.is_a?(String)
         | 
| 357 | 
            +
             | 
| 360 358 | 
             
                  local_body = nil
         | 
| 361 | 
            -
                  if model.is_a?(Array)
         | 
| 362 | 
            -
             | 
| 363 | 
            -
             | 
| 364 | 
            -
             | 
| 365 | 
            -
             | 
| 359 | 
            +
                  local_body = if model.is_a?(Array)
         | 
| 360 | 
            +
                                 model.map { |m| object_to_hash(m) }
         | 
| 361 | 
            +
                               else
         | 
| 362 | 
            +
                                 object_to_hash(model)
         | 
| 363 | 
            +
                               end
         | 
| 366 364 | 
             
                  local_body.to_json
         | 
| 367 365 | 
             
                end
         | 
| 368 366 |  | 
| @@ -393,8 +391,9 @@ module MoneyKit::PlaidCompatible | |
| 393 391 | 
             
                    # return the array directly as typhoeus will handle it as expected
         | 
| 394 392 | 
             
                    param
         | 
| 395 393 | 
             
                  else
         | 
| 396 | 
            -
                     | 
| 394 | 
            +
                    raise "unknown collection format: #{collection_format.inspect}"
         | 
| 397 395 | 
             
                  end
         | 
| 398 396 | 
             
                end
         | 
| 399 397 | 
             
              end
         | 
| 398 | 
            +
              end
         | 
| 400 399 | 
             
            end
         | 
| @@ -1,16 +1,15 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            # | 
| 3 | 
            -
             | 
| 4 | 
            -
            # | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
            module MoneyKit::PlaidCompatible
         | 
| 1 | 
            +
            # #Plaid Compatibility Layer
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # The version of the OpenAPI document: 0.1.0
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            # Generated by: https://openapi-generator.tech
         | 
| 8 | 
            +
            # OpenAPI Generator version: 5.1.1
         | 
| 9 | 
            +
            #
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            module MoneyKit
         | 
| 12 | 
            +
              module PlaidCompatible
         | 
| 14 13 | 
             
              class ApiError < StandardError
         | 
| 15 14 | 
             
                attr_reader :code, :response_headers, :response_body, :data
         | 
| 16 15 |  | 
| @@ -41,11 +40,11 @@ module MoneyKit::PlaidCompatible | |
| 41 40 | 
             
                end
         | 
| 42 41 |  | 
| 43 42 | 
             
                def message
         | 
| 44 | 
            -
                  if @message.nil?
         | 
| 45 | 
            -
             | 
| 46 | 
            -
             | 
| 47 | 
            -
             | 
| 48 | 
            -
             | 
| 43 | 
            +
                  msg = if @message.nil?
         | 
| 44 | 
            +
                          'Error message: the server returns an error'
         | 
| 45 | 
            +
                        else
         | 
| 46 | 
            +
                          @message
         | 
| 47 | 
            +
                        end
         | 
| 49 48 |  | 
| 50 49 | 
             
                  msg += "\nHTTP status code: #{code}" if code
         | 
| 51 50 | 
             
                  msg += "\nResponse headers: #{response_headers}" if response_headers
         | 
| @@ -54,4 +53,5 @@ module MoneyKit::PlaidCompatible | |
| 54 53 | 
             
                  msg
         | 
| 55 54 | 
             
                end
         | 
| 56 55 | 
             
              end
         | 
| 57 | 
            -
            end
         | 
| 56 | 
            +
              end
         | 
| 57 | 
            +
            end
         | 
| @@ -1,21 +1,19 @@ | |
| 1 | 
            -
             | 
| 2 | 
            -
            # | 
| 3 | 
            -
             | 
| 4 | 
            -
            # | 
| 5 | 
            -
             | 
| 6 | 
            -
             | 
| 7 | 
            -
             | 
| 8 | 
            -
             | 
| 9 | 
            -
             | 
| 10 | 
            -
             | 
| 11 | 
            -
             | 
| 12 | 
            -
             | 
| 13 | 
            -
            module MoneyKit::PlaidCompatible
         | 
| 14 | 
            -
             | 
| 1 | 
            +
            # #Plaid Compatibility Layer
         | 
| 2 | 
            +
            #
         | 
| 3 | 
            +
            # No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
         | 
| 4 | 
            +
            #
         | 
| 5 | 
            +
            # The version of the OpenAPI document: 0.1.0
         | 
| 6 | 
            +
            #
         | 
| 7 | 
            +
            # Generated by: https://openapi-generator.tech
         | 
| 8 | 
            +
            # OpenAPI Generator version: 5.1.1
         | 
| 9 | 
            +
            #
         | 
| 10 | 
            +
             | 
| 11 | 
            +
            module MoneyKit
         | 
| 12 | 
            +
              module PlaidCompatible
         | 
| 15 13 | 
             
              class Configuration
         | 
| 16 14 | 
             
                # Plaid Environment mapping
         | 
| 17 15 | 
             
                # production, development, sandbox
         | 
| 18 | 
            -
                Environment = {  | 
| 16 | 
            +
                Environment = { 'production' => 0, 'sandbox' => 1 }
         | 
| 19 17 |  | 
| 20 18 | 
             
                # Defines url scheme
         | 
| 21 19 | 
             
                attr_accessor :scheme
         | 
| @@ -132,9 +130,7 @@ module MoneyKit::PlaidCompatible | |
| 132 130 | 
             
                # https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96
         | 
| 133 131 | 
             
                attr_accessor :params_encoding
         | 
| 134 132 |  | 
| 135 | 
            -
                attr_accessor :inject_format
         | 
| 136 | 
            -
             | 
| 137 | 
            -
                attr_accessor :force_ending_format
         | 
| 133 | 
            +
                attr_accessor :inject_format, :force_ending_format
         | 
| 138 134 |  | 
| 139 135 | 
             
                def initialize
         | 
| 140 136 | 
             
                  @scheme = 'https'
         | 
| @@ -145,7 +141,7 @@ module MoneyKit::PlaidCompatible | |
| 145 141 | 
             
                  @server_variables = {}
         | 
| 146 142 | 
             
                  @server_operation_variables = {}
         | 
| 147 143 | 
             
                  @api_key = {
         | 
| 148 | 
            -
                    'Plaid-Version' => '' | 
| 144 | 
            +
                    'Plaid-Version' => ''
         | 
| 149 145 | 
             
                  }
         | 
| 150 146 | 
             
                  @api_key_prefix = {}
         | 
| 151 147 | 
             
                  @timeout = 60
         | 
| @@ -158,7 +154,7 @@ module MoneyKit::PlaidCompatible | |
| 158 154 | 
             
                  @debugging = false
         | 
| 159 155 | 
             
                  @inject_format = false
         | 
| 160 156 | 
             
                  @force_ending_format = false
         | 
| 161 | 
            -
                  @logger =  | 
| 157 | 
            +
                  @logger = defined?(Rails) && Rails.respond_to?(:logger) ? Rails.logger : Logger.new(STDOUT)
         | 
| 162 158 |  | 
| 163 159 | 
             
                  yield(self) if block_given?
         | 
| 164 160 | 
             
                end
         | 
| @@ -174,26 +170,27 @@ module MoneyKit::PlaidCompatible | |
| 174 170 |  | 
| 175 171 | 
             
                def scheme=(scheme)
         | 
| 176 172 | 
             
                  # remove :// from scheme
         | 
| 177 | 
            -
                  @scheme = scheme.sub( | 
| 173 | 
            +
                  @scheme = scheme.sub(%r{://}, '')
         | 
| 178 174 | 
             
                end
         | 
| 179 175 |  | 
| 180 176 | 
             
                def host=(host)
         | 
| 181 177 | 
             
                  # remove http(s):// and anything after a slash
         | 
| 182 | 
            -
                  @host = host.sub( | 
| 178 | 
            +
                  @host = host.sub(%r{https?://}, '').split('/').first
         | 
| 183 179 | 
             
                end
         | 
| 184 180 |  | 
| 185 181 | 
             
                def base_path=(base_path)
         | 
| 186 182 | 
             
                  # Add leading and trailing slashes to base_path
         | 
| 187 | 
            -
                  @base_path = "/#{base_path}".gsub( | 
| 183 | 
            +
                  @base_path = "/#{base_path}".gsub(%r{/+}, '/')
         | 
| 188 184 | 
             
                  @base_path = '' if @base_path == '/'
         | 
| 189 185 | 
             
                end
         | 
| 190 186 |  | 
| 191 187 | 
             
                # Returns base URL for specified operation based on server settings
         | 
| 192 188 | 
             
                def base_url(operation = nil)
         | 
| 193 189 | 
             
                  index = server_operation_index.fetch(operation, server_index)
         | 
| 194 | 
            -
                  return "#{scheme}://#{[host, base_path].join('/').gsub( | 
| 190 | 
            +
                  return "#{scheme}://#{[host, base_path].join('/').gsub(%r{/+}, '/')}".sub(%r{/+\z}, '') if index.nil?
         | 
| 195 191 |  | 
| 196 | 
            -
                  server_url(index, server_operation_variables.fetch(operation, server_variables), | 
| 192 | 
            +
                  server_url(index, server_operation_variables.fetch(operation, server_variables),
         | 
| 193 | 
            +
                             operation_server_settings[operation])
         | 
| 197 194 | 
             
                end
         | 
| 198 195 |  | 
| 199 196 | 
             
                # Gets API key (with prefix if set).
         | 
| @@ -227,7 +224,7 @@ module MoneyKit::PlaidCompatible | |
| 227 224 | 
             
                        in: 'header',
         | 
| 228 225 | 
             
                        key: 'PLAID-SECRET',
         | 
| 229 226 | 
             
                        value: api_key_with_prefix('PLAID-SECRET')
         | 
| 230 | 
            -
                      } | 
| 227 | 
            +
                      }
         | 
| 231 228 | 
             
                  }
         | 
| 232 229 | 
             
                end
         | 
| 233 230 |  | 
| @@ -235,19 +232,18 @@ module MoneyKit::PlaidCompatible | |
| 235 232 | 
             
                def server_settings
         | 
| 236 233 | 
             
                  [
         | 
| 237 234 | 
             
                    {
         | 
| 238 | 
            -
                      url:  | 
| 239 | 
            -
                      description:  | 
| 235 | 
            +
                      url: 'https://production.moneykit.com/plaid-compatible',
         | 
| 236 | 
            +
                      description: 'MoneyKit production environment (Live institution data)'
         | 
| 240 237 | 
             
                    },
         | 
| 241 238 | 
             
                    {
         | 
| 242 | 
            -
                      url:  | 
| 243 | 
            -
                      description:  | 
| 239 | 
            +
                      url: 'https://sandbox.moneykit.com/plaid-compatible',
         | 
| 240 | 
            +
                      description: 'MoneyKit sandbox environment (Unrestricted environment with fake institution data)'
         | 
| 244 241 | 
             
                    }
         | 
| 245 242 | 
             
                  ]
         | 
| 246 243 | 
             
                end
         | 
| 247 244 |  | 
| 248 245 | 
             
                def operation_server_settings
         | 
| 249 | 
            -
                  {
         | 
| 250 | 
            -
                  }
         | 
| 246 | 
            +
                  {}
         | 
| 251 247 | 
             
                end
         | 
| 252 248 |  | 
| 253 249 | 
             
                # Returns URL based on server settings
         | 
| @@ -255,11 +251,11 @@ module MoneyKit::PlaidCompatible | |
| 255 251 | 
             
                # @param index array index of the server settings
         | 
| 256 252 | 
             
                # @param variables hash of variable and the corresponding value
         | 
| 257 253 | 
             
                def server_url(index, variables = {}, servers = nil)
         | 
| 258 | 
            -
                  servers = server_settings if servers | 
| 254 | 
            +
                  servers = server_settings if servers.nil?
         | 
| 259 255 |  | 
| 260 256 | 
             
                  # check array index out of bound
         | 
| 261 | 
            -
                  if  | 
| 262 | 
            -
                     | 
| 257 | 
            +
                  if index < 0 || index >= servers.size
         | 
| 258 | 
            +
                    raise ArgumentError, "Invalid index #{index} when selecting the server. Must be less than #{servers.size}"
         | 
| 263 259 | 
             
                  end
         | 
| 264 260 |  | 
| 265 261 | 
             
                  server = servers[index]
         | 
| @@ -268,20 +264,22 @@ module MoneyKit::PlaidCompatible | |
| 268 264 | 
             
                  return url unless server.key? :variables
         | 
| 269 265 |  | 
| 270 266 | 
             
                  # go through variable and assign a value
         | 
| 271 | 
            -
                  server[:variables].each do |name,  | 
| 267 | 
            +
                  server[:variables].each do |name, _variable|
         | 
| 272 268 | 
             
                    if variables.key?(name)
         | 
| 273 | 
            -
                      if  | 
| 274 | 
            -
                        url.gsub!  | 
| 269 | 
            +
                      if !server[:variables][name].key?(:enum_values) || server[:variables][name][:enum_values].include?(variables[name])
         | 
| 270 | 
            +
                        url.gsub! '{' + name.to_s + '}', variables[name]
         | 
| 275 271 | 
             
                      else
         | 
| 276 | 
            -
                         | 
| 272 | 
            +
                        raise ArgumentError,
         | 
| 273 | 
            +
                              "The variable `#{name}` in the server URL has invalid value #{variables[name]}. Must be #{server[:variables][name][:enum_values]}."
         | 
| 277 274 | 
             
                      end
         | 
| 278 275 | 
             
                    else
         | 
| 279 276 | 
             
                      # use default value
         | 
| 280 | 
            -
                      url.gsub!  | 
| 277 | 
            +
                      url.gsub! '{' + name.to_s + '}', server[:variables][name][:default_value]
         | 
| 281 278 | 
             
                    end
         | 
| 282 279 | 
             
                  end
         | 
| 283 280 |  | 
| 284 281 | 
             
                  url
         | 
| 285 282 | 
             
                end
         | 
| 286 283 | 
             
              end
         | 
| 284 | 
            +
              end
         | 
| 287 285 | 
             
            end
         |