xero-ruby 3.16.0 → 4.3.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +450 -450
- data/lib/xero-ruby/api/accounting_api.rb +18858 -18858
- data/lib/xero-ruby/api/app_store_api.rb +325 -325
- data/lib/xero-ruby/api/asset_api.rb +493 -493
- data/lib/xero-ruby/api/files_api.rb +1468 -1390
- data/lib/xero-ruby/api/finance_api.rb +961 -961
- data/lib/xero-ruby/api/payroll_au_api.rb +2513 -2282
- data/lib/xero-ruby/api/payroll_nz_api.rb +5334 -5334
- data/lib/xero-ruby/api/payroll_uk_api.rb +5479 -5479
- data/lib/xero-ruby/api/project_api.rb +1402 -1402
- data/lib/xero-ruby/api_client.rb +675 -675
- data/lib/xero-ruby/api_error.rb +57 -57
- data/lib/xero-ruby/configuration.rb +282 -282
- data/lib/xero-ruby/models/accounting/account.rb +535 -535
- data/lib/xero-ruby/models/accounting/account_type.rb +56 -56
- data/lib/xero-ruby/models/accounting/accounts.rb +224 -224
- data/lib/xero-ruby/models/accounting/accounts_payable.rb +232 -232
- data/lib/xero-ruby/models/accounting/accounts_receivable.rb +232 -232
- data/lib/xero-ruby/models/accounting/action.rb +268 -268
- data/lib/xero-ruby/models/accounting/actions.rb +224 -224
- data/lib/xero-ruby/models/accounting/address.rb +483 -483
- data/lib/xero-ruby/models/accounting/address_for_organisation.rb +484 -484
- data/lib/xero-ruby/models/accounting/allocation.rb +309 -309
- data/lib/xero-ruby/models/accounting/allocations.rb +224 -224
- data/lib/xero-ruby/models/accounting/attachment.rb +272 -272
- data/lib/xero-ruby/models/accounting/attachments.rb +224 -224
- data/lib/xero-ruby/models/accounting/balance_details.rb +243 -243
- data/lib/xero-ruby/models/accounting/balances.rb +233 -233
- data/lib/xero-ruby/models/accounting/bank_transaction.rb +510 -510
- data/lib/xero-ruby/models/accounting/bank_transactions.rb +224 -224
- data/lib/xero-ruby/models/accounting/bank_transfer.rb +375 -375
- data/lib/xero-ruby/models/accounting/bank_transfers.rb +224 -224
- data/lib/xero-ruby/models/accounting/batch_payment.rb +496 -496
- data/lib/xero-ruby/models/accounting/batch_payment_delete.rb +244 -244
- data/lib/xero-ruby/models/accounting/batch_payment_delete_by_url_param.rb +229 -229
- data/lib/xero-ruby/models/accounting/batch_payment_details.rb +293 -293
- data/lib/xero-ruby/models/accounting/batch_payments.rb +224 -224
- data/lib/xero-ruby/models/accounting/bill.rb +232 -232
- data/lib/xero-ruby/models/accounting/branding_theme.rb +307 -307
- data/lib/xero-ruby/models/accounting/branding_themes.rb +224 -224
- data/lib/xero-ruby/models/accounting/budget.rb +327 -327
- data/lib/xero-ruby/models/accounting/budget_balance.rb +267 -267
- data/lib/xero-ruby/models/accounting/budget_line.rb +244 -244
- data/lib/xero-ruby/models/accounting/budgets.rb +224 -224
- data/lib/xero-ruby/models/accounting/cis_org_setting.rb +242 -242
- data/lib/xero-ruby/models/accounting/cis_org_settings.rb +224 -224
- data/lib/xero-ruby/models/accounting/cis_setting.rb +232 -232
- data/lib/xero-ruby/models/accounting/cis_settings.rb +224 -224
- data/lib/xero-ruby/models/accounting/contact.rb +849 -849
- data/lib/xero-ruby/models/accounting/contact_group.rb +290 -290
- data/lib/xero-ruby/models/accounting/contact_groups.rb +224 -224
- data/lib/xero-ruby/models/accounting/contact_person.rb +252 -252
- data/lib/xero-ruby/models/accounting/contacts.rb +224 -224
- data/lib/xero-ruby/models/accounting/conversion_balances.rb +245 -245
- data/lib/xero-ruby/models/accounting/conversion_date.rb +233 -233
- data/lib/xero-ruby/models/accounting/country_code.rb +274 -274
- data/lib/xero-ruby/models/accounting/credit_note.rb +580 -580
- data/lib/xero-ruby/models/accounting/credit_notes.rb +224 -224
- data/lib/xero-ruby/models/accounting/currencies.rb +224 -224
- data/lib/xero-ruby/models/accounting/currency.rb +232 -232
- data/lib/xero-ruby/models/accounting/currency_code.rb +203 -200
- data/lib/xero-ruby/models/accounting/element.rb +294 -294
- data/lib/xero-ruby/models/accounting/employee.rb +362 -362
- data/lib/xero-ruby/models/accounting/employees.rb +224 -224
- data/lib/xero-ruby/models/accounting/error.rb +254 -254
- data/lib/xero-ruby/models/accounting/expense_claim.rb +375 -375
- data/lib/xero-ruby/models/accounting/expense_claims.rb +224 -224
- data/lib/xero-ruby/models/accounting/external_link.rb +281 -281
- data/lib/xero-ruby/models/accounting/history_record.rb +252 -252
- data/lib/xero-ruby/models/accounting/history_records.rb +224 -224
- data/lib/xero-ruby/models/accounting/import_summary.rb +233 -233
- data/lib/xero-ruby/models/accounting/import_summary_accounts.rb +303 -303
- data/lib/xero-ruby/models/accounting/import_summary_object.rb +222 -222
- data/lib/xero-ruby/models/accounting/import_summary_organisation.rb +222 -222
- data/lib/xero-ruby/models/accounting/invoice.rb +707 -707
- data/lib/xero-ruby/models/accounting/invoice_reminder.rb +222 -222
- data/lib/xero-ruby/models/accounting/invoice_reminders.rb +224 -224
- data/lib/xero-ruby/models/accounting/invoices.rb +224 -224
- data/lib/xero-ruby/models/accounting/item.rb +443 -443
- data/lib/xero-ruby/models/accounting/items.rb +224 -224
- data/lib/xero-ruby/models/accounting/journal.rb +353 -353
- data/lib/xero-ruby/models/accounting/journal_line.rb +334 -334
- data/lib/xero-ruby/models/accounting/journals.rb +224 -224
- data/lib/xero-ruby/models/accounting/line_amount_types.rb +37 -37
- data/lib/xero-ruby/models/accounting/line_item.rb +364 -364
- data/lib/xero-ruby/models/accounting/line_item_item.rb +272 -272
- data/lib/xero-ruby/models/accounting/line_item_tracking.rb +267 -267
- data/lib/xero-ruby/models/accounting/linked_transaction.rb +390 -390
- data/lib/xero-ruby/models/accounting/linked_transactions.rb +224 -224
- data/lib/xero-ruby/models/accounting/manual_journal.rb +406 -406
- data/lib/xero-ruby/models/accounting/manual_journal_line.rb +294 -294
- data/lib/xero-ruby/models/accounting/manual_journals.rb +224 -224
- data/lib/xero-ruby/models/accounting/online_invoice.rb +222 -222
- data/lib/xero-ruby/models/accounting/online_invoices.rb +224 -224
- data/lib/xero-ruby/models/accounting/organisation.rb +728 -728
- data/lib/xero-ruby/models/accounting/organisations.rb +224 -224
- data/lib/xero-ruby/models/accounting/overpayment.rb +464 -464
- data/lib/xero-ruby/models/accounting/overpayments.rb +224 -224
- data/lib/xero-ruby/models/accounting/payment.rb +544 -544
- data/lib/xero-ruby/models/accounting/payment_delete.rb +229 -229
- data/lib/xero-ruby/models/accounting/payment_service.rb +274 -274
- data/lib/xero-ruby/models/accounting/payment_services.rb +224 -224
- data/lib/xero-ruby/models/accounting/payment_term.rb +232 -232
- data/lib/xero-ruby/models/accounting/payment_term_type.rb +38 -38
- data/lib/xero-ruby/models/accounting/payments.rb +224 -224
- data/lib/xero-ruby/models/accounting/phone.rb +336 -336
- data/lib/xero-ruby/models/accounting/prepayment.rb +475 -475
- data/lib/xero-ruby/models/accounting/prepayments.rb +224 -224
- data/lib/xero-ruby/models/accounting/purchase.rb +252 -252
- data/lib/xero-ruby/models/accounting/purchase_order.rb +541 -541
- data/lib/xero-ruby/models/accounting/purchase_orders.rb +224 -224
- data/lib/xero-ruby/models/accounting/quote.rb +531 -531
- data/lib/xero-ruby/models/accounting/quote_line_amount_types.rb +37 -37
- data/lib/xero-ruby/models/accounting/quote_status_codes.rb +40 -40
- data/lib/xero-ruby/models/accounting/quotes.rb +224 -224
- data/lib/xero-ruby/models/accounting/receipt.rb +441 -441
- data/lib/xero-ruby/models/accounting/receipts.rb +224 -224
- data/lib/xero-ruby/models/accounting/repeating_invoice.rb +477 -477
- data/lib/xero-ruby/models/accounting/repeating_invoices.rb +224 -224
- data/lib/xero-ruby/models/accounting/report.rb +309 -309
- data/lib/xero-ruby/models/accounting/report_attribute.rb +232 -232
- data/lib/xero-ruby/models/accounting/report_cell.rb +234 -234
- data/lib/xero-ruby/models/accounting/report_fields.rb +242 -242
- data/lib/xero-ruby/models/accounting/report_row.rb +244 -244
- data/lib/xero-ruby/models/accounting/report_rows.rb +256 -256
- data/lib/xero-ruby/models/accounting/report_with_row.rb +308 -308
- data/lib/xero-ruby/models/accounting/report_with_rows.rb +224 -224
- data/lib/xero-ruby/models/accounting/reports.rb +224 -224
- data/lib/xero-ruby/models/accounting/request_empty.rb +222 -222
- data/lib/xero-ruby/models/accounting/row_type.rb +38 -38
- data/lib/xero-ruby/models/accounting/sales_tracking_category.rb +232 -232
- data/lib/xero-ruby/models/accounting/schedule.rb +336 -336
- data/lib/xero-ruby/models/accounting/setup.rb +246 -246
- data/lib/xero-ruby/models/accounting/tax_component.rb +252 -252
- data/lib/xero-ruby/models/accounting/tax_rate.rb +481 -476
- data/lib/xero-ruby/models/accounting/tax_rates.rb +224 -224
- data/lib/xero-ruby/models/accounting/tax_type.rb +130 -116
- data/lib/xero-ruby/models/accounting/ten_ninety_nine_contact.rb +432 -432
- data/lib/xero-ruby/models/accounting/time_zone.rb +175 -175
- data/lib/xero-ruby/models/accounting/tracking_categories.rb +224 -224
- data/lib/xero-ruby/models/accounting/tracking_category.rb +341 -341
- data/lib/xero-ruby/models/accounting/tracking_option.rb +304 -304
- data/lib/xero-ruby/models/accounting/tracking_options.rb +224 -224
- data/lib/xero-ruby/models/accounting/user.rb +323 -323
- data/lib/xero-ruby/models/accounting/users.rb +224 -224
- data/lib/xero-ruby/models/accounting/validation_error.rb +222 -222
- data/lib/xero-ruby/models/app_store/create_usage_record.rb +243 -243
- data/lib/xero-ruby/models/app_store/plan.rb +311 -311
- data/lib/xero-ruby/models/app_store/price.rb +257 -257
- data/lib/xero-ruby/models/app_store/problem_details.rb +272 -272
- data/lib/xero-ruby/models/app_store/product.rb +299 -299
- data/lib/xero-ruby/models/app_store/subscription.rb +361 -361
- data/lib/xero-ruby/models/app_store/subscription_item.rb +354 -354
- data/lib/xero-ruby/models/app_store/update_usage_record.rb +228 -228
- data/lib/xero-ruby/models/app_store/usage_record.rb +332 -332
- data/lib/xero-ruby/models/app_store/usage_records_list.rb +230 -230
- data/lib/xero-ruby/models/assets/asset.rb +377 -377
- data/lib/xero-ruby/models/assets/asset_status.rb +37 -37
- data/lib/xero-ruby/models/assets/asset_status_query_param.rb +37 -37
- data/lib/xero-ruby/models/assets/asset_type.rb +292 -292
- data/lib/xero-ruby/models/assets/assets.rb +234 -234
- data/lib/xero-ruby/models/assets/book_depreciation_detail.rb +282 -282
- data/lib/xero-ruby/models/assets/book_depreciation_setting.rb +361 -361
- data/lib/xero-ruby/models/assets/error.rb +266 -266
- data/lib/xero-ruby/models/assets/field_validation_errors_element.rb +272 -272
- data/lib/xero-ruby/models/assets/pagination.rb +252 -252
- data/lib/xero-ruby/models/assets/resource_validation_errors_element.rb +262 -262
- data/lib/xero-ruby/models/assets/setting.rb +292 -292
- data/lib/xero-ruby/models/files/association.rb +252 -252
- data/lib/xero-ruby/models/files/file_object.rb +292 -292
- data/lib/xero-ruby/models/files/files.rb +254 -254
- data/lib/xero-ruby/models/files/folder.rb +262 -262
- data/lib/xero-ruby/models/files/folders.rb +224 -224
- data/lib/xero-ruby/models/files/object_group.rb +46 -46
- data/lib/xero-ruby/models/files/object_type.rb +90 -90
- data/lib/xero-ruby/models/files/upload_object.rb +267 -267
- data/lib/xero-ruby/models/files/user.rb +267 -267
- data/lib/xero-ruby/models/finance/account_usage.rb +342 -342
- data/lib/xero-ruby/models/finance/account_usage_response.rb +254 -254
- data/lib/xero-ruby/models/finance/balance_sheet_account_detail.rb +262 -262
- data/lib/xero-ruby/models/finance/balance_sheet_account_group.rb +234 -234
- data/lib/xero-ruby/models/finance/balance_sheet_account_type.rb +244 -244
- data/lib/xero-ruby/models/finance/balance_sheet_response.rb +252 -252
- data/lib/xero-ruby/models/finance/bank_statement_accounting_response.rb +254 -254
- data/lib/xero-ruby/models/finance/bank_statement_response.rb +232 -232
- data/lib/xero-ruby/models/finance/bank_transaction_response.rb +274 -274
- data/lib/xero-ruby/models/finance/cash_account_response.rb +262 -262
- data/lib/xero-ruby/models/finance/cash_balance.rb +242 -242
- data/lib/xero-ruby/models/finance/cash_validation_response.rb +262 -262
- data/lib/xero-ruby/models/finance/cashflow_account.rb +282 -282
- data/lib/xero-ruby/models/finance/cashflow_activity.rb +244 -244
- data/lib/xero-ruby/models/finance/cashflow_response.rb +254 -254
- data/lib/xero-ruby/models/finance/cashflow_type.rb +244 -244
- data/lib/xero-ruby/models/finance/contact_detail.rb +274 -274
- data/lib/xero-ruby/models/finance/contact_response.rb +232 -232
- data/lib/xero-ruby/models/finance/contact_total_detail.rb +242 -242
- data/lib/xero-ruby/models/finance/contact_total_other.rb +252 -252
- data/lib/xero-ruby/models/finance/credit_note_response.rb +254 -254
- data/lib/xero-ruby/models/finance/current_statement_response.rb +272 -272
- data/lib/xero-ruby/models/finance/data_source_response.rb +362 -362
- data/lib/xero-ruby/models/finance/history_record_response.rb +262 -262
- data/lib/xero-ruby/models/finance/income_by_contact_response.rb +284 -284
- data/lib/xero-ruby/models/finance/invoice_response.rb +254 -254
- data/lib/xero-ruby/models/finance/line_item_response.rb +252 -252
- data/lib/xero-ruby/models/finance/lock_history_model.rb +242 -242
- data/lib/xero-ruby/models/finance/lock_history_response.rb +244 -244
- data/lib/xero-ruby/models/finance/manual_journal_total.rb +222 -222
- data/lib/xero-ruby/models/finance/overpayment_response.rb +254 -254
- data/lib/xero-ruby/models/finance/payment_response.rb +312 -312
- data/lib/xero-ruby/models/finance/pnl_account.rb +272 -272
- data/lib/xero-ruby/models/finance/pnl_account_class.rb +234 -234
- data/lib/xero-ruby/models/finance/pnl_account_type.rb +244 -244
- data/lib/xero-ruby/models/finance/practice_response.rb +262 -262
- data/lib/xero-ruby/models/finance/prepayment_response.rb +254 -254
- data/lib/xero-ruby/models/finance/problem.rb +252 -252
- data/lib/xero-ruby/models/finance/problem_type.rb +44 -44
- data/lib/xero-ruby/models/finance/profit_and_loss_response.rb +262 -262
- data/lib/xero-ruby/models/finance/report_history_model.rb +242 -242
- data/lib/xero-ruby/models/finance/report_history_response.rb +244 -244
- data/lib/xero-ruby/models/finance/statement_balance_response.rb +232 -232
- data/lib/xero-ruby/models/finance/statement_line_response.rb +356 -346
- data/lib/xero-ruby/models/finance/statement_lines_response.rb +382 -382
- data/lib/xero-ruby/models/finance/statement_response.rb +314 -294
- data/lib/xero-ruby/models/finance/total_detail.rb +242 -242
- data/lib/xero-ruby/models/finance/total_other.rb +242 -242
- data/lib/xero-ruby/models/finance/trial_balance_account.rb +312 -312
- data/lib/xero-ruby/models/finance/trial_balance_entry.rb +232 -232
- data/lib/xero-ruby/models/finance/trial_balance_movement.rb +252 -252
- data/lib/xero-ruby/models/finance/trial_balance_response.rb +244 -244
- data/lib/xero-ruby/models/finance/user_activities_response.rb +244 -244
- data/lib/xero-ruby/models/finance/user_response.rb +336 -336
- data/lib/xero-ruby/models/payroll_au/account.rb +252 -252
- data/lib/xero-ruby/models/payroll_au/account_type.rb +57 -57
- data/lib/xero-ruby/models/payroll_au/allowance_category.rb +41 -41
- data/lib/xero-ruby/models/payroll_au/allowance_type.rb +44 -44
- data/lib/xero-ruby/models/payroll_au/api_exception.rb +243 -243
- data/lib/xero-ruby/models/payroll_au/bank_account.rb +272 -272
- data/lib/xero-ruby/models/payroll_au/calendar_type.rb +40 -40
- data/lib/xero-ruby/models/payroll_au/country_of_residence.rb +285 -285
- data/lib/xero-ruby/models/payroll_au/deduction_line.rb +267 -267
- data/lib/xero-ruby/models/payroll_au/deduction_type.rb +354 -354
- data/lib/xero-ruby/models/payroll_au/deduction_type_calculation_type.rb +37 -37
- data/lib/xero-ruby/models/payroll_au/earnings_line.rb +307 -307
- data/lib/xero-ruby/models/payroll_au/earnings_rate.rb +442 -422
- data/lib/xero-ruby/models/payroll_au/earnings_rate_calculation_type.rb +37 -37
- data/lib/xero-ruby/models/payroll_au/earnings_type.rb +48 -48
- data/lib/xero-ruby/models/payroll_au/employee.rb +654 -654
- data/lib/xero-ruby/models/payroll_au/employee_status.rb +36 -36
- data/lib/xero-ruby/models/payroll_au/employees.rb +224 -224
- data/lib/xero-ruby/models/payroll_au/employment_basis.rb +40 -40
- data/lib/xero-ruby/models/payroll_au/employment_termination_payment_type.rb +36 -36
- data/lib/xero-ruby/models/payroll_au/employment_type.rb +36 -36
- data/lib/xero-ruby/models/payroll_au/entitlement_final_pay_payout_type.rb +36 -36
- data/lib/xero-ruby/models/payroll_au/home_address.rb +277 -277
- data/lib/xero-ruby/models/payroll_au/income_type.rb +39 -39
- data/lib/xero-ruby/models/payroll_au/leave_accrual_line.rb +242 -242
- data/lib/xero-ruby/models/payroll_au/leave_application.rb +326 -316
- data/lib/xero-ruby/models/payroll_au/leave_applications.rb +224 -224
- data/lib/xero-ruby/models/payroll_au/leave_balance.rb +252 -252
- data/lib/xero-ruby/models/payroll_au/leave_category_code.rb +46 -46
- data/lib/xero-ruby/models/payroll_au/leave_earnings_line.rb +252 -242
- data/lib/xero-ruby/models/payroll_au/leave_line.rb +292 -292
- data/lib/xero-ruby/models/payroll_au/leave_line_calculation_type.rb +39 -39
- data/lib/xero-ruby/models/payroll_au/leave_lines.rb +225 -225
- data/lib/xero-ruby/models/payroll_au/leave_period.rb +252 -252
- data/lib/xero-ruby/models/payroll_au/leave_period_status.rb +36 -36
- data/lib/xero-ruby/models/payroll_au/leave_type.rb +337 -337
- data/lib/xero-ruby/models/payroll_au/leave_type_contribution_type.rb +38 -38
- data/lib/xero-ruby/models/payroll_au/manual_tax_type.rb +40 -40
- data/lib/xero-ruby/models/payroll_au/opening_balances.rb +304 -292
- data/lib/xero-ruby/models/payroll_au/paid_leave_earnings_line.rb +272 -0
- data/lib/xero-ruby/models/payroll_au/pay_item.rb +260 -260
- data/lib/xero-ruby/models/payroll_au/pay_items.rb +222 -222
- data/lib/xero-ruby/models/payroll_au/pay_out_type.rb +36 -0
- data/lib/xero-ruby/models/payroll_au/pay_run.rb +381 -381
- data/lib/xero-ruby/models/payroll_au/pay_run_status.rb +36 -36
- data/lib/xero-ruby/models/payroll_au/pay_runs.rb +224 -224
- data/lib/xero-ruby/models/payroll_au/pay_template.rb +272 -272
- data/lib/xero-ruby/models/payroll_au/payment_frequency_type.rb +41 -41
- data/lib/xero-ruby/models/payroll_au/payroll_calendar.rb +294 -294
- data/lib/xero-ruby/models/payroll_au/payroll_calendars.rb +224 -224
- data/lib/xero-ruby/models/payroll_au/payslip.rb +418 -418
- data/lib/xero-ruby/models/payroll_au/payslip_lines.rb +308 -308
- data/lib/xero-ruby/models/payroll_au/payslip_object.rb +222 -222
- data/lib/xero-ruby/models/payroll_au/payslip_summary.rb +332 -332
- data/lib/xero-ruby/models/payroll_au/payslips.rb +224 -224
- data/lib/xero-ruby/models/payroll_au/rate_type.rb +37 -37
- data/lib/xero-ruby/models/payroll_au/reimbursement_line.rb +267 -267
- data/lib/xero-ruby/models/payroll_au/reimbursement_lines.rb +225 -225
- data/lib/xero-ruby/models/payroll_au/reimbursement_type.rb +277 -277
- data/lib/xero-ruby/models/payroll_au/residency_status.rb +37 -37
- data/lib/xero-ruby/models/payroll_au/senior_marital_status.rb +37 -37
- data/lib/xero-ruby/models/payroll_au/settings.rb +254 -254
- data/lib/xero-ruby/models/payroll_au/settings_object.rb +222 -222
- data/lib/xero-ruby/models/payroll_au/settings_tracking_categories.rb +233 -233
- data/lib/xero-ruby/models/payroll_au/settings_tracking_categories_employee_groups.rb +233 -233
- data/lib/xero-ruby/models/payroll_au/settings_tracking_categories_timesheet_categories.rb +233 -233
- data/lib/xero-ruby/models/payroll_au/state.rb +42 -42
- data/lib/xero-ruby/models/payroll_au/super_fund.rb +349 -349
- data/lib/xero-ruby/models/payroll_au/super_fund_product.rb +252 -252
- data/lib/xero-ruby/models/payroll_au/super_fund_products.rb +224 -224
- data/lib/xero-ruby/models/payroll_au/super_fund_type.rb +36 -36
- data/lib/xero-ruby/models/payroll_au/super_funds.rb +224 -224
- data/lib/xero-ruby/models/payroll_au/super_line.rb +292 -292
- data/lib/xero-ruby/models/payroll_au/super_membership.rb +252 -252
- data/lib/xero-ruby/models/payroll_au/superannuation_calculation_type.rb +37 -37
- data/lib/xero-ruby/models/payroll_au/superannuation_contribution_type.rb +38 -38
- data/lib/xero-ruby/models/payroll_au/superannuation_line.rb +302 -302
- data/lib/xero-ruby/models/payroll_au/tax_declaration.rb +422 -422
- data/lib/xero-ruby/models/payroll_au/tax_line.rb +272 -272
- data/lib/xero-ruby/models/payroll_au/tax_scale_type.rb +40 -40
- data/lib/xero-ruby/models/payroll_au/tfn_exemption_type.rb +38 -38
- data/lib/xero-ruby/models/payroll_au/timesheet.rb +321 -321
- data/lib/xero-ruby/models/payroll_au/timesheet_line.rb +254 -254
- data/lib/xero-ruby/models/payroll_au/timesheet_object.rb +222 -222
- data/lib/xero-ruby/models/payroll_au/timesheet_status.rb +39 -39
- data/lib/xero-ruby/models/payroll_au/timesheets.rb +224 -224
- data/lib/xero-ruby/models/payroll_au/validation_error.rb +222 -222
- data/lib/xero-ruby/models/payroll_au/work_condition.rb +37 -37
- data/lib/xero-ruby/models/payroll_nz/account.rb +290 -290
- data/lib/xero-ruby/models/payroll_nz/accounts.rb +224 -224
- data/lib/xero-ruby/models/payroll_nz/address.rb +287 -287
- data/lib/xero-ruby/models/payroll_nz/bank_account.rb +343 -343
- data/lib/xero-ruby/models/payroll_nz/benefit.rb +383 -383
- data/lib/xero-ruby/models/payroll_nz/calendar_type.rb +41 -41
- data/lib/xero-ruby/models/payroll_nz/deduction.rb +325 -325
- data/lib/xero-ruby/models/payroll_nz/deduction_line.rb +262 -262
- data/lib/xero-ruby/models/payroll_nz/deduction_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/deductions.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/earnings_line.rb +312 -312
- data/lib/xero-ruby/models/payroll_nz/earnings_order.rb +269 -269
- data/lib/xero-ruby/models/payroll_nz/earnings_order_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/earnings_orders.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/earnings_rate.rb +401 -401
- data/lib/xero-ruby/models/payroll_nz/earnings_rate_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/earnings_rates.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/earnings_template.rb +272 -272
- data/lib/xero-ruby/models/payroll_nz/earnings_template_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/employee.rb +388 -388
- data/lib/xero-ruby/models/payroll_nz/employee_earnings_templates.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/employee_leave.rb +304 -304
- data/lib/xero-ruby/models/payroll_nz/employee_leave_balance.rb +252 -252
- data/lib/xero-ruby/models/payroll_nz/employee_leave_balances.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/employee_leave_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/employee_leave_setup.rb +282 -282
- data/lib/xero-ruby/models/payroll_nz/employee_leave_setup_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/employee_leave_type.rb +350 -350
- data/lib/xero-ruby/models/payroll_nz/employee_leave_type_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/employee_leave_types.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/employee_leaves.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/employee_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/employee_opening_balance.rb +252 -252
- data/lib/xero-ruby/models/payroll_nz/employee_opening_balances_object.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/employee_pay_template.rb +234 -234
- data/lib/xero-ruby/models/payroll_nz/employee_pay_template_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/employee_pay_templates.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_leave_balance.rb +294 -294
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_leave_balance_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_leave_summary.rb +336 -336
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_leaves_summaries.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_sick_leave.rb +433 -433
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_sick_leave_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_sick_leaves.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/employee_tax.rb +411 -411
- data/lib/xero-ruby/models/payroll_nz/employee_tax_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/employees.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/employment.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/employment_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/gross_earnings_history.rb +232 -232
- data/lib/xero-ruby/models/payroll_nz/invalid_field.rb +232 -232
- data/lib/xero-ruby/models/payroll_nz/leave_accrual_line.rb +232 -232
- data/lib/xero-ruby/models/payroll_nz/leave_earnings_line.rb +312 -312
- data/lib/xero-ruby/models/payroll_nz/leave_period.rb +288 -288
- data/lib/xero-ruby/models/payroll_nz/leave_periods.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/leave_type.rb +287 -287
- data/lib/xero-ruby/models/payroll_nz/leave_type_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/leave_types.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/pagination.rb +252 -252
- data/lib/xero-ruby/models/payroll_nz/pay_run.rb +385 -385
- data/lib/xero-ruby/models/payroll_nz/pay_run_calendar.rb +302 -302
- data/lib/xero-ruby/models/payroll_nz/pay_run_calendar_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/pay_run_calendars.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/pay_run_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/pay_runs.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/pay_slip.rb +571 -571
- data/lib/xero-ruby/models/payroll_nz/pay_slip_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/pay_slips.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/payment_line.rb +262 -262
- data/lib/xero-ruby/models/payroll_nz/payment_method.rb +271 -271
- data/lib/xero-ruby/models/payroll_nz/payment_method_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/problem.rb +275 -275
- data/lib/xero-ruby/models/payroll_nz/reimbursement.rb +378 -378
- data/lib/xero-ruby/models/payroll_nz/reimbursement_line.rb +262 -262
- data/lib/xero-ruby/models/payroll_nz/reimbursement_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/reimbursements.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/salary_and_wage.rb +398 -398
- data/lib/xero-ruby/models/payroll_nz/salary_and_wage_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/salary_and_wages.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/settings.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/statutory_deduction.rb +262 -262
- data/lib/xero-ruby/models/payroll_nz/statutory_deduction_category.rb +45 -45
- data/lib/xero-ruby/models/payroll_nz/statutory_deduction_line.rb +252 -252
- data/lib/xero-ruby/models/payroll_nz/statutory_deduction_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/statutory_deductions.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/superannuation_line.rb +272 -272
- data/lib/xero-ruby/models/payroll_nz/superannuation_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/superannuations.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/tax_code.rb +53 -53
- data/lib/xero-ruby/models/payroll_nz/tax_line.rb +262 -262
- data/lib/xero-ruby/models/payroll_nz/tax_settings.rb +308 -308
- data/lib/xero-ruby/models/payroll_nz/timesheet.rb +362 -362
- data/lib/xero-ruby/models/payroll_nz/timesheet_earnings_line.rb +312 -312
- data/lib/xero-ruby/models/payroll_nz/timesheet_line.rb +277 -277
- data/lib/xero-ruby/models/payroll_nz/timesheet_line_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/timesheet_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/timesheets.rb +244 -244
- data/lib/xero-ruby/models/payroll_nz/tracking_categories.rb +242 -242
- data/lib/xero-ruby/models/payroll_nz/tracking_category.rb +232 -232
- data/lib/xero-ruby/models/payroll_uk/account.rb +293 -293
- data/lib/xero-ruby/models/payroll_uk/accounts.rb +224 -224
- data/lib/xero-ruby/models/payroll_uk/address.rb +277 -277
- data/lib/xero-ruby/models/payroll_uk/bank_account.rb +257 -257
- data/lib/xero-ruby/models/payroll_uk/benefit.rb +432 -432
- data/lib/xero-ruby/models/payroll_uk/benefit_line.rb +262 -262
- data/lib/xero-ruby/models/payroll_uk/benefit_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/benefits.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/court_order_line.rb +232 -232
- data/lib/xero-ruby/models/payroll_uk/deduction.rb +440 -440
- data/lib/xero-ruby/models/payroll_uk/deduction_line.rb +252 -252
- data/lib/xero-ruby/models/payroll_uk/deduction_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/deductions.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/earnings_line.rb +302 -302
- data/lib/xero-ruby/models/payroll_uk/earnings_order.rb +269 -269
- data/lib/xero-ruby/models/payroll_uk/earnings_order_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/earnings_orders.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/earnings_rate.rb +409 -409
- data/lib/xero-ruby/models/payroll_uk/earnings_rate_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/earnings_rates.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/earnings_template.rb +272 -272
- data/lib/xero-ruby/models/payroll_uk/earnings_template_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/employee.rb +408 -408
- data/lib/xero-ruby/models/payroll_uk/employee_leave.rb +304 -304
- data/lib/xero-ruby/models/payroll_uk/employee_leave_balance.rb +252 -252
- data/lib/xero-ruby/models/payroll_uk/employee_leave_balances.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/employee_leave_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/employee_leave_type.rb +320 -320
- data/lib/xero-ruby/models/payroll_uk/employee_leave_type_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/employee_leave_types.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/employee_leaves.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/employee_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/employee_opening_balances.rb +272 -272
- data/lib/xero-ruby/models/payroll_uk/employee_opening_balances_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/employee_pay_template.rb +234 -234
- data/lib/xero-ruby/models/payroll_uk/employee_pay_template_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/employee_pay_templates.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_leave_balance.rb +294 -294
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_leave_balance_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_leave_summary.rb +336 -336
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_leaves_summaries.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_sick_leave.rb +433 -433
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_sick_leave_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_sick_leaves.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/employee_tax.rb +322 -322
- data/lib/xero-ruby/models/payroll_uk/employee_tax_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/employees.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/employment.rb +299 -299
- data/lib/xero-ruby/models/payroll_uk/employment_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/invalid_field.rb +232 -232
- data/lib/xero-ruby/models/payroll_uk/leave_accrual_line.rb +232 -232
- data/lib/xero-ruby/models/payroll_uk/leave_earnings_line.rb +272 -272
- data/lib/xero-ruby/models/payroll_uk/leave_period.rb +288 -288
- data/lib/xero-ruby/models/payroll_uk/leave_periods.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/leave_type.rb +307 -307
- data/lib/xero-ruby/models/payroll_uk/leave_type_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/leave_types.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/pagination.rb +252 -252
- data/lib/xero-ruby/models/payroll_uk/pay_run.rb +403 -403
- data/lib/xero-ruby/models/payroll_uk/pay_run_calendar.rb +342 -342
- data/lib/xero-ruby/models/payroll_uk/pay_run_calendar_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/pay_run_calendars.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/pay_run_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/pay_runs.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/payment_line.rb +262 -262
- data/lib/xero-ruby/models/payroll_uk/payment_method.rb +276 -276
- data/lib/xero-ruby/models/payroll_uk/payment_method_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/payslip.rb +551 -551
- data/lib/xero-ruby/models/payroll_uk/payslip_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/payslips.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/problem.rb +275 -275
- data/lib/xero-ruby/models/payroll_uk/reimbursement.rb +262 -262
- data/lib/xero-ruby/models/payroll_uk/reimbursement_line.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/reimbursement_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/reimbursements.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/salary_and_wage.rb +383 -383
- data/lib/xero-ruby/models/payroll_uk/salary_and_wage_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/salary_and_wages.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/settings.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/statutory_deduction.rb +262 -262
- data/lib/xero-ruby/models/payroll_uk/statutory_deduction_category.rb +48 -48
- data/lib/xero-ruby/models/payroll_uk/tax_line.rb +272 -272
- data/lib/xero-ruby/models/payroll_uk/timesheet.rb +361 -361
- data/lib/xero-ruby/models/payroll_uk/timesheet_earnings_line.rb +272 -272
- data/lib/xero-ruby/models/payroll_uk/timesheet_line.rb +277 -277
- data/lib/xero-ruby/models/payroll_uk/timesheet_line_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/timesheet_object.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/timesheets.rb +244 -244
- data/lib/xero-ruby/models/payroll_uk/tracking_categories.rb +242 -242
- data/lib/xero-ruby/models/payroll_uk/tracking_category.rb +232 -232
- data/lib/xero-ruby/models/projects/amount.rb +232 -232
- data/lib/xero-ruby/models/projects/charge_type.rb +37 -37
- data/lib/xero-ruby/models/projects/currency_code.rb +198 -198
- data/lib/xero-ruby/models/projects/error.rb +232 -232
- data/lib/xero-ruby/models/projects/pagination.rb +252 -252
- data/lib/xero-ruby/models/projects/project.rb +437 -437
- data/lib/xero-ruby/models/projects/project_create_or_update.rb +257 -257
- data/lib/xero-ruby/models/projects/project_patch.rb +227 -227
- data/lib/xero-ruby/models/projects/project_status.rb +36 -36
- data/lib/xero-ruby/models/projects/project_user.rb +242 -242
- data/lib/xero-ruby/models/projects/project_users.rb +234 -234
- data/lib/xero-ruby/models/projects/projects.rb +234 -234
- data/lib/xero-ruby/models/projects/task.rb +399 -399
- data/lib/xero-ruby/models/projects/task_create_or_update.rb +267 -267
- data/lib/xero-ruby/models/projects/tasks.rb +234 -234
- data/lib/xero-ruby/models/projects/time_entries.rb +234 -234
- data/lib/xero-ruby/models/projects/time_entry.rb +339 -339
- data/lib/xero-ruby/models/projects/time_entry_create_or_update.rb +282 -282
- data/lib/xero-ruby/string_serialization.rb +52 -52
- data/lib/xero-ruby/version.rb +15 -15
- data/lib/xero-ruby/where.rb +67 -67
- data/lib/xero-ruby.rb +556 -554
- data/spec/accounting/api/accounting_api_spec.rb +2873 -2873
- data/spec/accounting/models/account_spec.rb +171 -171
- data/spec/accounting/models/account_type_spec.rb +35 -35
- data/spec/accounting/models/accounts_payable_spec.rb +47 -47
- data/spec/accounting/models/accounts_receivable_spec.rb +47 -47
- data/spec/accounting/models/accounts_spec.rb +41 -41
- data/spec/accounting/models/address_spec.rb +99 -99
- data/spec/accounting/models/allocation_spec.rb +53 -53
- data/spec/accounting/models/allocations_spec.rb +41 -41
- data/spec/accounting/models/attachment_spec.rb +71 -71
- data/spec/accounting/models/attachments_spec.rb +41 -41
- data/spec/accounting/models/balances_spec.rb +47 -47
- data/spec/accounting/models/bank_transaction_spec.rb +175 -175
- data/spec/accounting/models/bank_transactions_spec.rb +41 -41
- data/spec/accounting/models/bank_transfer_spec.rb +101 -101
- data/spec/accounting/models/bank_transfers_spec.rb +41 -41
- data/spec/accounting/models/batch_payment_details_spec.rb +65 -65
- data/spec/accounting/models/batch_payment_spec.rb +139 -139
- data/spec/accounting/models/batch_payments_spec.rb +41 -41
- data/spec/accounting/models/bill_spec.rb +47 -47
- data/spec/accounting/models/branding_theme_spec.rb +75 -75
- data/spec/accounting/models/branding_themes_spec.rb +41 -41
- data/spec/accounting/models/cis_org_setting_spec.rb +53 -53
- data/spec/accounting/models/cis_setting_spec.rb +47 -47
- data/spec/accounting/models/cis_settings_spec.rb +41 -41
- data/spec/accounting/models/contact_group_spec.rb +63 -63
- data/spec/accounting/models/contact_groups_spec.rb +41 -41
- data/spec/accounting/models/contact_person_spec.rb +59 -59
- data/spec/accounting/models/contact_spec.rb +273 -273
- data/spec/accounting/models/contacts_spec.rb +41 -41
- data/spec/accounting/models/country_code_spec.rb +35 -35
- data/spec/accounting/models/credit_note_spec.rb +199 -199
- data/spec/accounting/models/credit_notes_spec.rb +41 -41
- data/spec/accounting/models/currencies_spec.rb +41 -41
- data/spec/accounting/models/currency_code_spec.rb +35 -35
- data/spec/accounting/models/currency_spec.rb +47 -47
- data/spec/accounting/models/element_spec.rb +83 -83
- data/spec/accounting/models/employee_spec.rb +87 -87
- data/spec/accounting/models/employees_spec.rb +41 -41
- data/spec/accounting/models/error_spec.rb +59 -59
- data/spec/accounting/models/expense_claim_spec.rb +111 -111
- data/spec/accounting/models/expense_claims_spec.rb +41 -41
- data/spec/accounting/models/external_link_spec.rb +57 -57
- data/spec/accounting/models/history_record_spec.rb +59 -59
- data/spec/accounting/models/history_records_spec.rb +41 -41
- data/spec/accounting/models/invoice_reminder_spec.rb +41 -41
- data/spec/accounting/models/invoice_reminders_spec.rb +41 -41
- data/spec/accounting/models/invoice_spec.rb +271 -271
- data/spec/accounting/models/invoices_spec.rb +41 -41
- data/spec/accounting/models/item_spec.rb +131 -131
- data/spec/accounting/models/items_spec.rb +41 -41
- data/spec/accounting/models/journal_line_spec.rb +107 -107
- data/spec/accounting/models/journal_spec.rb +87 -87
- data/spec/accounting/models/journals_spec.rb +41 -41
- data/spec/accounting/models/line_amount_types_spec.rb +35 -35
- data/spec/accounting/models/line_item_spec.rb +113 -113
- data/spec/accounting/models/line_item_tracking_spec.rb +59 -59
- data/spec/accounting/models/linked_transaction_spec.rb +113 -113
- data/spec/accounting/models/linked_transactions_spec.rb +41 -41
- data/spec/accounting/models/manual_journal_line_spec.rb +77 -77
- data/spec/accounting/models/manual_journal_spec.rb +123 -123
- data/spec/accounting/models/manual_journals_spec.rb +41 -41
- data/spec/accounting/models/online_invoice_spec.rb +41 -41
- data/spec/accounting/models/online_invoices_spec.rb +41 -41
- data/spec/accounting/models/organisation_spec.rb +255 -255
- data/spec/accounting/models/organisations_spec.rb +41 -41
- data/spec/accounting/models/overpayment_spec.rb +157 -157
- data/spec/accounting/models/overpayments_spec.rb +41 -41
- data/spec/accounting/models/payment_delete_spec.rb +41 -41
- data/spec/accounting/models/payment_service_spec.rb +71 -71
- data/spec/accounting/models/payment_services_spec.rb +41 -41
- data/spec/accounting/models/payment_spec.rb +187 -187
- data/spec/accounting/models/payment_term_spec.rb +47 -47
- data/spec/accounting/models/payment_term_type_spec.rb +35 -35
- data/spec/accounting/models/payments_spec.rb +41 -41
- data/spec/accounting/models/phone_spec.rb +63 -63
- data/spec/accounting/models/prepayment_spec.rb +157 -157
- data/spec/accounting/models/prepayments_spec.rb +41 -41
- data/spec/accounting/models/purchase_order_spec.rb +207 -207
- data/spec/accounting/models/purchase_orders_spec.rb +41 -41
- data/spec/accounting/models/purchase_spec.rb +59 -59
- data/spec/accounting/models/quote_line_amount_types_spec.rb +35 -35
- data/spec/accounting/models/quote_spec.rb +167 -167
- data/spec/accounting/models/quote_status_codes_spec.rb +35 -35
- data/spec/accounting/models/quotes_spec.rb +41 -41
- data/spec/accounting/models/receipt_spec.rb +147 -147
- data/spec/accounting/models/receipts_spec.rb +41 -41
- data/spec/accounting/models/repeating_invoice_spec.rb +139 -139
- data/spec/accounting/models/repeating_invoices_spec.rb +41 -41
- data/spec/accounting/models/report_attribute_spec.rb +47 -47
- data/spec/accounting/models/report_cell_spec.rb +47 -47
- data/spec/accounting/models/report_fields_spec.rb +53 -53
- data/spec/accounting/models/report_row_spec.rb +53 -53
- data/spec/accounting/models/report_rows_spec.rb +59 -59
- data/spec/accounting/models/report_spec.rb +81 -81
- data/spec/accounting/models/report_with_row_spec.rb +89 -89
- data/spec/accounting/models/report_with_rows_spec.rb +41 -41
- data/spec/accounting/models/reports_spec.rb +41 -41
- data/spec/accounting/models/request_empty_spec.rb +41 -41
- data/spec/accounting/models/row_type_spec.rb +35 -35
- data/spec/accounting/models/sales_tracking_category_spec.rb +47 -47
- data/spec/accounting/models/schedule_spec.rb +85 -85
- data/spec/accounting/models/tax_component_spec.rb +59 -59
- data/spec/accounting/models/tax_rate_spec.rb +115 -115
- data/spec/accounting/models/tax_rates_spec.rb +41 -41
- data/spec/accounting/models/tax_type_spec.rb +35 -35
- data/spec/accounting/models/ten_nintey_nine_contact_spec.rb +167 -167
- data/spec/accounting/models/time_zone_spec.rb +35 -35
- data/spec/accounting/models/tracking_categories_spec.rb +41 -41
- data/spec/accounting/models/tracking_category_spec.rb +75 -75
- data/spec/accounting/models/tracking_option_spec.rb +63 -63
- data/spec/accounting/models/tracking_options_spec.rb +41 -41
- data/spec/accounting/models/user_spec.rb +81 -81
- data/spec/accounting/models/users_spec.rb +41 -41
- data/spec/accounting/models/validation_error_spec.rb +41 -41
- data/spec/api_client_spec.rb +556 -556
- data/spec/api_error_spec.rb +45 -45
- data/spec/app_store/api/app_store_api_spec.rb +45 -45
- data/spec/app_store/models/plan_spec.rb +62 -62
- data/spec/app_store/models/price_spec.rb +52 -52
- data/spec/app_store/models/problem_details_spec.rb +70 -70
- data/spec/app_store/models/product_spec.rb +56 -56
- data/spec/app_store/models/subscription_item_spec.rb +70 -70
- data/spec/app_store/models/subscription_spec.rb +82 -82
- data/spec/assets/api/asset_api_spec.rb +116 -116
- data/spec/assets/models/asset_spec.rb +125 -125
- data/spec/assets/models/asset_status_query_param_spec.rb +35 -35
- data/spec/assets/models/asset_status_spec.rb +35 -35
- data/spec/assets/models/asset_type_spec.rb +77 -77
- data/spec/assets/models/assets_spec.rb +47 -47
- data/spec/assets/models/book_depreciation_detail_spec.rb +77 -77
- data/spec/assets/models/book_depreciation_setting_spec.rb +95 -95
- data/spec/assets/models/error_spec.rb +65 -65
- data/spec/assets/models/field_validation_errors_element_spec.rb +71 -71
- data/spec/assets/models/pagination_spec.rb +59 -59
- data/spec/assets/models/resource_validation_errors_element_spec.rb +65 -65
- data/spec/assets/models/setting_spec.rb +83 -83
- data/spec/configuration_spec.rb +37 -37
- data/spec/files/api/files_api_spec.rb +249 -249
- data/spec/files/models/association_spec.rb +59 -59
- data/spec/files/models/file_object_spec.rb +83 -83
- data/spec/files/models/files_spec.rb +59 -59
- data/spec/files/models/folder_spec.rb +65 -65
- data/spec/files/models/folders_spec.rb +41 -41
- data/spec/files/models/inline_object_spec.rb +59 -59
- data/spec/files/models/object_group_spec.rb +35 -35
- data/spec/files/models/object_type_spec.rb +35 -35
- data/spec/files/models/user_spec.rb +81 -81
- data/spec/finance/api/finance_api_spec.rb +156 -156
- data/spec/finance/models/account_usage_response_spec.rb +58 -58
- data/spec/finance/models/account_usage_spec.rb +112 -112
- data/spec/finance/models/balance_sheet_account_detail_spec.rb +64 -64
- data/spec/finance/models/balance_sheet_account_group_spec.rb +46 -46
- data/spec/finance/models/balance_sheet_account_type_spec.rb +52 -52
- data/spec/finance/models/balance_sheet_response_spec.rb +58 -58
- data/spec/finance/models/bank_statement_response_spec.rb +46 -46
- data/spec/finance/models/cash_account_response_spec.rb +64 -64
- data/spec/finance/models/cash_balance_spec.rb +52 -52
- data/spec/finance/models/cash_validation_response_spec.rb +64 -64
- data/spec/finance/models/cashflow_account_spec.rb +76 -76
- data/spec/finance/models/cashflow_activity_spec.rb +52 -52
- data/spec/finance/models/cashflow_response_spec.rb +58 -58
- data/spec/finance/models/cashflow_type_spec.rb +52 -52
- data/spec/finance/models/current_statement_response_spec.rb +70 -70
- data/spec/finance/models/data_source_response_spec.rb +124 -124
- data/spec/finance/models/history_record_response_spec.rb +64 -64
- data/spec/finance/models/lock_history_model_spec.rb +52 -52
- data/spec/finance/models/lock_history_response_spec.rb +52 -52
- data/spec/finance/models/pnl_account_class_spec.rb +46 -46
- data/spec/finance/models/pnl_account_spec.rb +70 -70
- data/spec/finance/models/pnl_account_type_spec.rb +52 -52
- data/spec/finance/models/practice_response_spec.rb +64 -64
- data/spec/finance/models/problem_spec.rb +58 -58
- data/spec/finance/models/problem_type_spec.rb +34 -34
- data/spec/finance/models/profit_and_loss_response_spec.rb +64 -64
- data/spec/finance/models/report_history_model_spec.rb +52 -52
- data/spec/finance/models/report_history_response_spec.rb +52 -52
- data/spec/finance/models/statement_balance_response_spec.rb +46 -46
- data/spec/finance/models/statement_lines_response_spec.rb +136 -136
- data/spec/finance/models/trial_balance_account_spec.rb +94 -94
- data/spec/finance/models/trial_balance_entry_spec.rb +46 -46
- data/spec/finance/models/trial_balance_movement_spec.rb +58 -58
- data/spec/finance/models/trial_balance_response_spec.rb +52 -52
- data/spec/finance/models/user_activities_response_spec.rb +52 -52
- data/spec/finance/models/user_response_spec.rb +106 -106
- data/spec/helper_methods_spec.rb +110 -110
- data/spec/payroll_au/api/payroll_au_api_spec.rb +415 -415
- data/spec/payroll_au/models/account_spec.rb +59 -59
- data/spec/payroll_au/models/account_type_spec.rb +35 -35
- data/spec/payroll_au/models/allowance_type_spec.rb +35 -35
- data/spec/payroll_au/models/api_exception_spec.rb +53 -53
- data/spec/payroll_au/models/bank_account_spec.rb +71 -71
- data/spec/payroll_au/models/calendar_type_spec.rb +35 -35
- data/spec/payroll_au/models/deduction_line_spec.rb +65 -65
- data/spec/payroll_au/models/deduction_type_calculation_type_spec.rb +35 -35
- data/spec/payroll_au/models/deduction_type_spec.rb +93 -93
- data/spec/payroll_au/models/earnings_line_spec.rb +89 -89
- data/spec/payroll_au/models/earnings_rate_calculation_type_spec.rb +35 -35
- data/spec/payroll_au/models/earnings_rate_spec.rb +137 -137
- data/spec/payroll_au/models/earnings_type_spec.rb +35 -35
- data/spec/payroll_au/models/employee_spec.rb +225 -225
- data/spec/payroll_au/models/employee_status_spec.rb +35 -35
- data/spec/payroll_au/models/employees_spec.rb +41 -41
- data/spec/payroll_au/models/employment_basis_spec.rb +35 -35
- data/spec/payroll_au/models/employment_termination_payment_type_spec.rb +35 -35
- data/spec/payroll_au/models/entitlement_final_pay_payout_type_spec.rb +35 -35
- data/spec/payroll_au/models/home_address_spec.rb +71 -71
- data/spec/payroll_au/models/leave_accrual_line_spec.rb +53 -53
- data/spec/payroll_au/models/leave_application_spec.rb +95 -95
- data/spec/payroll_au/models/leave_applications_spec.rb +41 -41
- data/spec/payroll_au/models/leave_balance_spec.rb +59 -59
- data/spec/payroll_au/models/leave_earnings_line_spec.rb +53 -53
- data/spec/payroll_au/models/leave_line_calculation_type_spec.rb +35 -35
- data/spec/payroll_au/models/leave_line_spec.rb +83 -83
- data/spec/payroll_au/models/leave_lines_spec.rb +41 -41
- data/spec/payroll_au/models/leave_period_spec.rb +59 -59
- data/spec/payroll_au/models/leave_period_status_spec.rb +35 -35
- data/spec/payroll_au/models/leave_type_contribution_type_spec.rb +35 -35
- data/spec/payroll_au/models/leave_type_spec.rb +89 -89
- data/spec/payroll_au/models/manual_tax_type_spec.rb +35 -35
- data/spec/payroll_au/models/opening_balances_spec.rb +77 -77
- data/spec/payroll_au/models/pay_item_spec.rb +59 -59
- data/spec/payroll_au/models/pay_items_spec.rb +41 -41
- data/spec/payroll_au/models/pay_run_spec.rb +131 -131
- data/spec/payroll_au/models/pay_run_status_spec.rb +35 -35
- data/spec/payroll_au/models/pay_runs_spec.rb +41 -41
- data/spec/payroll_au/models/pay_template_spec.rb +65 -65
- data/spec/payroll_au/models/payment_frequency_type_spec.rb +35 -35
- data/spec/payroll_au/models/payroll_calendar_spec.rb +77 -77
- data/spec/payroll_au/models/payroll_calendars_spec.rb +41 -41
- data/spec/payroll_au/models/payslip_lines_spec.rb +83 -83
- data/spec/payroll_au/models/payslip_object_spec.rb +41 -41
- data/spec/payroll_au/models/payslip_spec.rb +149 -149
- data/spec/payroll_au/models/payslip_summary_spec.rb +107 -107
- data/spec/payroll_au/models/payslips_spec.rb +41 -41
- data/spec/payroll_au/models/rate_type_spec.rb +35 -35
- data/spec/payroll_au/models/reimbursement_line_spec.rb +59 -59
- data/spec/payroll_au/models/reimbursement_lines_spec.rb +41 -41
- data/spec/payroll_au/models/reimbursement_type_spec.rb +65 -65
- data/spec/payroll_au/models/residency_status_spec.rb +35 -35
- data/spec/payroll_au/models/settings_object_spec.rb +41 -41
- data/spec/payroll_au/models/settings_spec.rb +53 -53
- data/spec/payroll_au/models/settings_tracking_categories_employee_groups_spec.rb +47 -47
- data/spec/payroll_au/models/settings_tracking_categories_spec.rb +47 -47
- data/spec/payroll_au/models/settings_tracking_categories_timesheet_categories_spec.rb +47 -47
- data/spec/payroll_au/models/state_spec.rb +35 -35
- data/spec/payroll_au/models/super_fund_product_spec.rb +59 -59
- data/spec/payroll_au/models/super_fund_products_spec.rb +41 -41
- data/spec/payroll_au/models/super_fund_spec.rb +113 -113
- data/spec/payroll_au/models/super_fund_type_spec.rb +35 -35
- data/spec/payroll_au/models/super_funds_spec.rb +41 -41
- data/spec/payroll_au/models/super_line_spec.rb +83 -83
- data/spec/payroll_au/models/super_membership_spec.rb +53 -53
- data/spec/payroll_au/models/superannuation_calculation_type_spec.rb +35 -35
- data/spec/payroll_au/models/superannuation_contribution_type_spec.rb +35 -35
- data/spec/payroll_au/models/superannuation_line_spec.rb +89 -89
- data/spec/payroll_au/models/tax_declaration_spec.rb +131 -131
- data/spec/payroll_au/models/tax_line_spec.rb +71 -71
- data/spec/payroll_au/models/tfn_exemption_type_spec.rb +35 -35
- data/spec/payroll_au/models/timesheet_line_spec.rb +59 -59
- data/spec/payroll_au/models/timesheet_object_spec.rb +41 -41
- data/spec/payroll_au/models/timesheet_spec.rb +89 -89
- data/spec/payroll_au/models/timesheet_status_spec.rb +35 -35
- data/spec/payroll_au/models/timesheets_spec.rb +41 -41
- data/spec/payroll_au/models/validation_error_spec.rb +41 -41
- data/spec/payroll_nz/api/payroll_nz_api_spec.rb +886 -886
- data/spec/payroll_nz/models/account_spec.rb +63 -63
- data/spec/payroll_nz/models/accounts_spec.rb +41 -41
- data/spec/payroll_nz/models/address_spec.rb +71 -71
- data/spec/payroll_nz/models/bank_account_spec.rb +87 -87
- data/spec/payroll_nz/models/benefit_spec.rb +103 -103
- data/spec/payroll_nz/models/deduction_line_spec.rb +65 -65
- data/spec/payroll_nz/models/deduction_object_spec.rb +53 -53
- data/spec/payroll_nz/models/deduction_spec.rb +75 -75
- data/spec/payroll_nz/models/deductions_spec.rb +53 -53
- data/spec/payroll_nz/models/earnings_line_spec.rb +95 -95
- data/spec/payroll_nz/models/earnings_order_object_spec.rb +53 -53
- data/spec/payroll_nz/models/earnings_order_spec.rb +65 -65
- data/spec/payroll_nz/models/earnings_orders_spec.rb +53 -53
- data/spec/payroll_nz/models/earnings_rate_object_spec.rb +53 -53
- data/spec/payroll_nz/models/earnings_rate_spec.rb +103 -103
- data/spec/payroll_nz/models/earnings_rates_spec.rb +53 -53
- data/spec/payroll_nz/models/earnings_template_object_spec.rb +53 -53
- data/spec/payroll_nz/models/earnings_template_spec.rb +71 -71
- data/spec/payroll_nz/models/employee_earnings_templates_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_leave_balance_spec.rb +59 -59
- data/spec/payroll_nz/models/employee_leave_balances_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_leave_object_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_leave_setup_object_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_leave_setup_spec.rb +77 -77
- data/spec/payroll_nz/models/employee_leave_spec.rb +77 -77
- data/spec/payroll_nz/models/employee_leave_type_object_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_leave_type_spec.rb +99 -99
- data/spec/payroll_nz/models/employee_leave_types_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_leaves_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_object_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_opening_balance_spec.rb +59 -59
- data/spec/payroll_nz/models/employee_opening_balances_object_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_pay_template_object_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_pay_template_spec.rb +47 -47
- data/spec/payroll_nz/models/employee_pay_templates_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_spec.rb +123 -123
- data/spec/payroll_nz/models/employee_statutory_leave_balance_object_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_statutory_leave_balance_spec.rb +61 -61
- data/spec/payroll_nz/models/employee_statutory_leave_summary_spec.rb +85 -85
- data/spec/payroll_nz/models/employee_statutory_leaves_summaries_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_statutory_sick_leave_object_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_statutory_sick_leave_spec.rb +135 -135
- data/spec/payroll_nz/models/employee_statutory_sick_leaves_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_tax_object_spec.rb +53 -53
- data/spec/payroll_nz/models/employee_tax_spec.rb +135 -135
- data/spec/payroll_nz/models/employees_spec.rb +53 -53
- data/spec/payroll_nz/models/employment_object_spec.rb +53 -53
- data/spec/payroll_nz/models/employment_spec.rb +53 -53
- data/spec/payroll_nz/models/gross_earnings_history_spec.rb +47 -47
- data/spec/payroll_nz/models/invalid_field_spec.rb +47 -47
- data/spec/payroll_nz/models/leave_accrual_line_spec.rb +47 -47
- data/spec/payroll_nz/models/leave_earnings_line_spec.rb +95 -95
- data/spec/payroll_nz/models/leave_period_spec.rb +63 -63
- data/spec/payroll_nz/models/leave_periods_spec.rb +53 -53
- data/spec/payroll_nz/models/leave_type_object_spec.rb +53 -53
- data/spec/payroll_nz/models/leave_type_spec.rb +71 -71
- data/spec/payroll_nz/models/leave_types_spec.rb +53 -53
- data/spec/payroll_nz/models/pagination_spec.rb +59 -59
- data/spec/payroll_nz/models/pay_run_calendar_object_spec.rb +53 -53
- data/spec/payroll_nz/models/pay_run_calendar_spec.rb +81 -81
- data/spec/payroll_nz/models/pay_run_calendars_spec.rb +53 -53
- data/spec/payroll_nz/models/pay_run_object_spec.rb +53 -53
- data/spec/payroll_nz/models/pay_run_spec.rb +119 -119
- data/spec/payroll_nz/models/pay_runs_spec.rb +53 -53
- data/spec/payroll_nz/models/pay_slip_object_spec.rb +53 -53
- data/spec/payroll_nz/models/pay_slip_spec.rb +219 -219
- data/spec/payroll_nz/models/pay_slips_spec.rb +53 -53
- data/spec/payroll_nz/models/payment_line_spec.rb +65 -65
- data/spec/payroll_nz/models/payment_method_object_spec.rb +53 -53
- data/spec/payroll_nz/models/payment_method_spec.rb +51 -51
- data/spec/payroll_nz/models/problem_spec.rb +71 -71
- data/spec/payroll_nz/models/reimbursement_line_spec.rb +65 -65
- data/spec/payroll_nz/models/reimbursement_object_spec.rb +53 -53
- data/spec/payroll_nz/models/reimbursement_spec.rb +101 -101
- data/spec/payroll_nz/models/reimbursements_spec.rb +53 -53
- data/spec/payroll_nz/models/salary_and_wage_object_spec.rb +53 -53
- data/spec/payroll_nz/models/salary_and_wage_spec.rb +103 -103
- data/spec/payroll_nz/models/salary_and_wages_spec.rb +53 -53
- data/spec/payroll_nz/models/settings_spec.rb +53 -53
- data/spec/payroll_nz/models/statutory_deduction_category_spec.rb +35 -35
- data/spec/payroll_nz/models/statutory_deduction_line_spec.rb +59 -59
- data/spec/payroll_nz/models/statutory_deduction_object_spec.rb +53 -53
- data/spec/payroll_nz/models/statutory_deduction_spec.rb +65 -65
- data/spec/payroll_nz/models/statutory_deductions_spec.rb +53 -53
- data/spec/payroll_nz/models/superannuation_line_spec.rb +71 -71
- data/spec/payroll_nz/models/superannuation_object_spec.rb +53 -53
- data/spec/payroll_nz/models/superannuations_spec.rb +53 -53
- data/spec/payroll_nz/models/tax_code_spec.rb +35 -35
- data/spec/payroll_nz/models/tax_line_spec.rb +65 -65
- data/spec/payroll_nz/models/tax_settings_spec.rb +75 -75
- data/spec/payroll_nz/models/timesheet_earnings_line_spec.rb +95 -95
- data/spec/payroll_nz/models/timesheet_line_object_spec.rb +53 -53
- data/spec/payroll_nz/models/timesheet_line_spec.rb +65 -65
- data/spec/payroll_nz/models/timesheet_object_spec.rb +53 -53
- data/spec/payroll_nz/models/timesheet_spec.rb +93 -93
- data/spec/payroll_nz/models/timesheets_spec.rb +53 -53
- data/spec/payroll_nz/models/tracking_categories_spec.rb +53 -53
- data/spec/payroll_nz/models/tracking_category_spec.rb +47 -47
- data/spec/payroll_uk/api/payroll_uk_api_spec.rb +912 -912
- data/spec/payroll_uk/models/account_spec.rb +63 -63
- data/spec/payroll_uk/models/accounts_spec.rb +41 -41
- data/spec/payroll_uk/models/address_spec.rb +65 -65
- data/spec/payroll_uk/models/bank_account_spec.rb +53 -53
- data/spec/payroll_uk/models/benefit_line_spec.rb +65 -65
- data/spec/payroll_uk/models/benefit_object_spec.rb +53 -53
- data/spec/payroll_uk/models/benefit_spec.rb +127 -127
- data/spec/payroll_uk/models/benefits_spec.rb +53 -53
- data/spec/payroll_uk/models/court_order_line_spec.rb +47 -47
- data/spec/payroll_uk/models/deduction_line_spec.rb +59 -59
- data/spec/payroll_uk/models/deduction_object_spec.rb +53 -53
- data/spec/payroll_uk/models/deduction_spec.rb +139 -139
- data/spec/payroll_uk/models/deductions_spec.rb +53 -53
- data/spec/payroll_uk/models/earnings_line_spec.rb +89 -89
- data/spec/payroll_uk/models/earnings_order_object_spec.rb +53 -53
- data/spec/payroll_uk/models/earnings_order_spec.rb +65 -65
- data/spec/payroll_uk/models/earnings_orders_spec.rb +53 -53
- data/spec/payroll_uk/models/earnings_rate_object_spec.rb +53 -53
- data/spec/payroll_uk/models/earnings_rate_spec.rb +103 -103
- data/spec/payroll_uk/models/earnings_rates_spec.rb +53 -53
- data/spec/payroll_uk/models/earnings_template_object_spec.rb +53 -53
- data/spec/payroll_uk/models/earnings_template_spec.rb +71 -71
- data/spec/payroll_uk/models/employee_leave_balance_spec.rb +59 -59
- data/spec/payroll_uk/models/employee_leave_balances_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_leave_object_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_leave_spec.rb +77 -77
- data/spec/payroll_uk/models/employee_leave_type_object_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_leave_type_spec.rb +75 -75
- data/spec/payroll_uk/models/employee_leave_types_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_leaves_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_object_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_opening_balances_object_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_opening_balances_spec.rb +71 -71
- data/spec/payroll_uk/models/employee_pay_template_object_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_pay_template_spec.rb +47 -47
- data/spec/payroll_uk/models/employee_pay_templates_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_spec.rb +129 -129
- data/spec/payroll_uk/models/employee_statutory_leave_balance_object_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_statutory_leave_balance_spec.rb +61 -61
- data/spec/payroll_uk/models/employee_statutory_leave_summary_spec.rb +85 -85
- data/spec/payroll_uk/models/employee_statutory_leaves_summaries_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_statutory_sick_leave_object_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_statutory_sick_leave_spec.rb +135 -135
- data/spec/payroll_uk/models/employee_statutory_sick_leaves_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_tax_object_spec.rb +53 -53
- data/spec/payroll_uk/models/employee_tax_spec.rb +101 -101
- data/spec/payroll_uk/models/employees_spec.rb +53 -53
- data/spec/payroll_uk/models/employment_object_spec.rb +53 -53
- data/spec/payroll_uk/models/employment_spec.rb +63 -63
- data/spec/payroll_uk/models/invalid_field_spec.rb +47 -47
- data/spec/payroll_uk/models/leave_accrual_line_spec.rb +47 -47
- data/spec/payroll_uk/models/leave_earnings_line_spec.rb +71 -71
- data/spec/payroll_uk/models/leave_period_spec.rb +63 -63
- data/spec/payroll_uk/models/leave_periods_spec.rb +53 -53
- data/spec/payroll_uk/models/leave_type_object_spec.rb +53 -53
- data/spec/payroll_uk/models/leave_type_spec.rb +83 -83
- data/spec/payroll_uk/models/leave_types_spec.rb +53 -53
- data/spec/payroll_uk/models/pagination_spec.rb +59 -59
- data/spec/payroll_uk/models/pay_run_calendar_object_spec.rb +53 -53
- data/spec/payroll_uk/models/pay_run_calendar_spec.rb +81 -81
- data/spec/payroll_uk/models/pay_run_calendars_spec.rb +53 -53
- data/spec/payroll_uk/models/pay_run_object_spec.rb +53 -53
- data/spec/payroll_uk/models/pay_run_spec.rb +119 -119
- data/spec/payroll_uk/models/pay_runs_spec.rb +53 -53
- data/spec/payroll_uk/models/payment_line_spec.rb +65 -65
- data/spec/payroll_uk/models/payment_method_object_spec.rb +53 -53
- data/spec/payroll_uk/models/payment_method_spec.rb +51 -51
- data/spec/payroll_uk/models/payslip_object_spec.rb +53 -53
- data/spec/payroll_uk/models/payslip_spec.rb +201 -201
- data/spec/payroll_uk/models/payslips_spec.rb +53 -53
- data/spec/payroll_uk/models/problem_spec.rb +71 -71
- data/spec/payroll_uk/models/reimbursement_line_spec.rb +53 -53
- data/spec/payroll_uk/models/reimbursement_object_spec.rb +53 -53
- data/spec/payroll_uk/models/reimbursement_spec.rb +59 -59
- data/spec/payroll_uk/models/reimbursements_spec.rb +53 -53
- data/spec/payroll_uk/models/salary_and_wage_object_spec.rb +53 -53
- data/spec/payroll_uk/models/salary_and_wage_spec.rb +97 -97
- data/spec/payroll_uk/models/salary_and_wages_spec.rb +53 -53
- data/spec/payroll_uk/models/settings_spec.rb +53 -53
- data/spec/payroll_uk/models/statutory_deduction_category_spec.rb +35 -35
- data/spec/payroll_uk/models/statutory_deduction_spec.rb +65 -65
- data/spec/payroll_uk/models/tax_line_spec.rb +71 -71
- data/spec/payroll_uk/models/timesheet_earnings_line_spec.rb +71 -71
- data/spec/payroll_uk/models/timesheet_line_object_spec.rb +53 -53
- data/spec/payroll_uk/models/timesheet_line_spec.rb +65 -65
- data/spec/payroll_uk/models/timesheet_object_spec.rb +53 -53
- data/spec/payroll_uk/models/timesheet_spec.rb +93 -93
- data/spec/payroll_uk/models/timesheets_spec.rb +53 -53
- data/spec/payroll_uk/models/tracking_categories_spec.rb +53 -53
- data/spec/payroll_uk/models/tracking_category_spec.rb +47 -47
- data/spec/projects/api/project_api_spec.rb +229 -229
- data/spec/projects/models/amount_spec.rb +47 -47
- data/spec/projects/models/charge_type_spec.rb +35 -35
- data/spec/projects/models/currency_code_spec.rb +35 -35
- data/spec/projects/models/error_spec.rb +47 -47
- data/spec/projects/models/pagination_spec.rb +59 -59
- data/spec/projects/models/project_create_or_update_spec.rb +59 -59
- data/spec/projects/models/project_patch_spec.rb +41 -41
- data/spec/projects/models/project_spec.rb +167 -167
- data/spec/projects/models/project_status_spec.rb +35 -35
- data/spec/projects/models/project_user_spec.rb +53 -53
- data/spec/projects/models/project_users_spec.rb +47 -47
- data/spec/projects/models/projects_spec.rb +47 -47
- data/spec/projects/models/task_create_or_update_spec.rb +59 -59
- data/spec/projects/models/task_spec.rb +129 -129
- data/spec/projects/models/tasks_spec.rb +47 -47
- data/spec/projects/models/time_entries_spec.rb +47 -47
- data/spec/projects/models/time_entry_create_or_update_spec.rb +65 -65
- data/spec/projects/models/time_entry_spec.rb +93 -93
- data/spec/spec_helper.rb +111 -111
- data/spec/where_spec.rb +82 -82
- metadata +393 -391
data/README.md
CHANGED
@@ -1,450 +1,450 @@
|
|
1
|
-
# xero-ruby
|
2
|
-
[![Gem Version](https://badge.fury.io/rb/xero-ruby.svg)](https://badge.fury.io/rb/xero-ruby)
|
3
|
-
[![Github forks](https://img.shields.io/github/forks/XeroAPI/xero-ruby.svg)](https://github.com/XeroAPI/xero-ruby/network)
|
4
|
-
[![Github stars](https://img.shields.io/github/stars/XeroAPI/xero-ruby.svg)](https://github.com/XeroAPI/xero-ruby/stargazers)
|
5
|
-
![total downloads](https://ruby-gem-downloads-badge.herokuapp.com/xero-ruby?type=total)
|
6
|
-
|
7
|
-
The xero-ruby SDK makes it easy for developers to access Xero's APIs in their Ruby code, and build robust applications and software using small business & general ledger accounting data.
|
8
|
-
# Table of Contents
|
9
|
-
- [API Client documentation](#api-client-documentation)
|
10
|
-
- [Sample Applications](#sample-applications)
|
11
|
-
- [Xero Account Requirements](#xero-account-requirements)
|
12
|
-
- [Installation](#installation)
|
13
|
-
- [Configuration](#configuration)
|
14
|
-
- [Authentication](#authentication)
|
15
|
-
- [Custom Connections](#custom-connections)
|
16
|
-
- [App Store Subscriptions](#app-store-subscriptions)
|
17
|
-
- [API Clients](#api-clients)
|
18
|
-
- [Helper Methods](#helper-methods)
|
19
|
-
- [Usage Examples](#usage-examples)
|
20
|
-
- [SDK conventions](#sdk-conventions)
|
21
|
-
- [Contributing](#contributing)
|
22
|
-
|
23
|
-
<hr>
|
24
|
-
|
25
|
-
## API Client documentation
|
26
|
-
This SDK supports full method coverage for the following Xero API sets:
|
27
|
-
|
28
|
-
| API Set | Description |
|
29
|
-
| --- | --- |
|
30
|
-
| [`Accounting`](https://xeroapi.github.io/xero-ruby/accounting/index.html) | The Accounting API exposes accounting functions of the main Xero application *(most commonly used)*
|
31
|
-
| [Assets](https://xeroapi.github.io/xero-ruby/assets/index.html) | The Assets API exposes fixed asset related functions of the Xero Accounting application |
|
32
|
-
| [Files](https://xeroapi.github.io/xero-ruby/files/index.html) | The Files API provides access to the files, folders, and the association of files within a Xero organisation |
|
33
|
-
| [Projects](https://xeroapi.github.io/xero-ruby/projects/index.html) | Xero Projects allows businesses to track time and costs on projects/jobs and report on profitability |
|
34
|
-
| [Payroll (AU)](https://xeroapi.github.io/xero-ruby/payroll_au/index.html) | The (AU) Payroll API exposes payroll related functions of the payroll Xero application |
|
35
|
-
| [Payroll (UK)](https://xeroapi.github.io/xero-ruby/payroll_uk/index.html) | The (UK) Payroll API exposes payroll related functions of the payroll Xero application |
|
36
|
-
| [Payroll (NZ)](https://xeroapi.github.io/xero-ruby/payroll_nz/index.html) | The (NZ) Payroll API exposes payroll related functions of the payroll Xero application |
|
37
|
-
| [`Ruby Models`](/docs/) | Directory of markdown files, describing the object models for all supported API sets |
|
38
|
-
|
39
|
-
<img src="https://i.imgur.com/0MsvkGB.png" alt="drawing" width="350"/>
|
40
|
-
|
41
|
-
<hr>
|
42
|
-
|
43
|
-
## Sample Applications
|
44
|
-
Sample apps can get you started quickly with simple auth flows to advanced usage.
|
45
|
-
| Sample App | Description | Screenshot |
|
46
|
-
| --- | --- | --- |
|
47
|
-
| [`xero-ruby-oauth2-starter`](https://github.com/XeroAPI/Xero-ruby-oauth2-starter) | A Sinatra application showing the basic getting started code to work with the sdk | <img src="https://i.imgur.com/9H4F98M.png" alt="drawing" width="300"/>
|
48
|
-
| [`xero-ruby-oauth2-app`](https://github.com/XeroAPI/Xero-ruby-oauth2-app) | Complete rails app with +95% of api set examples, complex filters, pagination, and user/token management in postgres | <img src="https://i.imgur.com/XsAp9Ww.png" alt="drawing" width="500"/>
|
49
|
-
| [`xero-ruby-custom-connections-starter`](https://github.com/XeroAPI/xero-ruby-custom-connections-starter) | A getting started Sinatra app showing Custom Connections - a Xero [premium option](https://developer.xero.com/documentation/oauth2/custom-connections) for building M2M integrations to a single org | <img src="https://i.imgur.com/YEkScui.png" alt="drawing" width="300"/>
|
50
|
-
| [`xero-ruby-sso-form`](https://github.com/XeroAPI/xero-ruby-sso-form) | A basic Sinatra app showing how to implement SSU to Lead | <img src="https://i.imgur.com/Nf95GVd.png" alt="drawing" width="300"/>
|
51
|
-
|
52
|
-
<hr>
|
53
|
-
|
54
|
-
## Xero Account Requirements
|
55
|
-
- Create a [free Xero user account](https://www.xero.com/us/signup/api/)
|
56
|
-
- Login to your Xero developer [dashboard](https://developer.xero.com/app/manage) and create an API application
|
57
|
-
- Copy the credentials from your API app and store them using a secure ENV variable strategy
|
58
|
-
- Decide the [neccesary scopes](https://developer.xero.com/documentation/oauth2/scopes) for your app's functionality
|
59
|
-
|
60
|
-
# Installation
|
61
|
-
To install this gem to your project
|
62
|
-
```
|
63
|
-
gem install 'xero-ruby'
|
64
|
-
```
|
65
|
-
Or add to your gemfile and run `bundle install`
|
66
|
-
```
|
67
|
-
gem 'xero-ruby'
|
68
|
-
```
|
69
|
-
|
70
|
-
---
|
71
|
-
## Configuration
|
72
|
-
```ruby
|
73
|
-
require 'xero-ruby'
|
74
|
-
|
75
|
-
creds = {
|
76
|
-
client_id: ENV['CLIENT_ID'],
|
77
|
-
client_secret: ENV['CLIENT_SECRET'],
|
78
|
-
redirect_uri: ENV['REDIRECT_URI'],
|
79
|
-
scopes: ENV['SCOPES'],
|
80
|
-
state: "Optional value to pass through auth flow"
|
81
|
-
}
|
82
|
-
xero_client ||= XeroRuby::ApiClient.new(credentials: creds)
|
83
|
-
```
|
84
|
-
|
85
|
-
For additional [config](/lib/xero-ruby/configuration.rb) options you can pass an optional named parameter `config: {}`
|
86
|
-
```ruby
|
87
|
-
config = { timeout: 30, debugging: true }
|
88
|
-
@xero_client ||= XeroRuby::ApiClient.new(credentials: creds, config: config)
|
89
|
-
```
|
90
|
-
---
|
91
|
-
## Authentication
|
92
|
-
All API requests go through Xero's OAuth2.0 gateway and require a valid `access_token` to be set on the `xero_client`, which autmoatically appends the `access_token` [JWT](https://jwt.io/) to the header of each request.
|
93
|
-
|
94
|
-
If you are making an API call for the first time:
|
95
|
-
|
96
|
-
1. Send the user to the Xero authorization URL
|
97
|
-
```ruby
|
98
|
-
@authorization_url = xero_client.authorization_url
|
99
|
-
redirect_to @authorization_url
|
100
|
-
```
|
101
|
-
2. The user will authorize your API application and be sent to your `redirect_uri`
|
102
|
-
```ruby
|
103
|
-
ENV['REDIRECT_URI']
|
104
|
-
=> /xero-callback?code=xyz123
|
105
|
-
```
|
106
|
-
3. You exchange a temporary `authorization_code` for a valid `token_set`
|
107
|
-
```ruby
|
108
|
-
@token_set = @xero_client.get_token_set_from_callback(params)
|
109
|
-
# save the @token_set
|
110
|
-
```
|
111
|
-
|
112
|
-
It is reccomended that you store this token set JSON in a datastore in relation to the user who has authenticated the Xero API connection. Each time you want to call the Xero API, you will need to access the previously generated token set, initialize it on the SDK `xero_client`, and refresh the `access_token` prior to making API calls.
|
113
|
-
|
114
|
-
### Token Set
|
115
|
-
| key | value | description |
|
116
|
-
| --- | --- | --- |
|
117
|
-
| id_token: | "xxx.yyy.zzz" | [OpenID Connect](https://openid.net/connect/) token returned if `openid profile email` scopes accepted |
|
118
|
-
| access_token: | "xxx.yyy.zzz" | [Bearer token](https://oauth.net/2/jwt/) with a 30 minute expiration required for all API calls |
|
119
|
-
| expires_in: | 1800 | Time in seconds till the token expires - 1800s is 30m |
|
120
|
-
| refresh_token: | "XXXXXXX" | Alphanumeric string used to obtain a new Token Set w/ a fresh access_token - 60 day expiry |
|
121
|
-
| scope: | "email profile openid accounting.transactions offline_access" | The Xero permissions that are embedded in the `access_token` |
|
122
|
-
|
123
|
-
Example Token Set JSON:
|
124
|
-
```
|
125
|
-
{
|
126
|
-
"id_token": "xxx.yyy.zz",
|
127
|
-
"access_token": "xxx.yyy.zzz",
|
128
|
-
"expires_in": 1800,
|
129
|
-
"token_type": "Bearer",
|
130
|
-
"refresh_token": "xxxxxxxxx",
|
131
|
-
"scope": "email profile openid accounting.transactions offline_access"
|
132
|
-
}
|
133
|
-
```
|
134
|
-
---
|
135
|
-
## Custom Connections
|
136
|
-
|
137
|
-
Custom Connections are a Xero [premium option](https://developer.xero.com/documentation/oauth2/custom-connections) used for building M2M integrations to a single organisation. A custom connection uses OAuth2.0's [`client_credentials`](https://www.oauth.com/oauth2-servers/access-tokens/client-credentials/) grant which eliminates the step of exchanging the temporary code for a token set.
|
138
|
-
|
139
|
-
To use this SDK with a Custom Connections:
|
140
|
-
```ruby
|
141
|
-
CREDENTIALS = {
|
142
|
-
client_id: ENV['CLIENT_ID'],
|
143
|
-
client_secret: ENV['CLIENT_SECRET'],
|
144
|
-
grant_type: 'client_credentials'
|
145
|
-
}
|
146
|
-
|
147
|
-
xero_client = XeroRuby::ApiClient.new(credentials: CREDENTIALS)
|
148
|
-
|
149
|
-
@token_set = xero_client.get_client_credentials_token
|
150
|
-
# save @token_set
|
151
|
-
|
152
|
-
@invoices = xero_client.accounting_api.get_invoices('').invoices
|
153
|
-
```
|
154
|
-
|
155
|
-
Because Custom Connections are only valid for a single organisation you don't need to pass the `xero-tenant-id` as the first parameter to every method.
|
156
|
-
|
157
|
-
However - due to the nature of how our SDK's are generated from our OpenAPI spec, the parameter remains which requires you to pass an empty string for now to use the SDK with a Custom Connection.
|
158
|
-
|
159
|
-
---
|
160
|
-
|
161
|
-
## App Store Subscriptions
|
162
|
-
|
163
|
-
If you are implementing subscriptions to participate in Xero's App Store you will need to setup [App Store subscriptions](https://developer.xero.com/documentation/guides/how-to-guides/xero-app-store-referrals/) endpoints.
|
164
|
-
|
165
|
-
When a plan is successfully purchased, the user is redirected back to the URL specified in the setup process. The Xero App Store appends the subscription Id to this URL so you can immediately determine what plan the user has subscribed to through the subscriptions API.
|
166
|
-
|
167
|
-
With your app credentials you can create a client via `client_credentials` grant_type with the `marketplace.billing` scope. This unique access_token will allow you to query any functions in `appStoreApi`. Client Credentials tokens to query app store endpoints will only work for apps that have completed the App Store on-boarding process.
|
168
|
-
|
169
|
-
```ruby
|
170
|
-
// => /post-purchase-url?subscriptionId=03bc74f2-1237-4477-b782-2dfb1a6d8b21
|
171
|
-
|
172
|
-
subscription_id = params[:subscriptionId]
|
173
|
-
|
174
|
-
xero_app_store_client ||= XeroRuby::ApiClient.new(credentials: {
|
175
|
-
client_id: ENV['CLIENT_ID'],
|
176
|
-
client_secret: ENV['CLIENT_SECRET'],
|
177
|
-
grant_type: 'client_credentials'
|
178
|
-
scopes: 'marketplace.billing openid profile email'
|
179
|
-
})
|
180
|
-
|
181
|
-
xero_app_store_client.get_client_credentials_token
|
182
|
-
|
183
|
-
@subscription = xero_app_store_client.app_store_api.get_subscription(subscription_id)
|
184
|
-
|
185
|
-
puts @subscription.to_attributes
|
186
|
-
{
|
187
|
-
:current_period_end => Thu, 02 Sep 2021 14:08:58 +0000,
|
188
|
-
:id => "03bc74f2-1237-4477-b782-2dfb1a6d8b21",
|
189
|
-
:organisation_id => "79e8b2e5-c63d-4dce-888f-e0f3e9eac647",
|
190
|
-
:plans => [
|
191
|
-
{
|
192
|
-
:id => "6abc26f3-9390-4194-8b25-ce8b9942fda9",
|
193
|
-
:name => "Small",
|
194
|
-
:status => "ACTIVE",
|
195
|
-
:subscription_items => [
|
196
|
-
{
|
197
|
-
:id => "834cff4c-b753-4de2-9e7a-3451e14fa17a",
|
198
|
-
:price => {
|
199
|
-
:amount => 0.1e0,
|
200
|
-
:currency => "NZD",
|
201
|
-
:id => "2310de92-c7c0-4bcb-b972-fb7612177bc7"
|
202
|
-
},
|
203
|
-
:product => {
|
204
|
-
:id => "9586421f-7325-4493-bac9-d93be06a6a38",
|
205
|
-
:name => "",
|
206
|
-
:type => "FIXED"
|
207
|
-
},
|
208
|
-
:start_date => Mon, 02 Aug 2021 14:08:58 +0000,
|
209
|
-
:test_mode => true
|
210
|
-
}
|
211
|
-
]
|
212
|
-
}
|
213
|
-
],
|
214
|
-
:start_date => Mon, 02 Aug 2021 14:08:58 +0000,
|
215
|
-
:status => "ACTIVE",
|
216
|
-
:test_mode => true
|
217
|
-
}
|
218
|
-
```
|
219
|
-
You should use this subscription data to provision user access/permissions to your application.
|
220
|
-
### App Store Subscription Webhooks
|
221
|
-
|
222
|
-
In additon to a subscription Id being passed through the URL, when a purchase or an upgrade takes place you will be notified via a webhook. You can then use the subscription Id in the webhook payload to query the AppStore endpoints and determine what plan the user purchased, upgraded, downgraded or cancelled.
|
223
|
-
|
224
|
-
Refer to Xero's documenation to learn more about setting up and receiving webhooks.
|
225
|
-
> https://developer.xero.com/documentation/guides/webhooks/overview/
|
226
|
-
|
227
|
-
## API Clients
|
228
|
-
You can access the different API sets and their available methods through the following:
|
229
|
-
|
230
|
-
```ruby
|
231
|
-
xero_client = XeroRuby::ApiClient.new(credentials: creds)
|
232
|
-
|
233
|
-
xero_client.accounting_api
|
234
|
-
xero_client.asset_api
|
235
|
-
xero_client.project_api
|
236
|
-
xero_client.files_api
|
237
|
-
xero_client.payroll_au_api
|
238
|
-
xero_client.payroll_nz_api
|
239
|
-
xero_client.payroll_uk_api
|
240
|
-
```
|
241
|
-
---
|
242
|
-
## Helper Methods
|
243
|
-
|
244
|
-
Once you have a valid Token Set in your datastore, the next time you want to call the Xero API simply initialize a new `xero_client` and refresh the token set.
|
245
|
-
|
246
|
-
```ruby
|
247
|
-
xero_client = XeroRuby::ApiClient.new(credentials: creds)
|
248
|
-
|
249
|
-
if xero_client.token_expired?
|
250
|
-
@token_set = xero_client.refresh_token_set(user.token_set)
|
251
|
-
else
|
252
|
-
@token_set = xero_client.set_token_set(user.token_set)
|
253
|
-
end
|
254
|
-
|
255
|
-
# example strategy
|
256
|
-
user.token_set = @token_set if !@token_set["error"]
|
257
|
-
user.xero_connections = xero_client.connections
|
258
|
-
user.active_tenant_id = xero_client.last_connection
|
259
|
-
user.save!
|
260
|
-
|
261
|
-
xero_client.accounting_api.get_invoices(xero_client.last_connection['tenantId']).invoices
|
262
|
-
```
|
263
|
-
|
264
|
-
This will set the access_token on the client and return the refreshed `token_set` that you need to save in your datastore to keep the connection alive until you or the user disconnect.
|
265
|
-
|
266
|
-
A full list of the SDK client's methods:
|
267
|
-
|
268
|
-
| method | description |
|
269
|
-
| --- | --- |
|
270
|
-
| xero_client.`authorization_url` | returns the authorize URL string to send a new user to for API authorization |
|
271
|
-
| xero_client.`get_token_set_from_callback`(params) | returns and generates a `token_set` from a temporary code for an `authorization_code` configured client only. Params are the url params. |
|
272
|
-
| xero_client.`get_client_credentials_token` | returns and generates a `token_set` for a `client_credentials` configured client only |
|
273
|
-
| xero_client.`refresh_token_set`(token_set) | returns a refreshed token_set |
|
274
|
-
| xero_client.`revoke_token`(token_set) | removes all a user's org connections and revokes the refresh_token |
|
275
|
-
| xero_client.`disconnect`(connection_id) | disconnects an org connection from a user's token permissions |
|
276
|
-
| xero_client.`connections` | returns an array of the user's currently connected Xero orgs |
|
277
|
-
| xero_client.`last_connection` | returns the `xero-tenant-id` of the most recently connected Xero org |
|
278
|
-
| xero_client.`set_token_set`(token_set) | returns a boolean and sets a token on the client - `token_set` containing an access_token & refresh_token |
|
279
|
-
| xero_client.`set_access_token`(access_token) | How you can set an `access_token` by itself |
|
280
|
-
| xero_client.`set_id_token`(id_token) | How you can set an `id_token` by itself |
|
281
|
-
| xero_client.`token_expired?` | returns a boolean if token_set['access_token'] is expired |
|
282
|
-
| xero_client.`token_set` | returns the token set if one is set on the client |
|
283
|
-
| xero_client.`access_token` | returns the `access_token` if one is set on the client |
|
284
|
-
| xero_client.`id_token` | returns the `id_token` if one is set on the client |
|
285
|
-
| xero_client.`decoded_access_token` | Decoded JWT exposing OAuth2.`0` meta details about the token |
|
286
|
-
| xero_client.`decoded_id_token` | Decoded JWT containing the user meta details that can be used to implement SSO or SSU to Lead |
|
287
|
-
---
|
288
|
-
## Usage Examples
|
289
|
-
### Accounting API
|
290
|
-
```ruby
|
291
|
-
require 'xero-ruby'
|
292
|
-
|
293
|
-
xero_client.refresh_token_set(user_token_set)
|
294
|
-
tenant_id = xero_client.last_connection
|
295
|
-
|
296
|
-
# Get Accounts
|
297
|
-
accounts = xero_client.accounting_api.get_accounts(tenant_id).accounts
|
298
|
-
|
299
|
-
# Create Invoice
|
300
|
-
invoices = { invoices: [{ type: XeroRuby::Accounting::Invoice::ACCREC, contact: { contact_id: contacts[0].contact_id }, line_items: [{ description: "Big Agency", quantity: BigDecimal("2.0"), unit_amount: BigDecimal("50.99"), account_code: "600", tax_type: XeroRuby::Accounting::TaxType::NONE }], date: "2019-03-11", due_date: "2018-12-10", reference: "Website Design", status: XeroRuby::Accounting::Invoice::DRAFT }]}
|
301
|
-
invoice = xero_client.accounting_api.create_invoices(tenant_id, invoices).invoices.first
|
302
|
-
|
303
|
-
# return data as a snake_case hash
|
304
|
-
puts invoices.to_attributes
|
305
|
-
=> {type: 'ACCREC', line_items: [...]}
|
306
|
-
|
307
|
-
puts invoices.to_hash(downcase: false)
|
308
|
-
=> {'Type': 'ACCREC', 'LineItems': [...]}
|
309
|
-
|
310
|
-
# Create History
|
311
|
-
payment = xero_client.accounting_api.get_payments(tenant_id).payments.first
|
312
|
-
history_records = { history_records: [{ details: "This payment now has some History!" }]}
|
313
|
-
payment_history = xero_client.accounting_api.create_payment_history(tenant_id, payment.payment_id, history_records)
|
314
|
-
|
315
|
-
# Create Attachment
|
316
|
-
account = xero_client.accounting_api.get_accounts(tenant_id).accounts.first
|
317
|
-
file_name = "an-account-filename.png"
|
318
|
-
opts = {
|
319
|
-
include_online: true
|
320
|
-
}
|
321
|
-
file = File.read(Rails.root.join('app/assets/images/xero-api.png'))
|
322
|
-
attachment = xero_client.accounting_api.create_account_attachment_by_file_name(tenant_id, @account.account_id, file_name, file, opts)
|
323
|
-
```
|
324
|
-
|
325
|
-
---
|
326
|
-
## SDK conventions
|
327
|
-
### BigDecimal
|
328
|
-
All monetary and fields and a couple quantity fields utilize BigDecimal
|
329
|
-
```ruby
|
330
|
-
puts invoice.unit_amount
|
331
|
-
=> 0.2099e2
|
332
|
-
|
333
|
-
puts invoice.unit_amount.class
|
334
|
-
=> BigDecimal
|
335
|
-
|
336
|
-
puts invoice.unit_amount.to_s("F")
|
337
|
-
=> "20.99"
|
338
|
-
|
339
|
-
# Rails method-number_to_currency
|
340
|
-
number_to_currency(invoice.unit_amount, :unit => "$")
|
341
|
-
```
|
342
|
-
|
343
|
-
### Querying & Filtering
|
344
|
-
Examples for `opts` (aka _options_) parameters that most endpoints support. If you have a complex filering/sorting/where usage that is not supported please [open an issue](https://github.com/XeroAPI/xero-ruby/issues).
|
345
|
-
```ruby
|
346
|
-
# Invoices
|
347
|
-
opts = {
|
348
|
-
page: 1,
|
349
|
-
where: {
|
350
|
-
type: ['=', XeroRuby::Accounting::Invoice::ACCREC],
|
351
|
-
fully_paid_on_date: (DateTime.now - 6.month)..DateTime.now,
|
352
|
-
amount_due: ['>=', 0],
|
353
|
-
reference: ['=', "Website Design"],
|
354
|
-
invoice_number: ['=', "INV-0001"],
|
355
|
-
contact_id: ['=', 'contact-uuid-xxxx-xxx-xxxxxxx'],
|
356
|
-
contact_number: ['=', "the-contact-number"],
|
357
|
-
date: (DateTime.now - 2.year)..DateTime.now
|
358
|
-
# ▲ you can pass a range ▼ or a date & operator
|
359
|
-
date: ['>=', DateTime.now - 2.year],
|
360
|
-
status: ['=', XeroRuby::Accounting::Invoice::PAID]
|
361
|
-
}
|
362
|
-
}
|
363
|
-
xero_client.accounting_api.get_invoices(tenant_id, opts).invoices
|
364
|
-
|
365
|
-
# Contacts
|
366
|
-
opts = {
|
367
|
-
if_modified_since: (DateTime.now - 1.weeks).to_s,
|
368
|
-
# ▼ ordering by strings needs PascalCase convention
|
369
|
-
order: 'UpdatedDateUtc DESC',
|
370
|
-
where: {
|
371
|
-
is_customer: ['==', true],
|
372
|
-
is_supplier: ['==', true],
|
373
|
-
name: ['StartsWith', 'Rick']
|
374
|
-
}
|
375
|
-
}
|
376
|
-
xero_client.accounting_api.get_contacts(tenant_id, opts).contacts
|
377
|
-
|
378
|
-
# for more complex chained filtering that requires a null check pass those in as a string
|
379
|
-
# see https://developer.xero.com/documentation/api/requests-and-responses for more
|
380
|
-
opts = {
|
381
|
-
where: {
|
382
|
-
email_address: '!=null&&EmailAddress.StartsWith("chris.knight@")'
|
383
|
-
}
|
384
|
-
}
|
385
|
-
|
386
|
-
# Bank Transactions
|
387
|
-
opts = {
|
388
|
-
if_modified_since: (DateTime.now - 1.year).to_s,
|
389
|
-
where: { type: ['==', XeroRuby::Accounting::BankTransaction::SPEND] },
|
390
|
-
order: 'UpdatedDateUtc DESC',
|
391
|
-
page: 2,
|
392
|
-
unitdp: 4 # (Unit Decimal Places)
|
393
|
-
}
|
394
|
-
xero_client.accounting_api.get_bank_transactions(tenant_id, opts).bank_transactions
|
395
|
-
|
396
|
-
# Bank Transfers
|
397
|
-
opts = {
|
398
|
-
if_modified_since: (DateTime.now - 1.month).to_s,
|
399
|
-
where: {
|
400
|
-
amount: [">=" , 999.99]
|
401
|
-
},
|
402
|
-
order: 'Amount ASC'
|
403
|
-
}
|
404
|
-
xero_client.accounting_api.get_bank_transfers(tenant_id, opts).bank_transfers
|
405
|
-
```
|
406
|
-
|
407
|
-
- Not all `opts` parameter combinations are available for all endpoints
|
408
|
-
|
409
|
-
- Some opts string values may need PascalCasing to match casing defined in our [core API docs](https://developer.xero.com/documentation/api/api-overview) like `opts = { order: 'UpdatedDateUtc DESC'}`
|
410
|
-
|
411
|
-
---
|
412
|
-
## Contributing
|
413
|
-
PRs, issues, and discussion are highly appreciated and encouraged. Note that the majority of this project is generated code based on [Xero's OpenAPI specs](https://github.com/XeroAPI/Xero-OpenAPI) - PR's will be evaluated and pre-merge will be incorporated into the root generation templates.
|
414
|
-
|
415
|
-
Please add tests for net new functionality and make existing test suite succeeds.
|
416
|
-
|
417
|
-
`$ rspec spec/`
|
418
|
-
### Versioning
|
419
|
-
We do our best to keep OS industry `semver` standards, but we can make mistakes! If something is not accurately reflected in a version's release notes please let the team know.
|
420
|
-
### Developing locally
|
421
|
-
To develop or test this gem locally against your project we find the following development pattern easiest
|
422
|
-
|
423
|
-
```bash
|
424
|
-
cd xero-ruby
|
425
|
-
gem build
|
426
|
-
mv xero-ruby-<vsn>.gem xero-ruby.gem
|
427
|
-
pwd
|
428
|
-
=> /Users/your.user/code/sdks/xero-ruby/
|
429
|
-
|
430
|
-
cd ..
|
431
|
-
cd xero-ruby-oauth2-app/
|
432
|
-
|
433
|
-
# xero-ruby-oauth2-app/Gemfile
|
434
|
-
gem 'xero-ruby', path: '/Users/your.user/code/sdks/xero-ruby/'
|
435
|
-
bundle install
|
436
|
-
```
|
437
|
-
|
438
|
-
## Participating in Xero’s developer community
|
439
|
-
|
440
|
-
This SDK is one of a number of SDK’s that the Xero Developer team builds and maintains. We are grateful for all the contributions that the community makes.
|
441
|
-
|
442
|
-
Here are a few things you should be aware of as a contributor:
|
443
|
-
* Xero has adopted the Contributor Covenant [Code of Conduct](https://github.com/XeroAPI/xero-ruby/blob/master/CODE_OF_CONDUCT.md), we expect all contributors in our community to adhere to it
|
444
|
-
* If you raise an issue then please make sure to fill out the github issue template, doing so helps us help you
|
445
|
-
* You’re welcome to raise PRs. As our SDKs are generated we may use your code in the core SDK build instead of merging your code
|
446
|
-
* We have a [contribution guide](https://github.com/XeroAPI/xero-ruby/blob/master/CONTRIBUTING.md) for you to follow when contributing to this SDK
|
447
|
-
* Curious about how we generate our SDK’s? Have a [read of our process](https://devblog.xero.com/building-sdks-for-the-future-b79ff726dfd6) and have a look at our [OpenAPISpec](https://github.com/XeroAPI/Xero-OpenAPI)
|
448
|
-
* This software is published under the [MIT License](https://github.com/XeroAPI/xero-ruby/blob/master/LICENSE)
|
449
|
-
|
450
|
-
For questions that aren’t related to SDKs please refer to our [developer support page](https://developer.xero.com/support/).
|
1
|
+
# xero-ruby
|
2
|
+
[![Gem Version](https://badge.fury.io/rb/xero-ruby.svg)](https://badge.fury.io/rb/xero-ruby)
|
3
|
+
[![Github forks](https://img.shields.io/github/forks/XeroAPI/xero-ruby.svg)](https://github.com/XeroAPI/xero-ruby/network)
|
4
|
+
[![Github stars](https://img.shields.io/github/stars/XeroAPI/xero-ruby.svg)](https://github.com/XeroAPI/xero-ruby/stargazers)
|
5
|
+
![total downloads](https://ruby-gem-downloads-badge.herokuapp.com/xero-ruby?type=total)
|
6
|
+
|
7
|
+
The xero-ruby SDK makes it easy for developers to access Xero's APIs in their Ruby code, and build robust applications and software using small business & general ledger accounting data.
|
8
|
+
# Table of Contents
|
9
|
+
- [API Client documentation](#api-client-documentation)
|
10
|
+
- [Sample Applications](#sample-applications)
|
11
|
+
- [Xero Account Requirements](#xero-account-requirements)
|
12
|
+
- [Installation](#installation)
|
13
|
+
- [Configuration](#configuration)
|
14
|
+
- [Authentication](#authentication)
|
15
|
+
- [Custom Connections](#custom-connections)
|
16
|
+
- [App Store Subscriptions](#app-store-subscriptions)
|
17
|
+
- [API Clients](#api-clients)
|
18
|
+
- [Helper Methods](#helper-methods)
|
19
|
+
- [Usage Examples](#usage-examples)
|
20
|
+
- [SDK conventions](#sdk-conventions)
|
21
|
+
- [Contributing](#contributing)
|
22
|
+
|
23
|
+
<hr>
|
24
|
+
|
25
|
+
## API Client documentation
|
26
|
+
This SDK supports full method coverage for the following Xero API sets:
|
27
|
+
|
28
|
+
| API Set | Description |
|
29
|
+
| --- | --- |
|
30
|
+
| [`Accounting`](https://xeroapi.github.io/xero-ruby/accounting/index.html) | The Accounting API exposes accounting functions of the main Xero application *(most commonly used)*
|
31
|
+
| [Assets](https://xeroapi.github.io/xero-ruby/assets/index.html) | The Assets API exposes fixed asset related functions of the Xero Accounting application |
|
32
|
+
| [Files](https://xeroapi.github.io/xero-ruby/files/index.html) | The Files API provides access to the files, folders, and the association of files within a Xero organisation |
|
33
|
+
| [Projects](https://xeroapi.github.io/xero-ruby/projects/index.html) | Xero Projects allows businesses to track time and costs on projects/jobs and report on profitability |
|
34
|
+
| [Payroll (AU)](https://xeroapi.github.io/xero-ruby/payroll_au/index.html) | The (AU) Payroll API exposes payroll related functions of the payroll Xero application |
|
35
|
+
| [Payroll (UK)](https://xeroapi.github.io/xero-ruby/payroll_uk/index.html) | The (UK) Payroll API exposes payroll related functions of the payroll Xero application |
|
36
|
+
| [Payroll (NZ)](https://xeroapi.github.io/xero-ruby/payroll_nz/index.html) | The (NZ) Payroll API exposes payroll related functions of the payroll Xero application |
|
37
|
+
| [`Ruby Models`](/docs/) | Directory of markdown files, describing the object models for all supported API sets |
|
38
|
+
|
39
|
+
<img src="https://i.imgur.com/0MsvkGB.png" alt="drawing" width="350"/>
|
40
|
+
|
41
|
+
<hr>
|
42
|
+
|
43
|
+
## Sample Applications
|
44
|
+
Sample apps can get you started quickly with simple auth flows to advanced usage.
|
45
|
+
| Sample App | Description | Screenshot |
|
46
|
+
| --- | --- | --- |
|
47
|
+
| [`xero-ruby-oauth2-starter`](https://github.com/XeroAPI/Xero-ruby-oauth2-starter) | A Sinatra application showing the basic getting started code to work with the sdk | <img src="https://i.imgur.com/9H4F98M.png" alt="drawing" width="300"/>
|
48
|
+
| [`xero-ruby-oauth2-app`](https://github.com/XeroAPI/Xero-ruby-oauth2-app) | Complete rails app with +95% of api set examples, complex filters, pagination, and user/token management in postgres | <img src="https://i.imgur.com/XsAp9Ww.png" alt="drawing" width="500"/>
|
49
|
+
| [`xero-ruby-custom-connections-starter`](https://github.com/XeroAPI/xero-ruby-custom-connections-starter) | A getting started Sinatra app showing Custom Connections - a Xero [premium option](https://developer.xero.com/documentation/oauth2/custom-connections) for building M2M integrations to a single org | <img src="https://i.imgur.com/YEkScui.png" alt="drawing" width="300"/>
|
50
|
+
| [`xero-ruby-sso-form`](https://github.com/XeroAPI/xero-ruby-sso-form) | A basic Sinatra app showing how to implement SSU to Lead | <img src="https://i.imgur.com/Nf95GVd.png" alt="drawing" width="300"/>
|
51
|
+
|
52
|
+
<hr>
|
53
|
+
|
54
|
+
## Xero Account Requirements
|
55
|
+
- Create a [free Xero user account](https://www.xero.com/us/signup/api/)
|
56
|
+
- Login to your Xero developer [dashboard](https://developer.xero.com/app/manage) and create an API application
|
57
|
+
- Copy the credentials from your API app and store them using a secure ENV variable strategy
|
58
|
+
- Decide the [neccesary scopes](https://developer.xero.com/documentation/oauth2/scopes) for your app's functionality
|
59
|
+
|
60
|
+
# Installation
|
61
|
+
To install this gem to your project
|
62
|
+
```
|
63
|
+
gem install 'xero-ruby'
|
64
|
+
```
|
65
|
+
Or add to your gemfile and run `bundle install`
|
66
|
+
```
|
67
|
+
gem 'xero-ruby'
|
68
|
+
```
|
69
|
+
|
70
|
+
---
|
71
|
+
## Configuration
|
72
|
+
```ruby
|
73
|
+
require 'xero-ruby'
|
74
|
+
|
75
|
+
creds = {
|
76
|
+
client_id: ENV['CLIENT_ID'],
|
77
|
+
client_secret: ENV['CLIENT_SECRET'],
|
78
|
+
redirect_uri: ENV['REDIRECT_URI'],
|
79
|
+
scopes: ENV['SCOPES'],
|
80
|
+
state: "Optional value to pass through auth flow"
|
81
|
+
}
|
82
|
+
xero_client ||= XeroRuby::ApiClient.new(credentials: creds)
|
83
|
+
```
|
84
|
+
|
85
|
+
For additional [config](/lib/xero-ruby/configuration.rb) options you can pass an optional named parameter `config: {}`
|
86
|
+
```ruby
|
87
|
+
config = { timeout: 30, debugging: true }
|
88
|
+
@xero_client ||= XeroRuby::ApiClient.new(credentials: creds, config: config)
|
89
|
+
```
|
90
|
+
---
|
91
|
+
## Authentication
|
92
|
+
All API requests go through Xero's OAuth2.0 gateway and require a valid `access_token` to be set on the `xero_client`, which autmoatically appends the `access_token` [JWT](https://jwt.io/) to the header of each request.
|
93
|
+
|
94
|
+
If you are making an API call for the first time:
|
95
|
+
|
96
|
+
1. Send the user to the Xero authorization URL
|
97
|
+
```ruby
|
98
|
+
@authorization_url = xero_client.authorization_url
|
99
|
+
redirect_to @authorization_url
|
100
|
+
```
|
101
|
+
2. The user will authorize your API application and be sent to your `redirect_uri`
|
102
|
+
```ruby
|
103
|
+
ENV['REDIRECT_URI']
|
104
|
+
=> /xero-callback?code=xyz123
|
105
|
+
```
|
106
|
+
3. You exchange a temporary `authorization_code` for a valid `token_set`
|
107
|
+
```ruby
|
108
|
+
@token_set = @xero_client.get_token_set_from_callback(params)
|
109
|
+
# save the @token_set
|
110
|
+
```
|
111
|
+
|
112
|
+
It is reccomended that you store this token set JSON in a datastore in relation to the user who has authenticated the Xero API connection. Each time you want to call the Xero API, you will need to access the previously generated token set, initialize it on the SDK `xero_client`, and refresh the `access_token` prior to making API calls.
|
113
|
+
|
114
|
+
### Token Set
|
115
|
+
| key | value | description |
|
116
|
+
| --- | --- | --- |
|
117
|
+
| id_token: | "xxx.yyy.zzz" | [OpenID Connect](https://openid.net/connect/) token returned if `openid profile email` scopes accepted |
|
118
|
+
| access_token: | "xxx.yyy.zzz" | [Bearer token](https://oauth.net/2/jwt/) with a 30 minute expiration required for all API calls |
|
119
|
+
| expires_in: | 1800 | Time in seconds till the token expires - 1800s is 30m |
|
120
|
+
| refresh_token: | "XXXXXXX" | Alphanumeric string used to obtain a new Token Set w/ a fresh access_token - 60 day expiry |
|
121
|
+
| scope: | "email profile openid accounting.transactions offline_access" | The Xero permissions that are embedded in the `access_token` |
|
122
|
+
|
123
|
+
Example Token Set JSON:
|
124
|
+
```
|
125
|
+
{
|
126
|
+
"id_token": "xxx.yyy.zz",
|
127
|
+
"access_token": "xxx.yyy.zzz",
|
128
|
+
"expires_in": 1800,
|
129
|
+
"token_type": "Bearer",
|
130
|
+
"refresh_token": "xxxxxxxxx",
|
131
|
+
"scope": "email profile openid accounting.transactions offline_access"
|
132
|
+
}
|
133
|
+
```
|
134
|
+
---
|
135
|
+
## Custom Connections
|
136
|
+
|
137
|
+
Custom Connections are a Xero [premium option](https://developer.xero.com/documentation/oauth2/custom-connections) used for building M2M integrations to a single organisation. A custom connection uses OAuth2.0's [`client_credentials`](https://www.oauth.com/oauth2-servers/access-tokens/client-credentials/) grant which eliminates the step of exchanging the temporary code for a token set.
|
138
|
+
|
139
|
+
To use this SDK with a Custom Connections:
|
140
|
+
```ruby
|
141
|
+
CREDENTIALS = {
|
142
|
+
client_id: ENV['CLIENT_ID'],
|
143
|
+
client_secret: ENV['CLIENT_SECRET'],
|
144
|
+
grant_type: 'client_credentials'
|
145
|
+
}
|
146
|
+
|
147
|
+
xero_client = XeroRuby::ApiClient.new(credentials: CREDENTIALS)
|
148
|
+
|
149
|
+
@token_set = xero_client.get_client_credentials_token
|
150
|
+
# save @token_set
|
151
|
+
|
152
|
+
@invoices = xero_client.accounting_api.get_invoices('').invoices
|
153
|
+
```
|
154
|
+
|
155
|
+
Because Custom Connections are only valid for a single organisation you don't need to pass the `xero-tenant-id` as the first parameter to every method.
|
156
|
+
|
157
|
+
However - due to the nature of how our SDK's are generated from our OpenAPI spec, the parameter remains which requires you to pass an empty string for now to use the SDK with a Custom Connection.
|
158
|
+
|
159
|
+
---
|
160
|
+
|
161
|
+
## App Store Subscriptions
|
162
|
+
|
163
|
+
If you are implementing subscriptions to participate in Xero's App Store you will need to setup [App Store subscriptions](https://developer.xero.com/documentation/guides/how-to-guides/xero-app-store-referrals/) endpoints.
|
164
|
+
|
165
|
+
When a plan is successfully purchased, the user is redirected back to the URL specified in the setup process. The Xero App Store appends the subscription Id to this URL so you can immediately determine what plan the user has subscribed to through the subscriptions API.
|
166
|
+
|
167
|
+
With your app credentials you can create a client via `client_credentials` grant_type with the `marketplace.billing` scope. This unique access_token will allow you to query any functions in `appStoreApi`. Client Credentials tokens to query app store endpoints will only work for apps that have completed the App Store on-boarding process.
|
168
|
+
|
169
|
+
```ruby
|
170
|
+
// => /post-purchase-url?subscriptionId=03bc74f2-1237-4477-b782-2dfb1a6d8b21
|
171
|
+
|
172
|
+
subscription_id = params[:subscriptionId]
|
173
|
+
|
174
|
+
xero_app_store_client ||= XeroRuby::ApiClient.new(credentials: {
|
175
|
+
client_id: ENV['CLIENT_ID'],
|
176
|
+
client_secret: ENV['CLIENT_SECRET'],
|
177
|
+
grant_type: 'client_credentials'
|
178
|
+
scopes: 'marketplace.billing openid profile email'
|
179
|
+
})
|
180
|
+
|
181
|
+
xero_app_store_client.get_client_credentials_token
|
182
|
+
|
183
|
+
@subscription = xero_app_store_client.app_store_api.get_subscription(subscription_id)
|
184
|
+
|
185
|
+
puts @subscription.to_attributes
|
186
|
+
{
|
187
|
+
:current_period_end => Thu, 02 Sep 2021 14:08:58 +0000,
|
188
|
+
:id => "03bc74f2-1237-4477-b782-2dfb1a6d8b21",
|
189
|
+
:organisation_id => "79e8b2e5-c63d-4dce-888f-e0f3e9eac647",
|
190
|
+
:plans => [
|
191
|
+
{
|
192
|
+
:id => "6abc26f3-9390-4194-8b25-ce8b9942fda9",
|
193
|
+
:name => "Small",
|
194
|
+
:status => "ACTIVE",
|
195
|
+
:subscription_items => [
|
196
|
+
{
|
197
|
+
:id => "834cff4c-b753-4de2-9e7a-3451e14fa17a",
|
198
|
+
:price => {
|
199
|
+
:amount => 0.1e0,
|
200
|
+
:currency => "NZD",
|
201
|
+
:id => "2310de92-c7c0-4bcb-b972-fb7612177bc7"
|
202
|
+
},
|
203
|
+
:product => {
|
204
|
+
:id => "9586421f-7325-4493-bac9-d93be06a6a38",
|
205
|
+
:name => "",
|
206
|
+
:type => "FIXED"
|
207
|
+
},
|
208
|
+
:start_date => Mon, 02 Aug 2021 14:08:58 +0000,
|
209
|
+
:test_mode => true
|
210
|
+
}
|
211
|
+
]
|
212
|
+
}
|
213
|
+
],
|
214
|
+
:start_date => Mon, 02 Aug 2021 14:08:58 +0000,
|
215
|
+
:status => "ACTIVE",
|
216
|
+
:test_mode => true
|
217
|
+
}
|
218
|
+
```
|
219
|
+
You should use this subscription data to provision user access/permissions to your application.
|
220
|
+
### App Store Subscription Webhooks
|
221
|
+
|
222
|
+
In additon to a subscription Id being passed through the URL, when a purchase or an upgrade takes place you will be notified via a webhook. You can then use the subscription Id in the webhook payload to query the AppStore endpoints and determine what plan the user purchased, upgraded, downgraded or cancelled.
|
223
|
+
|
224
|
+
Refer to Xero's documenation to learn more about setting up and receiving webhooks.
|
225
|
+
> https://developer.xero.com/documentation/guides/webhooks/overview/
|
226
|
+
|
227
|
+
## API Clients
|
228
|
+
You can access the different API sets and their available methods through the following:
|
229
|
+
|
230
|
+
```ruby
|
231
|
+
xero_client = XeroRuby::ApiClient.new(credentials: creds)
|
232
|
+
|
233
|
+
xero_client.accounting_api
|
234
|
+
xero_client.asset_api
|
235
|
+
xero_client.project_api
|
236
|
+
xero_client.files_api
|
237
|
+
xero_client.payroll_au_api
|
238
|
+
xero_client.payroll_nz_api
|
239
|
+
xero_client.payroll_uk_api
|
240
|
+
```
|
241
|
+
---
|
242
|
+
## Helper Methods
|
243
|
+
|
244
|
+
Once you have a valid Token Set in your datastore, the next time you want to call the Xero API simply initialize a new `xero_client` and refresh the token set.
|
245
|
+
|
246
|
+
```ruby
|
247
|
+
xero_client = XeroRuby::ApiClient.new(credentials: creds)
|
248
|
+
|
249
|
+
if xero_client.token_expired?
|
250
|
+
@token_set = xero_client.refresh_token_set(user.token_set)
|
251
|
+
else
|
252
|
+
@token_set = xero_client.set_token_set(user.token_set)
|
253
|
+
end
|
254
|
+
|
255
|
+
# example strategy
|
256
|
+
user.token_set = @token_set if !@token_set["error"]
|
257
|
+
user.xero_connections = xero_client.connections
|
258
|
+
user.active_tenant_id = xero_client.last_connection
|
259
|
+
user.save!
|
260
|
+
|
261
|
+
xero_client.accounting_api.get_invoices(xero_client.last_connection['tenantId']).invoices
|
262
|
+
```
|
263
|
+
|
264
|
+
This will set the access_token on the client and return the refreshed `token_set` that you need to save in your datastore to keep the connection alive until you or the user disconnect.
|
265
|
+
|
266
|
+
A full list of the SDK client's methods:
|
267
|
+
|
268
|
+
| method | description |
|
269
|
+
| --- | --- |
|
270
|
+
| xero_client.`authorization_url` | returns the authorize URL string to send a new user to for API authorization |
|
271
|
+
| xero_client.`get_token_set_from_callback`(params) | returns and generates a `token_set` from a temporary code for an `authorization_code` configured client only. Params are the url params. |
|
272
|
+
| xero_client.`get_client_credentials_token` | returns and generates a `token_set` for a `client_credentials` configured client only |
|
273
|
+
| xero_client.`refresh_token_set`(token_set) | returns a refreshed token_set |
|
274
|
+
| xero_client.`revoke_token`(token_set) | removes all a user's org connections and revokes the refresh_token |
|
275
|
+
| xero_client.`disconnect`(connection_id) | disconnects an org connection from a user's token permissions |
|
276
|
+
| xero_client.`connections` | returns an array of the user's currently connected Xero orgs |
|
277
|
+
| xero_client.`last_connection` | returns the `xero-tenant-id` of the most recently connected Xero org |
|
278
|
+
| xero_client.`set_token_set`(token_set) | returns a boolean and sets a token on the client - `token_set` containing an access_token & refresh_token |
|
279
|
+
| xero_client.`set_access_token`(access_token) | How you can set an `access_token` by itself |
|
280
|
+
| xero_client.`set_id_token`(id_token) | How you can set an `id_token` by itself |
|
281
|
+
| xero_client.`token_expired?` | returns a boolean if token_set['access_token'] is expired |
|
282
|
+
| xero_client.`token_set` | returns the token set if one is set on the client |
|
283
|
+
| xero_client.`access_token` | returns the `access_token` if one is set on the client |
|
284
|
+
| xero_client.`id_token` | returns the `id_token` if one is set on the client |
|
285
|
+
| xero_client.`decoded_access_token` | Decoded JWT exposing OAuth2.`0` meta details about the token |
|
286
|
+
| xero_client.`decoded_id_token` | Decoded JWT containing the user meta details that can be used to implement SSO or SSU to Lead |
|
287
|
+
---
|
288
|
+
## Usage Examples
|
289
|
+
### Accounting API
|
290
|
+
```ruby
|
291
|
+
require 'xero-ruby'
|
292
|
+
|
293
|
+
xero_client.refresh_token_set(user_token_set)
|
294
|
+
tenant_id = xero_client.last_connection
|
295
|
+
|
296
|
+
# Get Accounts
|
297
|
+
accounts = xero_client.accounting_api.get_accounts(tenant_id).accounts
|
298
|
+
|
299
|
+
# Create Invoice
|
300
|
+
invoices = { invoices: [{ type: XeroRuby::Accounting::Invoice::ACCREC, contact: { contact_id: contacts[0].contact_id }, line_items: [{ description: "Big Agency", quantity: BigDecimal("2.0"), unit_amount: BigDecimal("50.99"), account_code: "600", tax_type: XeroRuby::Accounting::TaxType::NONE }], date: "2019-03-11", due_date: "2018-12-10", reference: "Website Design", status: XeroRuby::Accounting::Invoice::DRAFT }]}
|
301
|
+
invoice = xero_client.accounting_api.create_invoices(tenant_id, invoices).invoices.first
|
302
|
+
|
303
|
+
# return data as a snake_case hash
|
304
|
+
puts invoices.to_attributes
|
305
|
+
=> {type: 'ACCREC', line_items: [...]}
|
306
|
+
|
307
|
+
puts invoices.to_hash(downcase: false)
|
308
|
+
=> {'Type': 'ACCREC', 'LineItems': [...]}
|
309
|
+
|
310
|
+
# Create History
|
311
|
+
payment = xero_client.accounting_api.get_payments(tenant_id).payments.first
|
312
|
+
history_records = { history_records: [{ details: "This payment now has some History!" }]}
|
313
|
+
payment_history = xero_client.accounting_api.create_payment_history(tenant_id, payment.payment_id, history_records)
|
314
|
+
|
315
|
+
# Create Attachment
|
316
|
+
account = xero_client.accounting_api.get_accounts(tenant_id).accounts.first
|
317
|
+
file_name = "an-account-filename.png"
|
318
|
+
opts = {
|
319
|
+
include_online: true
|
320
|
+
}
|
321
|
+
file = File.read(Rails.root.join('app/assets/images/xero-api.png'))
|
322
|
+
attachment = xero_client.accounting_api.create_account_attachment_by_file_name(tenant_id, @account.account_id, file_name, file, opts)
|
323
|
+
```
|
324
|
+
|
325
|
+
---
|
326
|
+
## SDK conventions
|
327
|
+
### BigDecimal
|
328
|
+
All monetary and fields and a couple quantity fields utilize BigDecimal
|
329
|
+
```ruby
|
330
|
+
puts invoice.unit_amount
|
331
|
+
=> 0.2099e2
|
332
|
+
|
333
|
+
puts invoice.unit_amount.class
|
334
|
+
=> BigDecimal
|
335
|
+
|
336
|
+
puts invoice.unit_amount.to_s("F")
|
337
|
+
=> "20.99"
|
338
|
+
|
339
|
+
# Rails method-number_to_currency
|
340
|
+
number_to_currency(invoice.unit_amount, :unit => "$")
|
341
|
+
```
|
342
|
+
|
343
|
+
### Querying & Filtering
|
344
|
+
Examples for `opts` (aka _options_) parameters that most endpoints support. If you have a complex filering/sorting/where usage that is not supported please [open an issue](https://github.com/XeroAPI/xero-ruby/issues).
|
345
|
+
```ruby
|
346
|
+
# Invoices
|
347
|
+
opts = {
|
348
|
+
page: 1,
|
349
|
+
where: {
|
350
|
+
type: ['=', XeroRuby::Accounting::Invoice::ACCREC],
|
351
|
+
fully_paid_on_date: (DateTime.now - 6.month)..DateTime.now,
|
352
|
+
amount_due: ['>=', 0],
|
353
|
+
reference: ['=', "Website Design"],
|
354
|
+
invoice_number: ['=', "INV-0001"],
|
355
|
+
contact_id: ['=', 'contact-uuid-xxxx-xxx-xxxxxxx'],
|
356
|
+
contact_number: ['=', "the-contact-number"],
|
357
|
+
date: (DateTime.now - 2.year)..DateTime.now
|
358
|
+
# ▲ you can pass a range ▼ or a date & operator
|
359
|
+
date: ['>=', DateTime.now - 2.year],
|
360
|
+
status: ['=', XeroRuby::Accounting::Invoice::PAID]
|
361
|
+
}
|
362
|
+
}
|
363
|
+
xero_client.accounting_api.get_invoices(tenant_id, opts).invoices
|
364
|
+
|
365
|
+
# Contacts
|
366
|
+
opts = {
|
367
|
+
if_modified_since: (DateTime.now - 1.weeks).to_s,
|
368
|
+
# ▼ ordering by strings needs PascalCase convention
|
369
|
+
order: 'UpdatedDateUtc DESC',
|
370
|
+
where: {
|
371
|
+
is_customer: ['==', true],
|
372
|
+
is_supplier: ['==', true],
|
373
|
+
name: ['StartsWith', 'Rick']
|
374
|
+
}
|
375
|
+
}
|
376
|
+
xero_client.accounting_api.get_contacts(tenant_id, opts).contacts
|
377
|
+
|
378
|
+
# for more complex chained filtering that requires a null check pass those in as a string
|
379
|
+
# see https://developer.xero.com/documentation/api/requests-and-responses for more
|
380
|
+
opts = {
|
381
|
+
where: {
|
382
|
+
email_address: '!=null&&EmailAddress.StartsWith("chris.knight@")'
|
383
|
+
}
|
384
|
+
}
|
385
|
+
|
386
|
+
# Bank Transactions
|
387
|
+
opts = {
|
388
|
+
if_modified_since: (DateTime.now - 1.year).to_s,
|
389
|
+
where: { type: ['==', XeroRuby::Accounting::BankTransaction::SPEND] },
|
390
|
+
order: 'UpdatedDateUtc DESC',
|
391
|
+
page: 2,
|
392
|
+
unitdp: 4 # (Unit Decimal Places)
|
393
|
+
}
|
394
|
+
xero_client.accounting_api.get_bank_transactions(tenant_id, opts).bank_transactions
|
395
|
+
|
396
|
+
# Bank Transfers
|
397
|
+
opts = {
|
398
|
+
if_modified_since: (DateTime.now - 1.month).to_s,
|
399
|
+
where: {
|
400
|
+
amount: [">=" , 999.99]
|
401
|
+
},
|
402
|
+
order: 'Amount ASC'
|
403
|
+
}
|
404
|
+
xero_client.accounting_api.get_bank_transfers(tenant_id, opts).bank_transfers
|
405
|
+
```
|
406
|
+
|
407
|
+
- Not all `opts` parameter combinations are available for all endpoints
|
408
|
+
|
409
|
+
- Some opts string values may need PascalCasing to match casing defined in our [core API docs](https://developer.xero.com/documentation/api/api-overview) like `opts = { order: 'UpdatedDateUtc DESC'}`
|
410
|
+
|
411
|
+
---
|
412
|
+
## Contributing
|
413
|
+
PRs, issues, and discussion are highly appreciated and encouraged. Note that the majority of this project is generated code based on [Xero's OpenAPI specs](https://github.com/XeroAPI/Xero-OpenAPI) - PR's will be evaluated and pre-merge will be incorporated into the root generation templates.
|
414
|
+
|
415
|
+
Please add tests for net new functionality and make existing test suite succeeds.
|
416
|
+
|
417
|
+
`$ rspec spec/`
|
418
|
+
### Versioning
|
419
|
+
We do our best to keep OS industry `semver` standards, but we can make mistakes! If something is not accurately reflected in a version's release notes please let the team know.
|
420
|
+
### Developing locally
|
421
|
+
To develop or test this gem locally against your project we find the following development pattern easiest
|
422
|
+
|
423
|
+
```bash
|
424
|
+
cd xero-ruby
|
425
|
+
gem build
|
426
|
+
mv xero-ruby-<vsn>.gem xero-ruby.gem
|
427
|
+
pwd
|
428
|
+
=> /Users/your.user/code/sdks/xero-ruby/
|
429
|
+
|
430
|
+
cd ..
|
431
|
+
cd xero-ruby-oauth2-app/
|
432
|
+
|
433
|
+
# xero-ruby-oauth2-app/Gemfile
|
434
|
+
gem 'xero-ruby', path: '/Users/your.user/code/sdks/xero-ruby/'
|
435
|
+
bundle install
|
436
|
+
```
|
437
|
+
|
438
|
+
## Participating in Xero’s developer community
|
439
|
+
|
440
|
+
This SDK is one of a number of SDK’s that the Xero Developer team builds and maintains. We are grateful for all the contributions that the community makes.
|
441
|
+
|
442
|
+
Here are a few things you should be aware of as a contributor:
|
443
|
+
* Xero has adopted the Contributor Covenant [Code of Conduct](https://github.com/XeroAPI/xero-ruby/blob/master/CODE_OF_CONDUCT.md), we expect all contributors in our community to adhere to it
|
444
|
+
* If you raise an issue then please make sure to fill out the github issue template, doing so helps us help you
|
445
|
+
* You’re welcome to raise PRs. As our SDKs are generated we may use your code in the core SDK build instead of merging your code
|
446
|
+
* We have a [contribution guide](https://github.com/XeroAPI/xero-ruby/blob/master/CONTRIBUTING.md) for you to follow when contributing to this SDK
|
447
|
+
* Curious about how we generate our SDK’s? Have a [read of our process](https://devblog.xero.com/building-sdks-for-the-future-b79ff726dfd6) and have a look at our [OpenAPISpec](https://github.com/XeroAPI/Xero-OpenAPI)
|
448
|
+
* This software is published under the [MIT License](https://github.com/XeroAPI/xero-ruby/blob/master/LICENSE)
|
449
|
+
|
450
|
+
For questions that aren’t related to SDKs please refer to our [developer support page](https://developer.xero.com/support/).
|