xero-ruby 2.10.2 → 3.1.3

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (398) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +6 -6
  3. data/lib/xero-ruby.rb +4 -0
  4. data/lib/xero-ruby/api/accounting_api.rb +307 -151
  5. data/lib/xero-ruby/models/accounting/account.rb +13 -7
  6. data/lib/xero-ruby/models/accounting/accounts.rb +13 -7
  7. data/lib/xero-ruby/models/accounting/accounts_payable.rb +13 -7
  8. data/lib/xero-ruby/models/accounting/accounts_receivable.rb +13 -7
  9. data/lib/xero-ruby/models/accounting/action.rb +13 -7
  10. data/lib/xero-ruby/models/accounting/actions.rb +13 -7
  11. data/lib/xero-ruby/models/accounting/address.rb +13 -7
  12. data/lib/xero-ruby/models/accounting/address_for_organisation.rb +13 -7
  13. data/lib/xero-ruby/models/accounting/allocation.rb +13 -7
  14. data/lib/xero-ruby/models/accounting/allocations.rb +13 -7
  15. data/lib/xero-ruby/models/accounting/attachment.rb +13 -7
  16. data/lib/xero-ruby/models/accounting/attachments.rb +13 -7
  17. data/lib/xero-ruby/models/accounting/balance_details.rb +13 -7
  18. data/lib/xero-ruby/models/accounting/balances.rb +13 -7
  19. data/lib/xero-ruby/models/accounting/bank_transaction.rb +13 -7
  20. data/lib/xero-ruby/models/accounting/bank_transactions.rb +13 -7
  21. data/lib/xero-ruby/models/accounting/bank_transfer.rb +13 -7
  22. data/lib/xero-ruby/models/accounting/bank_transfers.rb +13 -7
  23. data/lib/xero-ruby/models/accounting/batch_payment.rb +13 -7
  24. data/lib/xero-ruby/models/accounting/batch_payment_details.rb +13 -7
  25. data/lib/xero-ruby/models/accounting/batch_payments.rb +13 -7
  26. data/lib/xero-ruby/models/accounting/bill.rb +13 -7
  27. data/lib/xero-ruby/models/accounting/branding_theme.rb +13 -7
  28. data/lib/xero-ruby/models/accounting/branding_themes.rb +13 -7
  29. data/lib/xero-ruby/models/accounting/budget.rb +327 -0
  30. data/lib/xero-ruby/models/accounting/budget_balance.rb +267 -0
  31. data/lib/xero-ruby/models/accounting/budget_line.rb +244 -0
  32. data/lib/xero-ruby/models/accounting/budgets.rb +224 -0
  33. data/lib/xero-ruby/models/accounting/cis_org_setting.rb +13 -7
  34. data/lib/xero-ruby/models/accounting/cis_org_settings.rb +13 -7
  35. data/lib/xero-ruby/models/accounting/cis_setting.rb +13 -7
  36. data/lib/xero-ruby/models/accounting/cis_settings.rb +13 -7
  37. data/lib/xero-ruby/models/accounting/contact.rb +13 -7
  38. data/lib/xero-ruby/models/accounting/contact_group.rb +13 -7
  39. data/lib/xero-ruby/models/accounting/contact_groups.rb +13 -7
  40. data/lib/xero-ruby/models/accounting/contact_person.rb +13 -7
  41. data/lib/xero-ruby/models/accounting/contacts.rb +13 -7
  42. data/lib/xero-ruby/models/accounting/conversion_balances.rb +13 -7
  43. data/lib/xero-ruby/models/accounting/conversion_date.rb +13 -7
  44. data/lib/xero-ruby/models/accounting/credit_note.rb +13 -7
  45. data/lib/xero-ruby/models/accounting/credit_notes.rb +13 -7
  46. data/lib/xero-ruby/models/accounting/currencies.rb +13 -7
  47. data/lib/xero-ruby/models/accounting/currency.rb +13 -7
  48. data/lib/xero-ruby/models/accounting/element.rb +13 -7
  49. data/lib/xero-ruby/models/accounting/employee.rb +13 -7
  50. data/lib/xero-ruby/models/accounting/employees.rb +13 -7
  51. data/lib/xero-ruby/models/accounting/error.rb +13 -7
  52. data/lib/xero-ruby/models/accounting/expense_claim.rb +13 -7
  53. data/lib/xero-ruby/models/accounting/expense_claims.rb +13 -7
  54. data/lib/xero-ruby/models/accounting/external_link.rb +13 -7
  55. data/lib/xero-ruby/models/accounting/history_record.rb +13 -7
  56. data/lib/xero-ruby/models/accounting/history_records.rb +13 -7
  57. data/lib/xero-ruby/models/accounting/import_summary.rb +13 -7
  58. data/lib/xero-ruby/models/accounting/import_summary_accounts.rb +13 -7
  59. data/lib/xero-ruby/models/accounting/import_summary_object.rb +13 -7
  60. data/lib/xero-ruby/models/accounting/import_summary_organisation.rb +13 -7
  61. data/lib/xero-ruby/models/accounting/invoice.rb +13 -7
  62. data/lib/xero-ruby/models/accounting/invoice_reminder.rb +13 -7
  63. data/lib/xero-ruby/models/accounting/invoice_reminders.rb +13 -7
  64. data/lib/xero-ruby/models/accounting/invoices.rb +13 -7
  65. data/lib/xero-ruby/models/accounting/item.rb +13 -7
  66. data/lib/xero-ruby/models/accounting/items.rb +13 -7
  67. data/lib/xero-ruby/models/accounting/journal.rb +13 -7
  68. data/lib/xero-ruby/models/accounting/journal_line.rb +13 -7
  69. data/lib/xero-ruby/models/accounting/journals.rb +13 -7
  70. data/lib/xero-ruby/models/accounting/line_item.rb +24 -8
  71. data/lib/xero-ruby/models/accounting/line_item_tracking.rb +13 -7
  72. data/lib/xero-ruby/models/accounting/linked_transaction.rb +13 -7
  73. data/lib/xero-ruby/models/accounting/linked_transactions.rb +13 -7
  74. data/lib/xero-ruby/models/accounting/manual_journal.rb +13 -7
  75. data/lib/xero-ruby/models/accounting/manual_journal_line.rb +13 -7
  76. data/lib/xero-ruby/models/accounting/manual_journals.rb +13 -7
  77. data/lib/xero-ruby/models/accounting/online_invoice.rb +13 -7
  78. data/lib/xero-ruby/models/accounting/online_invoices.rb +13 -7
  79. data/lib/xero-ruby/models/accounting/organisation.rb +13 -7
  80. data/lib/xero-ruby/models/accounting/organisations.rb +13 -7
  81. data/lib/xero-ruby/models/accounting/overpayment.rb +13 -7
  82. data/lib/xero-ruby/models/accounting/overpayments.rb +13 -7
  83. data/lib/xero-ruby/models/accounting/payment.rb +13 -7
  84. data/lib/xero-ruby/models/accounting/payment_delete.rb +13 -7
  85. data/lib/xero-ruby/models/accounting/payment_service.rb +13 -7
  86. data/lib/xero-ruby/models/accounting/payment_services.rb +13 -7
  87. data/lib/xero-ruby/models/accounting/payment_term.rb +13 -7
  88. data/lib/xero-ruby/models/accounting/payments.rb +13 -7
  89. data/lib/xero-ruby/models/accounting/phone.rb +13 -7
  90. data/lib/xero-ruby/models/accounting/prepayment.rb +26 -8
  91. data/lib/xero-ruby/models/accounting/prepayments.rb +13 -7
  92. data/lib/xero-ruby/models/accounting/purchase.rb +13 -7
  93. data/lib/xero-ruby/models/accounting/purchase_order.rb +13 -7
  94. data/lib/xero-ruby/models/accounting/purchase_orders.rb +13 -7
  95. data/lib/xero-ruby/models/accounting/quote.rb +13 -7
  96. data/lib/xero-ruby/models/accounting/quotes.rb +13 -7
  97. data/lib/xero-ruby/models/accounting/receipt.rb +13 -7
  98. data/lib/xero-ruby/models/accounting/receipts.rb +13 -7
  99. data/lib/xero-ruby/models/accounting/repeating_invoice.rb +13 -7
  100. data/lib/xero-ruby/models/accounting/repeating_invoices.rb +13 -7
  101. data/lib/xero-ruby/models/accounting/report.rb +14 -18
  102. data/lib/xero-ruby/models/accounting/report_attribute.rb +13 -7
  103. data/lib/xero-ruby/models/accounting/report_cell.rb +13 -7
  104. data/lib/xero-ruby/models/accounting/report_fields.rb +13 -7
  105. data/lib/xero-ruby/models/accounting/report_row.rb +13 -7
  106. data/lib/xero-ruby/models/accounting/report_rows.rb +13 -7
  107. data/lib/xero-ruby/models/accounting/report_with_row.rb +14 -8
  108. data/lib/xero-ruby/models/accounting/report_with_rows.rb +13 -7
  109. data/lib/xero-ruby/models/accounting/reports.rb +13 -7
  110. data/lib/xero-ruby/models/accounting/request_empty.rb +13 -7
  111. data/lib/xero-ruby/models/accounting/sales_tracking_category.rb +13 -7
  112. data/lib/xero-ruby/models/accounting/schedule.rb +13 -7
  113. data/lib/xero-ruby/models/accounting/setup.rb +13 -7
  114. data/lib/xero-ruby/models/accounting/tax_component.rb +13 -7
  115. data/lib/xero-ruby/models/accounting/tax_rate.rb +13 -7
  116. data/lib/xero-ruby/models/accounting/tax_rates.rb +13 -7
  117. data/lib/xero-ruby/models/accounting/ten_ninety_nine_contact.rb +13 -7
  118. data/lib/xero-ruby/models/accounting/tracking_categories.rb +13 -7
  119. data/lib/xero-ruby/models/accounting/tracking_category.rb +13 -7
  120. data/lib/xero-ruby/models/accounting/tracking_option.rb +13 -7
  121. data/lib/xero-ruby/models/accounting/tracking_options.rb +13 -7
  122. data/lib/xero-ruby/models/accounting/user.rb +13 -7
  123. data/lib/xero-ruby/models/accounting/users.rb +13 -7
  124. data/lib/xero-ruby/models/accounting/validation_error.rb +13 -7
  125. data/lib/xero-ruby/models/assets/asset.rb +13 -7
  126. data/lib/xero-ruby/models/assets/asset_type.rb +13 -7
  127. data/lib/xero-ruby/models/assets/assets.rb +13 -7
  128. data/lib/xero-ruby/models/assets/book_depreciation_detail.rb +13 -7
  129. data/lib/xero-ruby/models/assets/book_depreciation_setting.rb +13 -7
  130. data/lib/xero-ruby/models/assets/error.rb +13 -7
  131. data/lib/xero-ruby/models/assets/field_validation_errors_element.rb +13 -7
  132. data/lib/xero-ruby/models/assets/pagination.rb +13 -7
  133. data/lib/xero-ruby/models/assets/resource_validation_errors_element.rb +13 -7
  134. data/lib/xero-ruby/models/assets/setting.rb +13 -7
  135. data/lib/xero-ruby/models/files/association.rb +13 -7
  136. data/lib/xero-ruby/models/files/file_object.rb +13 -7
  137. data/lib/xero-ruby/models/files/files.rb +13 -7
  138. data/lib/xero-ruby/models/files/folder.rb +13 -7
  139. data/lib/xero-ruby/models/files/folders.rb +13 -7
  140. data/lib/xero-ruby/models/files/upload_object.rb +13 -7
  141. data/lib/xero-ruby/models/files/user.rb +13 -7
  142. data/lib/xero-ruby/models/payroll_au/account.rb +13 -7
  143. data/lib/xero-ruby/models/payroll_au/api_exception.rb +13 -7
  144. data/lib/xero-ruby/models/payroll_au/bank_account.rb +13 -7
  145. data/lib/xero-ruby/models/payroll_au/deduction_line.rb +13 -7
  146. data/lib/xero-ruby/models/payroll_au/deduction_type.rb +13 -7
  147. data/lib/xero-ruby/models/payroll_au/earnings_line.rb +13 -7
  148. data/lib/xero-ruby/models/payroll_au/earnings_rate.rb +13 -7
  149. data/lib/xero-ruby/models/payroll_au/employee.rb +13 -7
  150. data/lib/xero-ruby/models/payroll_au/employees.rb +13 -7
  151. data/lib/xero-ruby/models/payroll_au/home_address.rb +13 -7
  152. data/lib/xero-ruby/models/payroll_au/leave_accrual_line.rb +13 -7
  153. data/lib/xero-ruby/models/payroll_au/leave_application.rb +13 -7
  154. data/lib/xero-ruby/models/payroll_au/leave_applications.rb +13 -7
  155. data/lib/xero-ruby/models/payroll_au/leave_balance.rb +13 -7
  156. data/lib/xero-ruby/models/payroll_au/leave_earnings_line.rb +13 -7
  157. data/lib/xero-ruby/models/payroll_au/leave_line.rb +13 -7
  158. data/lib/xero-ruby/models/payroll_au/leave_lines.rb +13 -7
  159. data/lib/xero-ruby/models/payroll_au/leave_period.rb +13 -7
  160. data/lib/xero-ruby/models/payroll_au/leave_type.rb +13 -7
  161. data/lib/xero-ruby/models/payroll_au/opening_balances.rb +13 -7
  162. data/lib/xero-ruby/models/payroll_au/pay_item.rb +13 -7
  163. data/lib/xero-ruby/models/payroll_au/pay_items.rb +13 -7
  164. data/lib/xero-ruby/models/payroll_au/pay_run.rb +13 -7
  165. data/lib/xero-ruby/models/payroll_au/pay_runs.rb +13 -7
  166. data/lib/xero-ruby/models/payroll_au/pay_template.rb +13 -7
  167. data/lib/xero-ruby/models/payroll_au/payroll_calendar.rb +13 -7
  168. data/lib/xero-ruby/models/payroll_au/payroll_calendars.rb +13 -7
  169. data/lib/xero-ruby/models/payroll_au/payslip.rb +13 -7
  170. data/lib/xero-ruby/models/payroll_au/payslip_lines.rb +13 -7
  171. data/lib/xero-ruby/models/payroll_au/payslip_object.rb +13 -7
  172. data/lib/xero-ruby/models/payroll_au/payslip_summary.rb +13 -7
  173. data/lib/xero-ruby/models/payroll_au/payslips.rb +13 -7
  174. data/lib/xero-ruby/models/payroll_au/reimbursement_line.rb +13 -7
  175. data/lib/xero-ruby/models/payroll_au/reimbursement_lines.rb +13 -7
  176. data/lib/xero-ruby/models/payroll_au/reimbursement_type.rb +13 -7
  177. data/lib/xero-ruby/models/payroll_au/settings.rb +13 -7
  178. data/lib/xero-ruby/models/payroll_au/settings_object.rb +13 -7
  179. data/lib/xero-ruby/models/payroll_au/settings_tracking_categories.rb +13 -7
  180. data/lib/xero-ruby/models/payroll_au/settings_tracking_categories_employee_groups.rb +13 -7
  181. data/lib/xero-ruby/models/payroll_au/settings_tracking_categories_timesheet_categories.rb +13 -7
  182. data/lib/xero-ruby/models/payroll_au/super_fund.rb +13 -7
  183. data/lib/xero-ruby/models/payroll_au/super_fund_product.rb +13 -7
  184. data/lib/xero-ruby/models/payroll_au/super_fund_products.rb +13 -7
  185. data/lib/xero-ruby/models/payroll_au/super_funds.rb +13 -7
  186. data/lib/xero-ruby/models/payroll_au/super_line.rb +13 -7
  187. data/lib/xero-ruby/models/payroll_au/super_membership.rb +13 -7
  188. data/lib/xero-ruby/models/payroll_au/superannuation_line.rb +13 -7
  189. data/lib/xero-ruby/models/payroll_au/tax_declaration.rb +13 -7
  190. data/lib/xero-ruby/models/payroll_au/tax_line.rb +13 -7
  191. data/lib/xero-ruby/models/payroll_au/timesheet.rb +13 -7
  192. data/lib/xero-ruby/models/payroll_au/timesheet_line.rb +13 -7
  193. data/lib/xero-ruby/models/payroll_au/timesheet_object.rb +13 -7
  194. data/lib/xero-ruby/models/payroll_au/timesheets.rb +13 -7
  195. data/lib/xero-ruby/models/payroll_au/validation_error.rb +13 -7
  196. data/lib/xero-ruby/models/payroll_nz/account.rb +13 -7
  197. data/lib/xero-ruby/models/payroll_nz/accounts.rb +13 -7
  198. data/lib/xero-ruby/models/payroll_nz/address.rb +13 -7
  199. data/lib/xero-ruby/models/payroll_nz/bank_account.rb +13 -7
  200. data/lib/xero-ruby/models/payroll_nz/benefit.rb +13 -7
  201. data/lib/xero-ruby/models/payroll_nz/deduction.rb +13 -7
  202. data/lib/xero-ruby/models/payroll_nz/deduction_line.rb +13 -7
  203. data/lib/xero-ruby/models/payroll_nz/deduction_object.rb +13 -7
  204. data/lib/xero-ruby/models/payroll_nz/deductions.rb +13 -7
  205. data/lib/xero-ruby/models/payroll_nz/earnings_line.rb +13 -7
  206. data/lib/xero-ruby/models/payroll_nz/earnings_order.rb +13 -7
  207. data/lib/xero-ruby/models/payroll_nz/earnings_order_object.rb +13 -7
  208. data/lib/xero-ruby/models/payroll_nz/earnings_orders.rb +13 -7
  209. data/lib/xero-ruby/models/payroll_nz/earnings_rate.rb +13 -7
  210. data/lib/xero-ruby/models/payroll_nz/earnings_rate_object.rb +13 -7
  211. data/lib/xero-ruby/models/payroll_nz/earnings_rates.rb +13 -7
  212. data/lib/xero-ruby/models/payroll_nz/earnings_template.rb +13 -7
  213. data/lib/xero-ruby/models/payroll_nz/earnings_template_object.rb +13 -7
  214. data/lib/xero-ruby/models/payroll_nz/employee.rb +13 -7
  215. data/lib/xero-ruby/models/payroll_nz/employee_earnings_templates.rb +13 -7
  216. data/lib/xero-ruby/models/payroll_nz/employee_leave.rb +13 -7
  217. data/lib/xero-ruby/models/payroll_nz/employee_leave_balance.rb +13 -7
  218. data/lib/xero-ruby/models/payroll_nz/employee_leave_balances.rb +13 -7
  219. data/lib/xero-ruby/models/payroll_nz/employee_leave_object.rb +13 -7
  220. data/lib/xero-ruby/models/payroll_nz/employee_leave_setup.rb +13 -7
  221. data/lib/xero-ruby/models/payroll_nz/employee_leave_setup_object.rb +13 -7
  222. data/lib/xero-ruby/models/payroll_nz/employee_leave_type.rb +13 -7
  223. data/lib/xero-ruby/models/payroll_nz/employee_leave_type_object.rb +13 -7
  224. data/lib/xero-ruby/models/payroll_nz/employee_leave_types.rb +13 -7
  225. data/lib/xero-ruby/models/payroll_nz/employee_leaves.rb +13 -7
  226. data/lib/xero-ruby/models/payroll_nz/employee_object.rb +13 -7
  227. data/lib/xero-ruby/models/payroll_nz/employee_opening_balance.rb +13 -7
  228. data/lib/xero-ruby/models/payroll_nz/employee_opening_balances_object.rb +13 -7
  229. data/lib/xero-ruby/models/payroll_nz/employee_pay_template.rb +13 -7
  230. data/lib/xero-ruby/models/payroll_nz/employee_pay_template_object.rb +13 -7
  231. data/lib/xero-ruby/models/payroll_nz/employee_pay_templates.rb +13 -7
  232. data/lib/xero-ruby/models/payroll_nz/employee_statutory_leave_balance.rb +13 -7
  233. data/lib/xero-ruby/models/payroll_nz/employee_statutory_leave_balance_object.rb +13 -7
  234. data/lib/xero-ruby/models/payroll_nz/employee_statutory_leave_summary.rb +13 -7
  235. data/lib/xero-ruby/models/payroll_nz/employee_statutory_leaves_summaries.rb +13 -7
  236. data/lib/xero-ruby/models/payroll_nz/employee_statutory_sick_leave.rb +13 -7
  237. data/lib/xero-ruby/models/payroll_nz/employee_statutory_sick_leave_object.rb +13 -7
  238. data/lib/xero-ruby/models/payroll_nz/employee_statutory_sick_leaves.rb +13 -7
  239. data/lib/xero-ruby/models/payroll_nz/employee_tax.rb +13 -7
  240. data/lib/xero-ruby/models/payroll_nz/employee_tax_object.rb +13 -7
  241. data/lib/xero-ruby/models/payroll_nz/employees.rb +13 -7
  242. data/lib/xero-ruby/models/payroll_nz/employment.rb +13 -7
  243. data/lib/xero-ruby/models/payroll_nz/employment_object.rb +13 -7
  244. data/lib/xero-ruby/models/payroll_nz/gross_earnings_history.rb +13 -7
  245. data/lib/xero-ruby/models/payroll_nz/invalid_field.rb +13 -7
  246. data/lib/xero-ruby/models/payroll_nz/leave_accrual_line.rb +13 -7
  247. data/lib/xero-ruby/models/payroll_nz/leave_earnings_line.rb +13 -7
  248. data/lib/xero-ruby/models/payroll_nz/leave_period.rb +13 -7
  249. data/lib/xero-ruby/models/payroll_nz/leave_periods.rb +13 -7
  250. data/lib/xero-ruby/models/payroll_nz/leave_type.rb +13 -7
  251. data/lib/xero-ruby/models/payroll_nz/leave_type_object.rb +13 -7
  252. data/lib/xero-ruby/models/payroll_nz/leave_types.rb +13 -7
  253. data/lib/xero-ruby/models/payroll_nz/pagination.rb +13 -7
  254. data/lib/xero-ruby/models/payroll_nz/pay_run.rb +13 -7
  255. data/lib/xero-ruby/models/payroll_nz/pay_run_calendar.rb +13 -7
  256. data/lib/xero-ruby/models/payroll_nz/pay_run_calendar_object.rb +13 -7
  257. data/lib/xero-ruby/models/payroll_nz/pay_run_calendars.rb +13 -7
  258. data/lib/xero-ruby/models/payroll_nz/pay_run_object.rb +13 -7
  259. data/lib/xero-ruby/models/payroll_nz/pay_runs.rb +13 -7
  260. data/lib/xero-ruby/models/payroll_nz/pay_slip.rb +13 -7
  261. data/lib/xero-ruby/models/payroll_nz/pay_slip_object.rb +13 -7
  262. data/lib/xero-ruby/models/payroll_nz/pay_slips.rb +13 -7
  263. data/lib/xero-ruby/models/payroll_nz/payment_line.rb +13 -7
  264. data/lib/xero-ruby/models/payroll_nz/payment_method.rb +13 -7
  265. data/lib/xero-ruby/models/payroll_nz/payment_method_object.rb +13 -7
  266. data/lib/xero-ruby/models/payroll_nz/problem.rb +13 -7
  267. data/lib/xero-ruby/models/payroll_nz/reimbursement.rb +13 -7
  268. data/lib/xero-ruby/models/payroll_nz/reimbursement_line.rb +13 -7
  269. data/lib/xero-ruby/models/payroll_nz/reimbursement_object.rb +13 -7
  270. data/lib/xero-ruby/models/payroll_nz/reimbursements.rb +13 -7
  271. data/lib/xero-ruby/models/payroll_nz/salary_and_wage.rb +13 -7
  272. data/lib/xero-ruby/models/payroll_nz/salary_and_wage_object.rb +13 -7
  273. data/lib/xero-ruby/models/payroll_nz/salary_and_wages.rb +13 -7
  274. data/lib/xero-ruby/models/payroll_nz/settings.rb +13 -7
  275. data/lib/xero-ruby/models/payroll_nz/statutory_deduction.rb +13 -7
  276. data/lib/xero-ruby/models/payroll_nz/statutory_deduction_line.rb +13 -7
  277. data/lib/xero-ruby/models/payroll_nz/statutory_deduction_object.rb +13 -7
  278. data/lib/xero-ruby/models/payroll_nz/statutory_deductions.rb +13 -7
  279. data/lib/xero-ruby/models/payroll_nz/superannuation_line.rb +13 -7
  280. data/lib/xero-ruby/models/payroll_nz/superannuation_object.rb +13 -7
  281. data/lib/xero-ruby/models/payroll_nz/superannuations.rb +13 -7
  282. data/lib/xero-ruby/models/payroll_nz/tax_line.rb +13 -7
  283. data/lib/xero-ruby/models/payroll_nz/tax_settings.rb +13 -7
  284. data/lib/xero-ruby/models/payroll_nz/timesheet.rb +13 -7
  285. data/lib/xero-ruby/models/payroll_nz/timesheet_earnings_line.rb +13 -7
  286. data/lib/xero-ruby/models/payroll_nz/timesheet_line.rb +13 -7
  287. data/lib/xero-ruby/models/payroll_nz/timesheet_line_object.rb +13 -7
  288. data/lib/xero-ruby/models/payroll_nz/timesheet_object.rb +13 -7
  289. data/lib/xero-ruby/models/payroll_nz/timesheets.rb +13 -7
  290. data/lib/xero-ruby/models/payroll_nz/tracking_categories.rb +13 -7
  291. data/lib/xero-ruby/models/payroll_nz/tracking_category.rb +13 -7
  292. data/lib/xero-ruby/models/payroll_uk/account.rb +13 -7
  293. data/lib/xero-ruby/models/payroll_uk/accounts.rb +13 -7
  294. data/lib/xero-ruby/models/payroll_uk/address.rb +13 -7
  295. data/lib/xero-ruby/models/payroll_uk/bank_account.rb +13 -7
  296. data/lib/xero-ruby/models/payroll_uk/benefit.rb +13 -7
  297. data/lib/xero-ruby/models/payroll_uk/benefit_line.rb +13 -7
  298. data/lib/xero-ruby/models/payroll_uk/benefit_object.rb +13 -7
  299. data/lib/xero-ruby/models/payroll_uk/benefits.rb +13 -7
  300. data/lib/xero-ruby/models/payroll_uk/court_order_line.rb +13 -7
  301. data/lib/xero-ruby/models/payroll_uk/deduction.rb +13 -7
  302. data/lib/xero-ruby/models/payroll_uk/deduction_line.rb +13 -7
  303. data/lib/xero-ruby/models/payroll_uk/deduction_object.rb +13 -7
  304. data/lib/xero-ruby/models/payroll_uk/deductions.rb +13 -7
  305. data/lib/xero-ruby/models/payroll_uk/earnings_line.rb +13 -7
  306. data/lib/xero-ruby/models/payroll_uk/earnings_order.rb +13 -7
  307. data/lib/xero-ruby/models/payroll_uk/earnings_order_object.rb +13 -7
  308. data/lib/xero-ruby/models/payroll_uk/earnings_orders.rb +13 -7
  309. data/lib/xero-ruby/models/payroll_uk/earnings_rate.rb +16 -9
  310. data/lib/xero-ruby/models/payroll_uk/earnings_rate_object.rb +13 -7
  311. data/lib/xero-ruby/models/payroll_uk/earnings_rates.rb +13 -7
  312. data/lib/xero-ruby/models/payroll_uk/earnings_template.rb +13 -7
  313. data/lib/xero-ruby/models/payroll_uk/earnings_template_object.rb +13 -7
  314. data/lib/xero-ruby/models/payroll_uk/employee.rb +13 -7
  315. data/lib/xero-ruby/models/payroll_uk/employee_leave.rb +13 -7
  316. data/lib/xero-ruby/models/payroll_uk/employee_leave_balance.rb +13 -7
  317. data/lib/xero-ruby/models/payroll_uk/employee_leave_balances.rb +13 -7
  318. data/lib/xero-ruby/models/payroll_uk/employee_leave_object.rb +13 -7
  319. data/lib/xero-ruby/models/payroll_uk/employee_leave_type.rb +13 -7
  320. data/lib/xero-ruby/models/payroll_uk/employee_leave_type_object.rb +13 -7
  321. data/lib/xero-ruby/models/payroll_uk/employee_leave_types.rb +13 -7
  322. data/lib/xero-ruby/models/payroll_uk/employee_leaves.rb +13 -7
  323. data/lib/xero-ruby/models/payroll_uk/employee_object.rb +13 -7
  324. data/lib/xero-ruby/models/payroll_uk/employee_opening_balances.rb +13 -7
  325. data/lib/xero-ruby/models/payroll_uk/employee_opening_balances_object.rb +13 -7
  326. data/lib/xero-ruby/models/payroll_uk/employee_pay_template.rb +13 -7
  327. data/lib/xero-ruby/models/payroll_uk/employee_pay_template_object.rb +13 -7
  328. data/lib/xero-ruby/models/payroll_uk/employee_pay_templates.rb +13 -7
  329. data/lib/xero-ruby/models/payroll_uk/employee_statutory_leave_balance.rb +13 -7
  330. data/lib/xero-ruby/models/payroll_uk/employee_statutory_leave_balance_object.rb +13 -7
  331. data/lib/xero-ruby/models/payroll_uk/employee_statutory_leave_summary.rb +13 -7
  332. data/lib/xero-ruby/models/payroll_uk/employee_statutory_leaves_summaries.rb +13 -7
  333. data/lib/xero-ruby/models/payroll_uk/employee_statutory_sick_leave.rb +13 -7
  334. data/lib/xero-ruby/models/payroll_uk/employee_statutory_sick_leave_object.rb +13 -7
  335. data/lib/xero-ruby/models/payroll_uk/employee_statutory_sick_leaves.rb +13 -7
  336. data/lib/xero-ruby/models/payroll_uk/employee_tax.rb +13 -7
  337. data/lib/xero-ruby/models/payroll_uk/employee_tax_object.rb +13 -7
  338. data/lib/xero-ruby/models/payroll_uk/employees.rb +13 -7
  339. data/lib/xero-ruby/models/payroll_uk/employment.rb +13 -7
  340. data/lib/xero-ruby/models/payroll_uk/employment_object.rb +13 -7
  341. data/lib/xero-ruby/models/payroll_uk/invalid_field.rb +13 -7
  342. data/lib/xero-ruby/models/payroll_uk/leave_accrual_line.rb +13 -7
  343. data/lib/xero-ruby/models/payroll_uk/leave_earnings_line.rb +13 -7
  344. data/lib/xero-ruby/models/payroll_uk/leave_period.rb +13 -7
  345. data/lib/xero-ruby/models/payroll_uk/leave_periods.rb +13 -7
  346. data/lib/xero-ruby/models/payroll_uk/leave_type.rb +13 -7
  347. data/lib/xero-ruby/models/payroll_uk/leave_type_object.rb +13 -7
  348. data/lib/xero-ruby/models/payroll_uk/leave_types.rb +13 -7
  349. data/lib/xero-ruby/models/payroll_uk/pagination.rb +13 -7
  350. data/lib/xero-ruby/models/payroll_uk/pay_run.rb +13 -7
  351. data/lib/xero-ruby/models/payroll_uk/pay_run_calendar.rb +13 -7
  352. data/lib/xero-ruby/models/payroll_uk/pay_run_calendar_object.rb +13 -7
  353. data/lib/xero-ruby/models/payroll_uk/pay_run_calendars.rb +13 -7
  354. data/lib/xero-ruby/models/payroll_uk/pay_run_object.rb +13 -7
  355. data/lib/xero-ruby/models/payroll_uk/pay_runs.rb +13 -7
  356. data/lib/xero-ruby/models/payroll_uk/payment_line.rb +13 -7
  357. data/lib/xero-ruby/models/payroll_uk/payment_method.rb +13 -7
  358. data/lib/xero-ruby/models/payroll_uk/payment_method_object.rb +13 -7
  359. data/lib/xero-ruby/models/payroll_uk/payslip.rb +13 -7
  360. data/lib/xero-ruby/models/payroll_uk/payslip_object.rb +13 -7
  361. data/lib/xero-ruby/models/payroll_uk/payslips.rb +13 -7
  362. data/lib/xero-ruby/models/payroll_uk/problem.rb +13 -7
  363. data/lib/xero-ruby/models/payroll_uk/reimbursement.rb +13 -7
  364. data/lib/xero-ruby/models/payroll_uk/reimbursement_line.rb +13 -7
  365. data/lib/xero-ruby/models/payroll_uk/reimbursement_object.rb +13 -7
  366. data/lib/xero-ruby/models/payroll_uk/reimbursements.rb +13 -7
  367. data/lib/xero-ruby/models/payroll_uk/salary_and_wage.rb +13 -7
  368. data/lib/xero-ruby/models/payroll_uk/salary_and_wage_object.rb +13 -7
  369. data/lib/xero-ruby/models/payroll_uk/salary_and_wages.rb +13 -7
  370. data/lib/xero-ruby/models/payroll_uk/settings.rb +13 -7
  371. data/lib/xero-ruby/models/payroll_uk/statutory_deduction.rb +13 -7
  372. data/lib/xero-ruby/models/payroll_uk/tax_line.rb +13 -7
  373. data/lib/xero-ruby/models/payroll_uk/timesheet.rb +13 -7
  374. data/lib/xero-ruby/models/payroll_uk/timesheet_earnings_line.rb +13 -7
  375. data/lib/xero-ruby/models/payroll_uk/timesheet_line.rb +13 -7
  376. data/lib/xero-ruby/models/payroll_uk/timesheet_line_object.rb +13 -7
  377. data/lib/xero-ruby/models/payroll_uk/timesheet_object.rb +13 -7
  378. data/lib/xero-ruby/models/payroll_uk/timesheets.rb +13 -7
  379. data/lib/xero-ruby/models/payroll_uk/tracking_categories.rb +13 -7
  380. data/lib/xero-ruby/models/payroll_uk/tracking_category.rb +13 -7
  381. data/lib/xero-ruby/models/projects/amount.rb +13 -7
  382. data/lib/xero-ruby/models/projects/error.rb +13 -7
  383. data/lib/xero-ruby/models/projects/pagination.rb +13 -7
  384. data/lib/xero-ruby/models/projects/project.rb +13 -7
  385. data/lib/xero-ruby/models/projects/project_create_or_update.rb +13 -7
  386. data/lib/xero-ruby/models/projects/project_patch.rb +13 -7
  387. data/lib/xero-ruby/models/projects/project_user.rb +13 -7
  388. data/lib/xero-ruby/models/projects/project_users.rb +13 -7
  389. data/lib/xero-ruby/models/projects/projects.rb +13 -7
  390. data/lib/xero-ruby/models/projects/task.rb +13 -7
  391. data/lib/xero-ruby/models/projects/task_create_or_update.rb +13 -7
  392. data/lib/xero-ruby/models/projects/tasks.rb +13 -7
  393. data/lib/xero-ruby/models/projects/time_entries.rb +13 -7
  394. data/lib/xero-ruby/models/projects/time_entry.rb +13 -7
  395. data/lib/xero-ruby/models/projects/time_entry_create_or_update.rb +13 -7
  396. data/lib/xero-ruby/version.rb +2 -2
  397. data/spec/helper_methods_spec.rb +28 -0
  398. metadata +9 -5
@@ -257,7 +257,7 @@ module XeroRuby::Accounting
257
257
  value = self.send(attr)
258
258
  next if value.nil?
259
259
  key = downcase ? attr : param
260
- hash[key] = _to_hash(value)
260
+ hash[key] = _to_hash(value, downcase: downcase)
261
261
  end
262
262
  hash
263
263
  end
@@ -271,15 +271,17 @@ module XeroRuby::Accounting
271
271
  # For object, use to_hash. Otherwise, just return the value
272
272
  # @param [Object] value Any valid value
273
273
  # @return [Hash] Returns the value in the form of hash
274
- def _to_hash(value)
274
+ def _to_hash(value, downcase: false)
275
275
  if value.is_a?(Array)
276
- value.compact.map { |v| _to_hash(v) }
276
+ value.map do |v|
277
+ v.to_hash(downcase: downcase)
278
+ end
277
279
  elsif value.is_a?(Hash)
278
280
  {}.tap do |hash|
279
- value.each { |k, v| hash[k] = _to_hash(v) }
281
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
280
282
  end
281
283
  elsif value.respond_to? :to_hash
282
- value.to_hash
284
+ value.to_hash(downcase: downcase)
283
285
  else
284
286
  value
285
287
  end
@@ -287,8 +289,12 @@ module XeroRuby::Accounting
287
289
 
288
290
  def parse_date(datestring)
289
291
  if datestring.include?('Date')
290
- seconds_since_epoch = datestring.scan(/[0-9]+/)[0].to_i / 1000.0
291
- Time.at(seconds_since_epoch).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
292
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
293
+ original, date, timezone = *date_pattern.match(datestring)
294
+ date = (date.to_i / 1000)
295
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
296
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
297
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
292
298
  else # handle date 'types' for small subset of payroll API's
293
299
  Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
294
300
  end
@@ -176,7 +176,7 @@ module XeroRuby::Accounting
176
176
  value = self.send(attr)
177
177
  next if value.nil?
178
178
  key = downcase ? attr : param
179
- hash[key] = _to_hash(value)
179
+ hash[key] = _to_hash(value, downcase: downcase)
180
180
  end
181
181
  hash
182
182
  end
@@ -190,15 +190,17 @@ module XeroRuby::Accounting
190
190
  # For object, use to_hash. Otherwise, just return the value
191
191
  # @param [Object] value Any valid value
192
192
  # @return [Hash] Returns the value in the form of hash
193
- def _to_hash(value)
193
+ def _to_hash(value, downcase: false)
194
194
  if value.is_a?(Array)
195
- value.compact.map { |v| _to_hash(v) }
195
+ value.map do |v|
196
+ v.to_hash(downcase: downcase)
197
+ end
196
198
  elsif value.is_a?(Hash)
197
199
  {}.tap do |hash|
198
- value.each { |k, v| hash[k] = _to_hash(v) }
200
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
199
201
  end
200
202
  elsif value.respond_to? :to_hash
201
- value.to_hash
203
+ value.to_hash(downcase: downcase)
202
204
  else
203
205
  value
204
206
  end
@@ -206,8 +208,12 @@ module XeroRuby::Accounting
206
208
 
207
209
  def parse_date(datestring)
208
210
  if datestring.include?('Date')
209
- seconds_since_epoch = datestring.scan(/[0-9]+/)[0].to_i / 1000.0
210
- Time.at(seconds_since_epoch).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
211
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
212
+ original, date, timezone = *date_pattern.match(datestring)
213
+ date = (date.to_i / 1000)
214
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
215
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
216
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
211
217
  else # handle date 'types' for small subset of payroll API's
212
218
  Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
213
219
  end
@@ -176,7 +176,7 @@ module XeroRuby::Accounting
176
176
  value = self.send(attr)
177
177
  next if value.nil?
178
178
  key = downcase ? attr : param
179
- hash[key] = _to_hash(value)
179
+ hash[key] = _to_hash(value, downcase: downcase)
180
180
  end
181
181
  hash
182
182
  end
@@ -190,15 +190,17 @@ module XeroRuby::Accounting
190
190
  # For object, use to_hash. Otherwise, just return the value
191
191
  # @param [Object] value Any valid value
192
192
  # @return [Hash] Returns the value in the form of hash
193
- def _to_hash(value)
193
+ def _to_hash(value, downcase: false)
194
194
  if value.is_a?(Array)
195
- value.compact.map { |v| _to_hash(v) }
195
+ value.map do |v|
196
+ v.to_hash(downcase: downcase)
197
+ end
196
198
  elsif value.is_a?(Hash)
197
199
  {}.tap do |hash|
198
- value.each { |k, v| hash[k] = _to_hash(v) }
200
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
199
201
  end
200
202
  elsif value.respond_to? :to_hash
201
- value.to_hash
203
+ value.to_hash(downcase: downcase)
202
204
  else
203
205
  value
204
206
  end
@@ -206,8 +208,12 @@ module XeroRuby::Accounting
206
208
 
207
209
  def parse_date(datestring)
208
210
  if datestring.include?('Date')
209
- seconds_since_epoch = datestring.scan(/[0-9]+/)[0].to_i / 1000.0
210
- Time.at(seconds_since_epoch).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
211
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
212
+ original, date, timezone = *date_pattern.match(datestring)
213
+ date = (date.to_i / 1000)
214
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
215
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
216
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
211
217
  else # handle date 'types' for small subset of payroll API's
212
218
  Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
213
219
  end
@@ -661,7 +661,7 @@ module XeroRuby::Accounting
661
661
  value = self.send(attr)
662
662
  next if value.nil?
663
663
  key = downcase ? attr : param
664
- hash[key] = _to_hash(value)
664
+ hash[key] = _to_hash(value, downcase: downcase)
665
665
  end
666
666
  hash
667
667
  end
@@ -675,15 +675,17 @@ module XeroRuby::Accounting
675
675
  # For object, use to_hash. Otherwise, just return the value
676
676
  # @param [Object] value Any valid value
677
677
  # @return [Hash] Returns the value in the form of hash
678
- def _to_hash(value)
678
+ def _to_hash(value, downcase: false)
679
679
  if value.is_a?(Array)
680
- value.compact.map { |v| _to_hash(v) }
680
+ value.map do |v|
681
+ v.to_hash(downcase: downcase)
682
+ end
681
683
  elsif value.is_a?(Hash)
682
684
  {}.tap do |hash|
683
- value.each { |k, v| hash[k] = _to_hash(v) }
685
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
684
686
  end
685
687
  elsif value.respond_to? :to_hash
686
- value.to_hash
688
+ value.to_hash(downcase: downcase)
687
689
  else
688
690
  value
689
691
  end
@@ -691,8 +693,12 @@ module XeroRuby::Accounting
691
693
 
692
694
  def parse_date(datestring)
693
695
  if datestring.include?('Date')
694
- seconds_since_epoch = datestring.scan(/[0-9]+/)[0].to_i / 1000.0
695
- Time.at(seconds_since_epoch).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
696
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
697
+ original, date, timezone = *date_pattern.match(datestring)
698
+ date = (date.to_i / 1000)
699
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
700
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
701
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
696
702
  else # handle date 'types' for small subset of payroll API's
697
703
  Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
698
704
  end
@@ -176,7 +176,7 @@ module XeroRuby::Accounting
176
176
  value = self.send(attr)
177
177
  next if value.nil?
178
178
  key = downcase ? attr : param
179
- hash[key] = _to_hash(value)
179
+ hash[key] = _to_hash(value, downcase: downcase)
180
180
  end
181
181
  hash
182
182
  end
@@ -190,15 +190,17 @@ module XeroRuby::Accounting
190
190
  # For object, use to_hash. Otherwise, just return the value
191
191
  # @param [Object] value Any valid value
192
192
  # @return [Hash] Returns the value in the form of hash
193
- def _to_hash(value)
193
+ def _to_hash(value, downcase: false)
194
194
  if value.is_a?(Array)
195
- value.compact.map { |v| _to_hash(v) }
195
+ value.map do |v|
196
+ v.to_hash(downcase: downcase)
197
+ end
196
198
  elsif value.is_a?(Hash)
197
199
  {}.tap do |hash|
198
- value.each { |k, v| hash[k] = _to_hash(v) }
200
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
199
201
  end
200
202
  elsif value.respond_to? :to_hash
201
- value.to_hash
203
+ value.to_hash(downcase: downcase)
202
204
  else
203
205
  value
204
206
  end
@@ -206,8 +208,12 @@ module XeroRuby::Accounting
206
208
 
207
209
  def parse_date(datestring)
208
210
  if datestring.include?('Date')
209
- seconds_since_epoch = datestring.scan(/[0-9]+/)[0].to_i / 1000.0
210
- Time.at(seconds_since_epoch).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
211
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
212
+ original, date, timezone = *date_pattern.match(datestring)
213
+ date = (date.to_i / 1000)
214
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
215
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
216
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
211
217
  else # handle date 'types' for small subset of payroll API's
212
218
  Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
213
219
  end
@@ -178,7 +178,7 @@ module XeroRuby::Accounting
178
178
  value = self.send(attr)
179
179
  next if value.nil?
180
180
  key = downcase ? attr : param
181
- hash[key] = _to_hash(value)
181
+ hash[key] = _to_hash(value, downcase: downcase)
182
182
  end
183
183
  hash
184
184
  end
@@ -192,15 +192,17 @@ module XeroRuby::Accounting
192
192
  # For object, use to_hash. Otherwise, just return the value
193
193
  # @param [Object] value Any valid value
194
194
  # @return [Hash] Returns the value in the form of hash
195
- def _to_hash(value)
195
+ def _to_hash(value, downcase: false)
196
196
  if value.is_a?(Array)
197
- value.compact.map { |v| _to_hash(v) }
197
+ value.map do |v|
198
+ v.to_hash(downcase: downcase)
199
+ end
198
200
  elsif value.is_a?(Hash)
199
201
  {}.tap do |hash|
200
- value.each { |k, v| hash[k] = _to_hash(v) }
202
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
201
203
  end
202
204
  elsif value.respond_to? :to_hash
203
- value.to_hash
205
+ value.to_hash(downcase: downcase)
204
206
  else
205
207
  value
206
208
  end
@@ -208,8 +210,12 @@ module XeroRuby::Accounting
208
210
 
209
211
  def parse_date(datestring)
210
212
  if datestring.include?('Date')
211
- seconds_since_epoch = datestring.scan(/[0-9]+/)[0].to_i / 1000.0
212
- Time.at(seconds_since_epoch).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
213
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
214
+ original, date, timezone = *date_pattern.match(datestring)
215
+ date = (date.to_i / 1000)
216
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
217
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
218
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
213
219
  else # handle date 'types' for small subset of payroll API's
214
220
  Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
215
221
  end
@@ -178,7 +178,7 @@ module XeroRuby::Accounting
178
178
  value = self.send(attr)
179
179
  next if value.nil?
180
180
  key = downcase ? attr : param
181
- hash[key] = _to_hash(value)
181
+ hash[key] = _to_hash(value, downcase: downcase)
182
182
  end
183
183
  hash
184
184
  end
@@ -192,15 +192,17 @@ module XeroRuby::Accounting
192
192
  # For object, use to_hash. Otherwise, just return the value
193
193
  # @param [Object] value Any valid value
194
194
  # @return [Hash] Returns the value in the form of hash
195
- def _to_hash(value)
195
+ def _to_hash(value, downcase: false)
196
196
  if value.is_a?(Array)
197
- value.compact.map { |v| _to_hash(v) }
197
+ value.map do |v|
198
+ v.to_hash(downcase: downcase)
199
+ end
198
200
  elsif value.is_a?(Hash)
199
201
  {}.tap do |hash|
200
- value.each { |k, v| hash[k] = _to_hash(v) }
202
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
201
203
  end
202
204
  elsif value.respond_to? :to_hash
203
- value.to_hash
205
+ value.to_hash(downcase: downcase)
204
206
  else
205
207
  value
206
208
  end
@@ -208,8 +210,12 @@ module XeroRuby::Accounting
208
210
 
209
211
  def parse_date(datestring)
210
212
  if datestring.include?('Date')
211
- seconds_since_epoch = datestring.scan(/[0-9]+/)[0].to_i / 1000.0
212
- Time.at(seconds_since_epoch).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
213
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
214
+ original, date, timezone = *date_pattern.match(datestring)
215
+ date = (date.to_i / 1000)
216
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
217
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
218
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
213
219
  else # handle date 'types' for small subset of payroll API's
214
220
  Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
215
221
  end
@@ -397,7 +397,7 @@ module XeroRuby::Accounting
397
397
  value = self.send(attr)
398
398
  next if value.nil?
399
399
  key = downcase ? attr : param
400
- hash[key] = _to_hash(value)
400
+ hash[key] = _to_hash(value, downcase: downcase)
401
401
  end
402
402
  hash
403
403
  end
@@ -411,15 +411,17 @@ module XeroRuby::Accounting
411
411
  # For object, use to_hash. Otherwise, just return the value
412
412
  # @param [Object] value Any valid value
413
413
  # @return [Hash] Returns the value in the form of hash
414
- def _to_hash(value)
414
+ def _to_hash(value, downcase: false)
415
415
  if value.is_a?(Array)
416
- value.compact.map { |v| _to_hash(v) }
416
+ value.map do |v|
417
+ v.to_hash(downcase: downcase)
418
+ end
417
419
  elsif value.is_a?(Hash)
418
420
  {}.tap do |hash|
419
- value.each { |k, v| hash[k] = _to_hash(v) }
421
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
420
422
  end
421
423
  elsif value.respond_to? :to_hash
422
- value.to_hash
424
+ value.to_hash(downcase: downcase)
423
425
  else
424
426
  value
425
427
  end
@@ -427,8 +429,12 @@ module XeroRuby::Accounting
427
429
 
428
430
  def parse_date(datestring)
429
431
  if datestring.include?('Date')
430
- seconds_since_epoch = datestring.scan(/[0-9]+/)[0].to_i / 1000.0
431
- Time.at(seconds_since_epoch).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
432
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
433
+ original, date, timezone = *date_pattern.match(datestring)
434
+ date = (date.to_i / 1000)
435
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
436
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
437
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
432
438
  else # handle date 'types' for small subset of payroll API's
433
439
  Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
434
440
  end
@@ -178,7 +178,7 @@ module XeroRuby::Accounting
178
178
  value = self.send(attr)
179
179
  next if value.nil?
180
180
  key = downcase ? attr : param
181
- hash[key] = _to_hash(value)
181
+ hash[key] = _to_hash(value, downcase: downcase)
182
182
  end
183
183
  hash
184
184
  end
@@ -192,15 +192,17 @@ module XeroRuby::Accounting
192
192
  # For object, use to_hash. Otherwise, just return the value
193
193
  # @param [Object] value Any valid value
194
194
  # @return [Hash] Returns the value in the form of hash
195
- def _to_hash(value)
195
+ def _to_hash(value, downcase: false)
196
196
  if value.is_a?(Array)
197
- value.compact.map { |v| _to_hash(v) }
197
+ value.map do |v|
198
+ v.to_hash(downcase: downcase)
199
+ end
198
200
  elsif value.is_a?(Hash)
199
201
  {}.tap do |hash|
200
- value.each { |k, v| hash[k] = _to_hash(v) }
202
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
201
203
  end
202
204
  elsif value.respond_to? :to_hash
203
- value.to_hash
205
+ value.to_hash(downcase: downcase)
204
206
  else
205
207
  value
206
208
  end
@@ -208,8 +210,12 @@ module XeroRuby::Accounting
208
210
 
209
211
  def parse_date(datestring)
210
212
  if datestring.include?('Date')
211
- seconds_since_epoch = datestring.scan(/[0-9]+/)[0].to_i / 1000.0
212
- Time.at(seconds_since_epoch).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
213
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
214
+ original, date, timezone = *date_pattern.match(datestring)
215
+ date = (date.to_i / 1000)
216
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
217
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
218
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
213
219
  else # handle date 'types' for small subset of payroll API's
214
220
  Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
215
221
  end
@@ -307,7 +307,7 @@ module XeroRuby::Accounting
307
307
  value = self.send(attr)
308
308
  next if value.nil?
309
309
  key = downcase ? attr : param
310
- hash[key] = _to_hash(value)
310
+ hash[key] = _to_hash(value, downcase: downcase)
311
311
  end
312
312
  hash
313
313
  end
@@ -321,15 +321,17 @@ module XeroRuby::Accounting
321
321
  # For object, use to_hash. Otherwise, just return the value
322
322
  # @param [Object] value Any valid value
323
323
  # @return [Hash] Returns the value in the form of hash
324
- def _to_hash(value)
324
+ def _to_hash(value, downcase: false)
325
325
  if value.is_a?(Array)
326
- value.compact.map { |v| _to_hash(v) }
326
+ value.map do |v|
327
+ v.to_hash(downcase: downcase)
328
+ end
327
329
  elsif value.is_a?(Hash)
328
330
  {}.tap do |hash|
329
- value.each { |k, v| hash[k] = _to_hash(v) }
331
+ value.map { |k, v| hash[k] = _to_hash(v, downcase: downcase) }
330
332
  end
331
333
  elsif value.respond_to? :to_hash
332
- value.to_hash
334
+ value.to_hash(downcase: downcase)
333
335
  else
334
336
  value
335
337
  end
@@ -337,8 +339,12 @@ module XeroRuby::Accounting
337
339
 
338
340
  def parse_date(datestring)
339
341
  if datestring.include?('Date')
340
- seconds_since_epoch = datestring.scan(/[0-9]+/)[0].to_i / 1000.0
341
- Time.at(seconds_since_epoch).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
342
+ date_pattern = /\/Date\((-?\d+)(\+\d+)?\)\//
343
+ original, date, timezone = *date_pattern.match(datestring)
344
+ date = (date.to_i / 1000)
345
+ Time.at(date).utc.strftime('%Y-%m-%dT%H:%M:%S%z').to_s
346
+ elsif /(\d\d\d\d)-(\d\d)/.match(datestring) # handles dates w/out Days: YYYY-MM*-DD
347
+ Time.parse(datestring + '-01').strftime('%Y-%m-%dT%H:%M:%S').to_s
342
348
  else # handle date 'types' for small subset of payroll API's
343
349
  Time.parse(datestring).strftime('%Y-%m-%dT%H:%M:%S').to_s
344
350
  end