fortnox-api 0.9.2 → 1.0.0.rc2

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 (344) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +120 -95
  3. data/{LICENSE.txt → LICENSE.md} +0 -0
  4. data/README.md +245 -248
  5. data/bin/fortnox-setup +211 -0
  6. data/bin/fortnox-update-env +38 -0
  7. data/fortnox.gemspec +29 -0
  8. data/lib/fortnox/auth/thread_local.rb +28 -0
  9. data/lib/fortnox/collection.rb +23 -0
  10. data/lib/fortnox/mappers/country_code.rb +34 -0
  11. data/lib/fortnox/mappers/date.rb +21 -0
  12. data/lib/fortnox/mappers/document_row.rb +12 -0
  13. data/lib/fortnox/mappers/edi_information.rb +15 -0
  14. data/lib/fortnox/mappers/email_information.rb +11 -0
  15. data/lib/fortnox/mappers/invoice_row.rb +14 -0
  16. data/lib/fortnox/mappers/label_references.rb +24 -0
  17. data/lib/fortnox/mappers/order_row.rb +9 -0
  18. data/lib/fortnox/mappers/struct.rb +71 -0
  19. data/lib/fortnox/mappers/struct_array.rb +31 -0
  20. data/lib/fortnox/resource.rb +131 -0
  21. data/lib/fortnox/resources/article.rb +160 -0
  22. data/lib/fortnox/resources/customer.rb +209 -0
  23. data/lib/fortnox/resources/document.rb +202 -0
  24. data/lib/fortnox/resources/invoice.rb +92 -0
  25. data/lib/fortnox/resources/label.rb +15 -0
  26. data/lib/fortnox/resources/order.rb +38 -0
  27. data/lib/fortnox/resources/project.rb +41 -0
  28. data/lib/fortnox/resources/terms_of_payment.rb +23 -0
  29. data/lib/fortnox/resources/unit.rb +26 -0
  30. data/lib/fortnox/struct.rb +24 -0
  31. data/lib/fortnox/structs/default_delivery_types.rb +16 -0
  32. data/lib/fortnox/structs/default_templates.rb +19 -0
  33. data/lib/fortnox/structs/document_row.rb +62 -0
  34. data/lib/fortnox/structs/edi_information.rb +25 -0
  35. data/lib/fortnox/structs/email_information.rb +22 -0
  36. data/lib/fortnox/structs/invoice_row.rb +13 -0
  37. data/lib/fortnox/structs/order_row.rb +10 -0
  38. data/lib/fortnox/types.rb +129 -0
  39. data/lib/fortnox/{api/version.rb → version.rb} +1 -3
  40. data/lib/fortnox.rb +111 -0
  41. metadata +55 -580
  42. data/.codeclimate.yml +0 -20
  43. data/.env.template +0 -7
  44. data/.env.test +0 -11
  45. data/.gitignore +0 -20
  46. data/.rspec +0 -2
  47. data/.rubocop.yml +0 -41
  48. data/.tool-versions +0 -1
  49. data/.travis.yml +0 -32
  50. data/CLAUDE.md +0 -79
  51. data/CONTRIBUTE.md +0 -38
  52. data/DEVELOPER_README.md +0 -69
  53. data/Gemfile +0 -6
  54. data/Guardfile +0 -16
  55. data/Rakefile +0 -140
  56. data/bin/console +0 -22
  57. data/bin/fortnox +0 -285
  58. data/bin/get_tokens +0 -79
  59. data/bin/renew_tokens +0 -28
  60. data/docs/gotchas.md +0 -146
  61. data/fortnox-api.gemspec +0 -50
  62. data/lib/fortnox/api/mappers/article.rb +0 -23
  63. data/lib/fortnox/api/mappers/base/canonical_name_sym.rb +0 -21
  64. data/lib/fortnox/api/mappers/base/from_json.rb +0 -91
  65. data/lib/fortnox/api/mappers/base/to_json.rb +0 -66
  66. data/lib/fortnox/api/mappers/base.rb +0 -30
  67. data/lib/fortnox/api/mappers/customer.rb +0 -27
  68. data/lib/fortnox/api/mappers/default_delivery_types.rb +0 -15
  69. data/lib/fortnox/api/mappers/default_templates.rb +0 -16
  70. data/lib/fortnox/api/mappers/edi_information.rb +0 -23
  71. data/lib/fortnox/api/mappers/email_information.rb +0 -19
  72. data/lib/fortnox/api/mappers/invoice.rb +0 -29
  73. data/lib/fortnox/api/mappers/invoice_row.rb +0 -25
  74. data/lib/fortnox/api/mappers/order.rb +0 -26
  75. data/lib/fortnox/api/mappers/order_row.rb +0 -23
  76. data/lib/fortnox/api/mappers/project.rb +0 -17
  77. data/lib/fortnox/api/mappers/terms_of_payment.rb +0 -17
  78. data/lib/fortnox/api/mappers/unit.rb +0 -17
  79. data/lib/fortnox/api/mappers/value/array.rb +0 -18
  80. data/lib/fortnox/api/mappers/value/country_string.rb +0 -24
  81. data/lib/fortnox/api/mappers/value/date.rb +0 -11
  82. data/lib/fortnox/api/mappers/value/hash.rb +0 -16
  83. data/lib/fortnox/api/mappers/value/identity.rb +0 -18
  84. data/lib/fortnox/api/mappers.rb +0 -21
  85. data/lib/fortnox/api/models/article.rb +0 -134
  86. data/lib/fortnox/api/models/base.rb +0 -128
  87. data/lib/fortnox/api/models/customer.rb +0 -210
  88. data/lib/fortnox/api/models/document.rb +0 -189
  89. data/lib/fortnox/api/models/invoice.rb +0 -87
  90. data/lib/fortnox/api/models/label.rb +0 -19
  91. data/lib/fortnox/api/models/order.rb +0 -27
  92. data/lib/fortnox/api/models/project.rb +0 -42
  93. data/lib/fortnox/api/models/terms_of_payment.rb +0 -28
  94. data/lib/fortnox/api/models/unit.rb +0 -24
  95. data/lib/fortnox/api/models.rb +0 -9
  96. data/lib/fortnox/api/repositories/article.rb +0 -17
  97. data/lib/fortnox/api/repositories/authentication.rb +0 -61
  98. data/lib/fortnox/api/repositories/base/loaders.rb +0 -64
  99. data/lib/fortnox/api/repositories/base/savers.rb +0 -57
  100. data/lib/fortnox/api/repositories/base.rb +0 -93
  101. data/lib/fortnox/api/repositories/customer.rb +0 -17
  102. data/lib/fortnox/api/repositories/invoice.rb +0 -17
  103. data/lib/fortnox/api/repositories/order.rb +0 -17
  104. data/lib/fortnox/api/repositories/project.rb +0 -17
  105. data/lib/fortnox/api/repositories/terms_of_payment.rb +0 -17
  106. data/lib/fortnox/api/repositories/unit.rb +0 -17
  107. data/lib/fortnox/api/repositories.rb +0 -10
  108. data/lib/fortnox/api/request_handling.rb +0 -46
  109. data/lib/fortnox/api/types/default_delivery_types.rb +0 -20
  110. data/lib/fortnox/api/types/default_templates.rb +0 -23
  111. data/lib/fortnox/api/types/defaulted.rb +0 -11
  112. data/lib/fortnox/api/types/document_row.rb +0 -64
  113. data/lib/fortnox/api/types/edi_information.rb +0 -29
  114. data/lib/fortnox/api/types/email_information.rb +0 -26
  115. data/lib/fortnox/api/types/enums.rb +0 -116
  116. data/lib/fortnox/api/types/invoice_row.rb +0 -19
  117. data/lib/fortnox/api/types/model.rb +0 -37
  118. data/lib/fortnox/api/types/nullable.rb +0 -25
  119. data/lib/fortnox/api/types/order_row.rb +0 -16
  120. data/lib/fortnox/api/types/required.rb +0 -13
  121. data/lib/fortnox/api/types/shim/country_string.rb +0 -10
  122. data/lib/fortnox/api/types/sized.rb +0 -33
  123. data/lib/fortnox/api/types.rb +0 -144
  124. data/lib/fortnox/api.rb +0 -62
  125. data/spec/fortnox/api/mappers/article_spec.rb +0 -17
  126. data/spec/fortnox/api/mappers/base/canonical_name_sym_spec.rb +0 -36
  127. data/spec/fortnox/api/mappers/base/from_json_spec.rb +0 -70
  128. data/spec/fortnox/api/mappers/base/to_json_spec.rb +0 -68
  129. data/spec/fortnox/api/mappers/base_spec.rb +0 -154
  130. data/spec/fortnox/api/mappers/contexts/json_conversion.rb +0 -62
  131. data/spec/fortnox/api/mappers/customer_spec.rb +0 -27
  132. data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +0 -14
  133. data/spec/fortnox/api/mappers/edi_information_spec.rb +0 -23
  134. data/spec/fortnox/api/mappers/email_information_spec.rb +0 -19
  135. data/spec/fortnox/api/mappers/examples/mapper.rb +0 -34
  136. data/spec/fortnox/api/mappers/invoice_row_spec.rb +0 -24
  137. data/spec/fortnox/api/mappers/invoice_spec.rb +0 -27
  138. data/spec/fortnox/api/mappers/order_row_spec.rb +0 -21
  139. data/spec/fortnox/api/mappers/order_spec.rb +0 -23
  140. data/spec/fortnox/api/mappers/project_spec.rb +0 -12
  141. data/spec/fortnox/api/mappers/terms_of_payment_spec.rb +0 -16
  142. data/spec/fortnox/api/mappers/unit_spec.rb +0 -56
  143. data/spec/fortnox/api/models/article_spec.rb +0 -9
  144. data/spec/fortnox/api/models/base_spec.rb +0 -117
  145. data/spec/fortnox/api/models/customer_spec.rb +0 -9
  146. data/spec/fortnox/api/models/examples/document_base.rb +0 -15
  147. data/spec/fortnox/api/models/examples/model.rb +0 -22
  148. data/spec/fortnox/api/models/invoice_spec.rb +0 -11
  149. data/spec/fortnox/api/models/order_spec.rb +0 -12
  150. data/spec/fortnox/api/models/project_spec.rb +0 -9
  151. data/spec/fortnox/api/models/terms_of_payment_spec.rb +0 -9
  152. data/spec/fortnox/api/models/unit_spec.rb +0 -33
  153. data/spec/fortnox/api/repositories/article_spec.rb +0 -80
  154. data/spec/fortnox/api/repositories/authentication_spec.rb +0 -103
  155. data/spec/fortnox/api/repositories/base_spec.rb +0 -168
  156. data/spec/fortnox/api/repositories/customer_spec.rb +0 -119
  157. data/spec/fortnox/api/repositories/examples/all.rb +0 -17
  158. data/spec/fortnox/api/repositories/examples/find.rb +0 -84
  159. data/spec/fortnox/api/repositories/examples/only.rb +0 -34
  160. data/spec/fortnox/api/repositories/examples/save.rb +0 -76
  161. data/spec/fortnox/api/repositories/examples/save_with_nested_model.rb +0 -28
  162. data/spec/fortnox/api/repositories/examples/save_with_specially_named_attribute.rb +0 -26
  163. data/spec/fortnox/api/repositories/examples/search.rb +0 -39
  164. data/spec/fortnox/api/repositories/invoice_spec.rb +0 -297
  165. data/spec/fortnox/api/repositories/order_spec.rb +0 -53
  166. data/spec/fortnox/api/repositories/project_spec.rb +0 -36
  167. data/spec/fortnox/api/repositories/terms_of_payment_spec.rb +0 -34
  168. data/spec/fortnox/api/repositories/unit_spec.rb +0 -39
  169. data/spec/fortnox/api/types/account_number_spec.rb +0 -35
  170. data/spec/fortnox/api/types/country_code_spec.rb +0 -42
  171. data/spec/fortnox/api/types/country_spec.rb +0 -67
  172. data/spec/fortnox/api/types/default_delivery_types_spec.rb +0 -12
  173. data/spec/fortnox/api/types/edi_information_spec.rb +0 -15
  174. data/spec/fortnox/api/types/email_information_spec.rb +0 -15
  175. data/spec/fortnox/api/types/email_spec.rb +0 -56
  176. data/spec/fortnox/api/types/enums_spec.rb +0 -17
  177. data/spec/fortnox/api/types/examples/document_row.rb +0 -25
  178. data/spec/fortnox/api/types/examples/enum.rb +0 -55
  179. data/spec/fortnox/api/types/examples/types.rb +0 -11
  180. data/spec/fortnox/api/types/housework_types_spec.rb +0 -149
  181. data/spec/fortnox/api/types/invoice_row_spec.rb +0 -11
  182. data/spec/fortnox/api/types/model_spec.rb +0 -69
  183. data/spec/fortnox/api/types/nullable_spec.rb +0 -79
  184. data/spec/fortnox/api/types/order_row_spec.rb +0 -15
  185. data/spec/fortnox/api/types/required_spec.rb +0 -36
  186. data/spec/fortnox/api/types/sales_account_spec.rb +0 -57
  187. data/spec/fortnox/api/types/sized_spec.rb +0 -76
  188. data/spec/fortnox/api_spec.rb +0 -66
  189. data/spec/spec_helper.rb +0 -35
  190. data/spec/support/helpers/configuration_helper.rb +0 -39
  191. data/spec/support/helpers/repository_helper.rb +0 -10
  192. data/spec/support/helpers.rb +0 -3
  193. data/spec/support/matchers/type/attribute_matcher.rb +0 -40
  194. data/spec/support/matchers/type/enum_matcher.rb +0 -23
  195. data/spec/support/matchers/type/have_account_number_matcher.rb +0 -23
  196. data/spec/support/matchers/type/have_currency_matcher.rb +0 -9
  197. data/spec/support/matchers/type/have_customer_type_matcher.rb +0 -15
  198. data/spec/support/matchers/type/have_default_delivery_type_matcher.rb +0 -9
  199. data/spec/support/matchers/type/have_discount_type_matcher.rb +0 -9
  200. data/spec/support/matchers/type/have_email_matcher.rb +0 -24
  201. data/spec/support/matchers/type/have_housework_type_matcher.rb +0 -9
  202. data/spec/support/matchers/type/have_nullable_date_matcher.rb +0 -60
  203. data/spec/support/matchers/type/have_nullable_matcher.rb +0 -54
  204. data/spec/support/matchers/type/have_nullable_string_matcher.rb +0 -47
  205. data/spec/support/matchers/type/have_sized_float_matcher.rb +0 -10
  206. data/spec/support/matchers/type/have_sized_integer_matcher.rb +0 -10
  207. data/spec/support/matchers/type/have_sized_string_matcher.rb +0 -36
  208. data/spec/support/matchers/type/have_vat_type_matcher.rb +0 -9
  209. data/spec/support/matchers/type/numeric_matcher.rb +0 -52
  210. data/spec/support/matchers/type/require_attribute_matcher.rb +0 -68
  211. data/spec/support/matchers/type/type_matcher.rb +0 -40
  212. data/spec/support/matchers/type.rb +0 -19
  213. data/spec/support/matchers.rb +0 -3
  214. data/spec/support/vcr_setup.rb +0 -25
  215. data/spec/vcr_cassettes/articles/all.yml +0 -67
  216. data/spec/vcr_cassettes/articles/find_by_hash_failure.yml +0 -62
  217. data/spec/vcr_cassettes/articles/find_failure.yml +0 -62
  218. data/spec/vcr_cassettes/articles/find_id_1.yml +0 -63
  219. data/spec/vcr_cassettes/articles/find_new.yml +0 -63
  220. data/spec/vcr_cassettes/articles/limits/quantity_in_stock_min_value.yml +0 -63
  221. data/spec/vcr_cassettes/articles/limits/quantity_in_stock_rounding_positive_value.yml +0 -63
  222. data/spec/vcr_cassettes/articles/multi_param_find_by_hash.yml +0 -62
  223. data/spec/vcr_cassettes/articles/save_new.yml +0 -63
  224. data/spec/vcr_cassettes/articles/save_old.yml +0 -63
  225. data/spec/vcr_cassettes/articles/save_with_specially_named_attribute.yml +0 -63
  226. data/spec/vcr_cassettes/articles/search_by_name.yml +0 -65
  227. data/spec/vcr_cassettes/articles/search_miss.yml +0 -62
  228. data/spec/vcr_cassettes/articles/search_with_special_char.yml +0 -62
  229. data/spec/vcr_cassettes/articles/single_param_find_by_hash.yml +0 -62
  230. data/spec/vcr_cassettes/authentication/expired_token.yml +0 -54
  231. data/spec/vcr_cassettes/authentication/invalid_authorization.yml +0 -57
  232. data/spec/vcr_cassettes/authentication/invalid_refresh_token.yml +0 -58
  233. data/spec/vcr_cassettes/authentication/valid_request.yml +0 -63
  234. data/spec/vcr_cassettes/customers/all.yml +0 -69
  235. data/spec/vcr_cassettes/customers/find_by_hash_failure.yml +0 -62
  236. data/spec/vcr_cassettes/customers/find_failure.yml +0 -62
  237. data/spec/vcr_cassettes/customers/find_id_1.yml +0 -64
  238. data/spec/vcr_cassettes/customers/find_new.yml +0 -63
  239. data/spec/vcr_cassettes/customers/find_with_sales_account.yml +0 -63
  240. data/spec/vcr_cassettes/customers/multi_param_find_by_hash.yml +0 -63
  241. data/spec/vcr_cassettes/customers/save_new.yml +0 -63
  242. data/spec/vcr_cassettes/customers/save_new_with_country_code_SE.yml +0 -64
  243. data/spec/vcr_cassettes/customers/save_new_with_idn_email.yml +0 -67
  244. data/spec/vcr_cassettes/customers/save_new_with_sales_account.yml +0 -63
  245. data/spec/vcr_cassettes/customers/save_old.yml +0 -63
  246. data/spec/vcr_cassettes/customers/save_with_specially_named_attribute.yml +0 -63
  247. data/spec/vcr_cassettes/customers/search_by_name.yml +0 -64
  248. data/spec/vcr_cassettes/customers/search_miss.yml +0 -62
  249. data/spec/vcr_cassettes/customers/search_with_special_char.yml +0 -62
  250. data/spec/vcr_cassettes/customers/single_param_find_by_hash.yml +0 -64
  251. data/spec/vcr_cassettes/invoices/all.yml +0 -96
  252. data/spec/vcr_cassettes/invoices/filter_hit.yml +0 -64
  253. data/spec/vcr_cassettes/invoices/filter_invalid.yml +0 -60
  254. data/spec/vcr_cassettes/invoices/find_by_hash_failure.yml +0 -62
  255. data/spec/vcr_cassettes/invoices/find_failure.yml +0 -62
  256. data/spec/vcr_cassettes/invoices/find_id_1.yml +0 -65
  257. data/spec/vcr_cassettes/invoices/find_new.yml +0 -65
  258. data/spec/vcr_cassettes/invoices/multi_param_find_by_hash.yml +0 -63
  259. data/spec/vcr_cassettes/invoices/row_delivered_quantity_decimals.yml +0 -65
  260. data/spec/vcr_cassettes/invoices/row_delivered_quantity_decimals_round_up.yml +0 -65
  261. data/spec/vcr_cassettes/invoices/row_description_limit.yml +0 -65
  262. data/spec/vcr_cassettes/invoices/row_price_limit.yml +0 -65
  263. data/spec/vcr_cassettes/invoices/row_price_limit_round_up.yml +0 -65
  264. data/spec/vcr_cassettes/invoices/save_new.yml +0 -65
  265. data/spec/vcr_cassettes/invoices/save_new_with_comments.yml +0 -65
  266. data/spec/vcr_cassettes/invoices/save_new_with_country.yml +0 -65
  267. data/spec/vcr_cassettes/invoices/save_new_with_country_GB.yml +0 -66
  268. data/spec/vcr_cassettes/invoices/save_new_with_country_Norge.yml +0 -65
  269. data/spec/vcr_cassettes/invoices/save_new_with_country_Norway.yml +0 -65
  270. data/spec/vcr_cassettes/invoices/save_new_with_country_Sverige.yml +0 -65
  271. data/spec/vcr_cassettes/invoices/save_new_with_country_VA.yml +0 -66
  272. data/spec/vcr_cassettes/invoices/save_new_with_country_VI.yml +0 -66
  273. data/spec/vcr_cassettes/invoices/save_new_with_country_empty_string.yml +0 -65
  274. data/spec/vcr_cassettes/invoices/save_new_with_country_nil.yml +0 -65
  275. data/spec/vcr_cassettes/invoices/save_new_with_unsaved_parent.yml +0 -65
  276. data/spec/vcr_cassettes/invoices/save_old.yml +0 -65
  277. data/spec/vcr_cassettes/invoices/save_old_with_empty_comments.yml +0 -65
  278. data/spec/vcr_cassettes/invoices/save_old_with_empty_country.yml +0 -65
  279. data/spec/vcr_cassettes/invoices/save_old_with_nil_comments.yml +0 -65
  280. data/spec/vcr_cassettes/invoices/save_old_with_nil_country.yml +0 -65
  281. data/spec/vcr_cassettes/invoices/save_with_nested_model.yml +0 -65
  282. data/spec/vcr_cassettes/invoices/save_with_specially_named_attribute.yml +0 -65
  283. data/spec/vcr_cassettes/invoices/search_by_name.yml +0 -63
  284. data/spec/vcr_cassettes/invoices/search_miss.yml +0 -62
  285. data/spec/vcr_cassettes/invoices/search_with_special_char.yml +0 -62
  286. data/spec/vcr_cassettes/invoices/single_param_find_by_hash.yml +0 -64
  287. data/spec/vcr_cassettes/orders/all.yml +0 -69
  288. data/spec/vcr_cassettes/orders/filter_hit.yml +0 -64
  289. data/spec/vcr_cassettes/orders/filter_invalid.yml +0 -60
  290. data/spec/vcr_cassettes/orders/find_by_hash_failure.yml +0 -62
  291. data/spec/vcr_cassettes/orders/find_failure.yml +0 -62
  292. data/spec/vcr_cassettes/orders/find_id_1.yml +0 -67
  293. data/spec/vcr_cassettes/orders/find_new.yml +0 -65
  294. data/spec/vcr_cassettes/orders/housework_invalid_tax_reduction_type.yml +0 -61
  295. data/spec/vcr_cassettes/orders/housework_othercoses_invalid.yml +0 -61
  296. data/spec/vcr_cassettes/orders/housework_type_babysitting.yml +0 -65
  297. data/spec/vcr_cassettes/orders/housework_type_cleaning.yml +0 -65
  298. data/spec/vcr_cassettes/orders/housework_type_construction.yml +0 -65
  299. data/spec/vcr_cassettes/orders/housework_type_cooking.yml +0 -61
  300. data/spec/vcr_cassettes/orders/housework_type_electricity.yml +0 -65
  301. data/spec/vcr_cassettes/orders/housework_type_gardening.yml +0 -65
  302. data/spec/vcr_cassettes/orders/housework_type_glassmetalwork.yml +0 -65
  303. data/spec/vcr_cassettes/orders/housework_type_grounddrainagework.yml +0 -65
  304. data/spec/vcr_cassettes/orders/housework_type_hvac.yml +0 -65
  305. data/spec/vcr_cassettes/orders/housework_type_itservices.yml +0 -65
  306. data/spec/vcr_cassettes/orders/housework_type_majorappliancerepair.yml +0 -65
  307. data/spec/vcr_cassettes/orders/housework_type_masonry.yml +0 -65
  308. data/spec/vcr_cassettes/orders/housework_type_movingservices.yml +0 -65
  309. data/spec/vcr_cassettes/orders/housework_type_othercare.yml +0 -65
  310. data/spec/vcr_cassettes/orders/housework_type_othercosts.yml +0 -65
  311. data/spec/vcr_cassettes/orders/housework_type_paintingwallpapering.yml +0 -65
  312. data/spec/vcr_cassettes/orders/housework_type_snowplowing.yml +0 -65
  313. data/spec/vcr_cassettes/orders/housework_type_textileclothing.yml +0 -65
  314. data/spec/vcr_cassettes/orders/housework_type_tutoring.yml +0 -61
  315. data/spec/vcr_cassettes/orders/multi_param_find_by_hash.yml +0 -63
  316. data/spec/vcr_cassettes/orders/save_new.yml +0 -65
  317. data/spec/vcr_cassettes/orders/save_old.yml +0 -65
  318. data/spec/vcr_cassettes/orders/save_with_nested_model.yml +0 -65
  319. data/spec/vcr_cassettes/orders/search_by_name.yml +0 -63
  320. data/spec/vcr_cassettes/orders/search_miss.yml +0 -62
  321. data/spec/vcr_cassettes/orders/search_with_special_char.yml +0 -62
  322. data/spec/vcr_cassettes/orders/single_param_find_by_hash.yml +0 -64
  323. data/spec/vcr_cassettes/projects/all.yml +0 -64
  324. data/spec/vcr_cassettes/projects/find_by_hash_failure.yml +0 -62
  325. data/spec/vcr_cassettes/projects/find_failure.yml +0 -62
  326. data/spec/vcr_cassettes/projects/find_id_1.yml +0 -63
  327. data/spec/vcr_cassettes/projects/find_new.yml +0 -63
  328. data/spec/vcr_cassettes/projects/multi_param_find_by_hash.yml +0 -64
  329. data/spec/vcr_cassettes/projects/save_new.yml +0 -63
  330. data/spec/vcr_cassettes/projects/save_old.yml +0 -63
  331. data/spec/vcr_cassettes/projects/single_param_find_by_hash.yml +0 -63
  332. data/spec/vcr_cassettes/termsofpayments/all.yml +0 -68
  333. data/spec/vcr_cassettes/termsofpayments/find_failure.yml +0 -62
  334. data/spec/vcr_cassettes/termsofpayments/find_id_1.yml +0 -62
  335. data/spec/vcr_cassettes/termsofpayments/find_new.yml +0 -63
  336. data/spec/vcr_cassettes/termsofpayments/save_new.yml +0 -63
  337. data/spec/vcr_cassettes/termsofpayments/save_old.yml +0 -63
  338. data/spec/vcr_cassettes/units/all.yml +0 -64
  339. data/spec/vcr_cassettes/units/find_failure.yml +0 -62
  340. data/spec/vcr_cassettes/units/find_id_1.yml +0 -63
  341. data/spec/vcr_cassettes/units/find_new.yml +0 -63
  342. data/spec/vcr_cassettes/units/save_new.yml +0 -63
  343. data/spec/vcr_cassettes/units/save_old.yml +0 -63
  344. data/spec/vcr_cassettes/units/save_with_specially_named_attribute.yml +0 -63
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: a0605a1ea41ed7a7322a560e9e27255b60df149c486f875bd968354adbf1b826
4
- data.tar.gz: b66ce8b6a31fa9ef28b5ae0a99e8531df1027253bde63338291c875bfaa15367
3
+ metadata.gz: 355563e337538c18df2917f19aee3e0d91a1f7763fbb3a01bad441bd3956f496
4
+ data.tar.gz: 4898bf90e631edd152c4c44b1fda68c2284cc2f24e38cd712a8a0057e27a6c40
5
5
  SHA512:
6
- metadata.gz: 347bab9a453b33bd19d396d2b142fb8e133ee9615529f307fbe2ecc47f79e37d907731940267da551481c62ae8a17bd0df8b83de8c955c5cdbed8ba2e0517130
7
- data.tar.gz: d5ea5952ecc427a24ba0264197ed5cfa364119f37921a742304a9aec41d55b13d24ff379001af4087ce5d3235456413ade7b2a5d51ad733040de13710a3b5d6e
6
+ metadata.gz: 5acaea5d925b3c8f60f817ff39d167f0e078e5ec32f7f86568cf853935ac4955431dd037c81b561ec2be081e09d46b1dbae9b3c3d204bbfbcfd2615bc4d19d50
7
+ data.tar.gz: 14ddc8dbdc2da42f8c09d6bb5ee11c47ceb6fa8faba6cd51da7c97d1fc4bbf4c3adcba67e2bbc831c2783a2841d4f292b3f358d608e31d84cae8e25222fa711b
data/CHANGELOG.md CHANGED
@@ -6,113 +6,138 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
6
6
  and this project adheres to
7
7
  [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
8
8
 
9
- ## [0.9.2]
10
-
11
- ### Fixed
12
-
13
- - Email validation now accepts internationalized domain names (IDN),
14
- e.g. `user@teståäö.se` (RFC 6530)
15
-
16
- ## [0.9.1]
17
-
18
- ### Fixed
19
- - Restored undocumented support for string keys in model attributes,
20
- which was inadvertently removed in `v0.9.0`.
21
- - Set correct lower limit for `Article#quantity_in_stock`
22
-
23
- ## [0.9.0]
9
+ ## [1.0.0.rc2] - 2026-05-05
24
10
 
25
11
  ### Added
26
12
 
27
- - Script in `bin/get_tokens` to issue access and refresh tokens
28
- - Script in `bin/renew_tokens` (convenience feature for developers)
29
- - `Fortnox::API::Repository::Authentication.renew_token`, used for token renewal
13
+ - Per-resource OAuth scope declarations via the `scope` setting in
14
+ `Fortnox::Resource`, plus `Fortnox.scopes` returning a
15
+ `{ scope_string => [resource_classes] }` mapping derived from the
16
+ registered resources.
30
17
 
31
18
  ### Changed
32
19
 
33
- - **Breaking** The auth process is rewritten to support
34
- [the new auth flow](https://developer.fortnox.se/general/authentication/) that
35
- Fortnox has implemented. You also need to set the access token explicitly with
36
- `Fortnox::API.access_token ' your token'`. See [README](README.md) for more
37
- instructions.
38
-
39
- ### Fixed
40
-
41
- - Missing runtime dependencies `dry-configurable` and `dry-container` is added.
42
- Those were indirect dependencies before via other dry libs, but we use them
43
- explicitly in the gem, so they should be included as real dependencies. Also,
44
- newer versions of these gems did actually break the gem.
45
- - Not trying to update resource if diff against parent is an empty object
46
- (#238).
47
-
48
- ### Removed
49
-
50
- - **Breaking** Drops support for Ruby 2.6 since it's reached end of life
51
- - Token rotation is removed since Fortnox counts rate limit on tenant and client
52
- id. Before, you could get around this by using multiple access tokens. That's
53
- not possible anymore, so token rotation is simply removed.
54
- - **Breaking** Removes `client_id` and `client_secret` from configuration. These
55
- value are only used for token renewal, so they are now arguments to the
56
- `Authentication` repository. This means there are no longer any required
57
- configuration to set in `Fortnox::API.configuration`.
58
-
59
- ## [0.8.0]
20
+ - `fortnox-setup` lists the OAuth scopes covered by the gem's resources
21
+ and accepts a space-separated selection or `all`, replacing the
22
+ prescriptive default that didn't reflect the actual resource set. Other
23
+ Fortnox scopes (`salary`, `bookkeeping`, etc.) can still be entered
24
+ manually.
25
+ - `TermsOfPayment.code` is now `Sized::String[25]` and required, matching
26
+ Fortnox API documentation. The rest-easy rewrite for rc1 briefly lost
27
+ the required flag.
28
+ - `Unit.code` is now `Sized::String[20]` and required, matching Fortnox
29
+ API documentation. The rest-easy rewrite for rc1 briefly lost the
30
+ required flag.
31
+ - `Unit.description` is now `Sized::String[100]` and required, matching
32
+ Fortnox API documentation. In 0.x and rc1 this was nullable client-side,
33
+ but the Fortnox API rejected unset descriptions anyway.
34
+
35
+ ## [1.0.0.rc1] - 2026-05-04
36
+
37
+ Version 1.0 is a complete rewrite of the gem and is **not** a drop-in
38
+ replacement for the 0.x series. Almost every public entry point has changed.
39
+ See [MIGRATING_TO_1.0.md](MIGRATING_TO_1.0.md) for a guided upgrade and the sections below
40
+ for the full list of breaking changes.
60
41
 
61
42
  ### Changed
62
43
 
63
- - `Fortnox::API::CURRENT_HOUSEWORK_TYPES` is now renamed to `HOUSEWORK_TYPES`
64
- and is instead a Hash with keys for the different categories of types. It also
65
- includes legacy types, which means `Fortnox::API::LEGACY_HOUSEWORK_TYPES` is
66
- removed.
67
-
68
- ### Removed
69
-
70
- - Drops support for Ruby < `2.5.0` since they are deprecated
71
-
72
- ## [0.7.2]
73
-
74
- ### Fixed
75
-
76
- - Invalid validation for Customer's account number attribute
77
-
78
- ## [0.7.1]
79
-
80
- ### Fixed
81
-
82
- - Invalid validation for Customer's country attributes
83
-
84
- ## [0.7.0]
44
+ - **Breaking** Complete rewrite based on [rest-easy](https://github.com/accodeing/rest-easy),
45
+ replacing the HTTParty + Data Mapper architecture with a single resource
46
+ class per entity. The top-level namespace moves from `Fortnox::API` to
47
+ `Fortnox` (e.g. `Fortnox::API::Repository::Customer` →
48
+ `Fortnox::Customer`).
49
+ - **Breaking** Minimum Ruby version raised to 3.1.
50
+ - **Breaking** Authorization now uses the new Fortnox client credentials flow.
51
+ Refresh tokens are no longer needed, nor supported. A tenant ID is now required;
52
+ obtain one with the new `fortnox-setup` executable.
53
+ - **Breaking** Environment variables lose the `_API_` infix:
54
+ `FORTNOX_API_CLIENT_ID` → `FORTNOX_CLIENT_ID`, `FORTNOX_API_CLIENT_SECRET`
55
+ `FORTNOX_CLIENT_SECRET`, `FORTNOX_API_ACCESS_TOKEN` →
56
+ `FORTNOX_ACCESS_TOKEN`. `FORTNOX_API_REFRESH_TOKEN`,
57
+ `FORTNOX_API_REDIRECT_URI`, and `FORTNOX_API_SCOPES` are removed
58
+ refresh tokens are no longer supported, and the redirect URI and scopes
59
+ are now selected interactively in `fortnox-setup`. The new
60
+ `FORTNOX_TENANT_ID` is required for the client credentials flow.
61
+ - **Breaking** `Fortnox.request_access_token` replaces
62
+ `Fortnox::API::Repository::Authentication` for token management.
63
+ - **Breaking** Configuration moves from `Fortnox::API.configuration` to
64
+ module-level setters such as `Fortnox.access_token=`.
65
+ - **Breaking** Country attributes on documents (`country_code`,
66
+ `delivery_country`) now only accept ISO alpha-2 codes (e.g. `'NO'`,
67
+ `'SE'`). The old gem also accepted country names like `'Norge'` or
68
+ `'Norway'`.
69
+ - **Breaking** Exception classes are renamed and consolidated.
70
+ 0.x → 1.0 mapping:
71
+ - `Fortnox::API::Exception` → `Fortnox::Error`. Still the base class
72
+ for everything below; rescue it to catch any gem-raised error.
73
+ - `Fortnox::API::AttributeError` → `Fortnox::AttributeError`.
74
+ - `Fortnox::API::RemoteServerError` → `Fortnox::RequestError`, now
75
+ carries the response object as `.response`.
76
+ - `Fortnox::API::MissingAttributeError` → `Fortnox::MissingAttributeError`,
77
+ now carries `.attribute_name`.
78
+ - `Fortnox::API::MissingAccessToken` → `Fortnox::MissingAccessToken`.
79
+ In 0.x this was raised eagerly when constructing a repository; in 1.0
80
+ it is raised lazily, on the first API call from a thread that has not
81
+ set a token.
82
+ - `Fortnox::API::MissingConfiguration` is removed — the configurable
83
+ surface is much smaller in 1.0 and the previous misconfigurations
84
+ are no longer expressible.
85
+ - *new* `Fortnox::ConstraintError < Fortnox::AttributeError` — raised
86
+ when an attribute value violates a type constraint. Carries
87
+ `.attribute_name` and `.value`.
88
+ - Nested structs (EDIInformation, EmailInformation, InvoiceRow, etc.) are
89
+ now plain `Dry::Struct` subclasses; key-mapping and serialisation logic
90
+ lives in dedicated classes under `Fortnox::Mappers`.
91
+ - **Breaking** Collection-returning methods (`.all`, `.search`, `.only`,
92
+ and `.find(hash)`) now return a `Fortnox::Collection` instead of a plain
93
+ `Array`. Collection is `Enumerable` and delegates `each`, `first`, `last`,
94
+ `size`, `length`, `empty?`, `[]`, and `to_a`, so most existing Array
95
+ usage works unchanged. Code that explicitly checks `is_a?(Array)` or
96
+ compares with `==` against an Array literal needs updating.
97
+ - **Breaking** `Invoice.accounting_method` is now an enum accepting only
98
+ `''`, `'ACCRUAL'`, or `'CASH'`. In 0.x this was a free-form
99
+ `Nullable::String` so any value passed client-side.
100
+ - **Breaking** `Invoice.invoice_type` is now an enum accepting only `''`,
101
+ `'INVOICE'`, `'AGREEMENTINVOICE'`, `'INTRESTINVOICE'`, `'SUMMARYINVOICE'`,
102
+ or `'CASHINVOICE'`. In 0.x this was a free-form `Nullable::String`.
103
+ - `your_order_number` on Invoice and Order (inherited from Document) max
104
+ length raised from 30 to 75 characters to match the current Fortnox API.
105
+ - Article dimension fields (`depth`, `height`, `weight`, `width`) max raised
106
+ from 99,999,999 to 999,999,999 to match the documented Fortnox range.
85
107
 
86
108
  ### Added
87
109
 
88
- - Adds build test for Ruby `2.6.0`, `2.6.3` and `2.7.0-preview`.
89
-
90
- ### Removed
91
-
92
- - Drops support for Ruby < `2.4.0` since they are deprecated
110
+ - `Fortnox.request_access_token` for client credentials token requests
111
+ - `fortnox-setup` executable for initial OAuth authorization and tenant ID
112
+ discovery
113
+ - `fortnox-update-env` executable for refreshing access tokens in env files
114
+ - `Fortnox::Struct` base class for nested models, extending `Dry::Struct`
115
+ with a `:read_only` attribute flag for computed/server-side fields
116
+ - `Fortnox::Collection` class wrapping the result of multi-record API calls
117
+ and exposing pagination metadata via `.total`, `.pages`, and `.current_page`
118
+ - `instance.meta.partial?` flag — true for instances parsed from a
119
+ collection response (which Fortnox returns with fewer attributes than
120
+ single-resource fetches), false for instances from `find(id)`
121
+ - Label resource
93
122
 
94
123
  ### Fixed
95
124
 
96
- - Country attribute for `Invoice` and `Order` is now validated correctly.
97
- - Fixes deprecation warnings
98
- - Unlocks pinned `HTTParty` version
99
- - Invalid email validation
100
-
101
- ## [0.6.3]
102
-
103
- ### Changed
104
-
105
- - Pins `dry-types` to `< 0.13.0` due to breaking changes
106
-
107
- ### Fixed
108
-
109
- - Model attribute `url` is no longer null
110
-
111
- [0.9.2]: https://github.com/accodeing/fortnox-api/compare/v0.9.1...v0.9.2
112
- [0.9.1]: https://github.com/accodeing/fortnox-api/compare/v0.9.0...v0.9.1
113
- [0.9.0]: https://github.com/accodeing/fortnox-api/compare/v0.8.0...v0.9.0
114
- [0.8.0]: https://github.com/accodeing/fortnox-api/compare/v0.7.2...v0.8.0
115
- [0.7.2]: https://github.com/accodeing/fortnox-api/compare/v0.7.1...v0.7.2
116
- [0.7.1]: https://github.com/accodeing/fortnox-api/compare/v0.7.0...v0.7.1
117
- [0.7.0]: https://github.com/accodeing/fortnox-api/compare/v0.6.3...v0.7.0
118
- [0.6.3]: https://github.com/accodeing/fortnox-api/compare/v0.6.2...v0.6.3
125
+ - Setting an attribute to `nil` on update now correctly sends `null` to
126
+ Fortnox, clearing the field. In 0.x this silently re-sent the original
127
+ value due to a bug in the mapper diff. (#172)
128
+ - Read-only attributes like `total`, `balance`, and `booked` now load
129
+ correctly from Fortnox API responses. In 0.x these returned `nil` due
130
+ to missing writers for private attributes. (#50)
131
+ - API base URL updated from `apps.fortnox.se/3` to `api.fortnox.se/3`,
132
+ avoiding the redirect introduced by Fortnox in February 2026. (#249)
133
+ - All current housework types are now supported, including types added
134
+ after the 0.x release. (#196)
135
+ - The `Currencies` enum no longer accepts `KUR`. It is not an ISO-4217
136
+ currency code and the Fortnox API would have rejected it; 0.x accepted
137
+ it client-side.
138
+
139
+ For changes prior to the 1.0 rewrite, see the
140
+ [0.x changelog](https://github.com/accodeing/fortnox-api/blob/v0.9.2/CHANGELOG.md).
141
+
142
+ [1.0.0.rc2]: https://github.com/accodeing/fortnox-api/compare/v1.0.0.rc1...v1.0.0.rc2
143
+ [1.0.0.rc1]: https://github.com/accodeing/fortnox-api/releases/tag/v1.0.0.rc1
File without changes