fortnox-api 0.5.2 → 0.6.0

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 (192) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rubocop.yml +9 -1104
  4. data/.travis.yml +22 -2
  5. data/Gemfile +3 -1
  6. data/Guardfile +4 -2
  7. data/README.md +2 -2
  8. data/Rakefile +3 -1
  9. data/bin/console +17 -3
  10. data/fortnox-api.gemspec +32 -27
  11. data/lib/fortnox/api.rb +17 -16
  12. data/lib/fortnox/api/circular_queue.rb +13 -7
  13. data/lib/fortnox/api/mappers.rb +29 -25
  14. data/lib/fortnox/api/mappers/article.rb +7 -6
  15. data/lib/fortnox/api/mappers/base.rb +18 -16
  16. data/lib/fortnox/api/mappers/base/from_json.rb +37 -30
  17. data/lib/fortnox/api/mappers/base/to_json.rb +39 -37
  18. data/lib/fortnox/api/mappers/customer.rb +7 -7
  19. data/lib/fortnox/api/mappers/default_delivery_types.rb +4 -2
  20. data/lib/fortnox/api/mappers/default_templates.rb +5 -4
  21. data/lib/fortnox/api/mappers/edi_information.rb +5 -4
  22. data/lib/fortnox/api/mappers/email_information.rb +5 -4
  23. data/lib/fortnox/api/mappers/invoice.rb +10 -8
  24. data/lib/fortnox/api/mappers/invoice_row.rb +12 -7
  25. data/lib/fortnox/api/mappers/order.rb +10 -7
  26. data/lib/fortnox/api/mappers/order_row.rb +13 -6
  27. data/lib/fortnox/api/mappers/project.rb +6 -4
  28. data/lib/fortnox/api/mappers/terms_of_payments.rb +17 -0
  29. data/lib/fortnox/api/mappers/unit.rb +17 -0
  30. data/lib/fortnox/api/models.rb +9 -5
  31. data/lib/fortnox/api/models/article.rb +68 -67
  32. data/lib/fortnox/api/models/base.rb +52 -36
  33. data/lib/fortnox/api/models/customer.rb +95 -94
  34. data/lib/fortnox/api/models/document.rb +186 -0
  35. data/lib/fortnox/api/models/invoice.rb +44 -44
  36. data/lib/fortnox/api/models/label.rb +5 -3
  37. data/lib/fortnox/api/models/order.rb +8 -8
  38. data/lib/fortnox/api/models/project.rb +10 -8
  39. data/lib/fortnox/api/models/terms_of_payments.rb +28 -0
  40. data/lib/fortnox/api/models/unit.rb +24 -0
  41. data/lib/fortnox/api/repositories.rb +9 -5
  42. data/lib/fortnox/api/repositories/article.rb +6 -4
  43. data/lib/fortnox/api/repositories/base.rb +49 -46
  44. data/lib/fortnox/api/repositories/base/loaders.rb +32 -36
  45. data/lib/fortnox/api/repositories/base/savers.rb +23 -21
  46. data/lib/fortnox/api/repositories/customer.rb +6 -4
  47. data/lib/fortnox/api/repositories/invoice.rb +6 -4
  48. data/lib/fortnox/api/repositories/order.rb +6 -4
  49. data/lib/fortnox/api/repositories/project.rb +6 -4
  50. data/lib/fortnox/api/repositories/terms_of_payments.rb +17 -0
  51. data/lib/fortnox/api/repositories/unit.rb +17 -0
  52. data/lib/fortnox/api/request_handling.rb +12 -12
  53. data/lib/fortnox/api/types.rb +62 -11
  54. data/lib/fortnox/api/types/default_delivery_types.rb +5 -3
  55. data/lib/fortnox/api/types/default_templates.rb +3 -1
  56. data/lib/fortnox/api/types/defaulted.rb +2 -2
  57. data/lib/fortnox/api/types/document_row.rb +41 -42
  58. data/lib/fortnox/api/types/edi_information.rb +10 -8
  59. data/lib/fortnox/api/types/email_information.rb +10 -8
  60. data/lib/fortnox/api/types/enums.rb +60 -47
  61. data/lib/fortnox/api/types/invoice_row.rb +8 -8
  62. data/lib/fortnox/api/types/model.rb +14 -10
  63. data/lib/fortnox/api/types/nullable.rb +7 -7
  64. data/lib/fortnox/api/types/order_row.rb +5 -5
  65. data/lib/fortnox/api/types/required.rb +5 -5
  66. data/lib/fortnox/api/types/sized.rb +14 -6
  67. data/lib/fortnox/api/version.rb +3 -1
  68. data/spec/fortnox/api/mappers/article_spec.rb +3 -1
  69. data/spec/fortnox/api/mappers/base/from_json_spec.rb +15 -13
  70. data/spec/fortnox/api/mappers/base/to_json_spec.rb +4 -3
  71. data/spec/fortnox/api/mappers/base_spec.rb +40 -35
  72. data/spec/fortnox/api/mappers/contexts/json_conversion.rb +12 -11
  73. data/spec/fortnox/api/mappers/customer_spec.rb +3 -1
  74. data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +3 -1
  75. data/spec/fortnox/api/mappers/edi_information_spec.rb +4 -2
  76. data/spec/fortnox/api/mappers/email_information_spec.rb +4 -2
  77. data/spec/fortnox/api/mappers/examples/mapper.rb +17 -9
  78. data/spec/fortnox/api/mappers/invoice_row_spec.rb +8 -3
  79. data/spec/fortnox/api/mappers/invoice_spec.rb +4 -1
  80. data/spec/fortnox/api/mappers/order_row_spec.rb +9 -2
  81. data/spec/fortnox/api/mappers/order_spec.rb +4 -1
  82. data/spec/fortnox/api/mappers/project_spec.rb +3 -1
  83. data/spec/fortnox/api/mappers/terms_of_payments_spec.rb +16 -0
  84. data/spec/fortnox/api/mappers/unit_spec.rb +57 -0
  85. data/spec/fortnox/api/models/article_spec.rb +2 -0
  86. data/spec/fortnox/api/models/base_spec.rb +46 -38
  87. data/spec/fortnox/api/models/customer_spec.rb +2 -0
  88. data/spec/fortnox/api/models/examples/document_base.rb +5 -3
  89. data/spec/fortnox/api/models/examples/model.rb +12 -9
  90. data/spec/fortnox/api/models/invoice_spec.rb +2 -0
  91. data/spec/fortnox/api/models/order_spec.rb +2 -0
  92. data/spec/fortnox/api/models/project_spec.rb +2 -0
  93. data/spec/fortnox/api/models/terms_of_payments_spec.rb +9 -0
  94. data/spec/fortnox/api/models/unit_spec.rb +31 -0
  95. data/spec/fortnox/api/repositories/article_spec.rb +7 -5
  96. data/spec/fortnox/api/repositories/base_spec.rb +121 -100
  97. data/spec/fortnox/api/repositories/customer_spec.rb +7 -5
  98. data/spec/fortnox/api/repositories/examples/all.rb +5 -4
  99. data/spec/fortnox/api/repositories/examples/find.rb +50 -41
  100. data/spec/fortnox/api/repositories/examples/only.rb +14 -13
  101. data/spec/fortnox/api/repositories/examples/save.rb +23 -29
  102. data/spec/fortnox/api/repositories/examples/save_with_nested_model.rb +11 -11
  103. data/spec/fortnox/api/repositories/examples/save_with_specially_named_attribute.rb +11 -10
  104. data/spec/fortnox/api/repositories/examples/search.rb +15 -15
  105. data/spec/fortnox/api/repositories/invoice_spec.rb +8 -6
  106. data/spec/fortnox/api/repositories/order_spec.rb +8 -6
  107. data/spec/fortnox/api/repositories/project_spec.rb +7 -5
  108. data/spec/fortnox/api/repositories/terms_of_payments_spec.rb +30 -0
  109. data/spec/fortnox/api/repositories/unit_spec.rb +34 -0
  110. data/spec/fortnox/api/types/account_number_spec.rb +12 -9
  111. data/spec/fortnox/api/types/default_delivery_types_spec.rb +6 -4
  112. data/spec/fortnox/api/types/edi_information_spec.rb +9 -7
  113. data/spec/fortnox/api/types/email_information_spec.rb +8 -6
  114. data/spec/fortnox/api/types/email_spec.rb +27 -14
  115. data/spec/fortnox/api/types/enums_spec.rb +3 -1
  116. data/spec/fortnox/api/types/examples/document_row.rb +10 -8
  117. data/spec/fortnox/api/types/examples/enum.rb +29 -22
  118. data/spec/fortnox/api/types/examples/types.rb +8 -4
  119. data/spec/fortnox/api/types/housework_types_spec.rb +68 -0
  120. data/spec/fortnox/api/types/invoice_row_spec.rb +3 -1
  121. data/spec/fortnox/api/types/model_spec.rb +12 -9
  122. data/spec/fortnox/api/types/nullable_spec.rb +8 -6
  123. data/spec/fortnox/api/types/order_row_spec.rb +4 -2
  124. data/spec/fortnox/api/types/required_spec.rb +4 -2
  125. data/spec/fortnox/api/types/sized_spec.rb +18 -16
  126. data/spec/fortnox/api_spec.rb +45 -43
  127. data/spec/spec_helper.rb +9 -6
  128. data/spec/support/helpers.rb +3 -1
  129. data/spec/support/helpers/configuration_helper.rb +2 -0
  130. data/spec/support/helpers/dummy_class_helper.rb +7 -8
  131. data/spec/support/helpers/repository_helper.rb +2 -0
  132. data/spec/support/helpers/when_performing_helper.rb +3 -1
  133. data/spec/support/matchers.rb +2 -0
  134. data/spec/support/matchers/type.rb +3 -1
  135. data/spec/support/matchers/type/attribute_matcher.rb +15 -14
  136. data/spec/support/matchers/type/enum_matcher.rb +9 -7
  137. data/spec/support/matchers/type/have_account_number_matcher.rb +11 -9
  138. data/spec/support/matchers/type/have_country_code_matcher.rb +6 -4
  139. data/spec/support/matchers/type/have_currency_matcher.rb +4 -2
  140. data/spec/support/matchers/type/have_customer_type_matcher.rb +6 -4
  141. data/spec/support/matchers/type/have_default_delivery_type_matcher.rb +4 -2
  142. data/spec/support/matchers/type/have_discount_type_matcher.rb +4 -2
  143. data/spec/support/matchers/type/have_email_matcher.rb +11 -9
  144. data/spec/support/matchers/type/have_housework_type_matcher.rb +9 -0
  145. data/spec/support/matchers/type/have_nullable_date_matcher.rb +29 -29
  146. data/spec/support/matchers/type/have_nullable_matcher.rb +23 -21
  147. data/spec/support/matchers/type/have_nullable_string_matcher.rb +30 -32
  148. data/spec/support/matchers/type/have_sized_float_matcher.rb +4 -2
  149. data/spec/support/matchers/type/have_sized_integer_matcher.rb +4 -2
  150. data/spec/support/matchers/type/have_sized_string_matcher.rb +16 -15
  151. data/spec/support/matchers/type/have_vat_type_matcher.rb +4 -2
  152. data/spec/support/matchers/type/numeric_matcher.rb +25 -23
  153. data/spec/support/matchers/type/require_attribute_matcher.rb +36 -37
  154. data/spec/support/matchers/type/type_matcher.rb +18 -16
  155. data/spec/support/vcr_setup.rb +2 -0
  156. data/spec/vcr_cassettes/orders/{house_work_type_babysitting.yml → housework_type_babysitting.yml} +9 -10
  157. data/spec/vcr_cassettes/orders/{house_work_type_cleaning.yml → housework_type_cleaning.yml} +9 -10
  158. data/spec/vcr_cassettes/orders/{house_work_type_construction.yml → housework_type_construction.yml} +9 -10
  159. data/spec/vcr_cassettes/orders/{house_work_type_cooking.yml → housework_type_cooking.yml} +7 -7
  160. data/spec/vcr_cassettes/orders/{house_work_type_electricity.yml → housework_type_electricity.yml} +9 -10
  161. data/spec/vcr_cassettes/orders/{house_work_type_gardening.yml → housework_type_gardening.yml} +9 -10
  162. data/spec/vcr_cassettes/orders/{house_work_type_glassmetalwork.yml → housework_type_glassmetalwork.yml} +9 -10
  163. data/spec/vcr_cassettes/orders/{house_work_type_grounddrainagework.yml → housework_type_grounddrainagework.yml} +9 -10
  164. data/spec/vcr_cassettes/orders/{house_work_type_hvac.yml → housework_type_hvac.yml} +9 -10
  165. data/spec/vcr_cassettes/orders/{house_work_type_masonry.yml → housework_type_masonry.yml} +9 -10
  166. data/spec/vcr_cassettes/orders/{house_work_type_othercare.yml → housework_type_othercare.yml} +9 -10
  167. data/spec/vcr_cassettes/orders/{house_work_type_othercosts.yml → housework_type_othercosts.yml} +9 -10
  168. data/spec/vcr_cassettes/orders/{house_work_type_paintingwallpapering.yml → housework_type_paintingwallpapering.yml} +9 -10
  169. data/spec/vcr_cassettes/orders/{house_work_type_snowplowing.yml → housework_type_snowplowing.yml} +9 -10
  170. data/spec/vcr_cassettes/orders/{house_work_type_textileclothing.yml → housework_type_textileclothing.yml} +9 -10
  171. data/spec/vcr_cassettes/orders/{house_work_type_tutoring.yml → housework_type_tutoring.yml} +7 -7
  172. data/spec/vcr_cassettes/termsofpayments/all.yml +51 -0
  173. data/spec/vcr_cassettes/termsofpayments/find_failure.yml +45 -0
  174. data/spec/vcr_cassettes/termsofpayments/find_id_1.yml +46 -0
  175. data/spec/vcr_cassettes/termsofpayments/find_new.yml +46 -0
  176. data/spec/vcr_cassettes/termsofpayments/save_new.yml +45 -0
  177. data/spec/vcr_cassettes/termsofpayments/save_old.yml +46 -0
  178. data/spec/vcr_cassettes/units/all.yml +48 -0
  179. data/spec/vcr_cassettes/units/find_failure.yml +45 -0
  180. data/spec/vcr_cassettes/units/find_id_1.yml +46 -0
  181. data/spec/vcr_cassettes/units/find_new.yml +48 -0
  182. data/spec/vcr_cassettes/units/save_new.yml +47 -0
  183. data/spec/vcr_cassettes/units/save_old.yml +48 -0
  184. data/spec/vcr_cassettes/units/save_with_specially_named_attribute.yml +47 -0
  185. metadata +127 -88
  186. data/docs/account.rb +0 -59
  187. data/docs/extraction_script.js +0 -23
  188. data/docs/generation_script.rb +0 -43
  189. data/docs/json/account.json +0 -77
  190. data/lib/fortnox/api/models/document_base.rb +0 -189
  191. data/spec/fortnox/api/types/house_work_types_spec.rb +0 -64
  192. data/spec/support/matchers/type/have_house_work_type_matcher.rb +0 -7
data/.travis.yml CHANGED
@@ -1,11 +1,31 @@
1
+ env:
2
+ global:
3
+ - CC_TEST_REPORTER_ID=787a2f89b15c637323c7340d65ec17e898ac44480706b4b4122ea040c2a88f1d
4
+ language: ruby
1
5
  rvm:
2
- - "2.2.5"
3
6
  - "2.3.0"
4
7
  - "2.3.1"
5
- # - "2.4.0" TODO: Ruby 2.4 not supported yet. See issue #93.
8
+ - "2.3.2"
9
+ - "2.3.3"
10
+ - "2.3.4"
11
+ - "2.3.5"
12
+ - "2.3.6"
13
+ - "2.4.0"
14
+ - "2.4.1"
15
+ - "2.4.2"
16
+ - "2.4.3"
17
+ - "2.5.0"
6
18
  addons:
7
19
  code_climate:
8
20
  repo_token: 397c19af63ca3467cff6fd640b0460b691f687118332b5989f530d28f82adcb8
9
21
  notifications:
10
22
  slack: my-codeworks:fwKO4YfipnmNKJQL3cRSEoKB
11
23
  email: false
24
+ before_script:
25
+ - curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64 > ./cc-test-reporter
26
+ - chmod +x ./cc-test-reporter
27
+ - ./cc-test-reporter before-build
28
+ script:
29
+ - bundle exec rspec
30
+ after_script:
31
+ - ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
data/Gemfile CHANGED
@@ -1,4 +1,6 @@
1
+ # frozen_string_literal: true
2
+
1
3
  source 'https://rubygems.org'
2
4
 
3
5
  # Specify your gem's dependencies in fortnox-api.gemspec
4
- gemspec
6
+ gemspec
data/Guardfile CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  guard :rspec, cmd: 'bundle exec rspec --color', all_after_pass: true do
2
4
  watch(%r{^spec/.+_spec\.rb$})
3
- watch(%r{^lib/(.+)\.rb$}){ |m| "spec/#{ m[1] }_spec.rb" }
4
- watch('spec/spec_helper.rb'){ "spec" }
5
+ watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
6
+ watch('spec/spec_helper.rb') { 'spec' }
5
7
  end
data/README.md CHANGED
@@ -8,8 +8,8 @@
8
8
 
9
9
  # Status for development
10
10
  [![Build status](https://img.shields.io/travis/my-codeworks/fortnox-api/development.svg?style=flat-square)](https://travis-ci.org/my-codeworks/fortnox-api)
11
- [![Code Climate](https://img.shields.io/codeclimate/github/my-codeworks/fortnox-api.svg?style=flat-square)](https://codeclimate.com/github/my-codeworks/fortnox-api)
12
- [![Test coverage](https://img.shields.io/codeclimate/coverage/github/my-codeworks/fortnox-api.svg?style=flat-square)](https://codeclimate.com/github/my-codeworks/fortnox-api/coverage)
11
+ [![Maintainability](https://api.codeclimate.com/v1/badges/50d44a1d00620b4a6bde/maintainability)](https://codeclimate.com/github/my-codeworks/fortnox-api/maintainability)
12
+ [![Test Coverage](https://api.codeclimate.com/v1/badges/50d44a1d00620b4a6bde/test_coverage)](https://codeclimate.com/github/my-codeworks/fortnox-api/test_coverage)
13
13
 
14
14
  The rough status of this project is as follows (as of October 2017):
15
15
  * In active development (just check out the commit log)
data/Rakefile CHANGED
@@ -1,5 +1,7 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'rspec/core/rake_task'
2
4
 
3
5
  RSpec::Core::RakeTask.new(:spec)
4
6
 
5
- task default: :spec
7
+ task default: :spec
data/bin/console CHANGED
@@ -1,8 +1,22 @@
1
1
  #!/usr/bin/env ruby
2
+ # frozen_string_literal: true
2
3
 
3
- require "bundler/setup"
4
+ require 'bundler/setup'
4
5
 
5
- require "pry"
6
- require "fortnox/api"
6
+ require 'pry'
7
+ require 'fortnox/api'
8
+
9
+ ##
10
+ # Starts a new copy of this script, replacing the current session.
11
+ #
12
+ # When run the current process, this script, will be replaced by the result from
13
+ # exec, a new copy of this script.
14
+ #
15
+ # Together with Pry's history this makes it look like you basically just
16
+ # reloaded the gem and all of it's dependancies with their latest versions.
17
+
18
+ def reload!
19
+ exec([File.absolute_path(__FILE__), __FILE__], *ARGV)
20
+ end
7
21
 
8
22
  Pry.start
data/fortnox-api.gemspec CHANGED
@@ -1,39 +1,44 @@
1
- # coding: utf-8
1
+
2
+ # frozen_string_literal: true
3
+
2
4
  lib = File.expand_path('../lib', __FILE__)
3
5
  $LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
4
6
  require 'fortnox/api/version'
5
7
 
6
8
  Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
7
- spec.name = "fortnox-api"
9
+ spec.name = 'fortnox-api'
8
10
  spec.version = Fortnox::API::VERSION
9
- spec.authors = ["Jonas Schubert Erlandsson", "Hannes Elvemyr", "Felix Holmgren"]
10
- spec.email = ["jonas.schubert.erlandsson@my-codeworks.com"]
11
- spec.summary = "Gem to use Fortnox REST API in Ruby."
12
- spec.description = "This gem uses the HTTParty library to abstract away the REST calls. It gives you access to a number of objects that behave a lot like ActiveRecord instances, giving you access to methods like `all`, `find`, `find_by_...` and so on. And each individual instance can be easaly persistable to Fortnox again using the `save` method."
13
- spec.homepage = "http://github.com/my-codeworks/fortnox-api"
14
- spec.license = "LGPL-3.0"
11
+ spec.authors = ['Jonas Schubert Erlandsson', 'Hannes Elvemyr', 'Felix Holmgren']
12
+ spec.email = ['info@my-codeworks.com']
13
+ spec.summary = 'Gem to use Fortnox REST API in Ruby.'
14
+ spec.description = 'This gem uses the HTTParty library to abstract away the REST calls. It gives you access to a '\
15
+ 'number of objects that behave a lot like ActiveRecord instances, giving you access to methods '\
16
+ 'like `all`, `find`, `find_by_...` and so on. And each individual instance can be easily'\
17
+ 'persistable to Fortnox again using the `save` method.'
18
+ spec.homepage = 'http://github.com/my-codeworks/fortnox-api'
19
+ spec.license = 'LGPL-3.0'
15
20
 
16
21
  spec.files = `git ls-files -z`.split("\x0")
17
- spec.executables = spec.files.grep(%r{^bin/}){ |f| File.basename(f) }
22
+ spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
18
23
  spec.test_files = spec.files.grep(%r{^(spec)/})
19
- spec.require_paths = ["lib"]
20
-
21
- spec.required_ruby_version = '> 2.2'
22
- spec.add_dependency "httparty", "~> 0.14.0" # TODO: Temporary lockdown. See issue #103 for more info.
23
- spec.add_dependency "dry-struct", "~> 0.1"
24
- spec.add_dependency "dry-types", "~> 0.8"
24
+ spec.require_paths = ['lib']
25
25
 
26
- spec.add_development_dependency "bundler", "~> 1.9"
27
- spec.add_development_dependency "rake", "~> 10.4"
28
- spec.add_development_dependency "rspec", "~> 3.2"
29
- spec.add_development_dependency "rspec-collection_matchers", "~> 0"
30
- spec.add_development_dependency "guard", "~> 2.12"
31
- spec.add_development_dependency "guard-rspec", "~> 4.5"
32
- spec.add_development_dependency "webmock", "~> 1.21"
33
- spec.add_development_dependency "vcr", "~> 3.0"
34
- spec.add_development_dependency "pry", "~> 0"
35
- spec.add_development_dependency "codeclimate-test-reporter", "~> 0"
36
- spec.add_development_dependency "rubocop", "~> 0.46.0"
37
- spec.add_development_dependency "rubocop-rspec", "~> 1.8.0"
26
+ spec.required_ruby_version = '>= 2.3'
27
+ spec.add_dependency 'dry-struct', '~> 0.1'
28
+ spec.add_dependency 'dry-types', '~> 0.8'
29
+ # TODO: Temporary lockdown. See issue #103 for more info.
30
+ spec.add_dependency 'httparty', '~> 0.14.0'
38
31
 
32
+ spec.add_development_dependency 'bundler', '~> 1.9'
33
+ spec.add_development_dependency 'guard', '~> 2.12'
34
+ spec.add_development_dependency 'guard-rspec', '~> 4.5'
35
+ spec.add_development_dependency 'pry', '~> 0'
36
+ spec.add_development_dependency 'rake', '~> 10.4'
37
+ spec.add_development_dependency 'rspec', '~> 3.2'
38
+ 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', '~> 3.0'
43
+ spec.add_development_dependency 'webmock', '~> 1.21'
39
44
  end
data/lib/fortnox/api.rb CHANGED
@@ -1,12 +1,13 @@
1
- require "set"
2
- require "dry-struct"
3
- require "fortnox/api/circular_queue"
4
- require "fortnox/api/version"
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
4
+ require 'dry-struct'
5
+ require 'fortnox/api/circular_queue'
6
+ require 'fortnox/api/version'
5
7
  require 'logger'
6
8
 
7
9
  module Fortnox
8
10
  module API
9
-
10
11
  extend Dry::Configurable
11
12
 
12
13
  DEFAULT_CONFIGURATION = {
@@ -16,24 +17,24 @@ module Fortnox
16
17
  access_token: nil,
17
18
  access_tokens: nil,
18
19
  debugging: false,
19
- logger: ->{
20
+ logger: lambda {
20
21
  logger = Logger.new(STDOUT)
21
22
  logger.level = Logger::WARN
22
23
  return logger
23
- }.call,
24
+ }.call
24
25
  }.freeze
25
26
 
26
27
  setting :base_url, DEFAULT_CONFIGURATION[:base_url]
27
28
  setting :client_secret, DEFAULT_CONFIGURATION[:client_secret]
28
29
  setting :token_store, DEFAULT_CONFIGURATION[:token_store]
29
30
  setting :access_token, DEFAULT_CONFIGURATION[:access_token] do |value|
30
- next if value == nil # nil is a valid unassigned value
31
+ next if value.nil? # nil is a valid unassigned value
31
32
  invalid_access_token_format!(value) unless value.is_a?(String)
32
33
  config.token_store = { default: value }
33
34
  value
34
35
  end
35
36
  setting :access_tokens, DEFAULT_CONFIGURATION[:access_tokens] do |value|
36
- next if value == nil # nil is a valid unassigned value
37
+ next if value.nil? # nil is a valid unassigned value
37
38
  invalid_access_tokens_format!(value) unless value.is_a?(Hash) || value.is_a?(Array)
38
39
  config.token_store = value.is_a?(Hash) ? value : { default: value }
39
40
  value
@@ -60,20 +61,20 @@ module Fortnox
60
61
 
61
62
  def self.invalid_access_token_format!(value)
62
63
  raise ArgumentError,
63
- "expected a String, but "\
64
- "#{ value.inspect } is a(n) #{ value.class }"
64
+ 'expected a String, but '\
65
+ "#{value.inspect} is a(n) #{value.class}"
65
66
  end
66
67
  private_class_method :invalid_access_token_format!
67
68
 
68
69
  def self.invalid_access_tokens_format!(value)
69
70
  raise ArgumentError,
70
- "expected a Hash or an Array, but "\
71
- "#{ value.inspect } is a(n) #{ value.class }"
71
+ 'expected a Hash or an Array, but '\
72
+ "#{value.inspect} is a(n) #{value.class}"
72
73
  end
73
74
  private_class_method :invalid_access_tokens_format!
74
75
  end
75
76
  end
76
77
 
77
- require "fortnox/api/models"
78
- require "fortnox/api/repositories"
79
- require "fortnox/api/mappers"
78
+ require 'fortnox/api/models'
79
+ require 'fortnox/api/repositories'
80
+ require 'fortnox/api/mappers'
@@ -1,12 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'forwardable'
2
4
 
5
+ # rubocop:disable Style/ClassVars
6
+
3
7
  module Fortnox
4
8
  module API
5
9
  class CircularQueue
6
10
  extend Forwardable
7
11
 
8
- def initialize *items
9
- @queue = [ *items ]
12
+ def initialize(*items)
13
+ @queue = [*items]
10
14
  @@next_index = random_start_index
11
15
  end
12
16
 
@@ -14,20 +18,22 @@ module Fortnox
14
18
  def_delegators :@queue, :new, :[], :size
15
19
 
16
20
  def next
17
- value = @queue[ @@next_index ]
21
+ value = @queue[@@next_index]
18
22
  if @@next_index == size - 1
19
23
  @@next_index = 0
20
24
  else
21
25
  @@next_index += 1
22
26
  end
23
- return value
27
+ value
24
28
  end
25
29
 
26
30
  private
27
31
 
28
- def random_start_index
29
- Random.rand(@queue.size)
30
- end
32
+ def random_start_index
33
+ Random.rand(@queue.size)
34
+ end
31
35
  end
32
36
  end
33
37
  end
38
+
39
+ # rubocop:enable Style/ClassVars
@@ -1,39 +1,41 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fortnox/api/types'
2
4
 
3
5
  module Fortnox
4
6
  module API
5
7
  module Mapper
6
- Identity = ->(value){ value }
8
+ Identity = ->(value) { value }
7
9
 
8
- Date = ->(value){ value.to_s }
10
+ Date = ->(value) { value.to_s }
9
11
 
10
- Array = ->(array) do
11
- array.each_with_object( [] ) do |item, converted_array|
12
- name = Fortnox::API::Mapper::Base.canonical_name_sym( item )
13
- converted_array << Fortnox::API::Registry[ name ].call( item )
12
+ Array = lambda do |array|
13
+ array.each_with_object([]) do |item, converted_array|
14
+ name = Fortnox::API::Mapper::Base.canonical_name_sym(item)
15
+ converted_array << Fortnox::API::Registry[name].call(item)
14
16
  end
15
17
  end
16
18
 
17
- Registry.register( :integer, Fortnox::API::Mapper::Identity )
18
- Registry.register( :int, Fortnox::API::Mapper::Identity )
19
- Registry.register( :float, Fortnox::API::Mapper::Identity )
20
- Registry.register( :string, Fortnox::API::Mapper::Identity )
21
- Registry.register( :boolean, Fortnox::API::Mapper::Identity )
22
- Registry.register( :falseclass, Fortnox::API::Mapper::Identity )
23
- Registry.register( :trueclass, Fortnox::API::Mapper::Identity )
24
- Registry.register( :nilclass, Fortnox::API::Mapper::Identity )
25
- Registry.register( :array, Fortnox::API::Mapper::Array )
26
- Registry.register( :date, Fortnox::API::Mapper::Date )
19
+ Registry.register(:integer, Fortnox::API::Mapper::Identity)
20
+ Registry.register(:int, Fortnox::API::Mapper::Identity)
21
+ Registry.register(:float, Fortnox::API::Mapper::Identity)
22
+ Registry.register(:string, Fortnox::API::Mapper::Identity)
23
+ Registry.register(:boolean, Fortnox::API::Mapper::Identity)
24
+ Registry.register(:falseclass, Fortnox::API::Mapper::Identity)
25
+ Registry.register(:trueclass, Fortnox::API::Mapper::Identity)
26
+ Registry.register(:nilclass, Fortnox::API::Mapper::Identity)
27
+ Registry.register(:array, Fortnox::API::Mapper::Array)
28
+ Registry.register(:date, Fortnox::API::Mapper::Date)
27
29
 
28
- Registry.register( :account_number, Fortnox::API::Mapper::Identity )
29
- Registry.register( :country_code, Fortnox::API::Mapper::Identity )
30
- Registry.register( :currency, Fortnox::API::Mapper::Identity )
31
- Registry.register( :customer_type, Fortnox::API::Mapper::Identity )
32
- Registry.register( :discount_type, Fortnox::API::Mapper::Identity )
33
- Registry.register( :email, Fortnox::API::Mapper::Identity )
34
- Registry.register( :house_work_type, Fortnox::API::Mapper::Identity )
35
- Registry.register( :vat_type, Fortnox::API::Mapper::Identity )
36
- Registry.register( :labels, Fortnox::API::Mapper::Array )
30
+ Registry.register(:account_number, Fortnox::API::Mapper::Identity)
31
+ Registry.register(:country_code, Fortnox::API::Mapper::Identity)
32
+ Registry.register(:currency, Fortnox::API::Mapper::Identity)
33
+ Registry.register(:customer_type, Fortnox::API::Mapper::Identity)
34
+ Registry.register(:discount_type, Fortnox::API::Mapper::Identity)
35
+ Registry.register(:email, Fortnox::API::Mapper::Identity)
36
+ Registry.register(:housework_type, Fortnox::API::Mapper::Identity)
37
+ Registry.register(:vat_type, Fortnox::API::Mapper::Identity)
38
+ Registry.register(:labels, Fortnox::API::Mapper::Array)
37
39
  end
38
40
  end
39
41
  end
@@ -48,3 +50,5 @@ require 'fortnox/api/mappers/invoice'
48
50
  require 'fortnox/api/mappers/order_row'
49
51
  require 'fortnox/api/mappers/order'
50
52
  require 'fortnox/api/mappers/project'
53
+ require 'fortnox/api/mappers/unit'
54
+ require 'fortnox/api/mappers/terms_of_payments'
@@ -1,22 +1,23 @@
1
- require "fortnox/api/mappers/base"
1
+ # frozen_string_literal: true
2
+
3
+ require 'fortnox/api/mappers/base'
2
4
 
3
5
  module Fortnox
4
6
  module API
5
7
  module Mapper
6
8
  class Article < Fortnox::API::Mapper::Base
7
-
8
9
  KEY_MAP = {
9
10
  ean: 'EAN',
10
11
  eu_account: 'EUAccount',
11
12
  eu_vat_account: 'EUVATAccount',
13
+ housework_type: 'HouseWorkType',
12
14
  vat: 'VAT'
13
15
  }.freeze
14
- JSON_ENTITY_WRAPPER = 'Article'.freeze
15
- JSON_COLLECTION_WRAPPER = 'Articles'.freeze
16
-
16
+ JSON_ENTITY_WRAPPER = 'Article'
17
+ JSON_COLLECTION_WRAPPER = 'Articles'
17
18
  end
18
19
 
19
- Registry.register( Article.canonical_name_sym, Article )
20
+ Registry.register(Article.canonical_name_sym, Article)
20
21
  end
21
22
  end
22
23
  end
@@ -1,5 +1,7 @@
1
- require "fortnox/api/mappers/base/from_json"
2
- require "fortnox/api/mappers/base/to_json"
1
+ # frozen_string_literal: true
2
+
3
+ require 'fortnox/api/mappers/base/from_json'
4
+ require 'fortnox/api/mappers/base/to_json'
3
5
 
4
6
  module Fortnox
5
7
  module API
@@ -8,16 +10,16 @@ module Fortnox
8
10
  include FromJSON
9
11
  include ToJSON
10
12
 
11
- Hash = ->(hash) do
13
+ Hash = lambda do |hash|
12
14
  hash.each do |key, value|
13
- name = Fortnox::API::Mapper::Base.canonical_name_sym( value )
14
- hash[key] = Fortnox::API::Registry[ name ].call( value )
15
+ name = Fortnox::API::Mapper::Base.canonical_name_sym(value)
16
+ hash[key] = Fortnox::API::Registry[name].call(value)
15
17
  end
16
18
  end
17
19
 
18
- Registry.register( :hash, Fortnox::API::Mapper::Base::Hash )
20
+ Registry.register(:hash, Fortnox::API::Mapper::Base::Hash)
19
21
 
20
- def self.canonical_name_sym( *values )
22
+ def self.canonical_name_sym(*values)
21
23
  klass = if values.empty?
22
24
  self
23
25
  elsif values.first.is_a? Class
@@ -27,23 +29,23 @@ module Fortnox
27
29
  end
28
30
 
29
31
  # For Ruby < 2.4, make sure we don't pass Bignum and Fixnum around
30
- klass = Integer if %w(Bignum Fixnum).include?(klass.to_s) # Stringify to avoid warnings on 2.4
32
+ klass = Integer if %w[Bignum Fixnum].include?(klass.to_s) # Stringify to avoid warnings on 2.4
31
33
 
32
34
  klass.name.split('::').last.downcase.to_sym
33
35
  end
34
36
 
35
- def diff( entity_hash, parent_hash )
36
- hash_diff( entity_hash[self.class::JSON_ENTITY_WRAPPER],
37
- parent_hash[self.class::JSON_ENTITY_WRAPPER] )
37
+ def diff(entity_hash, parent_hash)
38
+ hash_diff(entity_hash[self.class::JSON_ENTITY_WRAPPER],
39
+ parent_hash[self.class::JSON_ENTITY_WRAPPER])
38
40
  end
39
41
 
40
42
  private
41
43
 
42
- def hash_diff( hash1, hash2 )
43
- hash1.dup.
44
- delete_if{ |k, v| hash2[k] == v }.
45
- merge!(hash2.dup.delete_if{ |k, _| hash1.has_key?(k) })
46
- end
44
+ def hash_diff(hash1, hash2)
45
+ hash1.dup
46
+ .delete_if { |k, v| hash2[k] == v }
47
+ .merge!(hash2.dup.delete_if { |k, _| hash1.key?(k) })
48
+ end
47
49
  end
48
50
  end
49
51
  end