From 796f813ecb519efce81738d2e8a90789a4ad2831 Mon Sep 17 00:00:00 2001 From: Ryan Duguid <152749594+ryanduguid@users.noreply.github.com> Date: Thu, 13 Aug 2026 02:34:04 +1000 Subject: [PATCH] fix: wire Payroll AU v2 client routing --- lib/xero-ruby/api_client.rb | 9 +++++++++ lib/xero-ruby/configuration.rb | 2 ++ spec/api_client_spec.rb | 13 +++++++++++++ spec/configuration_spec.rb | 1 + 4 files changed, 25 insertions(+) diff --git a/lib/xero-ruby/api_client.rb b/lib/xero-ruby/api_client.rb index dc9d679a..8e7c309f 100644 --- a/lib/xero-ruby/api_client.rb +++ b/lib/xero-ruby/api_client.rb @@ -95,6 +95,11 @@ def payroll_au_api XeroRuby::PayrollAuApi.new(self) end + def payroll_au_v2_api + @config.base_url = @config.payroll_au_v2_url + XeroRuby::PayrollAuV2Api.new(self) + end + def payroll_nz_api @config.base_url = @config.payroll_nz_url XeroRuby::PayrollNzApi.new(self) @@ -289,6 +294,8 @@ def call_api(http_method, path, api_client, opts = {}) method_base_url = @config.files_url when "PayrollAuApi" method_base_url = @config.payroll_au_url + when "PayrollAuV2Api" + method_base_url = @config.payroll_au_v2_url when "PayrollNzApi" method_base_url = @config.payroll_nz_url when "PayrollUkApi" @@ -517,6 +524,8 @@ def convert_to_type(data, return_type, api_client) XeroRuby::Files.const_get(return_type).build_from_hash(data) when 'PayrollAuApi' XeroRuby::PayrollAu.const_get(return_type).build_from_hash(data) + when 'PayrollAuV2Api' + XeroRuby::PayrollAuV2.const_get(return_type).build_from_hash(data) when 'PayrollNzApi' XeroRuby::PayrollNz.const_get(return_type).build_from_hash(data) when 'PayrollUkApi' diff --git a/lib/xero-ruby/configuration.rb b/lib/xero-ruby/configuration.rb index 7710f557..657f61cf 100644 --- a/lib/xero-ruby/configuration.rb +++ b/lib/xero-ruby/configuration.rb @@ -31,6 +31,7 @@ class Configuration attr_accessor :project_url attr_accessor :files_url attr_accessor :payroll_au_url + attr_accessor :payroll_au_v2_url attr_accessor :payroll_nz_url attr_accessor :payroll_uk_url attr_accessor :app_store_url @@ -149,6 +150,7 @@ def initialize @project_url = 'https://api.xero.com/projects.xro/2.0/' @files_url = 'https://api.xero.com/files.xro/1.0/' @payroll_au_url = 'https://api.xero.com/payroll.xro/1.0/' + @payroll_au_v2_url = 'https://api.xero.com/payroll.xro/2.0/' @payroll_nz_url = 'https://api.xero.com/payroll.xro/2.0/' @payroll_uk_url = 'https://api.xero.com/payroll.xro/2.0/' @app_store_url = 'https://api.xero.com/appstore/2.0/' diff --git a/spec/api_client_spec.rb b/spec/api_client_spec.rb index 617433b7..919baa5e 100644 --- a/spec/api_client_spec.rb +++ b/spec/api_client_spec.rb @@ -168,6 +168,9 @@ api_client.payroll_au_api expect(api_client.config.base_url).to eq('https://api.xero.com/payroll.xro/1.0/') + + expect(api_client.payroll_au_v2_api).to be_a(XeroRuby::PayrollAuV2Api) + expect(api_client.config.base_url).to eq('https://api.xero.com/payroll.xro/2.0/') api_client.payroll_nz_api expect(api_client.config.base_url).to eq('https://api.xero.com/payroll.xro/2.0/') @@ -221,6 +224,16 @@ expect(data).to be_instance_of(Hash) expect(data).to eq(:message => 'Hello') end + + it 'deserializes Payroll AU v2 models in their own namespace' do + api_client = XeroRuby::ApiClient.new + headers = { 'Content-Type' => 'application/json' } + response = double('response', headers: headers, body: '{}') + + data = api_client.deserialize(response, 'TimesheetObject', 'PayrollAuV2Api') + + expect(data).to be_instance_of(XeroRuby::PayrollAuV2::TimesheetObject) + end end describe "#object_to_hash modifies a hash from snake_case to PascalCase" do diff --git a/spec/configuration_spec.rb b/spec/configuration_spec.rb index 3daa2666..f70300fb 100644 --- a/spec/configuration_spec.rb +++ b/spec/configuration_spec.rb @@ -12,6 +12,7 @@ expect(config.project_url).to eq('https://api.xero.com/projects.xro/2.0/') expect(config.files_url).to eq('https://api.xero.com/files.xro/1.0/') expect(config.payroll_au_url).to eq('https://api.xero.com/payroll.xro/1.0/') + expect(config.payroll_au_v2_url).to eq('https://api.xero.com/payroll.xro/2.0/') expect(config.payroll_nz_url).to eq('https://api.xero.com/payroll.xro/2.0/') expect(config.payroll_uk_url).to eq('https://api.xero.com/payroll.xro/2.0/') expect(config.finance_url).to eq('https://api.xero.com/finance.xro/1.0/')