fortnox-api 0.5.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
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