xero-ruby 2.4.1 → 3.2.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 +240 -189
- data/lib/xero-ruby.rb +10 -4
- data/lib/xero-ruby/api/accounting_api.rb +1308 -920
- data/lib/xero-ruby/api/asset_api.rb +15 -14
- data/lib/xero-ruby/api/files_api.rb +204 -85
- data/lib/xero-ruby/api/payroll_au_api.rb +121 -93
- data/lib/xero-ruby/api/payroll_nz_api.rb +307 -240
- data/lib/xero-ruby/api/payroll_uk_api.rb +317 -254
- data/lib/xero-ruby/api/project_api.rb +71 -59
- data/lib/xero-ruby/api_client.rb +182 -128
- data/lib/xero-ruby/api_error.rb +4 -4
- data/lib/xero-ruby/configuration.rb +17 -5
- data/lib/xero-ruby/models/accounting/account.rb +25 -12
- data/lib/xero-ruby/models/accounting/account_type.rb +1 -2
- data/lib/xero-ruby/models/accounting/accounts.rb +25 -11
- data/lib/xero-ruby/models/accounting/accounts_payable.rb +25 -11
- data/lib/xero-ruby/models/accounting/accounts_receivable.rb +25 -11
- data/lib/xero-ruby/models/accounting/action.rb +25 -11
- data/lib/xero-ruby/models/accounting/actions.rb +25 -11
- data/lib/xero-ruby/models/accounting/address.rb +27 -14
- data/lib/xero-ruby/models/accounting/address_for_organisation.rb +484 -0
- data/lib/xero-ruby/models/accounting/allocation.rb +25 -11
- data/lib/xero-ruby/models/accounting/allocations.rb +25 -11
- data/lib/xero-ruby/models/accounting/attachment.rb +25 -11
- data/lib/xero-ruby/models/accounting/attachments.rb +25 -11
- data/lib/xero-ruby/models/accounting/balance_details.rb +25 -11
- data/lib/xero-ruby/models/accounting/balances.rb +25 -11
- data/lib/xero-ruby/models/accounting/bank_transaction.rb +25 -11
- data/lib/xero-ruby/models/accounting/bank_transactions.rb +25 -11
- data/lib/xero-ruby/models/accounting/bank_transfer.rb +25 -11
- data/lib/xero-ruby/models/accounting/bank_transfers.rb +25 -11
- data/lib/xero-ruby/models/accounting/batch_payment.rb +41 -15
- data/lib/xero-ruby/models/accounting/batch_payment_details.rb +25 -11
- data/lib/xero-ruby/models/accounting/batch_payments.rb +25 -11
- data/lib/xero-ruby/models/accounting/bill.rb +25 -11
- data/lib/xero-ruby/models/accounting/branding_theme.rb +25 -11
- data/lib/xero-ruby/models/accounting/branding_themes.rb +25 -11
- data/lib/xero-ruby/models/accounting/budget.rb +327 -0
- data/lib/xero-ruby/models/accounting/budget_balance.rb +267 -0
- data/lib/xero-ruby/models/accounting/budget_line.rb +244 -0
- data/lib/xero-ruby/models/{files/file_response204.rb → accounting/budgets.rb} +40 -24
- data/lib/xero-ruby/models/accounting/cis_org_setting.rb +26 -12
- data/lib/xero-ruby/models/accounting/cis_org_settings.rb +224 -0
- data/lib/xero-ruby/models/accounting/cis_setting.rb +26 -12
- data/lib/xero-ruby/models/accounting/cis_settings.rb +25 -11
- data/lib/xero-ruby/models/accounting/contact.rb +25 -11
- data/lib/xero-ruby/models/accounting/contact_group.rb +25 -11
- data/lib/xero-ruby/models/accounting/contact_groups.rb +25 -11
- data/lib/xero-ruby/models/accounting/contact_person.rb +25 -11
- data/lib/xero-ruby/models/accounting/contacts.rb +25 -11
- data/lib/xero-ruby/models/accounting/conversion_balances.rb +25 -11
- data/lib/xero-ruby/models/accounting/conversion_date.rb +25 -11
- data/lib/xero-ruby/models/accounting/country_code.rb +1 -2
- data/lib/xero-ruby/models/accounting/credit_note.rb +62 -16
- data/lib/xero-ruby/models/accounting/credit_notes.rb +25 -11
- data/lib/xero-ruby/models/accounting/currencies.rb +25 -11
- data/lib/xero-ruby/models/accounting/currency.rb +25 -11
- data/lib/xero-ruby/models/accounting/currency_code.rb +1 -2
- data/lib/xero-ruby/models/accounting/element.rb +25 -11
- data/lib/xero-ruby/models/accounting/employee.rb +25 -11
- data/lib/xero-ruby/models/accounting/employees.rb +25 -11
- data/lib/xero-ruby/models/accounting/error.rb +25 -11
- data/lib/xero-ruby/models/accounting/expense_claim.rb +25 -11
- data/lib/xero-ruby/models/accounting/expense_claims.rb +25 -11
- data/lib/xero-ruby/models/accounting/external_link.rb +25 -11
- data/lib/xero-ruby/models/accounting/history_record.rb +25 -11
- data/lib/xero-ruby/models/accounting/history_records.rb +25 -11
- data/lib/xero-ruby/models/accounting/import_summary.rb +25 -11
- data/lib/xero-ruby/models/accounting/import_summary_accounts.rb +33 -19
- data/lib/xero-ruby/models/accounting/import_summary_object.rb +25 -11
- data/lib/xero-ruby/models/accounting/import_summary_organisation.rb +25 -11
- data/lib/xero-ruby/models/accounting/invoice.rb +37 -28
- data/lib/xero-ruby/models/accounting/invoice_reminder.rb +25 -11
- data/lib/xero-ruby/models/accounting/invoice_reminders.rb +25 -11
- data/lib/xero-ruby/models/accounting/invoices.rb +25 -11
- data/lib/xero-ruby/models/accounting/item.rb +25 -11
- data/lib/xero-ruby/models/accounting/items.rb +25 -11
- data/lib/xero-ruby/models/accounting/journal.rb +25 -11
- data/lib/xero-ruby/models/accounting/journal_line.rb +25 -11
- data/lib/xero-ruby/models/accounting/journals.rb +25 -11
- data/lib/xero-ruby/models/accounting/line_amount_types.rb +1 -2
- data/lib/xero-ruby/models/accounting/line_item.rb +36 -12
- data/lib/xero-ruby/models/accounting/line_item_tracking.rb +25 -11
- data/lib/xero-ruby/models/accounting/linked_transaction.rb +25 -11
- data/lib/xero-ruby/models/accounting/linked_transactions.rb +25 -11
- data/lib/xero-ruby/models/accounting/manual_journal.rb +25 -11
- data/lib/xero-ruby/models/accounting/manual_journal_line.rb +25 -11
- data/lib/xero-ruby/models/accounting/manual_journals.rb +25 -11
- data/lib/xero-ruby/models/accounting/online_invoice.rb +25 -11
- data/lib/xero-ruby/models/accounting/online_invoices.rb +25 -11
- data/lib/xero-ruby/models/accounting/organisation.rb +26 -14
- data/lib/xero-ruby/models/accounting/organisations.rb +25 -11
- data/lib/xero-ruby/models/accounting/overpayment.rb +25 -11
- data/lib/xero-ruby/models/accounting/overpayments.rb +25 -11
- data/lib/xero-ruby/models/accounting/payment.rb +36 -12
- data/lib/xero-ruby/models/accounting/payment_delete.rb +25 -11
- data/lib/xero-ruby/models/accounting/payment_service.rb +25 -11
- data/lib/xero-ruby/models/accounting/payment_services.rb +25 -11
- data/lib/xero-ruby/models/accounting/payment_term.rb +25 -11
- data/lib/xero-ruby/models/accounting/payment_term_type.rb +1 -2
- data/lib/xero-ruby/models/accounting/payments.rb +25 -11
- data/lib/xero-ruby/models/accounting/phone.rb +25 -11
- data/lib/xero-ruby/models/accounting/prepayment.rb +38 -12
- data/lib/xero-ruby/models/accounting/prepayments.rb +25 -11
- data/lib/xero-ruby/models/accounting/purchase.rb +25 -11
- data/lib/xero-ruby/models/accounting/purchase_order.rb +25 -11
- data/lib/xero-ruby/models/accounting/purchase_orders.rb +25 -11
- data/lib/xero-ruby/models/accounting/quote.rb +25 -11
- data/lib/xero-ruby/models/accounting/quote_line_amount_types.rb +1 -2
- data/lib/xero-ruby/models/accounting/quote_status_codes.rb +1 -2
- data/lib/xero-ruby/models/accounting/quotes.rb +25 -11
- data/lib/xero-ruby/models/accounting/receipt.rb +25 -11
- data/lib/xero-ruby/models/accounting/receipts.rb +25 -11
- data/lib/xero-ruby/models/accounting/repeating_invoice.rb +25 -11
- data/lib/xero-ruby/models/accounting/repeating_invoices.rb +25 -11
- data/lib/xero-ruby/models/accounting/report.rb +26 -22
- data/lib/xero-ruby/models/accounting/report_attribute.rb +25 -11
- data/lib/xero-ruby/models/accounting/report_cell.rb +25 -11
- data/lib/xero-ruby/models/accounting/report_fields.rb +25 -11
- data/lib/xero-ruby/models/accounting/report_row.rb +25 -11
- data/lib/xero-ruby/models/accounting/report_rows.rb +25 -11
- data/lib/xero-ruby/models/accounting/report_with_row.rb +26 -12
- data/lib/xero-ruby/models/accounting/report_with_rows.rb +25 -11
- data/lib/xero-ruby/models/accounting/reports.rb +25 -11
- data/lib/xero-ruby/models/accounting/request_empty.rb +25 -11
- data/lib/xero-ruby/models/accounting/row_type.rb +1 -2
- data/lib/xero-ruby/models/accounting/sales_tracking_category.rb +25 -11
- data/lib/xero-ruby/models/accounting/schedule.rb +25 -11
- data/lib/xero-ruby/models/accounting/setup.rb +25 -11
- data/lib/xero-ruby/models/accounting/tax_component.rb +25 -11
- data/lib/xero-ruby/models/accounting/tax_rate.rb +25 -11
- data/lib/xero-ruby/models/accounting/tax_rates.rb +25 -11
- data/lib/xero-ruby/models/accounting/tax_type.rb +1 -2
- data/lib/xero-ruby/models/accounting/ten_ninety_nine_contact.rb +25 -11
- data/lib/xero-ruby/models/accounting/time_zone.rb +1 -2
- data/lib/xero-ruby/models/accounting/tracking_categories.rb +25 -11
- data/lib/xero-ruby/models/accounting/tracking_category.rb +25 -11
- data/lib/xero-ruby/models/accounting/tracking_option.rb +25 -11
- data/lib/xero-ruby/models/accounting/tracking_options.rb +25 -11
- data/lib/xero-ruby/models/accounting/user.rb +25 -11
- data/lib/xero-ruby/models/accounting/users.rb +25 -11
- data/lib/xero-ruby/models/accounting/validation_error.rb +25 -11
- data/lib/xero-ruby/models/assets/asset.rb +25 -11
- data/lib/xero-ruby/models/assets/asset_status.rb +1 -2
- data/lib/xero-ruby/models/assets/asset_status_query_param.rb +1 -2
- data/lib/xero-ruby/models/assets/asset_type.rb +25 -11
- data/lib/xero-ruby/models/assets/assets.rb +25 -11
- data/lib/xero-ruby/models/assets/book_depreciation_detail.rb +25 -11
- data/lib/xero-ruby/models/assets/book_depreciation_setting.rb +25 -11
- data/lib/xero-ruby/models/assets/error.rb +25 -11
- data/lib/xero-ruby/models/assets/field_validation_errors_element.rb +26 -12
- data/lib/xero-ruby/models/assets/pagination.rb +25 -11
- data/lib/xero-ruby/models/assets/resource_validation_errors_element.rb +26 -12
- data/lib/xero-ruby/models/assets/setting.rb +25 -11
- data/lib/xero-ruby/models/files/association.rb +25 -11
- data/lib/xero-ruby/models/files/file_object.rb +25 -11
- data/lib/xero-ruby/models/files/files.rb +25 -11
- data/lib/xero-ruby/models/files/folder.rb +25 -11
- data/lib/xero-ruby/models/files/folders.rb +25 -11
- data/lib/xero-ruby/models/files/object_group.rb +1 -2
- data/lib/xero-ruby/models/files/object_type.rb +1 -2
- data/lib/xero-ruby/models/files/{inline_object.rb → upload_object.rb} +43 -14
- data/lib/xero-ruby/models/files/user.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/account.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/account_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/allowance_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/api_exception.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/bank_account.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/calendar_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/deduction_line.rb +25 -16
- data/lib/xero-ruby/models/payroll_au/deduction_type.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/deduction_type_calculation_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/earnings_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/earnings_rate.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/earnings_rate_calculation_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/earnings_type.rb +2 -2
- data/lib/xero-ruby/models/payroll_au/employee.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/employee_status.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/employees.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/employment_basis.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/employment_termination_payment_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/entitlement_final_pay_payout_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/home_address.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/leave_accrual_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/leave_application.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/leave_applications.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/leave_balance.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/leave_earnings_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/leave_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/leave_line_calculation_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/leave_lines.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/leave_period.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/leave_period_status.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/leave_type.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/leave_type_contribution_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/manual_tax_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/opening_balances.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/pay_item.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/pay_items.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/pay_run.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/pay_run_status.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/pay_runs.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/pay_template.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/payment_frequency_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/payroll_calendar.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/payroll_calendars.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/payslip.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/payslip_lines.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/payslip_object.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/payslip_summary.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/payslips.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/rate_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/reimbursement_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/reimbursement_lines.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/reimbursement_type.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/residency_status.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/settings.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/settings_object.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/settings_tracking_categories.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/settings_tracking_categories_employee_groups.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/settings_tracking_categories_timesheet_categories.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/state.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/super_fund.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/super_fund_product.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/super_fund_products.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/super_fund_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/super_funds.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/super_line.rb +26 -12
- data/lib/xero-ruby/models/payroll_au/super_membership.rb +26 -12
- data/lib/xero-ruby/models/payroll_au/superannuation_calculation_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/superannuation_contribution_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/superannuation_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/tax_declaration.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/tax_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/tfn_exemption_type.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/timesheet.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/timesheet_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/timesheet_object.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/timesheet_status.rb +1 -2
- data/lib/xero-ruby/models/payroll_au/timesheets.rb +25 -11
- data/lib/xero-ruby/models/payroll_au/validation_error.rb +25 -11
- data/lib/xero-ruby/models/payroll_nz/account.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/accounts.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/address.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/bank_account.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/benefit.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/calendar_type.rb +0 -1
- data/lib/xero-ruby/models/payroll_nz/deduction.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/deduction_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/deduction_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/deductions.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/earnings_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_nz/earnings_order.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/earnings_order_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/earnings_orders.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/earnings_rate.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/earnings_rate_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/earnings_rates.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/earnings_template.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/earnings_template_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_earnings_templates.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_leave.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_leave_balance.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_leave_balances.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_leave_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_leave_setup.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_leave_setup_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_leave_type.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_leave_type_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_leave_types.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_leaves.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_opening_balance.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_opening_balances_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_pay_template.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_pay_template_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_pay_templates.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_leave_balance.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_leave_balance_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_leave_summary.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_leaves_summaries.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_sick_leave.rb +25 -11
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_sick_leave_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_statutory_sick_leaves.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_tax.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employee_tax_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employees.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employment.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/employment_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/gross_earnings_history.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/invalid_field.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/leave_accrual_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/leave_earnings_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_nz/leave_period.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/leave_periods.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/leave_type.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/leave_type_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/leave_types.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/pagination.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/pay_run.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/pay_run_calendar.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/pay_run_calendar_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/pay_run_calendars.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/pay_run_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/pay_runs.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/pay_slip.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/pay_slip_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/pay_slips.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/payment_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/payment_method.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/payment_method_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/problem.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/reimbursement.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/reimbursement_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/reimbursement_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/reimbursements.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/salary_and_wage.rb +28 -13
- data/lib/xero-ruby/models/payroll_nz/salary_and_wage_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/salary_and_wages.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/settings.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/statutory_deduction.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/statutory_deduction_category.rb +0 -1
- data/lib/xero-ruby/models/payroll_nz/statutory_deduction_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/statutory_deduction_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/statutory_deductions.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/superannuation_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_nz/superannuation_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/superannuations.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/tax_code.rb +0 -1
- data/lib/xero-ruby/models/payroll_nz/tax_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/tax_settings.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/timesheet.rb +28 -13
- data/lib/xero-ruby/models/payroll_nz/timesheet_earnings_line.rb +25 -11
- data/lib/xero-ruby/models/payroll_nz/timesheet_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/timesheet_line_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/timesheet_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/timesheets.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/tracking_categories.rb +24 -10
- data/lib/xero-ruby/models/payroll_nz/tracking_category.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/account.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/accounts.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/address.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/bank_account.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/benefit.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/benefit_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/benefit_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/benefits.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/court_order_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/deduction.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/deduction_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/deduction_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/deductions.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/earnings_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/earnings_order.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/earnings_order_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/earnings_orders.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/earnings_rate.rb +34 -12
- data/lib/xero-ruby/models/payroll_uk/earnings_rate_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/earnings_rates.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/earnings_template.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/earnings_template_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_leave.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_leave_balance.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_leave_balances.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_leave_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_leave_type.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_leave_type_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_leave_types.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_leaves.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_opening_balances.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_opening_balances_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_pay_template.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_pay_template_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_pay_templates.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_leave_balance.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_leave_balance_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_leave_summary.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_leaves_summaries.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_sick_leave.rb +25 -11
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_sick_leave_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_statutory_sick_leaves.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_tax.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employee_tax_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employees.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employment.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/employment_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/invalid_field.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/leave_accrual_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/leave_earnings_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/leave_period.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/leave_periods.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/leave_type.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/leave_type_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/leave_types.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/pagination.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/pay_run.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/pay_run_calendar.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/pay_run_calendar_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/pay_run_calendars.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/pay_run_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/pay_runs.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/payment_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/payment_method.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/payment_method_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/payslip.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/payslip_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/payslips.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/problem.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/reimbursement.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/reimbursement_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/reimbursement_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/reimbursements.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/salary_and_wage.rb +27 -12
- data/lib/xero-ruby/models/payroll_uk/salary_and_wage_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/salary_and_wages.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/settings.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/statutory_deduction.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/statutory_deduction_category.rb +0 -1
- data/lib/xero-ruby/models/payroll_uk/tax_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/timesheet.rb +25 -11
- data/lib/xero-ruby/models/payroll_uk/timesheet_earnings_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/timesheet_line.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/timesheet_line_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/timesheet_object.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/timesheets.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/tracking_categories.rb +24 -10
- data/lib/xero-ruby/models/payroll_uk/tracking_category.rb +24 -10
- data/lib/xero-ruby/models/projects/amount.rb +24 -10
- data/lib/xero-ruby/models/projects/charge_type.rb +0 -1
- data/lib/xero-ruby/models/projects/currency_code.rb +0 -1
- data/lib/xero-ruby/models/projects/error.rb +24 -10
- data/lib/xero-ruby/models/projects/pagination.rb +24 -10
- data/lib/xero-ruby/models/projects/project.rb +24 -10
- data/lib/xero-ruby/models/projects/project_create_or_update.rb +24 -10
- data/lib/xero-ruby/models/projects/project_patch.rb +24 -10
- data/lib/xero-ruby/models/projects/project_status.rb +0 -1
- data/lib/xero-ruby/models/projects/project_user.rb +24 -10
- data/lib/xero-ruby/models/projects/project_users.rb +24 -10
- data/lib/xero-ruby/models/projects/projects.rb +24 -10
- data/lib/xero-ruby/models/projects/task.rb +24 -10
- data/lib/xero-ruby/models/projects/task_create_or_update.rb +24 -10
- data/lib/xero-ruby/models/projects/tasks.rb +24 -10
- data/lib/xero-ruby/models/projects/time_entries.rb +24 -10
- data/lib/xero-ruby/models/projects/time_entry.rb +27 -12
- data/lib/xero-ruby/models/projects/time_entry_create_or_update.rb +24 -10
- data/lib/xero-ruby/string_serialization.rb +52 -0
- data/lib/xero-ruby/version.rb +3 -3
- data/lib/xero-ruby/where.rb +65 -0
- data/spec/api_client_spec.rb +292 -14
- data/spec/api_error_spec.rb +45 -0
- data/spec/configuration_spec.rb +26 -16
- data/spec/files/models/inline_object_spec.rb +3 -3
- data/spec/helper_methods_spec.rb +110 -0
- data/spec/where_spec.rb +82 -0
- metadata +43 -12
- data/spec/files/models/file_response204_spec.rb +0 -41
data/lib/xero-ruby/api_client.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
=begin
|
2
|
-
#Accounting API
|
2
|
+
#Xero Accounting API
|
3
3
|
|
4
4
|
#No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
5
5
|
|
6
|
-
The version of the OpenAPI document: 2.6.0
|
7
6
|
Contact: api@xero.com
|
8
7
|
Generated by: https://openapi-generator.tech
|
9
8
|
OpenAPI Generator version: 4.3.1
|
@@ -16,25 +15,34 @@ require 'logger'
|
|
16
15
|
require 'tempfile'
|
17
16
|
require 'find'
|
18
17
|
require 'faraday'
|
18
|
+
require 'base64'
|
19
|
+
require 'cgi'
|
20
|
+
require 'json/jwt'
|
19
21
|
|
20
22
|
module XeroRuby
|
21
23
|
class ApiClient
|
24
|
+
include StringSerialization
|
25
|
+
|
22
26
|
# The Configuration object holding settings to be used in the API client.
|
23
27
|
attr_accessor :config
|
24
28
|
|
25
29
|
# Defines the headers to be used in HTTP requests of all API calls by default.
|
26
30
|
#
|
27
31
|
# @return [Hash]
|
28
|
-
attr_accessor :default_headers
|
32
|
+
attr_accessor :default_headers, :grant_type
|
29
33
|
|
30
34
|
# Initializes the ApiClient
|
31
35
|
# @option config [Configuration] Configuration for initializing the object, default to Configuration.default
|
32
|
-
def initialize(config:
|
36
|
+
def initialize(config: {}, credentials: {})
|
33
37
|
@client_id = credentials[:client_id]
|
34
38
|
@client_secret = credentials[:client_secret]
|
35
39
|
@redirect_uri = credentials[:redirect_uri]
|
40
|
+
@grant_type = credentials[:grant_type] || 'authorization_code'
|
36
41
|
@scopes = credentials[:scopes]
|
37
|
-
@
|
42
|
+
@state = credentials[:state]
|
43
|
+
default_config = Configuration.default.clone
|
44
|
+
@config = append_to_default_config(default_config, config)
|
45
|
+
|
38
46
|
@user_agent = "xero-ruby-#{VERSION}"
|
39
47
|
@default_headers = {
|
40
48
|
'Content-Type' => 'application/json',
|
@@ -42,9 +50,24 @@ module XeroRuby
|
|
42
50
|
}
|
43
51
|
end
|
44
52
|
|
53
|
+
def append_to_default_config(default_config, user_config)
|
54
|
+
config = default_config
|
55
|
+
user_config.each{|k,v| config.send("#{k}=", v)}
|
56
|
+
config
|
57
|
+
end
|
58
|
+
|
45
59
|
def authorization_url
|
46
|
-
url =
|
47
|
-
|
60
|
+
url = URI.parse @config.login_url
|
61
|
+
url.query = URI.encode_www_form(
|
62
|
+
{
|
63
|
+
response_type: 'code',
|
64
|
+
client_id: @client_id,
|
65
|
+
redirect_uri: @redirect_uri,
|
66
|
+
scope: @scopes,
|
67
|
+
state: @state
|
68
|
+
}.compact
|
69
|
+
)
|
70
|
+
url.to_s
|
48
71
|
end
|
49
72
|
|
50
73
|
def accounting_api
|
@@ -84,68 +107,148 @@ module XeroRuby
|
|
84
107
|
|
85
108
|
# Token Helpers
|
86
109
|
def token_set
|
87
|
-
|
110
|
+
@config.token_set
|
88
111
|
end
|
89
112
|
|
90
113
|
def access_token
|
91
|
-
|
114
|
+
@config.access_token
|
115
|
+
end
|
116
|
+
|
117
|
+
def id_token
|
118
|
+
@config.id_token
|
119
|
+
end
|
120
|
+
|
121
|
+
def decoded_access_token
|
122
|
+
decode_jwt(@config.access_token, false)
|
123
|
+
end
|
124
|
+
|
125
|
+
def decoded_id_token
|
126
|
+
decode_jwt(@config.id_token, false)
|
92
127
|
end
|
93
128
|
|
94
129
|
def set_token_set(token_set)
|
95
|
-
|
96
|
-
|
97
|
-
|
98
|
-
set_access_token(token_set[
|
130
|
+
token_set = token_set.with_indifferent_access
|
131
|
+
@config.token_set = token_set
|
132
|
+
|
133
|
+
set_access_token(token_set[:access_token]) if token_set[:access_token]
|
134
|
+
set_id_token(token_set[:id_token]) if token_set[:id_token]
|
135
|
+
|
136
|
+
return true
|
99
137
|
end
|
100
138
|
|
101
139
|
def set_access_token(access_token)
|
102
|
-
|
140
|
+
@config.access_token = access_token
|
141
|
+
end
|
142
|
+
|
143
|
+
def set_id_token(id_token)
|
144
|
+
@config.id_token = id_token
|
145
|
+
end
|
146
|
+
|
147
|
+
def get_client_credentials_token
|
148
|
+
data = {
|
149
|
+
grant_type: @grant_type
|
150
|
+
}
|
151
|
+
token_set = token_request(data, '/token')
|
152
|
+
|
153
|
+
return token_set
|
103
154
|
end
|
104
155
|
|
105
156
|
def get_token_set_from_callback(params)
|
106
157
|
data = {
|
107
|
-
grant_type:
|
158
|
+
grant_type: @grant_type,
|
108
159
|
code: params['code'],
|
109
160
|
redirect_uri: @redirect_uri
|
110
161
|
}
|
111
|
-
|
162
|
+
token_set = token_request(data, '/token')
|
163
|
+
|
164
|
+
validate_tokens(token_set)
|
165
|
+
validate_state(params)
|
166
|
+
return token_set
|
167
|
+
end
|
168
|
+
|
169
|
+
def validate_tokens(token_set)
|
170
|
+
token_set = token_set.with_indifferent_access
|
171
|
+
id_token = token_set[:id_token]
|
172
|
+
access_token = token_set[:access_token]
|
173
|
+
if id_token || access_token
|
174
|
+
decode_jwt(access_token) if access_token
|
175
|
+
decode_jwt(id_token) if id_token
|
176
|
+
end
|
177
|
+
return true
|
178
|
+
end
|
179
|
+
|
180
|
+
def validate_state(params)
|
181
|
+
if params[:state] != @state
|
182
|
+
raise StandardError.new "WARNING: @config.state: #{@state} and OAuth callback state: #{params['state']} do not match!"
|
183
|
+
end
|
184
|
+
return true
|
185
|
+
end
|
186
|
+
|
187
|
+
def decode_jwt(tkn, verify=true)
|
188
|
+
if verify == true
|
189
|
+
jwks_data = JSON.parse(Faraday.get('https://identity.xero.com/.well-known/openid-configuration/jwks').body)
|
190
|
+
jwk_set = JSON::JWK::Set.new(jwks_data)
|
191
|
+
JSON::JWT.decode(tkn, jwk_set)
|
192
|
+
else
|
193
|
+
JSON::JWT.decode(tkn, :skip_verification)
|
194
|
+
end
|
195
|
+
end
|
196
|
+
|
197
|
+
def token_expired?
|
198
|
+
token_expiry = Time.at(decoded_access_token['exp'])
|
199
|
+
token_expiry < Time.now
|
112
200
|
end
|
113
201
|
|
114
202
|
def refresh_token_set(token_set)
|
203
|
+
token_set = token_set.with_indifferent_access
|
115
204
|
data = {
|
116
205
|
grant_type: 'refresh_token',
|
117
|
-
refresh_token: token_set[
|
206
|
+
refresh_token: token_set[:refresh_token]
|
207
|
+
}
|
208
|
+
return token_request(data, '/token')
|
209
|
+
end
|
210
|
+
|
211
|
+
def revoke_token(token_set)
|
212
|
+
token_set = token_set.with_indifferent_access
|
213
|
+
data = {
|
214
|
+
token: token_set[:refresh_token]
|
118
215
|
}
|
119
|
-
return token_request(data)
|
216
|
+
return token_request(data, '/revocation')
|
120
217
|
end
|
121
218
|
|
122
|
-
def token_request(data)
|
123
|
-
response = Faraday.post(@config.token_url) do |req|
|
219
|
+
def token_request(data, path)
|
220
|
+
response = Faraday.post("#{@config.token_url}#{path}") do |req|
|
124
221
|
req.headers['Authorization'] = "Basic " + Base64.strict_encode64("#{@client_id}:#{@client_secret}")
|
125
222
|
req.headers['Content-Type'] = 'application/x-www-form-urlencoded'
|
126
223
|
req.body = URI.encode_www_form(data)
|
127
224
|
end
|
128
|
-
|
129
|
-
|
225
|
+
return_error(response) unless response.success?
|
226
|
+
if !response.body.nil? && !response.body.empty?
|
227
|
+
body = JSON.parse(response.body)
|
228
|
+
set_token_set(body)
|
229
|
+
else
|
230
|
+
body = {}
|
231
|
+
end
|
130
232
|
return body
|
131
233
|
end
|
132
234
|
|
133
235
|
# Connection heplers
|
134
236
|
def connections
|
135
|
-
|
136
|
-
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
237
|
+
@config.base_url = 'https://api.xero.com'
|
238
|
+
opts = { :header_params => {'Content-Type': 'application/json'}, :auth_names => ['OAuth2'] }
|
239
|
+
response = call_api(:GET, "/connections/", nil, opts)
|
240
|
+
response[0]
|
241
|
+
end
|
242
|
+
|
243
|
+
def last_connection
|
244
|
+
connections.sort { |a,b| DateTime.parse(a['updatedDateUtc']) <=> DateTime.parse(b['updatedDateUtc'])}.first
|
141
245
|
end
|
142
246
|
|
143
247
|
def disconnect(connection_id)
|
144
|
-
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
return connections
|
248
|
+
@config.base_url = 'https://api.xero.com'
|
249
|
+
opts = { :header_params => {'Content-Type': 'application/json'}, :auth_names => ['OAuth2'] }
|
250
|
+
call_api(:DELETE, "/connections/#{connection_id}", nil, opts)
|
251
|
+
connections
|
149
252
|
end
|
150
253
|
|
151
254
|
# Call an API with given options.
|
@@ -161,7 +264,26 @@ module XeroRuby
|
|
161
264
|
:client_key => @config.ssl_client_key
|
162
265
|
}
|
163
266
|
|
164
|
-
|
267
|
+
case api_client
|
268
|
+
when "AccountingApi"
|
269
|
+
method_base_url = @config.accounting_url
|
270
|
+
when "AssetApi"
|
271
|
+
method_base_url = @config.asset_url
|
272
|
+
when "FilesApi"
|
273
|
+
method_base_url = @config.files_url
|
274
|
+
when "PayrollAuApi"
|
275
|
+
method_base_url = @config.payroll_au_url
|
276
|
+
when "PayrollNzApi"
|
277
|
+
method_base_url = @config.payroll_nz_url
|
278
|
+
when "PayrollUkApi"
|
279
|
+
method_base_url = @config.payroll_uk_url
|
280
|
+
when "ProjectApi"
|
281
|
+
method_base_url = @config.project_url
|
282
|
+
else
|
283
|
+
method_base_url = @config.accounting_url
|
284
|
+
end
|
285
|
+
|
286
|
+
connection = Faraday.new(:url => method_base_url, :ssl => ssl_options) do |conn|
|
165
287
|
conn.basic_auth(config.username, config.password)
|
166
288
|
if opts[:header_params]["Content-Type"] == "multipart/form-data"
|
167
289
|
conn.request :multipart
|
@@ -179,18 +301,7 @@ module XeroRuby
|
|
179
301
|
@config.logger.debug "HTTP response body ~BEGIN~\n#{response.body}\n~END~\n"
|
180
302
|
end
|
181
303
|
|
182
|
-
unless response.success?
|
183
|
-
if response.status == 0
|
184
|
-
# Errors from libcurl will be made visible here
|
185
|
-
fail ApiError.new(:code => 0,
|
186
|
-
:message => response.return_message)
|
187
|
-
else
|
188
|
-
fail ApiError.new(:code => response.status,
|
189
|
-
:response_headers => response.headers,
|
190
|
-
:response_body => response.body),
|
191
|
-
response.reason_phrase
|
192
|
-
end
|
193
|
-
end
|
304
|
+
return_error(response) unless response.success?
|
194
305
|
rescue Faraday::TimeoutError
|
195
306
|
fail ApiError.new('Connection timed out')
|
196
307
|
end
|
@@ -198,12 +309,27 @@ module XeroRuby
|
|
198
309
|
if opts[:return_type]
|
199
310
|
prepare_file(response) if opts[:return_type] == 'File'
|
200
311
|
data = deserialize(response, opts[:return_type], api_client)
|
312
|
+
elsif !response.body.empty?
|
313
|
+
data = JSON.parse(response.body)
|
201
314
|
else
|
202
315
|
data = nil
|
203
316
|
end
|
204
317
|
return data, response.status, response.headers
|
205
318
|
end
|
206
319
|
|
320
|
+
def return_error(response)
|
321
|
+
if response.status == 0
|
322
|
+
# Errors from libcurl will be made visible here
|
323
|
+
fail ApiError.new(:code => 0,
|
324
|
+
:message => response.return_message)
|
325
|
+
else
|
326
|
+
fail ApiError.new(:code => response.status,
|
327
|
+
:response_headers => response.headers,
|
328
|
+
:response_body => response.body),
|
329
|
+
response.reason_phrase
|
330
|
+
end
|
331
|
+
end
|
332
|
+
|
207
333
|
# Builds the HTTP request
|
208
334
|
#
|
209
335
|
# @param [String] http_method HTTP method/verb (e.g. POST)
|
@@ -240,6 +366,8 @@ module XeroRuby
|
|
240
366
|
end
|
241
367
|
end
|
242
368
|
request.headers = header_params
|
369
|
+
timeout = @config.timeout
|
370
|
+
request.options.timeout = timeout if timeout > 0
|
243
371
|
request.body = req_body
|
244
372
|
request.url url
|
245
373
|
request.params = query_params
|
@@ -416,9 +544,13 @@ module XeroRuby
|
|
416
544
|
end
|
417
545
|
|
418
546
|
def build_request_url(path)
|
419
|
-
|
420
|
-
|
421
|
-
|
547
|
+
if @config.base_url
|
548
|
+
# Add leading and trailing slashes to path
|
549
|
+
path = "/#{path}".gsub(/\/+/, '/')
|
550
|
+
@config.base_url + path
|
551
|
+
else
|
552
|
+
path
|
553
|
+
end
|
422
554
|
end
|
423
555
|
|
424
556
|
# Update hearder and query params based on authentication settings.
|
@@ -492,55 +624,6 @@ module XeroRuby
|
|
492
624
|
end
|
493
625
|
end
|
494
626
|
|
495
|
-
# START - Re-serializes snake_cased params to PascalCase required by XeroAPI
|
496
|
-
def to_camel_keys(value = self)
|
497
|
-
case value
|
498
|
-
when Array
|
499
|
-
value.map { |v| to_camel_keys(v) }
|
500
|
-
when Hash
|
501
|
-
Hash[value.map { |k, v| [camelize_key(k), to_camel_keys(v)] }]
|
502
|
-
else
|
503
|
-
value
|
504
|
-
end
|
505
|
-
end
|
506
|
-
|
507
|
-
def camelize_key(key, first_upper = true)
|
508
|
-
if key.is_a? Symbol
|
509
|
-
camelize(key.to_s, first_upper).to_sym
|
510
|
-
elsif key.is_a? String
|
511
|
-
camelize(key, first_upper)
|
512
|
-
else
|
513
|
-
key # can't camelize anything except strings and symbols
|
514
|
-
end
|
515
|
-
end
|
516
|
-
|
517
|
-
def camelize(word, first_upper = true)
|
518
|
-
if first_upper
|
519
|
-
str = word.to_s
|
520
|
-
str = gsubbed(str, /(?:^|_)([^_\s]+)/)
|
521
|
-
str = gsubbed(str, %r{/([^/]*)}, "::")
|
522
|
-
str
|
523
|
-
else
|
524
|
-
parts = word.split("_", 2)
|
525
|
-
parts[0] << camelize(parts[1]) if parts.size > 1
|
526
|
-
parts[0] || ""
|
527
|
-
end
|
528
|
-
end
|
529
|
-
|
530
|
-
def gsubbed(str, pattern, extra = "")
|
531
|
-
key_map_scronyms = {}
|
532
|
-
str = str.gsub(pattern) do
|
533
|
-
extra + (key_map_scronyms[Regexp.last_match(1)] || capitalize_first(Regexp.last_match(1)))
|
534
|
-
end
|
535
|
-
str
|
536
|
-
end
|
537
|
-
|
538
|
-
def capitalize_first(word)
|
539
|
-
split = word.split('')
|
540
|
-
"#{split[0].capitalize}#{split[1..-1].join}"
|
541
|
-
end
|
542
|
-
# END - Re-serializes snake_cased params to PascalCase required by XeroAPI
|
543
|
-
|
544
627
|
# Build parameter value according to the given collection format.
|
545
628
|
# @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
|
546
629
|
def build_collection_param(param, collection_format)
|
@@ -562,36 +645,7 @@ module XeroRuby
|
|
562
645
|
end
|
563
646
|
|
564
647
|
def parameterize_where(where_opts)
|
565
|
-
where_opts.
|
566
|
-
case v
|
567
|
-
when Array
|
568
|
-
operator = v.first
|
569
|
-
query = v.last
|
570
|
-
if query.is_a?(Date)
|
571
|
-
"#{camelize_key(k)} #{operator} DateTime(#{query.strftime("%Y,%m,%d")})"
|
572
|
-
elsif [Float, Integer].member?(query.class)
|
573
|
-
%{#{camelize_key(k)} #{operator} #{query}}
|
574
|
-
elsif [true, false].member?(query)
|
575
|
-
%{#{camelize_key(k)} #{operator} #{query}}
|
576
|
-
else
|
577
|
-
if k == :contact_id
|
578
|
-
%{Contact.ContactID #{operator} guid("#{query}")}
|
579
|
-
elsif k == :contact_number
|
580
|
-
%{Contact.ContactNumber #{operator} "#{query}"}
|
581
|
-
else
|
582
|
-
%{#{camelize_key(k)} #{operator} "#{query}"}
|
583
|
-
end
|
584
|
-
end
|
585
|
-
when Range
|
586
|
-
if v.first.is_a?(DateTime) || v.first.is_a?(Date) || v.first.is_a?(Time)
|
587
|
-
"#{camelize_key(k)} >= DateTime(#{v.first.strftime("%Y,%m,%d")}) AND #{camelize_key(k)} <= DateTime(#{v.last.strftime("%Y,%m,%d")})"
|
588
|
-
else
|
589
|
-
"#{camelize_key(k)} >= #{v.first} AND #{camelize_key(k)} <= #{v.last}"
|
590
|
-
end
|
591
|
-
else
|
592
|
-
%{#{camelize_key(k)} #{v}}
|
593
|
-
end
|
594
|
-
end.join(' AND ')
|
648
|
+
Where.new(where_opts).to_param
|
595
649
|
end
|
596
650
|
end
|
597
651
|
end
|
data/lib/xero-ruby/api_error.rb
CHANGED
@@ -1,9 +1,8 @@
|
|
1
1
|
=begin
|
2
|
-
#Accounting API
|
2
|
+
#Xero Accounting API
|
3
3
|
|
4
4
|
#No description provided (generated by Openapi Generator https://github.com/openapitools/openapi-generator)
|
5
5
|
|
6
|
-
The version of the OpenAPI document: 2.6.0
|
7
6
|
Contact: api@xero.com
|
8
7
|
Generated by: https://openapi-generator.tech
|
9
8
|
OpenAPI Generator version: 4.3.1
|
@@ -21,8 +20,8 @@ module XeroRuby
|
|
21
20
|
# ApiError.new(:code => 404, :message => "Not Found")
|
22
21
|
def initialize(arg = nil)
|
23
22
|
if arg.is_a? Hash
|
24
|
-
if arg.key?(:message) || arg.key?('message')
|
25
|
-
super(arg[:message] || arg['message'])
|
23
|
+
if arg.key?(:message) || arg.key?('message') || arg.key?(:Message) || arg.key?('Message')
|
24
|
+
super(arg[:message] || arg['message'] || arg.key?(:Message) || arg.key?('Message'))
|
26
25
|
else
|
27
26
|
super arg
|
28
27
|
end
|
@@ -31,6 +30,7 @@ module XeroRuby
|
|
31
30
|
instance_variable_set "@#{k}", v
|
32
31
|
end
|
33
32
|
else
|
33
|
+
@message = arg
|
34
34
|
super arg
|
35
35
|
end
|
36
36
|
end
|