xero-ruby 2.8.0 → 2.10.0
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/README.md +158 -117
- data/lib/xero-ruby.rb +1 -1
- data/lib/xero-ruby/api/accounting_api.rb +573 -346
- data/lib/xero-ruby/api/asset_api.rb +12 -6
- data/lib/xero-ruby/api/files_api.rb +158 -32
- data/lib/xero-ruby/api/payroll_au_api.rb +58 -29
- data/lib/xero-ruby/api/payroll_nz_api.rb +136 -68
- data/lib/xero-ruby/api/payroll_uk_api.rb +146 -82
- data/lib/xero-ruby/api/project_api.rb +26 -13
- data/lib/xero-ruby/api_client.rb +96 -14
- data/lib/xero-ruby/configuration.rb +14 -1
- data/lib/xero-ruby/models/accounting/batch_payment.rb +16 -4
- data/lib/xero-ruby/models/accounting/import_summary_accounts.rb +8 -8
- data/lib/xero-ruby/models/files/{inline_object.rb → upload_object.rb} +18 -3
- data/lib/xero-ruby/models/payroll_au/deduction_line.rb +0 -5
- data/lib/xero-ruby/models/payroll_nz/salary_and_wage.rb +3 -2
- data/lib/xero-ruby/models/payroll_nz/timesheet.rb +3 -2
- data/lib/xero-ruby/models/payroll_uk/salary_and_wage.rb +3 -2
- data/lib/xero-ruby/models/projects/time_entry.rb +3 -2
- data/lib/xero-ruby/version.rb +2 -2
- data/spec/api_client_spec.rb +174 -7
- data/spec/api_error_spec.rb +1 -1
- data/spec/configuration_spec.rb +17 -0
- data/spec/files/models/inline_object_spec.rb +3 -3
- data/spec/helper_methods_spec.rb +2 -2
- metadata +23 -3
| @@ -31,7 +31,8 @@ module XeroRuby | |
| 31 31 | 
             
                # @param project_create_or_update [ProjectCreateOrUpdate] Create a new project with ProjectCreateOrUpdate object
         | 
| 32 32 | 
             
                # @param [Hash] opts the optional parameters
         | 
| 33 33 | 
             
                # @return [Array<(Project, Integer, Hash)>] Project data, response status code and response headers
         | 
| 34 | 
            -
                def create_project_with_http_info(xero_tenant_id, project_create_or_update,  | 
| 34 | 
            +
                def create_project_with_http_info(xero_tenant_id, project_create_or_update, options = {})
         | 
| 35 | 
            +
                  opts = options.dup
         | 
| 35 36 | 
             
                  if @api_client.config.debugging
         | 
| 36 37 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.create_project ...'
         | 
| 37 38 | 
             
                  end
         | 
| @@ -111,7 +112,8 @@ module XeroRuby | |
| 111 112 | 
             
                # @param time_entry_create_or_update [TimeEntryCreateOrUpdate] The time entry object you are creating
         | 
| 112 113 | 
             
                # @param [Hash] opts the optional parameters
         | 
| 113 114 | 
             
                # @return [Array<(TimeEntry, Integer, Hash)>] TimeEntry data, response status code and response headers
         | 
| 114 | 
            -
                def create_time_entry_with_http_info(xero_tenant_id, project_id, time_entry_create_or_update,  | 
| 115 | 
            +
                def create_time_entry_with_http_info(xero_tenant_id, project_id, time_entry_create_or_update, options = {})
         | 
| 116 | 
            +
                  opts = options.dup
         | 
| 115 117 | 
             
                  if @api_client.config.debugging
         | 
| 116 118 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.create_time_entry ...'
         | 
| 117 119 | 
             
                  end
         | 
| @@ -195,7 +197,8 @@ module XeroRuby | |
| 195 197 | 
             
                # @param time_entry_id [String] You can specify an individual task by appending the id to the endpoint
         | 
| 196 198 | 
             
                # @param [Hash] opts the optional parameters
         | 
| 197 199 | 
             
                # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
         | 
| 198 | 
            -
                def delete_time_entry_with_http_info(xero_tenant_id, project_id, time_entry_id,  | 
| 200 | 
            +
                def delete_time_entry_with_http_info(xero_tenant_id, project_id, time_entry_id, options = {})
         | 
| 201 | 
            +
                  opts = options.dup
         | 
| 199 202 | 
             
                  if @api_client.config.debugging
         | 
| 200 203 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.delete_time_entry ...'
         | 
| 201 204 | 
             
                  end
         | 
| @@ -273,7 +276,8 @@ module XeroRuby | |
| 273 276 | 
             
                # @param project_id [String] You can specify an individual project by appending the projectId to the endpoint
         | 
| 274 277 | 
             
                # @param [Hash] opts the optional parameters
         | 
| 275 278 | 
             
                # @return [Array<(Project, Integer, Hash)>] Project data, response status code and response headers
         | 
| 276 | 
            -
                def get_project_with_http_info(xero_tenant_id, project_id,  | 
| 279 | 
            +
                def get_project_with_http_info(xero_tenant_id, project_id, options = {})
         | 
| 280 | 
            +
                  opts = options.dup
         | 
| 277 281 | 
             
                  if @api_client.config.debugging
         | 
| 278 282 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.get_project ...'
         | 
| 279 283 | 
             
                  end
         | 
| @@ -351,7 +355,8 @@ module XeroRuby | |
| 351 355 | 
             
                # @option opts [Integer] :page set to 1 by default. The requested number of the page in paged response - Must be a number greater than 0.
         | 
| 352 356 | 
             
                # @option opts [Integer] :page_size Optional, it is set to 50 by default. The number of items to return per page in a paged response - Must be a number between 1 and 500.
         | 
| 353 357 | 
             
                # @return [Array<(ProjectUsers, Integer, Hash)>] ProjectUsers data, response status code and response headers
         | 
| 354 | 
            -
                def get_project_users_with_http_info(xero_tenant_id,  | 
| 358 | 
            +
                def get_project_users_with_http_info(xero_tenant_id, options = {})
         | 
| 359 | 
            +
                  opts = options.dup
         | 
| 355 360 | 
             
                  if @api_client.config.debugging
         | 
| 356 361 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.get_project_users ...'
         | 
| 357 362 | 
             
                  end
         | 
| @@ -441,7 +446,8 @@ module XeroRuby | |
| 441 446 | 
             
                # @option opts [Integer] :page set to 1 by default. The requested number of the page in paged response - Must be a number greater than 0.
         | 
| 442 447 | 
             
                # @option opts [Integer] :page_size Optional, it is set to 50 by default. The number of items to return per page in a paged response - Must be a number between 1 and 500.
         | 
| 443 448 | 
             
                # @return [Array<(Projects, Integer, Hash)>] Projects data, response status code and response headers
         | 
| 444 | 
            -
                def get_projects_with_http_info(xero_tenant_id,  | 
| 449 | 
            +
                def get_projects_with_http_info(xero_tenant_id, options = {})
         | 
| 450 | 
            +
                  opts = options.dup
         | 
| 445 451 | 
             
                  if @api_client.config.debugging
         | 
| 446 452 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.get_projects ...'
         | 
| 447 453 | 
             
                  end
         | 
| @@ -528,7 +534,8 @@ module XeroRuby | |
| 528 534 | 
             
                # @param task_id [String] You can specify an individual task by appending the taskId to the endpoint, i.e. GET https://.../tasks/{taskID}
         | 
| 529 535 | 
             
                # @param [Hash] opts the optional parameters
         | 
| 530 536 | 
             
                # @return [Array<(Task, Integer, Hash)>] Task data, response status code and response headers
         | 
| 531 | 
            -
                def get_task_with_http_info(xero_tenant_id, project_id, task_id,  | 
| 537 | 
            +
                def get_task_with_http_info(xero_tenant_id, project_id, task_id, options = {})
         | 
| 538 | 
            +
                  opts = options.dup
         | 
| 532 539 | 
             
                  if @api_client.config.debugging
         | 
| 533 540 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.get_task ...'
         | 
| 534 541 | 
             
                  end
         | 
| @@ -616,7 +623,8 @@ module XeroRuby | |
| 616 623 | 
             
                # @option opts [String] :task_ids taskIdsSearch for all tasks that match a comma separated list of taskIds, i.e. GET https://.../tasks?taskIds={taskID},{taskID}
         | 
| 617 624 | 
             
                # @option opts [ChargeType] :charge_type 
         | 
| 618 625 | 
             
                # @return [Array<(Tasks, Integer, Hash)>] Tasks data, response status code and response headers
         | 
| 619 | 
            -
                def get_tasks_with_http_info(xero_tenant_id, project_id,  | 
| 626 | 
            +
                def get_tasks_with_http_info(xero_tenant_id, project_id, options = {})
         | 
| 627 | 
            +
                  opts = options.dup
         | 
| 620 628 | 
             
                  if @api_client.config.debugging
         | 
| 621 629 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.get_tasks ...'
         | 
| 622 630 | 
             
                  end
         | 
| @@ -716,7 +724,8 @@ module XeroRuby | |
| 716 724 | 
             
                # @option opts [DateTime] :date_after_utc ISO 8601 UTC date. Finds all time entries on or after this date filtered on the `dateUtc` field.
         | 
| 717 725 | 
             
                # @option opts [DateTime] :date_before_utc ISO 8601 UTC date. Finds all time entries on or before this date filtered on the `dateUtc` field.
         | 
| 718 726 | 
             
                # @return [Array<(TimeEntries, Integer, Hash)>] TimeEntries data, response status code and response headers
         | 
| 719 | 
            -
                def get_time_entries_with_http_info(xero_tenant_id, project_id,  | 
| 727 | 
            +
                def get_time_entries_with_http_info(xero_tenant_id, project_id, options = {})
         | 
| 728 | 
            +
                  opts = options.dup
         | 
| 720 729 | 
             
                  if @api_client.config.debugging
         | 
| 721 730 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.get_time_entries ...'
         | 
| 722 731 | 
             
                  end
         | 
| @@ -804,7 +813,8 @@ module XeroRuby | |
| 804 813 | 
             
                # @param time_entry_id [String] You can specify an individual time entry by appending the id to the endpoint
         | 
| 805 814 | 
             
                # @param [Hash] opts the optional parameters
         | 
| 806 815 | 
             
                # @return [Array<(TimeEntry, Integer, Hash)>] TimeEntry data, response status code and response headers
         | 
| 807 | 
            -
                def get_time_entry_with_http_info(xero_tenant_id, project_id, time_entry_id,  | 
| 816 | 
            +
                def get_time_entry_with_http_info(xero_tenant_id, project_id, time_entry_id, options = {})
         | 
| 817 | 
            +
                  opts = options.dup
         | 
| 808 818 | 
             
                  if @api_client.config.debugging
         | 
| 809 819 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.get_time_entry ...'
         | 
| 810 820 | 
             
                  end
         | 
| @@ -886,7 +896,8 @@ module XeroRuby | |
| 886 896 | 
             
                # @param project_patch [ProjectPatch] Update the status of an existing Project
         | 
| 887 897 | 
             
                # @param [Hash] opts the optional parameters
         | 
| 888 898 | 
             
                # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
         | 
| 889 | 
            -
                def patch_project_with_http_info(xero_tenant_id, project_id, project_patch,  | 
| 899 | 
            +
                def patch_project_with_http_info(xero_tenant_id, project_id, project_patch, options = {})
         | 
| 900 | 
            +
                  opts = options.dup
         | 
| 890 901 | 
             
                  if @api_client.config.debugging
         | 
| 891 902 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.patch_project ...'
         | 
| 892 903 | 
             
                  end
         | 
| @@ -970,7 +981,8 @@ module XeroRuby | |
| 970 981 | 
             
                # @param project_create_or_update [ProjectCreateOrUpdate] Request of type ProjectCreateOrUpdate
         | 
| 971 982 | 
             
                # @param [Hash] opts the optional parameters
         | 
| 972 983 | 
             
                # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
         | 
| 973 | 
            -
                def update_project_with_http_info(xero_tenant_id, project_id, project_create_or_update,  | 
| 984 | 
            +
                def update_project_with_http_info(xero_tenant_id, project_id, project_create_or_update, options = {})
         | 
| 985 | 
            +
                  opts = options.dup
         | 
| 974 986 | 
             
                  if @api_client.config.debugging
         | 
| 975 987 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.update_project ...'
         | 
| 976 988 | 
             
                  end
         | 
| @@ -1056,7 +1068,8 @@ module XeroRuby | |
| 1056 1068 | 
             
                # @param time_entry_create_or_update [TimeEntryCreateOrUpdate] The time entry object you are updating
         | 
| 1057 1069 | 
             
                # @param [Hash] opts the optional parameters
         | 
| 1058 1070 | 
             
                # @return [Array<(nil, Integer, Hash)>] nil, response status code and response headers
         | 
| 1059 | 
            -
                def update_time_entry_with_http_info(xero_tenant_id, project_id, time_entry_id, time_entry_create_or_update,  | 
| 1071 | 
            +
                def update_time_entry_with_http_info(xero_tenant_id, project_id, time_entry_id, time_entry_create_or_update, options = {})
         | 
| 1072 | 
            +
                  opts = options.dup
         | 
| 1060 1073 | 
             
                  if @api_client.config.debugging
         | 
| 1061 1074 | 
             
                    @api_client.config.logger.debug 'Calling API: ProjectApi.update_time_entry ...'
         | 
| 1062 1075 | 
             
                  end
         | 
    
        data/lib/xero-ruby/api_client.rb
    CHANGED
    
    | @@ -16,6 +16,8 @@ require 'tempfile' | |
| 16 16 | 
             
            require 'find'
         | 
| 17 17 | 
             
            require 'faraday'
         | 
| 18 18 | 
             
            require 'base64'
         | 
| 19 | 
            +
            require 'cgi'
         | 
| 20 | 
            +
            require 'json/jwt'
         | 
| 19 21 |  | 
| 20 22 | 
             
            module XeroRuby
         | 
| 21 23 | 
             
              class ApiClient
         | 
| @@ -31,13 +33,15 @@ module XeroRuby | |
| 31 33 |  | 
| 32 34 | 
             
                # Initializes the ApiClient
         | 
| 33 35 | 
             
                # @option config [Configuration] Configuration for initializing the object, default to Configuration.default
         | 
| 34 | 
            -
                def initialize(config:  | 
| 36 | 
            +
                def initialize(config: {}, credentials: {})
         | 
| 35 37 | 
             
                  @client_id = credentials[:client_id]
         | 
| 36 38 | 
             
                  @client_secret = credentials[:client_secret]
         | 
| 37 39 | 
             
                  @redirect_uri = credentials[:redirect_uri]
         | 
| 38 40 | 
             
                  @scopes = credentials[:scopes]
         | 
| 39 41 | 
             
                  @state = credentials[:state]
         | 
| 40 | 
            -
                   | 
| 42 | 
            +
                  default_config = Configuration.default.clone
         | 
| 43 | 
            +
                  @config = append_to_default_config(default_config, config)
         | 
| 44 | 
            +
             | 
| 41 45 | 
             
                  @user_agent = "xero-ruby-#{VERSION}"
         | 
| 42 46 | 
             
                  @default_headers = {
         | 
| 43 47 | 
             
                    'Content-Type' => 'application/json',
         | 
| @@ -45,8 +49,14 @@ module XeroRuby | |
| 45 49 | 
             
                  }
         | 
| 46 50 | 
             
                end
         | 
| 47 51 |  | 
| 52 | 
            +
                def append_to_default_config(default_config, user_config)
         | 
| 53 | 
            +
                  config = default_config
         | 
| 54 | 
            +
                  user_config.each{|k,v| config.send("#{k}=", v)}
         | 
| 55 | 
            +
                  config
         | 
| 56 | 
            +
                end
         | 
| 57 | 
            +
             | 
| 48 58 | 
             
                def authorization_url
         | 
| 49 | 
            -
                  url = "#{@config.login_url}?response_type=code&client_id=#{@client_id}&redirect_uri=#{@redirect_uri}&scope=#{@scopes}"
         | 
| 59 | 
            +
                  url = "#{@config.login_url}?response_type=code&client_id=#{@client_id}&redirect_uri=#{@redirect_uri}&scope=#{CGI.escape(@scopes)}"
         | 
| 50 60 | 
             
                  url << "&state=#{@state}" if @state
         | 
| 51 61 | 
             
                  return url
         | 
| 52 62 | 
             
                end
         | 
| @@ -88,22 +98,41 @@ module XeroRuby | |
| 88 98 |  | 
| 89 99 | 
             
                # Token Helpers
         | 
| 90 100 | 
             
                def token_set
         | 
| 91 | 
            -
                   | 
| 101 | 
            +
                  @config.token_set
         | 
| 92 102 | 
             
                end
         | 
| 93 103 |  | 
| 94 104 | 
             
                def access_token
         | 
| 95 | 
            -
                   | 
| 105 | 
            +
                  @config.access_token
         | 
| 106 | 
            +
                end
         | 
| 107 | 
            +
             | 
| 108 | 
            +
                def id_token
         | 
| 109 | 
            +
                  @config.id_token
         | 
| 110 | 
            +
                end
         | 
| 111 | 
            +
             | 
| 112 | 
            +
                def decoded_access_token
         | 
| 113 | 
            +
                  decode_jwt(@config.access_token)
         | 
| 114 | 
            +
                end
         | 
| 115 | 
            +
             | 
| 116 | 
            +
                def decoded_id_token
         | 
| 117 | 
            +
                  decode_jwt(@config.id_token)
         | 
| 96 118 | 
             
                end
         | 
| 97 119 |  | 
| 98 120 | 
             
                def set_token_set(token_set)
         | 
| 99 | 
            -
                   | 
| 100 | 
            -
                   | 
| 101 | 
            -
             | 
| 102 | 
            -
                  set_access_token(token_set[ | 
| 121 | 
            +
                  token_set = token_set.with_indifferent_access
         | 
| 122 | 
            +
                  @config.token_set = token_set
         | 
| 123 | 
            +
             | 
| 124 | 
            +
                  set_access_token(token_set[:access_token]) if token_set[:access_token]
         | 
| 125 | 
            +
                  set_id_token(token_set[:id_token]) if token_set[:id_token]
         | 
| 126 | 
            +
                  
         | 
| 127 | 
            +
                  return true
         | 
| 103 128 | 
             
                end
         | 
| 104 129 |  | 
| 105 130 | 
             
                def set_access_token(access_token)
         | 
| 106 | 
            -
                   | 
| 131 | 
            +
                  @config.access_token = access_token
         | 
| 132 | 
            +
                end
         | 
| 133 | 
            +
             | 
| 134 | 
            +
                def set_id_token(id_token)
         | 
| 135 | 
            +
                  @config.id_token = id_token
         | 
| 107 136 | 
             
                end
         | 
| 108 137 |  | 
| 109 138 | 
             
                def get_token_set_from_callback(params)
         | 
| @@ -112,20 +141,52 @@ module XeroRuby | |
| 112 141 | 
             
                    code: params['code'],
         | 
| 113 142 | 
             
                    redirect_uri: @redirect_uri
         | 
| 114 143 | 
             
                  }
         | 
| 115 | 
            -
                   | 
| 144 | 
            +
                  token_set = token_request(data, '/token')
         | 
| 145 | 
            +
             | 
| 146 | 
            +
                  validate_tokens(token_set)
         | 
| 147 | 
            +
                  validate_state(params)
         | 
| 148 | 
            +
                  return token_set
         | 
| 149 | 
            +
                end
         | 
| 150 | 
            +
             | 
| 151 | 
            +
                def validate_tokens(token_set)
         | 
| 152 | 
            +
                  id_token = token_set[:id_token]
         | 
| 153 | 
            +
                  access_token = token_set[:access_token]
         | 
| 154 | 
            +
                  if id_token || access_token
         | 
| 155 | 
            +
                    decode_jwt(access_token) if access_token
         | 
| 156 | 
            +
                    decode_jwt(id_token) if id_token
         | 
| 157 | 
            +
                  end
         | 
| 158 | 
            +
                  return true
         | 
| 159 | 
            +
                end
         | 
| 160 | 
            +
             | 
| 161 | 
            +
                def validate_state(params)
         | 
| 162 | 
            +
                  if params[:state] != @state
         | 
| 163 | 
            +
                    raise StandardError.new "WARNING: @config.state: #{@state} and OAuth callback state: #{params['state']} do not match!"
         | 
| 164 | 
            +
                  end
         | 
| 165 | 
            +
                  return true
         | 
| 166 | 
            +
                end
         | 
| 167 | 
            +
             | 
| 168 | 
            +
                def decode_jwt(tkn)
         | 
| 169 | 
            +
                  jwks_data = JSON.parse(Faraday.get('https://identity.xero.com/.well-known/openid-configuration/jwks').body)
         | 
| 170 | 
            +
                  jwk_set = JSON::JWK::Set.new(jwks_data)
         | 
| 171 | 
            +
                  JSON::JWT.decode(tkn, jwk_set)
         | 
| 172 | 
            +
                end
         | 
| 173 | 
            +
             | 
| 174 | 
            +
                def token_expired?
         | 
| 175 | 
            +
                  token_expiry = Time.at(decoded_access_token['exp'])
         | 
| 176 | 
            +
                  token_expiry < Time.now
         | 
| 116 177 | 
             
                end
         | 
| 117 178 |  | 
| 118 179 | 
             
                def refresh_token_set(token_set)
         | 
| 119 180 | 
             
                  data = {
         | 
| 120 181 | 
             
                    grant_type: 'refresh_token',
         | 
| 121 | 
            -
                    refresh_token: token_set[ | 
| 182 | 
            +
                    refresh_token: token_set[:refresh_token]
         | 
| 122 183 | 
             
                  }
         | 
| 123 184 | 
             
                  return token_request(data, '/token')
         | 
| 124 185 | 
             
                end
         | 
| 125 186 |  | 
| 126 187 | 
             
                def revoke_token(token_set)
         | 
| 127 188 | 
             
                  data = {
         | 
| 128 | 
            -
                    token: token_set[ | 
| 189 | 
            +
                    token: token_set[:refresh_token]
         | 
| 129 190 | 
             
                  }
         | 
| 130 191 | 
             
                  return token_request(data, '/revocation')
         | 
| 131 192 | 
             
                end
         | 
| @@ -174,7 +235,26 @@ module XeroRuby | |
| 174 235 | 
             
                    :client_key => @config.ssl_client_key
         | 
| 175 236 | 
             
                  }
         | 
| 176 237 |  | 
| 177 | 
            -
                   | 
| 238 | 
            +
                  case api_client
         | 
| 239 | 
            +
                  when "AccountingApi"
         | 
| 240 | 
            +
                    method_base_url = @config.accounting_url
         | 
| 241 | 
            +
                  when "AssetApi"
         | 
| 242 | 
            +
                    method_base_url = @config.asset_url
         | 
| 243 | 
            +
                  when "FilesApi"
         | 
| 244 | 
            +
                   method_base_url = @config.files_url
         | 
| 245 | 
            +
                  when "PayrollAuApi"
         | 
| 246 | 
            +
                    method_base_url = @config.payroll_au_url
         | 
| 247 | 
            +
                  when "PayrollNzApi"
         | 
| 248 | 
            +
                    method_base_url = @config.payroll_nz_url
         | 
| 249 | 
            +
                  when "PayrollUkApi"
         | 
| 250 | 
            +
                    method_base_url = @config.payroll_uk_url
         | 
| 251 | 
            +
                  when "ProjectApi"
         | 
| 252 | 
            +
                    method_base_url = @config.project_url
         | 
| 253 | 
            +
                  else
         | 
| 254 | 
            +
                    method_base_url = @config.accounting_url
         | 
| 255 | 
            +
                  end
         | 
| 256 | 
            +
             | 
| 257 | 
            +
                  connection = Faraday.new(:url => method_base_url, :ssl => ssl_options) do |conn|
         | 
| 178 258 | 
             
                    conn.basic_auth(config.username, config.password)
         | 
| 179 259 | 
             
                    if opts[:header_params]["Content-Type"] == "multipart/form-data"
         | 
| 180 260 | 
             
                      conn.request :multipart
         | 
| @@ -257,6 +337,8 @@ module XeroRuby | |
| 257 337 | 
             
                    end
         | 
| 258 338 | 
             
                  end
         | 
| 259 339 | 
             
                  request.headers = header_params
         | 
| 340 | 
            +
                  timeout = @config.timeout
         | 
| 341 | 
            +
                  request.options.timeout = timeout if timeout > 0
         | 
| 260 342 | 
             
                  request.body = req_body
         | 
| 261 343 | 
             
                  request.url url
         | 
| 262 344 | 
             
                  request.params = query_params
         | 
| @@ -60,8 +60,11 @@ module XeroRuby | |
| 60 60 | 
             
                # @return [String]
         | 
| 61 61 | 
             
                attr_accessor :password
         | 
| 62 62 |  | 
| 63 | 
            -
                # Defines the access token (Bearer) used with OAuth2 | 
| 63 | 
            +
                # Defines the access token (Bearer) used with OAuth2 authorization
         | 
| 64 64 | 
             
                attr_accessor :access_token
         | 
| 65 | 
            +
                
         | 
| 66 | 
            +
                # Defines OpenID Connect id_token containing Xero user authentication detail
         | 
| 67 | 
            +
                attr_accessor :id_token
         | 
| 65 68 |  | 
| 66 69 | 
             
                # Defines the token set used with OAuth2. May include id/access/refresh token & other meta info.
         | 
| 67 70 | 
             
                attr_accessor :token_set
         | 
| @@ -146,6 +149,8 @@ module XeroRuby | |
| 146 149 | 
             
                  @payroll_au_url = 'https://api.xero.com/payroll.xro/1.0/'
         | 
| 147 150 | 
             
                  @payroll_nz_url = 'https://api.xero.com/payroll.xro/2.0/'
         | 
| 148 151 | 
             
                  @payroll_uk_url = 'https://api.xero.com/payroll.xro/2.0/'
         | 
| 152 | 
            +
                  @access_token = nil
         | 
| 153 | 
            +
                  @id_token = nil
         | 
| 149 154 | 
             
                  @api_key = {}
         | 
| 150 155 | 
             
                  @api_key_prefix = {}
         | 
| 151 156 | 
             
                  @timeout = 0
         | 
| @@ -191,6 +196,14 @@ module XeroRuby | |
| 191 196 | 
             
                def base_url=(api_url)
         | 
| 192 197 | 
             
                  @base_url = api_url
         | 
| 193 198 | 
             
                end
         | 
| 199 | 
            +
             | 
| 200 | 
            +
                def access_token=(access_token)
         | 
| 201 | 
            +
                  @access_token = access_token
         | 
| 202 | 
            +
                end
         | 
| 203 | 
            +
             | 
| 204 | 
            +
                def id_token=(id_token)
         | 
| 205 | 
            +
                  @id_token = id_token
         | 
| 206 | 
            +
                end
         | 
| 194 207 |  | 
| 195 208 | 
             
                # Gets API key (with prefix if set).
         | 
| 196 209 | 
             
                # @param [String] param_name the parameter name of API key auth
         | 
| @@ -68,6 +68,9 @@ module XeroRuby::Accounting | |
| 68 68 | 
             
                # Booelan that tells you if the batch payment has been reconciled (read-only)
         | 
| 69 69 | 
             
                attr_accessor :is_reconciled
         | 
| 70 70 |  | 
| 71 | 
            +
                # Displays array of validation error messages from the API
         | 
| 72 | 
            +
                attr_accessor :validation_errors
         | 
| 73 | 
            +
                
         | 
| 71 74 | 
             
                class EnumAttributeValidator
         | 
| 72 75 | 
             
                  attr_reader :datatype
         | 
| 73 76 | 
             
                  attr_reader :allowable_values
         | 
| @@ -108,7 +111,8 @@ module XeroRuby::Accounting | |
| 108 111 | 
             
                    :'status' => :'Status',
         | 
| 109 112 | 
             
                    :'total_amount' => :'TotalAmount',
         | 
| 110 113 | 
             
                    :'updated_date_utc' => :'UpdatedDateUTC',
         | 
| 111 | 
            -
                    :'is_reconciled' => :'IsReconciled'
         | 
| 114 | 
            +
                    :'is_reconciled' => :'IsReconciled',
         | 
| 115 | 
            +
                    :'validation_errors' => :'ValidationErrors'
         | 
| 112 116 | 
             
                  }
         | 
| 113 117 | 
             
                end
         | 
| 114 118 |  | 
| @@ -130,7 +134,8 @@ module XeroRuby::Accounting | |
| 130 134 | 
             
                    :'status' => :'String',
         | 
| 131 135 | 
             
                    :'total_amount' => :'String',
         | 
| 132 136 | 
             
                    :'updated_date_utc' => :'DateTime',
         | 
| 133 | 
            -
                    :'is_reconciled' => :'String'
         | 
| 137 | 
            +
                    :'is_reconciled' => :'String',
         | 
| 138 | 
            +
                    :'validation_errors' => :'Array<ValidationError>'
         | 
| 134 139 | 
             
                  }
         | 
| 135 140 | 
             
                end
         | 
| 136 141 |  | 
| @@ -214,6 +219,12 @@ module XeroRuby::Accounting | |
| 214 219 | 
             
                  if attributes.key?(:'is_reconciled')
         | 
| 215 220 | 
             
                    self.is_reconciled = attributes[:'is_reconciled']
         | 
| 216 221 | 
             
                  end
         | 
| 222 | 
            +
             | 
| 223 | 
            +
                  if attributes.key?(:'validation_errors')
         | 
| 224 | 
            +
                    if (value = attributes[:'validation_errors']).is_a?(Array)
         | 
| 225 | 
            +
                      self.validation_errors = value
         | 
| 226 | 
            +
                    end
         | 
| 227 | 
            +
                  end
         | 
| 217 228 | 
             
                end
         | 
| 218 229 |  | 
| 219 230 | 
             
                # Show invalid properties with the reasons. Usually used together with valid?
         | 
| @@ -333,7 +344,8 @@ module XeroRuby::Accounting | |
| 333 344 | 
             
                      status == o.status &&
         | 
| 334 345 | 
             
                      total_amount == o.total_amount &&
         | 
| 335 346 | 
             
                      updated_date_utc == o.updated_date_utc &&
         | 
| 336 | 
            -
                      is_reconciled == o.is_reconciled
         | 
| 347 | 
            +
                      is_reconciled == o.is_reconciled &&
         | 
| 348 | 
            +
                      validation_errors == o.validation_errors
         | 
| 337 349 | 
             
                end
         | 
| 338 350 |  | 
| 339 351 | 
             
                # @see the `==` method
         | 
| @@ -345,7 +357,7 @@ module XeroRuby::Accounting | |
| 345 357 | 
             
                # Calculates hash code according to all attributes.
         | 
| 346 358 | 
             
                # @return [Integer] Hash code
         | 
| 347 359 | 
             
                def hash
         | 
| 348 | 
            -
                  [account, reference, particulars, code, details, narrative, batch_payment_id, date_string, date, amount, payments, type, status, total_amount, updated_date_utc, is_reconciled].hash
         | 
| 360 | 
            +
                  [account, reference, particulars, code, details, narrative, batch_payment_id, date_string, date, amount, payments, type, status, total_amount, updated_date_utc, is_reconciled, validation_errors].hash
         | 
| 349 361 | 
             
                end
         | 
| 350 362 |  | 
| 351 363 | 
             
                # Builds the object from hash
         | 
| @@ -62,15 +62,15 @@ module XeroRuby::Accounting | |
| 62 62 | 
             
                # Attribute type mapping.
         | 
| 63 63 | 
             
                def self.openapi_types
         | 
| 64 64 | 
             
                  {
         | 
| 65 | 
            -
                    :'total' => :' | 
| 66 | 
            -
                    :'new' => :' | 
| 67 | 
            -
                    :'updated' => :' | 
| 68 | 
            -
                    :'deleted' => :' | 
| 69 | 
            -
                    :'locked' => :' | 
| 70 | 
            -
                    :'system' => :' | 
| 71 | 
            -
                    :'errored' => :' | 
| 65 | 
            +
                    :'total' => :'Integer',
         | 
| 66 | 
            +
                    :'new' => :'Integer',
         | 
| 67 | 
            +
                    :'updated' => :'Integer',
         | 
| 68 | 
            +
                    :'deleted' => :'Integer',
         | 
| 69 | 
            +
                    :'locked' => :'Integer',
         | 
| 70 | 
            +
                    :'system' => :'Integer',
         | 
| 71 | 
            +
                    :'errored' => :'Integer',
         | 
| 72 72 | 
             
                    :'present' => :'Boolean',
         | 
| 73 | 
            -
                    :'new_or_updated' => :' | 
| 73 | 
            +
                    :'new_or_updated' => :'Integer'
         | 
| 74 74 | 
             
                  }
         | 
| 75 75 | 
             
                end
         | 
| 76 76 |  | 
| @@ -15,7 +15,7 @@ require 'date' | |
| 15 15 | 
             
            module XeroRuby::Files
         | 
| 16 16 | 
             
              require 'bigdecimal'
         | 
| 17 17 |  | 
| 18 | 
            -
              class  | 
| 18 | 
            +
              class UploadObject
         | 
| 19 19 |  | 
| 20 20 | 
             
                attr_accessor :body
         | 
| 21 21 |  | 
| @@ -52,13 +52,13 @@ module XeroRuby::Files | |
| 52 52 | 
             
                # @param [Hash] attributes Model attributes in the form of hash
         | 
| 53 53 | 
             
                def initialize(attributes = {})
         | 
| 54 54 | 
             
                  if (!attributes.is_a?(Hash))
         | 
| 55 | 
            -
                    fail ArgumentError, "The input argument (attributes) must be a hash in `XeroRuby::Files:: | 
| 55 | 
            +
                    fail ArgumentError, "The input argument (attributes) must be a hash in `XeroRuby::Files::UploadObject` initialize method"
         | 
| 56 56 | 
             
                  end
         | 
| 57 57 |  | 
| 58 58 | 
             
                  # check to see if the attribute exists and convert string to symbol for hash key
         | 
| 59 59 | 
             
                  attributes = attributes.each_with_object({}) { |(k, v), h|
         | 
| 60 60 | 
             
                    if (!self.class.attribute_map.key?(k.to_sym))
         | 
| 61 | 
            -
                      fail ArgumentError, "`#{k}` is not a valid attribute in `XeroRuby::Files:: | 
| 61 | 
            +
                      fail ArgumentError, "`#{k}` is not a valid attribute in `XeroRuby::Files::UploadObject`. Please check the name to make sure it's valid. List of attributes: " + self.class.attribute_map.keys.inspect
         | 
| 62 62 | 
             
                    end
         | 
| 63 63 | 
             
                    h[k.to_sym] = v
         | 
| 64 64 | 
             
                  }
         | 
| @@ -84,12 +84,27 @@ module XeroRuby::Files | |
| 84 84 | 
             
                # @return Array for valid properties with the reasons
         | 
| 85 85 | 
             
                def list_invalid_properties
         | 
| 86 86 | 
             
                  invalid_properties = Array.new
         | 
| 87 | 
            +
                  if @body.nil?
         | 
| 88 | 
            +
                    invalid_properties.push('invalid value for "body", body cannot be nil.')
         | 
| 89 | 
            +
                  end
         | 
| 90 | 
            +
             | 
| 91 | 
            +
                  if @name.nil?
         | 
| 92 | 
            +
                    invalid_properties.push('invalid value for "name", name cannot be nil.')
         | 
| 93 | 
            +
                  end
         | 
| 94 | 
            +
             | 
| 95 | 
            +
                  if @filename.nil?
         | 
| 96 | 
            +
                    invalid_properties.push('invalid value for "filename", filename cannot be nil.')
         | 
| 97 | 
            +
                  end
         | 
| 98 | 
            +
             | 
| 87 99 | 
             
                  invalid_properties
         | 
| 88 100 | 
             
                end
         | 
| 89 101 |  | 
| 90 102 | 
             
                # Check to see if the all the properties in the model are valid
         | 
| 91 103 | 
             
                # @return true if the model is valid
         | 
| 92 104 | 
             
                def valid?
         | 
| 105 | 
            +
                  return false if @body.nil?
         | 
| 106 | 
            +
                  return false if @name.nil?
         | 
| 107 | 
            +
                  return false if @filename.nil?
         | 
| 93 108 | 
             
                  true
         | 
| 94 109 | 
             
                end
         | 
| 95 110 |  |