xero-ruby 1.0 → 2.0.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 (343) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +43 -3
  3. data/build_notes.md +21 -0
  4. data/docs/accounting/AccountingApi.md +1514 -722
  5. data/docs/accounting/Allocation.md +11 -1
  6. data/docs/accounting/BankTransfer.md +1 -1
  7. data/docs/accounting/BatchPayment.md +1 -1
  8. data/docs/accounting/Contact.md +2 -2
  9. data/docs/accounting/CreditNote.md +2 -2
  10. data/docs/accounting/Invoice.md +2 -2
  11. data/docs/accounting/Journal.md +1 -1
  12. data/docs/accounting/ManualJournalLine.md +2 -0
  13. data/docs/accounting/Organisation.md +3 -1
  14. data/docs/accounting/Payment.md +6 -4
  15. data/docs/accounting/Quote.md +5 -1
  16. data/docs/accounting/Report.md +1 -1
  17. data/docs/accounting/{TenNinteyNineContact.md → TenNinetyNineContact.md} +2 -2
  18. data/docs/assets/AssetApi.md +40 -16
  19. data/docs/assets/AssetType.md +1 -1
  20. data/docs/projects/Amount.md +19 -0
  21. data/docs/projects/ChargeType.md +16 -0
  22. data/docs/projects/CurrencyCode.md +16 -0
  23. data/docs/projects/Error.md +19 -0
  24. data/docs/projects/Pagination.md +23 -0
  25. data/docs/projects/Project.md +59 -0
  26. data/docs/projects/ProjectApi.md +979 -0
  27. data/docs/projects/ProjectCreateOrUpdate.md +23 -0
  28. data/docs/projects/ProjectPatch.md +17 -0
  29. data/docs/projects/ProjectStatus.md +16 -0
  30. data/docs/projects/ProjectUser.md +21 -0
  31. data/docs/projects/ProjectUsers.md +19 -0
  32. data/docs/projects/Projects.md +19 -0
  33. data/docs/projects/Task.md +45 -0
  34. data/docs/projects/TaskCreateOrUpdate.md +23 -0
  35. data/docs/projects/Tasks.md +19 -0
  36. data/docs/projects/TimeEntries.md +19 -0
  37. data/docs/projects/TimeEntry.md +33 -0
  38. data/docs/projects/TimeEntryCreateOrUpdate.md +25 -0
  39. data/lib/xero-ruby.rb +22 -3
  40. data/lib/xero-ruby/api/accounting_api.rb +85 -9
  41. data/lib/xero-ruby/api/asset_api.rb +3 -3
  42. data/lib/xero-ruby/api/project_api.rb +1035 -0
  43. data/lib/xero-ruby/api_client.rb +103 -37
  44. data/lib/xero-ruby/api_error.rb +2 -2
  45. data/lib/xero-ruby/configuration.rb +4 -5
  46. data/lib/xero-ruby/models/accounting/account.rb +61 -20
  47. data/lib/xero-ruby/models/accounting/account_type.rb +2 -2
  48. data/lib/xero-ruby/models/accounting/accounts.rb +8 -3
  49. data/lib/xero-ruby/models/accounting/accounts_payable.rb +11 -5
  50. data/lib/xero-ruby/models/accounting/accounts_receivable.rb +11 -5
  51. data/lib/xero-ruby/models/accounting/address.rb +19 -12
  52. data/lib/xero-ruby/models/accounting/allocation.rb +66 -9
  53. data/lib/xero-ruby/models/accounting/allocations.rb +8 -3
  54. data/lib/xero-ruby/models/accounting/attachment.rb +12 -8
  55. data/lib/xero-ruby/models/accounting/attachments.rb +8 -3
  56. data/lib/xero-ruby/models/accounting/balances.rb +9 -3
  57. data/lib/xero-ruby/models/accounting/bank_transaction.rb +43 -24
  58. data/lib/xero-ruby/models/accounting/bank_transactions.rb +8 -3
  59. data/lib/xero-ruby/models/accounting/bank_transfer.rb +20 -14
  60. data/lib/xero-ruby/models/accounting/bank_transfers.rb +8 -3
  61. data/lib/xero-ruby/models/accounting/batch_payment.rb +29 -19
  62. data/lib/xero-ruby/models/accounting/batch_payment_details.rb +11 -7
  63. data/lib/xero-ruby/models/accounting/batch_payments.rb +8 -3
  64. data/lib/xero-ruby/models/accounting/bill.rb +8 -3
  65. data/lib/xero-ruby/models/accounting/branding_theme.rb +13 -8
  66. data/lib/xero-ruby/models/accounting/branding_themes.rb +8 -3
  67. data/lib/xero-ruby/models/accounting/cis_org_setting.rb +9 -5
  68. data/lib/xero-ruby/models/accounting/cis_setting.rb +8 -4
  69. data/lib/xero-ruby/models/accounting/cis_settings.rb +8 -3
  70. data/lib/xero-ruby/models/accounting/contact.rb +51 -37
  71. data/lib/xero-ruby/models/accounting/contact_group.rb +12 -6
  72. data/lib/xero-ruby/models/accounting/contact_groups.rb +8 -3
  73. data/lib/xero-ruby/models/accounting/contact_person.rb +10 -6
  74. data/lib/xero-ruby/models/accounting/contacts.rb +8 -3
  75. data/lib/xero-ruby/models/accounting/country_code.rb +2 -2
  76. data/lib/xero-ruby/models/accounting/credit_note.rb +47 -30
  77. data/lib/xero-ruby/models/accounting/credit_notes.rb +8 -3
  78. data/lib/xero-ruby/models/accounting/currencies.rb +8 -3
  79. data/lib/xero-ruby/models/accounting/currency.rb +9 -4
  80. data/lib/xero-ruby/models/accounting/currency_code.rb +4 -4
  81. data/lib/xero-ruby/models/accounting/element.rb +14 -4
  82. data/lib/xero-ruby/models/accounting/employee.rb +17 -8
  83. data/lib/xero-ruby/models/accounting/employees.rb +8 -3
  84. data/lib/xero-ruby/models/accounting/error.rb +10 -6
  85. data/lib/xero-ruby/models/accounting/expense_claim.rb +26 -15
  86. data/lib/xero-ruby/models/accounting/expense_claims.rb +8 -3
  87. data/lib/xero-ruby/models/accounting/external_link.rb +14 -4
  88. data/lib/xero-ruby/models/accounting/history_record.rb +10 -6
  89. data/lib/xero-ruby/models/accounting/history_records.rb +8 -3
  90. data/lib/xero-ruby/models/accounting/invoice.rb +69 -46
  91. data/lib/xero-ruby/models/accounting/invoice_reminder.rb +7 -3
  92. data/lib/xero-ruby/models/accounting/invoice_reminders.rb +8 -3
  93. data/lib/xero-ruby/models/accounting/invoices.rb +8 -3
  94. data/lib/xero-ruby/models/accounting/item.rb +24 -18
  95. data/lib/xero-ruby/models/accounting/items.rb +8 -3
  96. data/lib/xero-ruby/models/accounting/journal.rb +40 -11
  97. data/lib/xero-ruby/models/accounting/journal_line.rb +21 -16
  98. data/lib/xero-ruby/models/accounting/journals.rb +8 -3
  99. data/lib/xero-ruby/models/accounting/line_amount_types.rb +2 -2
  100. data/lib/xero-ruby/models/accounting/line_item.rb +25 -21
  101. data/lib/xero-ruby/models/accounting/line_item_tracking.rb +10 -6
  102. data/lib/xero-ruby/models/accounting/linked_transaction.rb +25 -13
  103. data/lib/xero-ruby/models/accounting/linked_transactions.rb +8 -3
  104. data/lib/xero-ruby/models/accounting/manual_journal.rb +25 -15
  105. data/lib/xero-ruby/models/accounting/manual_journal_line.rb +26 -12
  106. data/lib/xero-ruby/models/accounting/manual_journals.rb +8 -3
  107. data/lib/xero-ruby/models/accounting/online_invoice.rb +7 -3
  108. data/lib/xero-ruby/models/accounting/online_invoices.rb +8 -3
  109. data/lib/xero-ruby/models/accounting/organisation.rb +122 -32
  110. data/lib/xero-ruby/models/accounting/organisations.rb +8 -3
  111. data/lib/xero-ruby/models/accounting/overpayment.rb +36 -23
  112. data/lib/xero-ruby/models/accounting/overpayments.rb +8 -3
  113. data/lib/xero-ruby/models/accounting/payment.rb +57 -24
  114. data/lib/xero-ruby/models/accounting/payment_delete.rb +7 -3
  115. data/lib/xero-ruby/models/accounting/payment_service.rb +12 -8
  116. data/lib/xero-ruby/models/accounting/payment_services.rb +8 -3
  117. data/lib/xero-ruby/models/accounting/payment_term.rb +9 -3
  118. data/lib/xero-ruby/models/accounting/payment_term_type.rb +2 -2
  119. data/lib/xero-ruby/models/accounting/payments.rb +8 -3
  120. data/lib/xero-ruby/models/accounting/phone.rb +16 -6
  121. data/lib/xero-ruby/models/accounting/prepayment.rb +37 -23
  122. data/lib/xero-ruby/models/accounting/prepayments.rb +8 -3
  123. data/lib/xero-ruby/models/accounting/purchase.rb +11 -7
  124. data/lib/xero-ruby/models/accounting/purchase_order.rb +45 -33
  125. data/lib/xero-ruby/models/accounting/purchase_orders.rb +8 -3
  126. data/lib/xero-ruby/models/accounting/quote.rb +58 -28
  127. data/lib/xero-ruby/models/accounting/quote_line_amount_types.rb +2 -2
  128. data/lib/xero-ruby/models/accounting/quote_status_codes.rb +3 -2
  129. data/lib/xero-ruby/models/accounting/quotes.rb +8 -3
  130. data/lib/xero-ruby/models/accounting/receipt.rb +32 -19
  131. data/lib/xero-ruby/models/accounting/receipts.rb +8 -3
  132. data/lib/xero-ruby/models/accounting/repeating_invoice.rb +30 -17
  133. data/lib/xero-ruby/models/accounting/repeating_invoices.rb +8 -3
  134. data/lib/xero-ruby/models/accounting/report.rb +15 -9
  135. data/lib/xero-ruby/models/accounting/report_attribute.rb +9 -3
  136. data/lib/xero-ruby/models/accounting/report_cell.rb +9 -3
  137. data/lib/xero-ruby/models/accounting/report_fields.rb +10 -3
  138. data/lib/xero-ruby/models/accounting/report_row.rb +10 -3
  139. data/lib/xero-ruby/models/accounting/report_rows.rb +11 -3
  140. data/lib/xero-ruby/models/accounting/report_with_row.rb +15 -9
  141. data/lib/xero-ruby/models/accounting/report_with_rows.rb +8 -3
  142. data/lib/xero-ruby/models/accounting/reports.rb +8 -3
  143. data/lib/xero-ruby/models/accounting/request_empty.rb +7 -3
  144. data/lib/xero-ruby/models/accounting/row_type.rb +2 -2
  145. data/lib/xero-ruby/models/accounting/sales_tracking_category.rb +8 -4
  146. data/lib/xero-ruby/models/accounting/schedule.rb +23 -11
  147. data/lib/xero-ruby/models/accounting/tax_component.rb +11 -7
  148. data/lib/xero-ruby/models/accounting/tax_rate.rb +100 -18
  149. data/lib/xero-ruby/models/accounting/tax_rates.rb +8 -3
  150. data/lib/xero-ruby/models/accounting/tax_type.rb +6 -2
  151. data/lib/xero-ruby/models/accounting/{ten_nintey_nine_contact.rb → ten_ninety_nine_contact.rb} +44 -40
  152. data/lib/xero-ruby/models/accounting/time_zone.rb +2 -2
  153. data/lib/xero-ruby/models/accounting/tracking_categories.rb +8 -3
  154. data/lib/xero-ruby/models/accounting/tracking_category.rb +15 -8
  155. data/lib/xero-ruby/models/accounting/tracking_option.rb +13 -6
  156. data/lib/xero-ruby/models/accounting/tracking_options.rb +8 -3
  157. data/lib/xero-ruby/models/accounting/user.rb +20 -9
  158. data/lib/xero-ruby/models/accounting/users.rb +8 -3
  159. data/lib/xero-ruby/models/accounting/validation_error.rb +7 -3
  160. data/lib/xero-ruby/models/assets/asset.rb +24 -17
  161. data/lib/xero-ruby/models/assets/asset_status.rb +2 -2
  162. data/lib/xero-ruby/models/assets/asset_status_query_param.rb +2 -2
  163. data/lib/xero-ruby/models/assets/asset_type.rb +13 -13
  164. data/lib/xero-ruby/models/assets/assets.rb +9 -3
  165. data/lib/xero-ruby/models/assets/book_depreciation_detail.rb +19 -15
  166. data/lib/xero-ruby/models/assets/book_depreciation_setting.rb +26 -11
  167. data/lib/xero-ruby/models/assets/error.rb +11 -7
  168. data/lib/xero-ruby/models/assets/field_validation_errors_element.rb +12 -8
  169. data/lib/xero-ruby/models/assets/pagination.rb +11 -3
  170. data/lib/xero-ruby/models/assets/resource_validation_errors_element.rb +11 -7
  171. data/lib/xero-ruby/models/assets/setting.rb +14 -10
  172. data/lib/xero-ruby/models/projects/amount.rb +218 -0
  173. data/lib/xero-ruby/models/projects/charge_type.rb +38 -0
  174. data/lib/xero-ruby/models/projects/currency_code.rb +199 -0
  175. data/lib/xero-ruby/models/projects/error.rb +218 -0
  176. data/lib/xero-ruby/models/projects/pagination.rb +238 -0
  177. data/lib/xero-ruby/models/projects/project.rb +423 -0
  178. data/lib/xero-ruby/models/projects/project_create_or_update.rb +243 -0
  179. data/lib/xero-ruby/models/projects/project_patch.rb +213 -0
  180. data/lib/xero-ruby/models/projects/project_status.rb +37 -0
  181. data/lib/xero-ruby/models/projects/project_user.rb +228 -0
  182. data/lib/xero-ruby/models/projects/project_users.rb +220 -0
  183. data/lib/xero-ruby/models/projects/projects.rb +220 -0
  184. data/lib/xero-ruby/models/projects/task.rb +385 -0
  185. data/lib/xero-ruby/models/projects/task_create_or_update.rb +253 -0
  186. data/lib/xero-ruby/models/projects/tasks.rb +220 -0
  187. data/lib/xero-ruby/models/projects/time_entries.rb +220 -0
  188. data/lib/xero-ruby/models/projects/time_entry.rb +324 -0
  189. data/lib/xero-ruby/models/projects/time_entry_create_or_update.rb +268 -0
  190. data/lib/xero-ruby/version.rb +3 -3
  191. data/spec/accounting/api/accounting_api_spec.rb +19 -6
  192. data/spec/accounting/models/account_spec.rb +1 -1
  193. data/spec/accounting/models/account_type_spec.rb +1 -1
  194. data/spec/accounting/models/accounts_payable_spec.rb +1 -1
  195. data/spec/accounting/models/accounts_receivable_spec.rb +1 -1
  196. data/spec/accounting/models/accounts_spec.rb +1 -1
  197. data/spec/accounting/models/address_spec.rb +1 -1
  198. data/spec/accounting/models/allocation_spec.rb +1 -1
  199. data/spec/accounting/models/allocations_spec.rb +1 -1
  200. data/spec/accounting/models/attachment_spec.rb +1 -1
  201. data/spec/accounting/models/attachments_spec.rb +1 -1
  202. data/spec/accounting/models/balances_spec.rb +1 -1
  203. data/spec/accounting/models/bank_transaction_spec.rb +1 -1
  204. data/spec/accounting/models/bank_transactions_spec.rb +1 -1
  205. data/spec/accounting/models/bank_transfer_spec.rb +1 -1
  206. data/spec/accounting/models/bank_transfers_spec.rb +1 -1
  207. data/spec/accounting/models/batch_payment_details_spec.rb +1 -1
  208. data/spec/accounting/models/batch_payment_spec.rb +1 -1
  209. data/spec/accounting/models/batch_payments_spec.rb +1 -1
  210. data/spec/accounting/models/bill_spec.rb +1 -1
  211. data/spec/accounting/models/branding_theme_spec.rb +1 -1
  212. data/spec/accounting/models/branding_themes_spec.rb +1 -1
  213. data/spec/accounting/models/cis_org_setting_spec.rb +1 -1
  214. data/spec/accounting/models/cis_setting_spec.rb +1 -1
  215. data/spec/accounting/models/cis_settings_spec.rb +1 -1
  216. data/spec/accounting/models/contact_group_spec.rb +1 -1
  217. data/spec/accounting/models/contact_groups_spec.rb +1 -1
  218. data/spec/accounting/models/contact_person_spec.rb +1 -1
  219. data/spec/accounting/models/contact_spec.rb +1 -1
  220. data/spec/accounting/models/contacts_spec.rb +1 -1
  221. data/spec/accounting/models/country_code_spec.rb +1 -1
  222. data/spec/accounting/models/credit_note_spec.rb +1 -1
  223. data/spec/accounting/models/credit_notes_spec.rb +1 -1
  224. data/spec/accounting/models/currencies_spec.rb +1 -1
  225. data/spec/accounting/models/currency_code_spec.rb +1 -1
  226. data/spec/accounting/models/currency_spec.rb +1 -1
  227. data/spec/accounting/models/element_spec.rb +1 -1
  228. data/spec/accounting/models/employee_spec.rb +1 -1
  229. data/spec/accounting/models/employees_spec.rb +1 -1
  230. data/spec/accounting/models/error_spec.rb +1 -1
  231. data/spec/accounting/models/expense_claim_spec.rb +1 -1
  232. data/spec/accounting/models/expense_claims_spec.rb +1 -1
  233. data/spec/accounting/models/external_link_spec.rb +1 -1
  234. data/spec/accounting/models/history_record_spec.rb +1 -1
  235. data/spec/accounting/models/history_records_spec.rb +1 -1
  236. data/spec/accounting/models/invoice_reminder_spec.rb +1 -1
  237. data/spec/accounting/models/invoice_reminders_spec.rb +1 -1
  238. data/spec/accounting/models/invoice_spec.rb +1 -1
  239. data/spec/accounting/models/invoices_spec.rb +1 -1
  240. data/spec/accounting/models/item_spec.rb +1 -1
  241. data/spec/accounting/models/items_spec.rb +1 -1
  242. data/spec/accounting/models/journal_line_spec.rb +1 -1
  243. data/spec/accounting/models/journal_spec.rb +1 -1
  244. data/spec/accounting/models/journals_spec.rb +1 -1
  245. data/spec/accounting/models/line_amount_types_spec.rb +1 -1
  246. data/spec/accounting/models/line_item_spec.rb +1 -1
  247. data/spec/accounting/models/line_item_tracking_spec.rb +1 -1
  248. data/spec/accounting/models/linked_transaction_spec.rb +1 -1
  249. data/spec/accounting/models/linked_transactions_spec.rb +1 -1
  250. data/spec/accounting/models/manual_journal_line_spec.rb +1 -1
  251. data/spec/accounting/models/manual_journal_spec.rb +1 -1
  252. data/spec/accounting/models/manual_journals_spec.rb +1 -1
  253. data/spec/accounting/models/online_invoice_spec.rb +1 -1
  254. data/spec/accounting/models/online_invoices_spec.rb +1 -1
  255. data/spec/accounting/models/organisation_spec.rb +1 -1
  256. data/spec/accounting/models/organisations_spec.rb +1 -1
  257. data/spec/accounting/models/overpayment_spec.rb +1 -1
  258. data/spec/accounting/models/overpayments_spec.rb +1 -1
  259. data/spec/accounting/models/payment_delete_spec.rb +1 -1
  260. data/spec/accounting/models/payment_service_spec.rb +1 -1
  261. data/spec/accounting/models/payment_services_spec.rb +1 -1
  262. data/spec/accounting/models/payment_spec.rb +7 -1
  263. data/spec/accounting/models/payment_term_spec.rb +1 -1
  264. data/spec/accounting/models/payment_term_type_spec.rb +1 -1
  265. data/spec/accounting/models/payments_spec.rb +1 -1
  266. data/spec/accounting/models/phone_spec.rb +1 -1
  267. data/spec/accounting/models/prepayment_spec.rb +1 -1
  268. data/spec/accounting/models/prepayments_spec.rb +1 -1
  269. data/spec/accounting/models/purchase_order_spec.rb +1 -1
  270. data/spec/accounting/models/purchase_orders_spec.rb +1 -1
  271. data/spec/accounting/models/purchase_spec.rb +1 -1
  272. data/spec/accounting/models/quote_line_amount_types_spec.rb +1 -1
  273. data/spec/accounting/models/quote_spec.rb +1 -1
  274. data/spec/accounting/models/quote_status_codes_spec.rb +1 -1
  275. data/spec/accounting/models/quotes_spec.rb +1 -1
  276. data/spec/accounting/models/receipt_spec.rb +1 -1
  277. data/spec/accounting/models/receipts_spec.rb +1 -1
  278. data/spec/accounting/models/repeating_invoice_spec.rb +1 -1
  279. data/spec/accounting/models/repeating_invoices_spec.rb +1 -1
  280. data/spec/accounting/models/report_attribute_spec.rb +1 -1
  281. data/spec/accounting/models/report_cell_spec.rb +1 -1
  282. data/spec/accounting/models/report_fields_spec.rb +1 -1
  283. data/spec/accounting/models/report_row_spec.rb +1 -1
  284. data/spec/accounting/models/report_rows_spec.rb +1 -1
  285. data/spec/accounting/models/report_spec.rb +1 -1
  286. data/spec/accounting/models/report_with_row_spec.rb +1 -1
  287. data/spec/accounting/models/report_with_rows_spec.rb +1 -1
  288. data/spec/accounting/models/reports_spec.rb +1 -1
  289. data/spec/accounting/models/request_empty_spec.rb +1 -1
  290. data/spec/accounting/models/row_type_spec.rb +1 -1
  291. data/spec/accounting/models/sales_tracking_category_spec.rb +1 -1
  292. data/spec/accounting/models/schedule_spec.rb +1 -1
  293. data/spec/accounting/models/tax_component_spec.rb +1 -1
  294. data/spec/accounting/models/tax_rate_spec.rb +2 -2
  295. data/spec/accounting/models/tax_rates_spec.rb +1 -1
  296. data/spec/accounting/models/tax_type_spec.rb +1 -1
  297. data/spec/accounting/models/ten_nintey_nine_contact_spec.rb +7 -7
  298. data/spec/accounting/models/time_zone_spec.rb +1 -1
  299. data/spec/accounting/models/tracking_categories_spec.rb +1 -1
  300. data/spec/accounting/models/tracking_category_spec.rb +1 -1
  301. data/spec/accounting/models/tracking_option_spec.rb +1 -1
  302. data/spec/accounting/models/tracking_options_spec.rb +1 -1
  303. data/spec/accounting/models/user_spec.rb +1 -1
  304. data/spec/accounting/models/users_spec.rb +1 -1
  305. data/spec/accounting/models/validation_error_spec.rb +1 -1
  306. data/spec/api_client_spec.rb +120 -33
  307. data/spec/assets/api/asset_api_spec.rb +4 -4
  308. data/spec/assets/models/asset_spec.rb +1 -1
  309. data/spec/assets/models/asset_status_query_param_spec.rb +1 -1
  310. data/spec/assets/models/asset_status_spec.rb +1 -1
  311. data/spec/assets/models/asset_type_spec.rb +1 -1
  312. data/spec/assets/models/assets_spec.rb +1 -1
  313. data/spec/assets/models/book_depreciation_detail_spec.rb +1 -1
  314. data/spec/assets/models/book_depreciation_setting_spec.rb +1 -1
  315. data/spec/assets/models/error_spec.rb +1 -1
  316. data/spec/assets/models/field_validation_errors_element_spec.rb +1 -1
  317. data/spec/assets/models/pagination_spec.rb +1 -1
  318. data/spec/assets/models/resource_validation_errors_element_spec.rb +1 -1
  319. data/spec/assets/models/setting_spec.rb +1 -1
  320. data/spec/configuration_spec.rb +8 -24
  321. data/spec/projects/api/project_api_spec.rb +229 -0
  322. data/spec/projects/models/amount_spec.rb +47 -0
  323. data/spec/projects/models/charge_type_spec.rb +35 -0
  324. data/spec/projects/models/currency_code_spec.rb +35 -0
  325. data/spec/projects/models/error_spec.rb +47 -0
  326. data/spec/projects/models/pagination_spec.rb +59 -0
  327. data/spec/projects/models/project_create_or_update_spec.rb +59 -0
  328. data/spec/projects/models/project_patch_spec.rb +41 -0
  329. data/spec/projects/models/project_spec.rb +167 -0
  330. data/spec/projects/models/project_status_spec.rb +35 -0
  331. data/spec/projects/models/project_user_spec.rb +53 -0
  332. data/spec/projects/models/project_users_spec.rb +47 -0
  333. data/spec/projects/models/projects_spec.rb +47 -0
  334. data/spec/projects/models/task_create_or_update_spec.rb +59 -0
  335. data/spec/projects/models/task_spec.rb +129 -0
  336. data/spec/projects/models/tasks_spec.rb +47 -0
  337. data/spec/projects/models/time_entries_spec.rb +47 -0
  338. data/spec/projects/models/time_entry_create_or_update_spec.rb +65 -0
  339. data/spec/projects/models/time_entry_spec.rb +93 -0
  340. data/spec/spec_helper.rb +1 -1
  341. data/xero-ruby.gemspec +3 -4
  342. metadata +85 -9
  343. data/xero-ruby.gem +0 -0
@@ -3,10 +3,10 @@
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.1.0
6
+ The version of the OpenAPI document: 2.2.11
7
7
  Contact: api@xero.com
8
8
  Generated by: https://openapi-generator.tech
9
- OpenAPI Generator version: 4.3.0
9
+ OpenAPI Generator version: 4.3.1
10
10
 
11
11
  =end
12
12
 
@@ -14,6 +14,7 @@ require 'date'
14
14
  require 'json'
15
15
  require 'logger'
16
16
  require 'tempfile'
17
+ require 'find'
17
18
  require 'faraday'
18
19
 
19
20
  module XeroRuby
@@ -56,6 +57,11 @@ module XeroRuby
56
57
  XeroRuby::AssetApi.new(self)
57
58
  end
58
59
 
60
+ def project_api
61
+ @config.base_url = @config.project_url
62
+ XeroRuby::ProjectApi.new(self)
63
+ end
64
+
59
65
  # Token Helpers
60
66
  def token_set
61
67
  XeroRuby.configure.token_set
@@ -170,6 +176,7 @@ module XeroRuby
170
176
  end
171
177
 
172
178
  if opts[:return_type]
179
+ prepare_file(response) if opts[:return_type] == 'File'
173
180
  data = deserialize(response, opts[:return_type])
174
181
  else
175
182
  data = nil
@@ -216,7 +223,6 @@ module XeroRuby
216
223
  request.body = req_body
217
224
  request.url url
218
225
  request.params = query_params
219
- download_file(request) if opts[:return_type] == 'File'
220
226
  request
221
227
  end
222
228
 
@@ -293,9 +299,9 @@ module XeroRuby
293
299
  else
294
300
  raise e
295
301
  end
296
- end
302
+ end
297
303
 
298
- convert_to_type data, return_type
304
+ convert_to_type(data, return_type)
299
305
  end
300
306
 
301
307
  # Convert data to the given return type.
@@ -333,14 +339,34 @@ module XeroRuby
333
339
  data.each { |k, v| hash[k] = convert_to_type(v, sub_type) }
334
340
  end
335
341
  else
336
- begin
342
+ api_set = api_set_prefix(return_type)
343
+ case api_set
344
+ when 'accounting'
337
345
  XeroRuby::Accounting.const_get(return_type).build_from_hash(data)
338
- rescue
346
+ when 'assets'
339
347
  XeroRuby::Assets.const_get(return_type).build_from_hash(data)
340
- # rescue
348
+ when 'projects'
349
+ XeroRuby::Projects.const_get(return_type).build_from_hash(data)
350
+ # when 'newapiset' # add new namespace
341
351
  # XeroRuby::<NewAPISet>.const_get(return_type).build_from_hash(data)
352
+ else
353
+ XeroRuby::Accounting.const_get(return_type).build_from_hash(data)
354
+ end
355
+ end
356
+ end
357
+
358
+ # Traverses the model tree to find the model's namespacing
359
+ # based on the deserializing model/return_type name
360
+ def api_set_prefix(return_type)
361
+ api_set = ''
362
+ Find.find("#{File.dirname(__FILE__)}/models/") do |path|
363
+ model_path = path.split('/')
364
+ matching_name = model_path.last.gsub('.rb','').gsub("_",'')
365
+ if return_type.downcase === matching_name
366
+ api_set = path.split('/')[-2]
342
367
  end
343
368
  end
369
+ return api_set
344
370
  end
345
371
 
346
372
  # Save response body into a file in (the defined) temporary folder, using the filename
@@ -350,33 +376,24 @@ module XeroRuby
350
376
  # process can use.
351
377
  #
352
378
  # @see Configuration#temp_folder_path
353
- def download_file(request)
354
- tempfile = nil
355
- encoding = nil
356
- request.on_headers do |response|
357
- content_disposition = response.headers['Content-Disposition']
358
- if content_disposition && content_disposition =~ /filename=/i
359
- filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
360
- prefix = sanitize_filename(filename)
361
- else
362
- prefix = 'download-'
363
- end
364
- prefix = prefix + '-' unless prefix.end_with?('-')
365
- encoding = response.body.encoding
366
- tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
367
- @tempfile = tempfile
368
- end
369
- request.on_body do |chunk|
370
- chunk.force_encoding(encoding)
371
- tempfile.write(chunk)
372
- end
373
- request.on_complete do |response|
374
- tempfile.close if tempfile
375
- @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
376
- "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
377
- "will be deleted automatically with GC. It's also recommended to delete the temp file "\
378
- "explicitly with `tempfile.delete`"
379
+ def prepare_file(response)
380
+ content_disposition = response.headers['Content-Disposition']
381
+ if content_disposition && content_disposition =~ /filename=/i
382
+ filename = content_disposition[/filename=['"]?([^'"\s]+)['"]?/, 1]
383
+ prefix = sanitize_filename(filename)
384
+ else
385
+ prefix = 'download-'
379
386
  end
387
+ prefix = prefix + '-' unless prefix.end_with?('-')
388
+ encoding = response.body.encoding
389
+ tempfile = Tempfile.open(prefix, @config.temp_folder_path, encoding: encoding)
390
+ @tempfile = tempfile
391
+ tempfile.write(response.body)
392
+ tempfile.close if tempfile
393
+ @config.logger.info "Temp file written to #{tempfile.path}, please copy the file to a proper folder "\
394
+ "with e.g. `FileUtils.cp(tempfile.path, '/new/file/path')` otherwise the temp file "\
395
+ "will be deleted automatically with GC. It's also recommended to delete the temp file "\
396
+ "explicitly with `tempfile.delete`"
380
397
  end
381
398
 
382
399
  # Sanitize filename by removing path.
@@ -459,12 +476,61 @@ module XeroRuby
459
476
  # @return [String] JSON string representation of the object
460
477
  def object_to_hash(obj)
461
478
  if obj.respond_to?(:to_hash)
462
- obj.to_hash
479
+ to_camel_keys(obj).to_hash
463
480
  else
464
- obj
481
+ to_camel_keys(obj)
465
482
  end
466
483
  end
467
484
 
485
+ # START - Re-serializes snake_cased params to PascalCase required by XeroAPI
486
+ def to_camel_keys(value = self)
487
+ case value
488
+ when Array
489
+ value.map { |v| to_camel_keys(v) }
490
+ when Hash
491
+ Hash[value.map { |k, v| [camelize_key(k), to_camel_keys(v)] }]
492
+ else
493
+ value
494
+ end
495
+ end
496
+
497
+ def camelize_key(key, first_upper = true)
498
+ if key.is_a? Symbol
499
+ camelize(key.to_s, first_upper).to_sym
500
+ elsif key.is_a? String
501
+ camelize(key, first_upper)
502
+ else
503
+ key # can't camelize anything except strings and symbols
504
+ end
505
+ end
506
+
507
+ def camelize(word, first_upper = true)
508
+ if first_upper
509
+ str = word.to_s
510
+ str = gsubbed(str, /(?:^|_)([^_\s]+)/)
511
+ str = gsubbed(str, %r{/([^/]*)}, "::")
512
+ str
513
+ else
514
+ parts = word.split("_", 2)
515
+ parts[0] << camelize(parts[1]) if parts.size > 1
516
+ parts[0] || ""
517
+ end
518
+ end
519
+
520
+ def gsubbed(str, pattern, extra = "")
521
+ key_map_scronyms = { "id": "ID" }
522
+ str = str.gsub(pattern) do
523
+ extra + (key_map_scronyms[Regexp.last_match(1)] || capitalize_first(Regexp.last_match(1)))
524
+ end
525
+ str
526
+ end
527
+
528
+ def capitalize_first(word)
529
+ split = word.split('')
530
+ "#{split[0].capitalize}#{split[1..-1].join}"
531
+ end
532
+ # END - Re-serializes snake_cased params to PascalCase required by XeroAPI
533
+
468
534
  # Build parameter value according to the given collection format.
469
535
  # @param [String] collection_format one of :csv, :ssv, :tsv, :pipes and :multi
470
536
  def build_collection_param(param, collection_format)
@@ -478,7 +544,7 @@ module XeroRuby
478
544
  when :pipes
479
545
  param.join('|')
480
546
  when :multi
481
- # return the array directly as typhoeus will handle it as expected
547
+ # return the array directly as http client will handle it as expected
482
548
  param
483
549
  else
484
550
  fail "unknown collection format: #{collection_format.inspect}"
@@ -3,10 +3,10 @@
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.1.0
6
+ The version of the OpenAPI document: 2.2.11
7
7
  Contact: api@xero.com
8
8
  Generated by: https://openapi-generator.tech
9
- OpenAPI Generator version: 4.3.0
9
+ OpenAPI Generator version: 4.3.1
10
10
 
11
11
  =end
12
12
 
@@ -3,10 +3,10 @@
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.1.0
6
+ The version of the OpenAPI document: 2.2.11
7
7
  Contact: api@xero.com
8
8
  Generated by: https://openapi-generator.tech
9
- OpenAPI Generator version: 4.3.0
9
+ OpenAPI Generator version: 4.3.1
10
10
 
11
11
  =end
12
12
 
@@ -29,6 +29,7 @@ module XeroRuby
29
29
  # Defines base paths for seperate API's
30
30
  attr_accessor :accounting_url
31
31
  attr_accessor :asset_url
32
+ attr_accessor :project_url
32
33
 
33
34
  # Defines API keys used with API Key authentications.
34
35
  #
@@ -123,9 +124,6 @@ module XeroRuby
123
124
 
124
125
  # Set this to customize parameters encoding of array parameter with multi collectionFormat.
125
126
  # Default to nil.
126
- #
127
- # @see The params_encoding option of Ethon. Related source code:
128
- # https://github.com/typhoeus/ethon/blob/master/lib/ethon/easy/queryable.rb#L96
129
127
  attr_accessor :params_encoding
130
128
 
131
129
  attr_accessor :inject_format
@@ -140,6 +138,7 @@ module XeroRuby
140
138
  @token_url = 'https://identity.xero.com/connect/token'
141
139
  @accounting_url = 'https://api.xero.com/api.xro/2.0'
142
140
  @asset_url = 'https://api.xero.com/assets.xro/1.0'
141
+ @project_url = 'https://api.xero.com/projects.xro/2.0/'
143
142
  @api_key = {}
144
143
  @api_key_prefix = {}
145
144
  @timeout = 0
@@ -3,10 +3,10 @@
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.1.0
6
+ The version of the OpenAPI document: 2.2.11
7
7
  Contact: api@xero.com
8
8
  Generated by: https://openapi-generator.tech
9
- OpenAPI Generator version: 4.3.0
9
+ OpenAPI Generator version: 4.3.1
10
10
 
11
11
  =end
12
12
 
@@ -14,65 +14,104 @@ require 'time'
14
14
  require 'date'
15
15
 
16
16
  module XeroRuby::Accounting
17
+ require 'bigdecimal'
18
+
17
19
  class Account
18
20
  # Customer defined alpha numeric account code e.g 200 or SALES (max length = 10)
19
21
  attr_accessor :code
20
-
22
+
21
23
  # Name of account (max length = 150)
22
24
  attr_accessor :name
23
-
25
+
24
26
  # The Xero identifier for an account – specified as a string following the endpoint name e.g. /297c2dc5-cc47-4afd-8ec8-74990b8761e9
25
27
  attr_accessor :account_id
28
+
26
29
 
27
30
  attr_accessor :type
28
-
31
+
29
32
  # For bank accounts only (Account Type BANK)
30
33
  attr_accessor :bank_account_number
31
-
34
+
32
35
  # Accounts with a status of ACTIVE can be updated to ARCHIVED. See Account Status Codes
33
36
  attr_accessor :status
34
-
37
+ ACTIVE = "ACTIVE".freeze
38
+ ARCHIVED = "ARCHIVED".freeze
39
+ DELETED = "DELETED".freeze
40
+
35
41
  # Description of the Account. Valid for all types of accounts except bank accounts (max length = 4000)
36
42
  attr_accessor :description
37
-
43
+
38
44
  # For bank accounts only. See Bank Account types
39
45
  attr_accessor :bank_account_type
46
+ BANK = "BANK".freeze
47
+ CREDITCARD = "CREDITCARD".freeze
48
+ PAYPAL = "PAYPAL".freeze
49
+ NONE = "NONE".freeze
50
+ EMPTY = "".freeze
51
+
40
52
 
41
53
  attr_accessor :currency_code
42
-
54
+
43
55
  # The tax type from TaxRates
44
56
  attr_accessor :tax_type
45
-
57
+
46
58
  # Boolean – describes whether account can have payments applied to it
47
59
  attr_accessor :enable_payments_to_account
48
-
60
+
49
61
  # Boolean – describes whether account code is available for use with expense claims
50
62
  attr_accessor :show_in_expense_claims
51
-
63
+
52
64
  # See Account Class Types
53
65
  attr_accessor :_class
54
-
66
+ ASSET = "ASSET".freeze
67
+ EQUITY = "EQUITY".freeze
68
+ EXPENSE = "EXPENSE".freeze
69
+ LIABILITY = "LIABILITY".freeze
70
+ REVENUE = "REVENUE".freeze
71
+
55
72
  # If this is a system account then this element is returned. See System Account types. Note that non-system accounts may have this element set as either “” or null.
56
73
  attr_accessor :system_account
57
-
74
+ DEBTORS = "DEBTORS".freeze
75
+ CREDITORS = "CREDITORS".freeze
76
+ BANKCURRENCYGAIN = "BANKCURRENCYGAIN".freeze
77
+ GST = "GST".freeze
78
+ GSTONIMPORTS = "GSTONIMPORTS".freeze
79
+ HISTORICAL = "HISTORICAL".freeze
80
+ REALISEDCURRENCYGAIN = "REALISEDCURRENCYGAIN".freeze
81
+ RETAINEDEARNINGS = "RETAINEDEARNINGS".freeze
82
+ ROUNDING = "ROUNDING".freeze
83
+ TRACKINGTRANSFERS = "TRACKINGTRANSFERS".freeze
84
+ UNPAIDEXPCLM = "UNPAIDEXPCLM".freeze
85
+ UNREALISEDCURRENCYGAIN = "UNREALISEDCURRENCYGAIN".freeze
86
+ WAGEPAYABLES = "WAGEPAYABLES".freeze
87
+ CISASSETS = "CISASSETS".freeze
88
+ CISASSET = "CISASSET".freeze
89
+ CISLABOUR = "CISLABOUR".freeze
90
+ CISLABOUREXPENSE = "CISLABOUREXPENSE".freeze
91
+ CISLABOURINCOME = "CISLABOURINCOME".freeze
92
+ CISLIABILITY = "CISLIABILITY".freeze
93
+ CISMATERIALS = "CISMATERIALS".freeze
94
+ # duplicate definitions generated: https://github.com/XeroAPI/xero-ruby/issues/53#issuecomment-668893305
95
+ # EMPTY = "".freeze
96
+
58
97
  # Shown if set
59
98
  attr_accessor :reporting_code
60
-
99
+
61
100
  # Shown if set
62
101
  attr_accessor :reporting_code_name
63
-
102
+
64
103
  # boolean to indicate if an account has an attachment (read only)
65
104
  attr_accessor :has_attachments
66
-
105
+
67
106
  # Last modified date UTC format
68
107
  attr_accessor :updated_date_utc
69
-
108
+
70
109
  # Boolean – describes whether the account is shown in the watchlist widget on the dashboard
71
110
  attr_accessor :add_to_watchlist
72
-
111
+
73
112
  # Displays array of validation error messages from the API
74
113
  attr_accessor :validation_errors
75
-
114
+
76
115
  class EnumAttributeValidator
77
116
  attr_reader :datatype
78
117
  attr_reader :allowable_values
@@ -420,6 +459,8 @@ module XeroRuby::Accounting
420
459
  value.to_i
421
460
  when :Float
422
461
  value.to_f
462
+ when :BigDecimal
463
+ BigDecimal(value.to_s)
423
464
  when :Boolean
424
465
  if value.to_s =~ /\A(true|t|yes|y|1)\z/i
425
466
  true
@@ -3,10 +3,10 @@
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.1.0
6
+ The version of the OpenAPI document: 2.2.11
7
7
  Contact: api@xero.com
8
8
  Generated by: https://openapi-generator.tech
9
- OpenAPI Generator version: 4.3.0
9
+ OpenAPI Generator version: 4.3.1
10
10
 
11
11
  =end
12
12
 
@@ -3,10 +3,10 @@
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.1.0
6
+ The version of the OpenAPI document: 2.2.11
7
7
  Contact: api@xero.com
8
8
  Generated by: https://openapi-generator.tech
9
- OpenAPI Generator version: 4.3.0
9
+ OpenAPI Generator version: 4.3.1
10
10
 
11
11
  =end
12
12
 
@@ -14,9 +14,12 @@ require 'time'
14
14
  require 'date'
15
15
 
16
16
  module XeroRuby::Accounting
17
+ require 'bigdecimal'
18
+
17
19
  class Accounts
18
- attr_accessor :accounts
19
20
 
21
+ attr_accessor :accounts
22
+
20
23
  # Attribute mapping from ruby-style variable name to JSON key.
21
24
  def self.attribute_map
22
25
  {
@@ -129,6 +132,8 @@ module XeroRuby::Accounting
129
132
  value.to_i
130
133
  when :Float
131
134
  value.to_f
135
+ when :BigDecimal
136
+ BigDecimal(value.to_s)
132
137
  when :Boolean
133
138
  if value.to_s =~ /\A(true|t|yes|y|1)\z/i
134
139
  true