fortnox-api 0.8.0 → 0.8.1

Sign up to get free protection for your applications and to get access to all the features.
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 +37 -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 +4 -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 +11 -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: 7d28f8cb3667dac63023e514d6c5203ba795a8c1c2598bbf538e49f58528cbc1
4
+ data.tar.gz: 127841e8b5d6a64d2b37408960e9659da918fcc9135d821098d281d508e337ca
5
5
  SHA512:
6
- metadata.gz: 293665ff9e0b860e88c7c6c78fbcfdd0b8a8047444f23cd0560d504442e1a0ac3439c52349413cac63e0c5973d1db74dabcf7ebdd9c10bc3f1b7de922db58cbc
7
- data.tar.gz: 011b4785ce46af9c4cd57939431f6b09dc6ab44d650023616fe7b0784dcde890727999eb918ac3c3db311afaaff8785d240c54e5c30f198a630b9a1bf41483b7
6
+ metadata.gz: 4a9557fb4ecacf5d545c26d8894953793268b37a3c8a603a8095e239536d97871712140a6c3bc1f0596708913f369584633fee7e903a3f8ae4be99c47297418d
7
+ data.tar.gz: 244727089a11d031ec9e8afafa93d80c4b3ee87d1eb9c7f6ff57a8d26751d78304bc34073c095328f61edc580abeff44dba3f275e28346dea024b292e114126a
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,80 @@
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.1]
10
+
11
+ ### Fixed
12
+
13
+ - Missing runtime dependencies dry-configurable and dry-container is added.
14
+ Those were indirect dependencies before via other dry libs, but we use them
15
+ explicitly in the gem, so they should be included as real dependencies. Also,
16
+ newer versions of these gems did actually break the gem.
17
+
18
+ ### Removed
19
+
20
+ - **Breaking** Drops support for Ruby 2.6 since it's reached end of life
21
+ - Token rotation is removed since Fortnox counts rate limit on tenant and client
22
+ id. Before, you could get around this by using multiple access tokens. That's
23
+ not possible anymore, so token rotation is simply removed.
6
24
 
7
25
  ## [0.8.0]
26
+
8
27
  ### Changed
28
+
9
29
  - `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.
30
+ and is instead a Hash with keys for the different categories of types. It also
31
+ includes legacy types, which means `Fortnox::API::LEGACY_HOUSEWORK_TYPES` is
32
+ removed.
12
33
 
13
34
  ### Removed
35
+
14
36
  - Drops support for Ruby < `2.5.0` since they are deprecated
15
37
 
16
38
  ## [0.7.2]
39
+
17
40
  ### Fixed
41
+
18
42
  - Invalid validation for Customer's account number attribute
19
43
 
20
44
  ## [0.7.1]
45
+
21
46
  ### Fixed
47
+
22
48
  - Invalid validation for Customer's country attributes
23
49
 
24
50
  ## [0.7.0]
51
+
25
52
  ### Added
53
+
26
54
  - Adds build test for Ruby `2.6.0`, `2.6.3` and `2.7.0-preview`.
27
55
 
28
56
  ### Removed
57
+
29
58
  - Drops support for Ruby < `2.4.0` since they are deprecated
30
59
 
31
60
  ### Fixed
61
+
32
62
  - Country attribute for `Invoice` and `Order` is now validated correctly.
33
63
  - Fixes deprecation warnings
34
64
  - Unlocks pinned `HTTParty` version
35
65
  - Invalid email validation
36
66
 
37
67
  ## [0.6.3]
68
+
38
69
  ### Changed
70
+
39
71
  - Pins `dry-types` to `< 0.13.0` due to breaking changes
40
72
 
41
73
  ### Fixed
74
+
42
75
  - Model attribute `url` is no longer null
43
76
 
77
+ [0.8.1]: https://github.com/accodeing/fortnox-api/compare/v0.8.0...v0.8.1
44
78
  [0.8.0]: https://github.com/accodeing/fortnox-api/compare/v0.7.2...v0.8.0
45
79
  [0.7.2]: https://github.com/accodeing/fortnox-api/compare/v0.7.1...v0.7.2
46
80
  [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