fortnox-api 0.8.0 → 0.8.2

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 (197) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +1 -0
  3. data/.rubocop.yml +1 -1
  4. data/.tool-versions +1 -0
  5. data/.travis.yml +5 -3
  6. data/CHANGELOG.md +44 -3
  7. data/fortnox-api.gemspec +22 -17
  8. data/lib/fortnox/api/mappers/article.rb +1 -1
  9. data/lib/fortnox/api/mappers/base/from_json.rb +1 -1
  10. data/lib/fortnox/api/mappers/base/to_json.rb +2 -2
  11. data/lib/fortnox/api/mappers/base.rb +3 -3
  12. data/lib/fortnox/api/mappers/customer.rb +1 -1
  13. data/lib/fortnox/api/mappers/default_delivery_types.rb +1 -1
  14. data/lib/fortnox/api/mappers/default_templates.rb +1 -1
  15. data/lib/fortnox/api/mappers/edi_information.rb +1 -1
  16. data/lib/fortnox/api/mappers/email_information.rb +1 -1
  17. data/lib/fortnox/api/mappers/invoice.rb +4 -4
  18. data/lib/fortnox/api/mappers/invoice_row.rb +1 -1
  19. data/lib/fortnox/api/mappers/order.rb +4 -4
  20. data/lib/fortnox/api/mappers/order_row.rb +1 -1
  21. data/lib/fortnox/api/mappers/project.rb +1 -1
  22. data/lib/fortnox/api/mappers/terms_of_payment.rb +1 -1
  23. data/lib/fortnox/api/mappers/unit.rb +1 -1
  24. data/lib/fortnox/api/mappers/value/country_string.rb +1 -1
  25. data/lib/fortnox/api/mappers.rb +18 -18
  26. data/lib/fortnox/api/models/article.rb +2 -2
  27. data/lib/fortnox/api/models/base.rb +14 -14
  28. data/lib/fortnox/api/models/customer.rb +2 -2
  29. data/lib/fortnox/api/models/document.rb +2 -2
  30. data/lib/fortnox/api/models/invoice.rb +2 -2
  31. data/lib/fortnox/api/models/label.rb +1 -1
  32. data/lib/fortnox/api/models/order.rb +2 -2
  33. data/lib/fortnox/api/models/project.rb +2 -2
  34. data/lib/fortnox/api/models/terms_of_payment.rb +2 -2
  35. data/lib/fortnox/api/models/unit.rb +2 -2
  36. data/lib/fortnox/api/models.rb +7 -7
  37. data/lib/fortnox/api/repositories/article.rb +3 -3
  38. data/lib/fortnox/api/repositories/base.rb +4 -3
  39. data/lib/fortnox/api/repositories/customer.rb +3 -3
  40. data/lib/fortnox/api/repositories/invoice.rb +3 -3
  41. data/lib/fortnox/api/repositories/order.rb +3 -3
  42. data/lib/fortnox/api/repositories/project.rb +3 -3
  43. data/lib/fortnox/api/repositories/terms_of_payment.rb +3 -3
  44. data/lib/fortnox/api/repositories/unit.rb +3 -3
  45. data/lib/fortnox/api/repositories.rb +7 -7
  46. data/lib/fortnox/api/types/default_delivery_types.rb +0 -2
  47. data/lib/fortnox/api/types/default_templates.rb +0 -2
  48. data/lib/fortnox/api/types/edi_information.rb +0 -2
  49. data/lib/fortnox/api/types/email_information.rb +0 -2
  50. data/lib/fortnox/api/types/invoice_row.rb +1 -1
  51. data/lib/fortnox/api/types/model.rb +5 -6
  52. data/lib/fortnox/api/types/nullable.rb +13 -9
  53. data/lib/fortnox/api/types/order_row.rb +1 -1
  54. data/lib/fortnox/api/types/required.rb +3 -3
  55. data/lib/fortnox/api/types/sized.rb +2 -2
  56. data/lib/fortnox/api/types.rb +17 -22
  57. data/lib/fortnox/api/version.rb +1 -1
  58. data/lib/fortnox/api.rb +18 -16
  59. data/spec/fortnox/api/mappers/base/canonical_name_sym_spec.rb +9 -7
  60. data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +1 -1
  61. data/spec/fortnox/api/mappers/examples/mapper.rb +1 -1
  62. data/spec/fortnox/api/models/base_spec.rb +8 -8
  63. data/spec/fortnox/api/repositories/article_spec.rb +2 -2
  64. data/spec/fortnox/api/repositories/base_spec.rb +4 -12
  65. data/spec/fortnox/api/repositories/customer_spec.rb +1 -1
  66. data/spec/fortnox/api/repositories/invoice_spec.rb +0 -6
  67. data/spec/fortnox/api/repositories/project_spec.rb +1 -1
  68. data/spec/fortnox/api/repositories/terms_of_payment_spec.rb +2 -2
  69. data/spec/fortnox/api/repositories/unit_spec.rb +3 -3
  70. data/spec/fortnox/api/types/housework_types_spec.rb +0 -29
  71. data/spec/fortnox/api/types/model_spec.rb +31 -17
  72. data/spec/fortnox/api/types/nullable_spec.rb +30 -10
  73. data/spec/fortnox/api/types/required_spec.rb +1 -4
  74. data/spec/support/matchers/type/enum_matcher.rb +1 -1
  75. data/spec/support/matchers/type/have_account_number_matcher.rb +1 -1
  76. data/spec/support/matchers/type/have_email_matcher.rb +1 -1
  77. data/spec/support/matchers/type/have_nullable_date_matcher.rb +5 -5
  78. data/spec/support/matchers/type/have_nullable_string_matcher.rb +3 -3
  79. data/spec/vcr_cassettes/articles/all.yml +30 -20
  80. data/spec/vcr_cassettes/articles/find_by_hash_failure.yml +25 -19
  81. data/spec/vcr_cassettes/articles/find_failure.yml +25 -19
  82. data/spec/vcr_cassettes/articles/find_id_1.yml +26 -20
  83. data/spec/vcr_cassettes/articles/find_new.yml +28 -22
  84. data/spec/vcr_cassettes/articles/multi_param_find_by_hash.yml +25 -19
  85. data/spec/vcr_cassettes/articles/save_new.yml +27 -21
  86. data/spec/vcr_cassettes/articles/save_old.yml +28 -22
  87. data/spec/vcr_cassettes/articles/save_with_specially_named_attribute.yml +27 -21
  88. data/spec/vcr_cassettes/articles/search_by_name.yml +25 -19
  89. data/spec/vcr_cassettes/articles/search_miss.yml +25 -19
  90. data/spec/vcr_cassettes/articles/search_with_special_char.yml +25 -19
  91. data/spec/vcr_cassettes/articles/single_param_find_by_hash.yml +28 -21
  92. data/spec/vcr_cassettes/customers/all.yml +26 -20
  93. data/spec/vcr_cassettes/customers/find_by_hash_failure.yml +25 -19
  94. data/spec/vcr_cassettes/customers/find_failure.yml +25 -19
  95. data/spec/vcr_cassettes/customers/find_id_1.yml +25 -19
  96. data/spec/vcr_cassettes/customers/find_new.yml +27 -21
  97. data/spec/vcr_cassettes/customers/multi_param_find_by_hash.yml +25 -19
  98. data/spec/vcr_cassettes/customers/save_new.yml +26 -20
  99. data/spec/vcr_cassettes/customers/save_new_with_country_code_SE.yml +26 -20
  100. data/spec/vcr_cassettes/customers/save_old.yml +27 -21
  101. data/spec/vcr_cassettes/customers/save_with_specially_named_attribute.yml +26 -20
  102. data/spec/vcr_cassettes/customers/search_by_name.yml +28 -20
  103. data/spec/vcr_cassettes/customers/search_miss.yml +25 -19
  104. data/spec/vcr_cassettes/customers/search_with_special_char.yml +25 -19
  105. data/spec/vcr_cassettes/customers/single_param_find_by_hash.yml +25 -19
  106. data/spec/vcr_cassettes/invoices/all.yml +26 -20
  107. data/spec/vcr_cassettes/invoices/filter_hit.yml +25 -19
  108. data/spec/vcr_cassettes/invoices/filter_invalid.yml +25 -19
  109. data/spec/vcr_cassettes/invoices/find_by_hash_failure.yml +25 -19
  110. data/spec/vcr_cassettes/invoices/find_failure.yml +25 -19
  111. data/spec/vcr_cassettes/invoices/find_id_1.yml +26 -20
  112. data/spec/vcr_cassettes/invoices/find_new.yml +30 -24
  113. data/spec/vcr_cassettes/invoices/multi_param_find_by_hash.yml +25 -19
  114. data/spec/vcr_cassettes/invoices/save_new.yml +29 -23
  115. data/spec/vcr_cassettes/invoices/save_new_with_comments.yml +29 -23
  116. data/spec/vcr_cassettes/invoices/save_new_with_country.yml +28 -22
  117. data/spec/vcr_cassettes/invoices/save_new_with_country_GB.yml +29 -23
  118. data/spec/vcr_cassettes/invoices/save_new_with_country_Norge.yml +28 -22
  119. data/spec/vcr_cassettes/invoices/save_new_with_country_Norway.yml +28 -22
  120. data/spec/vcr_cassettes/invoices/save_new_with_country_Sverige.yml +28 -22
  121. data/spec/vcr_cassettes/invoices/save_new_with_country_VA.yml +29 -23
  122. data/spec/vcr_cassettes/invoices/save_new_with_country_VI.yml +29 -23
  123. data/spec/vcr_cassettes/invoices/save_new_with_country_empty_string.yml +28 -22
  124. data/spec/vcr_cassettes/invoices/save_new_with_country_nil.yml +28 -22
  125. data/spec/vcr_cassettes/invoices/save_old.yml +30 -24
  126. data/spec/vcr_cassettes/invoices/save_old_with_empty_comments.yml +30 -24
  127. data/spec/vcr_cassettes/invoices/save_old_with_empty_country.yml +29 -23
  128. data/spec/vcr_cassettes/invoices/save_old_with_nil_comments.yml +30 -24
  129. data/spec/vcr_cassettes/invoices/save_old_with_nil_country.yml +29 -23
  130. data/spec/vcr_cassettes/invoices/save_with_nested_model.yml +28 -22
  131. data/spec/vcr_cassettes/invoices/save_with_specially_named_attribute.yml +28 -22
  132. data/spec/vcr_cassettes/invoices/search_by_name.yml +25 -19
  133. data/spec/vcr_cassettes/invoices/search_miss.yml +25 -19
  134. data/spec/vcr_cassettes/invoices/search_with_special_char.yml +25 -19
  135. data/spec/vcr_cassettes/invoices/single_param_find_by_hash.yml +25 -19
  136. data/spec/vcr_cassettes/orders/all.yml +26 -20
  137. data/spec/vcr_cassettes/orders/filter_hit.yml +25 -19
  138. data/spec/vcr_cassettes/orders/filter_invalid.yml +25 -19
  139. data/spec/vcr_cassettes/orders/find_by_hash_failure.yml +25 -19
  140. data/spec/vcr_cassettes/orders/find_failure.yml +25 -19
  141. data/spec/vcr_cassettes/orders/find_id_1.yml +25 -19
  142. data/spec/vcr_cassettes/orders/find_new.yml +29 -23
  143. data/spec/vcr_cassettes/orders/housework_invalid_tax_reduction_type.yml +25 -19
  144. data/spec/vcr_cassettes/orders/housework_othercoses_invalid.yml +25 -19
  145. data/spec/vcr_cassettes/orders/housework_type_babysitting.yml +28 -22
  146. data/spec/vcr_cassettes/orders/housework_type_cleaning.yml +28 -22
  147. data/spec/vcr_cassettes/orders/housework_type_construction.yml +28 -22
  148. data/spec/vcr_cassettes/orders/housework_type_cooking.yml +25 -19
  149. data/spec/vcr_cassettes/orders/housework_type_electricity.yml +28 -22
  150. data/spec/vcr_cassettes/orders/housework_type_gardening.yml +28 -22
  151. data/spec/vcr_cassettes/orders/housework_type_glassmetalwork.yml +28 -22
  152. data/spec/vcr_cassettes/orders/housework_type_grounddrainagework.yml +28 -22
  153. data/spec/vcr_cassettes/orders/housework_type_hvac.yml +28 -22
  154. data/spec/vcr_cassettes/orders/housework_type_itservices.yml +28 -22
  155. data/spec/vcr_cassettes/orders/housework_type_majorappliancerepair.yml +28 -22
  156. data/spec/vcr_cassettes/orders/housework_type_masonry.yml +28 -22
  157. data/spec/vcr_cassettes/orders/housework_type_movingservices.yml +28 -22
  158. data/spec/vcr_cassettes/orders/housework_type_othercare.yml +28 -22
  159. data/spec/vcr_cassettes/orders/housework_type_othercosts.yml +28 -22
  160. data/spec/vcr_cassettes/orders/housework_type_paintingwallpapering.yml +28 -22
  161. data/spec/vcr_cassettes/orders/housework_type_snowplowing.yml +28 -22
  162. data/spec/vcr_cassettes/orders/housework_type_textileclothing.yml +28 -22
  163. data/spec/vcr_cassettes/orders/housework_type_tutoring.yml +25 -19
  164. data/spec/vcr_cassettes/orders/multi_param_find_by_hash.yml +25 -19
  165. data/spec/vcr_cassettes/orders/save_new.yml +28 -22
  166. data/spec/vcr_cassettes/orders/save_old.yml +29 -23
  167. data/spec/vcr_cassettes/orders/save_with_nested_model.yml +28 -22
  168. data/spec/vcr_cassettes/orders/search_by_name.yml +25 -19
  169. data/spec/vcr_cassettes/orders/search_miss.yml +25 -19
  170. data/spec/vcr_cassettes/orders/search_with_special_char.yml +25 -19
  171. data/spec/vcr_cassettes/orders/single_param_find_by_hash.yml +25 -19
  172. data/spec/vcr_cassettes/projects/all.yml +31 -21
  173. data/spec/vcr_cassettes/projects/find_by_hash_failure.yml +25 -19
  174. data/spec/vcr_cassettes/projects/find_failure.yml +25 -19
  175. data/spec/vcr_cassettes/projects/find_id_1.yml +25 -19
  176. data/spec/vcr_cassettes/projects/find_new.yml +28 -22
  177. data/spec/vcr_cassettes/projects/multi_param_find_by_hash.yml +26 -20
  178. data/spec/vcr_cassettes/projects/save_new.yml +27 -21
  179. data/spec/vcr_cassettes/projects/save_old.yml +28 -22
  180. data/spec/vcr_cassettes/projects/single_param_find_by_hash.yml +26 -20
  181. data/spec/vcr_cassettes/termsofpayments/all.yml +34 -27
  182. data/spec/vcr_cassettes/termsofpayments/find_failure.yml +25 -19
  183. data/spec/vcr_cassettes/termsofpayments/find_id_1.yml +25 -19
  184. data/spec/vcr_cassettes/termsofpayments/find_new.yml +27 -21
  185. data/spec/vcr_cassettes/termsofpayments/save_new.yml +27 -21
  186. data/spec/vcr_cassettes/termsofpayments/save_old.yml +27 -21
  187. data/spec/vcr_cassettes/units/all.yml +36 -28
  188. data/spec/vcr_cassettes/units/find_failure.yml +25 -19
  189. data/spec/vcr_cassettes/units/find_id_1.yml +26 -20
  190. data/spec/vcr_cassettes/units/find_new.yml +27 -21
  191. data/spec/vcr_cassettes/units/save_new.yml +27 -21
  192. data/spec/vcr_cassettes/units/save_old.yml +27 -21
  193. data/spec/vcr_cassettes/units/save_with_specially_named_attribute.yml +27 -21
  194. metadata +107 -47
  195. data/spec/support/helpers/dummy_class_helper.rb +0 -38
  196. data/spec/vcr_cassettes/invoices/save_new_with_country_KR.yml +0 -61
  197. data/spec/vcr_cassettes/orders/housework_without_tax_reduction_type.yml +0 -57
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: 02c5fbd6c659d3c6cc4e9ed8dfef6e739ded62fc33107623f4dddc13d33f6672
4
- data.tar.gz: 14f0815a2fd32e98055d71ef231da2b6fac4b95ecfd9dfcda59b88d1c1445c63
3
+ metadata.gz: 345228c827e624083ca2557504b5c426f3e4719a9252e35bb31d87e44fe9f7f7
4
+ data.tar.gz: 3b9fc903f0f5dc8b7e98ae5610af503dd09c6cc218af6c7339e197de23c39e08
5
5
  SHA512:
6
- metadata.gz: 293665ff9e0b860e88c7c6c78fbcfdd0b8a8047444f23cd0560d504442e1a0ac3439c52349413cac63e0c5973d1db74dabcf7ebdd9c10bc3f1b7de922db58cbc
7
- data.tar.gz: 011b4785ce46af9c4cd57939431f6b09dc6ab44d650023616fe7b0784dcde890727999eb918ac3c3db311afaaff8785d240c54e5c30f198a630b9a1bf41483b7
6
+ metadata.gz: 8f74bbe0e82253b3addac22a96fc2cde1892ff8b2d0a48bab032b3b7306bb6e215646b2e365622f9671eeecc90167531b7fa9dc92227b83e4dfd6aaefe04f202
7
+ data.tar.gz: 0f1f3b7a1702950973bdd23d4bda90fdfb03ac2532031067f15f84d4abf6d2f629a7bda54cc2a405e868629627785a722c4f32dd5d719f3f6f36d5593cbc39da
data/.codeclimate.yml CHANGED
@@ -12,6 +12,7 @@ engines:
12
12
  enabled: false
13
13
  rubocop:
14
14
  enabled: true
15
+ channel: rubocop-1-39-0
15
16
  ratings:
16
17
  paths:
17
18
  - "**.rb"
data/.rubocop.yml CHANGED
@@ -1,7 +1,7 @@
1
1
  require: rubocop-rspec
2
2
 
3
3
  AllCops:
4
- TargetRubyVersion: 2.5
4
+ TargetRubyVersion: 2.7
5
5
  DisplayCopNames: true
6
6
 
7
7
  RSpec/FilePath:
data/.tool-versions ADDED
@@ -0,0 +1 @@
1
+ ruby 3.2.0
data/.travis.yml CHANGED
@@ -3,9 +3,11 @@ env:
3
3
  - CC_TEST_REPORTER_ID=43ea0acb059b164537ce31bf67e03e1cb552d63df1ad3e9bd95dc3d844697bb4
4
4
  language: ruby
5
5
  rvm:
6
- - 2.5.8
7
- - 2.6.6
8
- - 2.7.1
6
+ - 2.7.7
7
+ - 3.0.5
8
+ - 3.1.3
9
+ - 3.2.0
10
+
9
11
  notifications:
10
12
  slack:
11
13
  secure: UEYDtwLaQgAoMRY7ct1y0Uu5HbInMwrLo+TiYRc3rjDrzqDfDyInEr3bpckyPJ79lnzccrFezMdY4jWzRjmsvQzvYMu+DWJ1mAWOa/9Ws4YZ8nHd5KqXxVQ0EqPWuWwMOyOdyy3DK/MjUOobGSc0//Pv5DeaAAEBKLJzN+e1BQM=
data/CHANGELOG.md CHANGED
@@ -1,46 +1,87 @@
1
1
  # Changelog
2
+
2
3
  All notable changes to this project will be documented in this file.
3
4
 
4
5
  The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
5
- and this project adheres to [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
6
+ and this project adheres to
7
+ [Semantic Versioning](http://semver.org/spec/v2.0.0.html).
8
+
9
+ ## [0.8.2]
10
+
11
+ ### Fixed
12
+ - Restored undocumented support for string keys in model attributes,
13
+ which was inadvertently removed in `v0.8.1`.
14
+
15
+ ## [0.8.1]
16
+
17
+ ### Fixed
18
+
19
+ - Missing runtime dependencies dry-configurable and dry-container is added.
20
+ Those were indirect dependencies before via other dry libs, but we use them
21
+ explicitly in the gem, so they should be included as real dependencies. Also,
22
+ newer versions of these gems did actually break the gem.
23
+
24
+ ### Removed
25
+
26
+ - **Breaking** Drops support for Ruby 2.6 since it's reached end of life
27
+ - Token rotation is removed since Fortnox counts rate limit on tenant and client
28
+ id. Before, you could get around this by using multiple access tokens. That's
29
+ not possible anymore, so token rotation is simply removed.
6
30
 
7
31
  ## [0.8.0]
32
+
8
33
  ### Changed
34
+
9
35
  - `Fortnox::API::CURRENT_HOUSEWORK_TYPES` is now renamed to `HOUSEWORK_TYPES`
10
- and is instead a Hash with keys for the different categories of types.
11
- It also includes legacy types, which means `Fortnox::API::LEGACY_HOUSEWORK_TYPES` is removed.
36
+ and is instead a Hash with keys for the different categories of types. It also
37
+ includes legacy types, which means `Fortnox::API::LEGACY_HOUSEWORK_TYPES` is
38
+ removed.
12
39
 
13
40
  ### Removed
41
+
14
42
  - Drops support for Ruby < `2.5.0` since they are deprecated
15
43
 
16
44
  ## [0.7.2]
45
+
17
46
  ### Fixed
47
+
18
48
  - Invalid validation for Customer's account number attribute
19
49
 
20
50
  ## [0.7.1]
51
+
21
52
  ### Fixed
53
+
22
54
  - Invalid validation for Customer's country attributes
23
55
 
24
56
  ## [0.7.0]
57
+
25
58
  ### Added
59
+
26
60
  - Adds build test for Ruby `2.6.0`, `2.6.3` and `2.7.0-preview`.
27
61
 
28
62
  ### Removed
63
+
29
64
  - Drops support for Ruby < `2.4.0` since they are deprecated
30
65
 
31
66
  ### Fixed
67
+
32
68
  - Country attribute for `Invoice` and `Order` is now validated correctly.
33
69
  - Fixes deprecation warnings
34
70
  - Unlocks pinned `HTTParty` version
35
71
  - Invalid email validation
36
72
 
37
73
  ## [0.6.3]
74
+
38
75
  ### Changed
76
+
39
77
  - Pins `dry-types` to `< 0.13.0` due to breaking changes
40
78
 
41
79
  ### Fixed
80
+
42
81
  - Model attribute `url` is no longer null
43
82
 
83
+ [0.8.2]: https://github.com/accodeing/fortnox-api/compare/v0.8.1...v0.8.2
84
+ [0.8.1]: https://github.com/accodeing/fortnox-api/compare/v0.8.0...v0.8.1
44
85
  [0.8.0]: https://github.com/accodeing/fortnox-api/compare/v0.7.2...v0.8.0
45
86
  [0.7.2]: https://github.com/accodeing/fortnox-api/compare/v0.7.1...v0.7.2
46
87
  [0.7.1]: https://github.com/accodeing/fortnox-api/compare/v0.7.0...v0.7.1
data/fortnox-api.gemspec CHANGED
@@ -3,12 +3,12 @@
3
3
 
4
4
  lib = File.expand_path('../lib', __FILE__)
5
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
6
- require 'fortnox/api/version'
6
+ require_relative 'lib/fortnox/api/version'
7
7
 
8
- Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
8
+ Gem::Specification.new do |spec|
9
9
  spec.name = 'fortnox-api'
10
10
  spec.version = Fortnox::API::VERSION
11
- spec.authors = ['Jonas Schubert Erlandsson', 'Hannes Elvemyr', 'Felix Holmgren']
11
+ spec.authors = ['Jonas Schubert Erlandsson', 'Hannes Elvemyr', 'Felix Holmgren', 'Mike Eirih']
12
12
  spec.email = ['info@accodeing.com']
13
13
  spec.summary = 'Gem to use Fortnox REST API in Ruby.'
14
14
  spec.description = 'This gem uses the HTTParty library to abstract away the REST calls. It gives you access to a '\
@@ -23,22 +23,27 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
23
23
  spec.test_files = spec.files.grep(%r{^(spec)/})
24
24
  spec.require_paths = ['lib']
25
25
 
26
- spec.required_ruby_version = '>= 2.5'
27
- spec.add_dependency 'countries', '~> 3.0'
28
- spec.add_dependency 'dry-struct', '~> 0.1'
29
- spec.add_dependency 'dry-types', '~> 0.8', '< 0.13.0'
26
+ spec.required_ruby_version = '>= 2.7'
27
+ spec.add_dependency 'countries', '~> 5.0'
28
+ spec.add_dependency 'dry-configurable', '~> 1.0'
29
+ spec.add_dependency 'dry-container', '~> 0.10'
30
+ spec.add_dependency 'dry-struct', '~> 1.6'
31
+ spec.add_dependency 'dry-types', '~> 1.7'
30
32
  spec.add_dependency 'httparty', '~> 0.17'
33
+ spec.add_dependency 'jwt', '~> 2.3'
31
34
 
32
- spec.add_development_dependency 'bundler', '~> 2.0'
33
- spec.add_development_dependency 'guard', '~> 2.12'
34
- spec.add_development_dependency 'guard-rspec', '~> 4.5'
35
+ spec.add_development_dependency 'bundler', '~> 2.4'
36
+ spec.add_development_dependency 'dotenv', '~> 2.8'
37
+ spec.add_development_dependency 'guard', '~> 2.18'
38
+ spec.add_development_dependency 'guard-rspec', '~> 4.7'
35
39
  spec.add_development_dependency 'pry', '~> 0'
36
- spec.add_development_dependency 'rake', '>= 12.3.3'
37
- spec.add_development_dependency 'rspec', '~> 3.2'
40
+ spec.add_development_dependency 'rake', '~> 13.0'
41
+ spec.add_development_dependency 'rspec', '~> 3.12'
38
42
  spec.add_development_dependency 'rspec-collection_matchers', '~> 0'
39
- spec.add_development_dependency 'rubocop', '~> 0.52.0'
40
- spec.add_development_dependency 'rubocop-rspec', '~> 1.22.2'
41
- spec.add_development_dependency 'simplecov', '~> 0.15'
42
- spec.add_development_dependency 'vcr', '~> 4.0'
43
- spec.add_development_dependency 'webmock', '~> 3.5'
43
+ spec.add_development_dependency 'rubocop', '~> 1.39.0'
44
+ spec.add_development_dependency 'rubocop-rspec', '~> 2.16.0'
45
+ spec.add_development_dependency 'simplecov', '~> 0.22'
46
+ spec.add_development_dependency 'timecop', '~> 0.9.6'
47
+ spec.add_development_dependency 'vcr', '~> 6.1'
48
+ spec.add_development_dependency 'webmock', '~> 3.18'
44
49
  end
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
3
+ require_relative 'base'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -50,7 +50,7 @@ module Fortnox
50
50
 
51
51
  raise MissingModelOrMapperException, message if ENV['RUBY_ENV']
52
52
  Fortnox::API.logger.warn("Missing Model or Mapper implementation for #{key} with attributes: #{collection}")
53
- return convert_hash_keys_from_json_format(collection, {})
53
+ convert_hash_keys_from_json_format(collection, {})
54
54
  end
55
55
  end
56
56
 
@@ -25,8 +25,8 @@ module Fortnox
25
25
  # PRIVATE
26
26
 
27
27
  def convert_hash_keys_to_json_format(hash)
28
- hash.each_with_object({}) do |(key, value), json_hash|
29
- json_hash[convert_key_to_json(key)] = value
28
+ hash.transform_keys do |key|
29
+ convert_key_to_json(key)
30
30
  end
31
31
  end
32
32
 
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base/canonical_name_sym'
4
- require 'fortnox/api/mappers/base/from_json'
5
- require 'fortnox/api/mappers/base/to_json'
3
+ require_relative 'base/canonical_name_sym'
4
+ require_relative 'base/from_json'
5
+ require_relative 'base/to_json'
6
6
 
7
7
  module Fortnox
8
8
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
3
+ require_relative 'base'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
3
+ require_relative 'base'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
3
+ require_relative 'base'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
3
+ require_relative 'base'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
3
+ require_relative 'base'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
4
- require 'fortnox/api/mappers/edi_information'
5
- require 'fortnox/api/mappers/email_information'
6
- require 'fortnox/api/mappers/invoice_row'
3
+ require_relative 'base'
4
+ require_relative 'edi_information'
5
+ require_relative 'email_information'
6
+ require_relative 'invoice_row'
7
7
 
8
8
  module Fortnox
9
9
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
3
+ require_relative 'base'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
4
- require 'fortnox/api/mappers/edi_information'
5
- require 'fortnox/api/mappers/email_information'
6
- require 'fortnox/api/mappers/order_row'
3
+ require_relative 'base'
4
+ require_relative 'edi_information'
5
+ require_relative 'email_information'
6
+ require_relative 'order_row'
7
7
 
8
8
  module Fortnox
9
9
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
3
+ require_relative 'base'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
3
+ require_relative 'base'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
3
+ require_relative 'base'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base'
3
+ require_relative 'base'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/mappers/base/canonical_name_sym'
3
+ require_relative '../base/canonical_name_sym'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,21 +1,21 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/types'
3
+ require_relative 'types'
4
4
 
5
- require 'fortnox/api/mappers/value/array'
6
- require 'fortnox/api/mappers/value/country_string'
7
- require 'fortnox/api/mappers/value/date'
8
- require 'fortnox/api/mappers/value/hash'
9
- require 'fortnox/api/mappers/value/identity'
10
- require 'fortnox/api/mappers/customer'
11
- require 'fortnox/api/mappers/default_delivery_types'
12
- require 'fortnox/api/mappers/default_templates'
13
- require 'fortnox/api/mappers/edi_information'
14
- require 'fortnox/api/mappers/email_information'
15
- require 'fortnox/api/mappers/invoice_row'
16
- require 'fortnox/api/mappers/invoice'
17
- require 'fortnox/api/mappers/order_row'
18
- require 'fortnox/api/mappers/order'
19
- require 'fortnox/api/mappers/project'
20
- require 'fortnox/api/mappers/unit'
21
- require 'fortnox/api/mappers/terms_of_payment'
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'
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/types'
4
- require 'fortnox/api/models/base'
3
+ require_relative 'base'
4
+ require_relative '../types'
5
5
 
6
6
  module Fortnox
7
7
  module API
@@ -1,8 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/types'
4
3
  require 'ice_nine'
5
4
 
5
+ require_relative '../types'
6
+
6
7
  module Fortnox
7
8
  module API
8
9
  module Model
@@ -36,6 +37,10 @@ module Fortnox
36
37
  new(self::STUB.dup)
37
38
  end
38
39
 
40
+ def unique_id
41
+ send(self.class::UNIQUE_ID)
42
+ end
43
+
39
44
  # This filtering logic could be improved since it is currently O(N*M).
40
45
  def attributes(*options)
41
46
  return self.class.schema if options.nil?
@@ -47,8 +52,13 @@ module Fortnox
47
52
  end
48
53
  end
49
54
 
50
- def unique_id
51
- send(self.class::UNIQUE_ID)
55
+ def to_hash(recursive = false)
56
+ return super() if recursive
57
+
58
+ self.class.schema.each_with_object({}) do |key, result|
59
+ # Only output attributes that have a value set
60
+ result[key.name] = self[key.name] if self.send("#{key.name}?")
61
+ end
52
62
  end
53
63
 
54
64
  def update(hash)
@@ -85,19 +95,9 @@ module Fortnox
85
95
  @parent || self.class.new(self.class::STUB.dup)
86
96
  end
87
97
 
88
- def to_hash(recursive = false)
89
- return super() if recursive
90
-
91
- self.class.schema.keys.each_with_object({}) do |key, result|
92
- result[key] = self[key]
93
- end
94
- end
95
-
96
- private_class_method
97
-
98
98
  # dry-types filter anything that isn't specified as an attribute on the
99
99
  # class that is being instantiated. This wrapper preserves the meta
100
- # properties we need to track object state during that initilisation and
100
+ # properties we need to track object state during that initialisation and
101
101
  # sets them on the object after dry-types is done with it.
102
102
  def self.preserve_meta_properties(hash)
103
103
  is_unsaved = hash.delete(:unsaved) { true }
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/types'
4
- require 'fortnox/api/models/base'
3
+ require_relative 'base'
4
+ require_relative '../types'
5
5
 
6
6
  module Fortnox
7
7
  module API
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/types'
4
- require 'fortnox/api/models/label'
3
+ require_relative '../types'
4
+ require_relative 'label'
5
5
 
6
6
  module Fortnox
7
7
  module API
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/models/base'
4
- require 'fortnox/api/models/document'
3
+ require_relative 'base'
4
+ require_relative 'document'
5
5
 
6
6
  module Fortnox
7
7
  module API
@@ -1,6 +1,6 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/types'
3
+ require_relative '../types'
4
4
 
5
5
  module Fortnox
6
6
  module API
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/models/base'
4
- require 'fortnox/api/models/document'
3
+ require_relative 'base'
4
+ require_relative 'document'
5
5
 
6
6
  module Fortnox
7
7
  module API
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/types'
4
- require 'fortnox/api/models/base'
3
+ require_relative 'base'
4
+ require_relative '../types'
5
5
 
6
6
  module Fortnox
7
7
  module API
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/types'
4
- require 'fortnox/api/models/base'
3
+ require_relative '../types'
4
+ require_relative '../models/base'
5
5
 
6
6
  module Fortnox
7
7
  module API
@@ -1,7 +1,7 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/types'
4
- require 'fortnox/api/models/base'
3
+ require_relative 'base'
4
+ require_relative '../types'
5
5
 
6
6
  module Fortnox
7
7
  module API
@@ -1,9 +1,9 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/models/article'
4
- require 'fortnox/api/models/customer'
5
- require 'fortnox/api/models/invoice'
6
- require 'fortnox/api/models/order'
7
- require 'fortnox/api/models/project'
8
- require 'fortnox/api/models/unit'
9
- require 'fortnox/api/models/terms_of_payment'
3
+ require_relative 'models/article'
4
+ require_relative 'models/customer'
5
+ require_relative 'models/invoice'
6
+ require_relative 'models/order'
7
+ require_relative 'models/project'
8
+ require_relative 'models/unit'
9
+ require_relative 'models/terms_of_payment'
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/repositories/base'
4
- require 'fortnox/api/models/article'
5
- require 'fortnox/api/mappers/article'
3
+ require_relative 'base'
4
+ require_relative '../models/article'
5
+ require_relative '../mappers/article'
6
6
 
7
7
  module Fortnox
8
8
  module API
@@ -1,9 +1,10 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  require 'httparty'
4
- require 'fortnox/api/request_handling'
5
- require 'fortnox/api/repositories/base/loaders'
6
- require 'fortnox/api/repositories/base/savers'
4
+
5
+ require_relative 'base/loaders'
6
+ require_relative 'base/savers'
7
+ require_relative '../request_handling'
7
8
 
8
9
  module Fortnox
9
10
  module API
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/repositories/base'
4
- require 'fortnox/api/models/customer'
5
- require 'fortnox/api/mappers/customer'
3
+ require_relative 'base'
4
+ require_relative '../models/customer'
5
+ require_relative '../mappers/customer'
6
6
 
7
7
  module Fortnox
8
8
  module API
@@ -1,8 +1,8 @@
1
1
  # frozen_string_literal: true
2
2
 
3
- require 'fortnox/api/repositories/base'
4
- require 'fortnox/api/models/invoice'
5
- require 'fortnox/api/mappers/invoice'
3
+ require_relative 'base'
4
+ require_relative '../models/invoice'
5
+ require_relative '../mappers/invoice'
6
6
 
7
7
  module Fortnox
8
8
  module API