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
@@ -1,91 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Fortnox
4
- module API
5
- module Mapper
6
- module FromJSON
7
- class MissingModelOrMapperException < Fortnox::API::Exception
8
- end
9
-
10
- def wrapped_json_collection_to_entities_hash(json_collection_hash)
11
- entities_hash = []
12
- json_collection_hash[self.class::JSON_COLLECTION_WRAPPER].each do |json_hash|
13
- entities_hash << json_hash_to_entity_hash(json_hash, self.class::KEY_MAP)
14
- end
15
-
16
- entities_hash
17
- end
18
-
19
- def wrapped_json_hash_to_entity_hash(json_entity_hash)
20
- json_hash_to_entity_hash(json_entity_hash[self.class::JSON_ENTITY_WRAPPER],
21
- self.class::KEY_MAP)
22
- end
23
-
24
- private
25
-
26
- def json_hash_to_entity_hash(hash, key_map)
27
- hash.each_with_object({}) do |(key, value), json_hash|
28
- converted_key = convert_key_from_json(key, key_map)
29
- json_hash[converted_key] =
30
- if value.respond_to?(:each)
31
- convert_collection(key, value)
32
- else
33
- value
34
- end
35
- end
36
- end
37
-
38
- def convert_collection(key, collection)
39
- mapper_name = key.downcase
40
- if Registry.key?(mapper_name)
41
- convert_nested_data(mapper_name, key, collection)
42
- else
43
- # NOTE: This probably means this is a nested model that we have
44
- # not implemented yet, or that is missing a mapper.
45
- # Raise exception during test run if this happens so that we can
46
- # add it before a new release.
47
-
48
- message = "for #{key} (#{mapper_name}, #{Fortnox::API::Mapper::DefaultTemplates.canonical_name_sym}) " \
49
- "with #{collection}"
50
-
51
- raise MissingModelOrMapperException, message if ENV['RUBY_ENV']
52
-
53
- Fortnox::API.logger.warn("Missing Model or Mapper implementation for #{key} with attributes: #{collection}")
54
- convert_hash_keys_from_json_format(collection, {})
55
- end
56
- end
57
-
58
- def convert_nested_data(_mapper_name, key, nested_data)
59
- nested_mapper = Registry[key.downcase]
60
-
61
- # Assume Hash of nested model
62
- return json_hash_to_entity_hash(nested_data, nested_mapper::KEY_MAP) unless nested_data.is_a?(::Array)
63
-
64
- # Array of nested models
65
- nested_data.each_with_object([]) do |value, nested_models|
66
- nested_models << json_hash_to_entity_hash(value, nested_mapper::KEY_MAP)
67
- end
68
- end
69
-
70
- def convert_key_from_json(key, key_map)
71
- key_map.key(key) || default_key_from_json_transform(key)
72
- end
73
-
74
- def default_key_from_json_transform(key)
75
- key = key.to_s
76
- key = camelcase_to_underscore(key) unless key.match?(/\A[A-Z]+\z/)
77
- key = strip_at_symbol(key) if key.match?(/\A@.*\z/)
78
- key.downcase.to_sym
79
- end
80
-
81
- def camelcase_to_underscore(key)
82
- key.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').gsub(/([a-z])([A-Z])/, '\1_\2')
83
- end
84
-
85
- def strip_at_symbol(key)
86
- key.gsub(/\A@/, '')
87
- end
88
- end
89
- end
90
- end
91
- end
@@ -1,66 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Fortnox
4
- module API
5
- module Mapper
6
- module ToJSON
7
- def self.included(base)
8
- base.send :extend, ClassMethods
9
-
10
- base.send :private_class_method,
11
- :convert_hash_keys_to_json_format,
12
- :convert_key_to_json,
13
- :default_key_to_json_transform,
14
- :sanitise
15
- end
16
-
17
- module ClassMethods
18
- def call(entity, keys_to_filter = {})
19
- entity_hash = entity.to_hash
20
- clean_entity_hash = sanitise(entity_hash, keys_to_filter)
21
- clean_entity_hash = convert_hash_keys_to_json_format(clean_entity_hash)
22
- Registry[:hash].call(clean_entity_hash)
23
- end
24
-
25
- # PRIVATE
26
-
27
- def convert_hash_keys_to_json_format(hash)
28
- hash.transform_keys do |key|
29
- convert_key_to_json(key)
30
- end
31
- end
32
-
33
- def convert_key_to_json(key)
34
- self::KEY_MAP.fetch(key) { default_key_to_json_transform(key) }
35
- end
36
-
37
- def default_key_to_json_transform(key)
38
- key.to_s.split('_').map(&:capitalize).join
39
- end
40
-
41
- def sanitise(hash, keys_to_filter)
42
- hash.reject do |key, value|
43
- keys_to_filter.include?(key) || value.nil?
44
- end
45
- end
46
- end
47
-
48
- def entity_to_hash(entity, keys_to_filter)
49
- entity_json_hash = Registry[mapper_name_for(entity)]
50
- .call(entity, keys_to_filter)
51
- wrap_entity_json_hash(entity_json_hash)
52
- end
53
-
54
- def wrap_entity_json_hash(entity_json_hash)
55
- { self.class::JSON_ENTITY_WRAPPER => entity_json_hash }
56
- end
57
-
58
- private
59
-
60
- def mapper_name_for(value)
61
- value.class.name.split('::').last.downcase.to_sym
62
- end
63
- end
64
- end
65
- end
66
- end
@@ -1,30 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base/canonical_name_sym'
4
- require_relative 'base/from_json'
5
- require_relative 'base/to_json'
6
-
7
- module Fortnox
8
- module API
9
- module Mapper
10
- class Base
11
- include FromJSON
12
- include ToJSON
13
- extend CanonicalNameSym
14
-
15
- def diff(entity_hash, parent_hash)
16
- hash_diff(entity_hash[self.class::JSON_ENTITY_WRAPPER],
17
- parent_hash[self.class::JSON_ENTITY_WRAPPER])
18
- end
19
-
20
- private
21
-
22
- def hash_diff(hash1, hash2)
23
- hash1.dup
24
- .delete_if { |k, v| hash2[k] == v }
25
- .merge!(hash2.dup.delete_if { |k, _| hash1.key?(k) })
26
- end
27
- end
28
- end
29
- end
30
- end
@@ -1,27 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- module Fortnox
6
- module API
7
- module Mapper
8
- class Customer < Fortnox::API::Mapper::Base
9
- KEY_MAP = {
10
- vat_type: 'VATType',
11
- vat_number: 'VATNumber',
12
- email_invoice_bcc: 'EmailInvoiceBCC',
13
- email_invoice_cc: 'EmailInvoiceCC',
14
- email_offer_bcc: 'EmailOfferBCC',
15
- email_offer_cc: 'EmailOfferCC',
16
- email_order_bcc: 'EmailOrderBCC',
17
- email_order_cc: 'EmailOrderCC',
18
- show_price_vat_included: 'ShowPriceVATIncluded'
19
- }.freeze
20
- JSON_ENTITY_WRAPPER = 'Customer'
21
- JSON_COLLECTION_WRAPPER = 'Customers'
22
- end
23
-
24
- Registry.register(Customer.canonical_name_sym, Customer)
25
- end
26
- end
27
- end
@@ -1,15 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- module Fortnox
6
- module API
7
- module Mapper
8
- class DefaultDeliveryTypes < Fortnox::API::Mapper::Base
9
- KEY_MAP = {}.freeze
10
- end
11
-
12
- Registry.register(DefaultDeliveryTypes.canonical_name_sym, DefaultDeliveryTypes)
13
- end
14
- end
15
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- module Fortnox
6
- module API
7
- module Mapper
8
- class DefaultTemplates < Fortnox::API::Mapper::Base
9
- KEY_MAP = {}.freeze
10
- JSON_ENTITY_WRAPPER = JSON_COLLECTION_WRAPPER = 'DefaultTemplates'
11
- end
12
-
13
- Registry.register(DefaultTemplates.canonical_name_sym, DefaultTemplates)
14
- end
15
- end
16
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- module Fortnox
6
- module API
7
- module Mapper
8
- class EDIInformation < Fortnox::API::Mapper::Base
9
- KEY_MAP = {
10
- edi_global_location_number: 'EDIGlobalLocationNumber',
11
- edi_global_location_number_delivery: 'EDIGlobalLocationNumberDelivery',
12
- edi_invoice_extra1: 'EDIInvoiceExtra1',
13
- edi_invoice_extra2: 'EDIInvoiceExtra2',
14
- edi_our_electronic_reference: 'EDIOurElectronicReference',
15
- edi_your_electronic_reference: 'EDIYourElectronicReference'
16
- }.freeze
17
- JSON_ENTITY_WRAPPER = JSON_COLLECTION_WRAPPER = 'EDIInformation'
18
- end
19
-
20
- Registry.register(EDIInformation.canonical_name_sym, EDIInformation)
21
- end
22
- end
23
- end
@@ -1,19 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- module Fortnox
6
- module API
7
- module Mapper
8
- class EmailInformation < Fortnox::API::Mapper::Base
9
- KEY_MAP = {
10
- email_address_bcc: 'EmailAddressBCC',
11
- email_address_cc: 'EmailAddressCC'
12
- }.freeze
13
- JSON_ENTITY_WRAPPER = JSON_COLLECTION_WRAPPER = 'EmailInformation'
14
- end
15
-
16
- Registry.register(EmailInformation.canonical_name_sym, EmailInformation)
17
- end
18
- end
19
- end
@@ -1,29 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
- require_relative 'edi_information'
5
- require_relative 'email_information'
6
- require_relative 'invoice_row'
7
-
8
- module Fortnox
9
- module API
10
- module Mapper
11
- class Invoice < Fortnox::API::Mapper::Base
12
- KEY_MAP = {
13
- administration_fee_vat: 'AdministrationFeeVAT',
14
- edi_information: 'EDIInformation',
15
- eu_quarterly_report: 'EUQuarterlyReport',
16
- freight_vat: 'FreightVAT',
17
- housework: 'HouseWork',
18
- ocr: 'OCR',
19
- total_vat: 'TotalVAT',
20
- vat_included: 'VATIncluded'
21
- }.freeze
22
- JSON_ENTITY_WRAPPER = 'Invoice'
23
- JSON_COLLECTION_WRAPPER = 'Invoices'
24
- end
25
-
26
- Registry.register(Invoice.canonical_name_sym, Invoice)
27
- end
28
- end
29
- end
@@ -1,25 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- module Fortnox
6
- module API
7
- module Mapper
8
- class InvoiceRow < Fortnox::API::Mapper::Base
9
- KEY_MAP = {
10
- housework: 'HouseWork',
11
- housework_hours_to_report: 'HouseWorkHoursToReport',
12
- housework_type: 'HouseWorkType',
13
- price_excluding_vat: 'PriceExcludingVAT',
14
- total_excluding_vat: 'TotalExcludingVAT',
15
- vat: 'VAT'
16
- }.freeze
17
- JSON_ENTITY_WRAPPER = 'InvoiceRow'
18
- JSON_COLLECTION_WRAPPER = 'InvoiceRows'
19
- end
20
-
21
- Registry.register(InvoiceRow.canonical_name_sym, InvoiceRow)
22
- Registry.register(:invoicerows, InvoiceRow)
23
- end
24
- end
25
- end
@@ -1,26 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
- require_relative 'edi_information'
5
- require_relative 'email_information'
6
- require_relative 'order_row'
7
-
8
- module Fortnox
9
- module API
10
- module Mapper
11
- class Order < Fortnox::API::Mapper::Base
12
- KEY_MAP = {
13
- administration_fee_vat: 'AdministrationFeeVAT',
14
- freight_vat: 'FreightVAT',
15
- housework: 'HouseWork',
16
- total_vat: 'TotalVAT',
17
- vat_included: 'VATIncluded'
18
- }.freeze
19
- JSON_ENTITY_WRAPPER = 'Order'
20
- JSON_COLLECTION_WRAPPER = 'Orders'
21
- end
22
-
23
- Registry.register(Order.canonical_name_sym, Order)
24
- end
25
- end
26
- end
@@ -1,23 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- module Fortnox
6
- module API
7
- module Mapper
8
- class OrderRow < Fortnox::API::Mapper::Base
9
- KEY_MAP = {
10
- housework: 'HouseWork',
11
- housework_hours_to_report: 'HouseWorkHoursToReport',
12
- housework_type: 'HouseWorkType',
13
- vat: 'VAT'
14
- }.freeze
15
- JSON_ENTITY_WRAPPER = 'OrderRow'
16
- JSON_COLLECTION_WRAPPER = 'OrderRows'
17
- end
18
-
19
- Registry.register(OrderRow.canonical_name_sym, OrderRow)
20
- Registry.register(:orderrows, OrderRow)
21
- end
22
- end
23
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- module Fortnox
6
- module API
7
- module Mapper
8
- class Project < Fortnox::API::Mapper::Base
9
- KEY_MAP = {}.freeze
10
- JSON_ENTITY_WRAPPER = 'Project'
11
- JSON_COLLECTION_WRAPPER = 'Projects'
12
- end
13
-
14
- Registry.register(Project.canonical_name_sym, Project)
15
- end
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- module Fortnox
6
- module API
7
- module Mapper
8
- class TermsOfPayment < Fortnox::API::Mapper::Base
9
- KEY_MAP = {}.freeze
10
- JSON_ENTITY_WRAPPER = 'TermsOfPayment'
11
- JSON_COLLECTION_WRAPPER = 'TermsOfPayments'
12
- end
13
-
14
- Registry.register(TermsOfPayment.canonical_name_sym, TermsOfPayment)
15
- end
16
- end
17
- end
@@ -1,17 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'base'
4
-
5
- module Fortnox
6
- module API
7
- module Mapper
8
- class Unit < Fortnox::API::Mapper::Base
9
- KEY_MAP = {}.freeze
10
- JSON_ENTITY_WRAPPER = 'Unit'
11
- JSON_COLLECTION_WRAPPER = 'Units'
12
- end
13
-
14
- Registry.register(Unit.canonical_name_sym, Unit)
15
- end
16
- end
17
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Fortnox
4
- module API
5
- module Mapper
6
- Array = lambda do |array|
7
- array.each_with_object([]) do |item, converted_array|
8
- name = Fortnox::API::Mapper::Base.canonical_name_sym(item)
9
- converted_array << Fortnox::API::Registry[name].call(item)
10
- end
11
- end
12
-
13
- Registry.register(:array, Fortnox::API::Mapper::Array)
14
-
15
- Registry.register(:labels, Fortnox::API::Mapper::Array)
16
- end
17
- end
18
- end
@@ -1,24 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative '../base/canonical_name_sym'
4
-
5
- module Fortnox
6
- module API
7
- module Mapper
8
- class CountryString
9
- extend CanonicalNameSym
10
-
11
- CountryMapper = lambda do |code|
12
- next code if code.nil? || code == ''
13
-
14
- # Fortnox only supports Swedish country name for Sweden
15
- next 'Sverige' if code == 'SE'
16
-
17
- ::ISO3166::Country[code].translations['en']
18
- end
19
-
20
- Registry.register(canonical_name_sym, CountryMapper)
21
- end
22
- end
23
- end
24
- end
@@ -1,11 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Fortnox
4
- module API
5
- module Mapper
6
- Date = ->(value) { value.to_s }
7
-
8
- Registry.register(:date, Fortnox::API::Mapper::Date)
9
- end
10
- end
11
- end
@@ -1,16 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Fortnox
4
- module API
5
- module Mapper
6
- Hash = lambda do |hash|
7
- hash.each do |key, value|
8
- name = Fortnox::API::Mapper::Base.canonical_name_sym(value)
9
- hash[key] = Fortnox::API::Registry[name].call(value)
10
- end
11
- end
12
-
13
- Registry.register(:hash, Hash)
14
- end
15
- end
16
- end
@@ -1,18 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- module Fortnox
4
- module API
5
- module Mapper
6
- Identity = ->(value) { value }
7
-
8
- Registry.register(:integer, Fortnox::API::Mapper::Identity)
9
- Registry.register(:int, Fortnox::API::Mapper::Identity)
10
- Registry.register(:float, Fortnox::API::Mapper::Identity)
11
- Registry.register(:string, Fortnox::API::Mapper::Identity)
12
- Registry.register(:boolean, Fortnox::API::Mapper::Identity)
13
- Registry.register(:falseclass, Fortnox::API::Mapper::Identity)
14
- Registry.register(:trueclass, Fortnox::API::Mapper::Identity)
15
- Registry.register(:nilclass, Fortnox::API::Mapper::Identity)
16
- end
17
- end
18
- end
@@ -1,21 +0,0 @@
1
- # frozen_string_literal: true
2
-
3
- require_relative 'types'
4
-
5
- require_relative 'mappers/value/array'
6
- require_relative 'mappers/value/country_string'
7
- require_relative 'mappers/value/date'
8
- require_relative 'mappers/value/hash'
9
- require_relative 'mappers/value/identity'
10
- require_relative 'mappers/customer'
11
- require_relative 'mappers/default_delivery_types'
12
- require_relative 'mappers/default_templates'
13
- require_relative 'mappers/edi_information'
14
- require_relative 'mappers/email_information'
15
- require_relative 'mappers/invoice_row'
16
- require_relative 'mappers/invoice'
17
- require_relative 'mappers/order_row'
18
- require_relative 'mappers/order'
19
- require_relative 'mappers/project'
20
- require_relative 'mappers/unit'
21
- require_relative 'mappers/terms_of_payment'