fortnox-api 0.6.3 → 0.7.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.
- checksums.yaml +5 -5
- data/.rubocop.yml +4 -0
- data/.travis.yml +20 -15
- data/CHANGELOG.md +18 -0
- data/README.md +11 -19
- data/fortnox-api.gemspec +6 -6
- data/lib/fortnox/api/mappers.rb +5 -38
- data/lib/fortnox/api/mappers/base.rb +2 -24
- data/lib/fortnox/api/mappers/base/canonical_name_sym.rb +21 -0
- data/lib/fortnox/api/mappers/value/array.rb +18 -0
- data/lib/fortnox/api/mappers/value/country_code_string.rb +24 -0
- data/lib/fortnox/api/mappers/value/date.rb +11 -0
- data/lib/fortnox/api/mappers/value/hash.rb +16 -0
- data/lib/fortnox/api/mappers/value/identity.rb +18 -0
- data/lib/fortnox/api/models/document.rb +1 -1
- data/lib/fortnox/api/models/invoice.rb +1 -1
- data/lib/fortnox/api/models/order.rb +1 -1
- data/lib/fortnox/api/repositories/base.rb +9 -11
- data/lib/fortnox/api/request_handling.rb +0 -1
- data/lib/fortnox/api/types.rb +19 -3
- data/lib/fortnox/api/types/enums.rb +0 -23
- data/lib/fortnox/api/types/shim/country_code_string.rb +10 -0
- data/lib/fortnox/api/types/sized.rb +3 -16
- data/lib/fortnox/api/version.rb +1 -1
- data/spec/fortnox/api/circular_queue_spec.rb +52 -0
- data/spec/fortnox/api/mappers/base/canonical_name_sym_spec.rb +34 -0
- data/spec/fortnox/api/mappers/base_spec.rb +33 -43
- data/spec/fortnox/api/mappers/contexts/json_conversion.rb +1 -1
- data/spec/fortnox/api/repositories/article_spec.rb +4 -2
- data/spec/fortnox/api/repositories/base_spec.rb +28 -8
- data/spec/fortnox/api/repositories/customer_spec.rb +2 -1
- data/spec/fortnox/api/repositories/invoice_spec.rb +147 -3
- data/spec/fortnox/api/repositories/order_spec.rb +2 -2
- data/spec/fortnox/api/repositories/project_spec.rb +1 -1
- data/spec/fortnox/api/repositories/terms_of_payment_spec.rb +4 -2
- data/spec/fortnox/api/repositories/unit_spec.rb +6 -3
- data/spec/fortnox/api/types/country_code_spec.rb +76 -0
- data/spec/fortnox/api/types/email_spec.rb +8 -7
- data/spec/fortnox/api/types/enums_spec.rb +0 -1
- data/spec/fortnox/api/types/examples/document_row.rb +1 -1
- data/spec/fortnox/api_spec.rb +3 -1
- data/spec/vcr_cassettes/articles/all.yml +22 -8
- data/spec/vcr_cassettes/articles/find_by_hash_failure.yml +6 -6
- data/spec/vcr_cassettes/articles/find_failure.yml +6 -6
- data/spec/vcr_cassettes/articles/find_id_1.yml +7 -7
- data/spec/vcr_cassettes/articles/find_new.yml +9 -9
- data/spec/vcr_cassettes/articles/multi_param_find_by_hash.yml +6 -6
- data/spec/vcr_cassettes/articles/save_new.yml +8 -8
- data/spec/vcr_cassettes/articles/save_old.yml +9 -9
- data/spec/vcr_cassettes/articles/save_with_specially_named_attribute.yml +8 -8
- data/spec/vcr_cassettes/articles/search_by_name.yml +6 -6
- data/spec/vcr_cassettes/articles/search_miss.yml +6 -6
- data/spec/vcr_cassettes/articles/search_with_special_char.yml +6 -6
- data/spec/vcr_cassettes/articles/single_param_find_by_hash.yml +18 -8
- data/spec/vcr_cassettes/customers/all.yml +9 -9
- data/spec/vcr_cassettes/customers/find_by_hash_failure.yml +6 -6
- data/spec/vcr_cassettes/customers/find_failure.yml +6 -6
- data/spec/vcr_cassettes/customers/find_id_1.yml +7 -7
- data/spec/vcr_cassettes/customers/find_new.yml +9 -9
- data/spec/vcr_cassettes/customers/multi_param_find_by_hash.yml +5 -5
- data/spec/vcr_cassettes/customers/save_new.yml +7 -7
- data/spec/vcr_cassettes/customers/save_old.yml +8 -8
- data/spec/vcr_cassettes/customers/save_with_specially_named_attribute.yml +7 -7
- data/spec/vcr_cassettes/customers/search_by_name.yml +16 -8
- data/spec/vcr_cassettes/customers/search_miss.yml +6 -6
- data/spec/vcr_cassettes/customers/search_with_special_char.yml +6 -6
- data/spec/vcr_cassettes/customers/single_param_find_by_hash.yml +7 -7
- data/spec/vcr_cassettes/invoices/all.yml +100 -65
- data/spec/vcr_cassettes/invoices/filter_hit.yml +11 -8
- data/spec/vcr_cassettes/invoices/filter_invalid.yml +6 -6
- data/spec/vcr_cassettes/invoices/find_by_hash_failure.yml +6 -6
- data/spec/vcr_cassettes/invoices/find_failure.yml +6 -6
- data/spec/vcr_cassettes/invoices/find_id_1.yml +7 -7
- data/spec/vcr_cassettes/invoices/find_new.yml +11 -12
- data/spec/vcr_cassettes/invoices/multi_param_find_by_hash.yml +8 -8
- data/spec/vcr_cassettes/invoices/save_new.yml +9 -10
- data/spec/vcr_cassettes/invoices/save_new_with_comments.yml +47 -0
- data/spec/vcr_cassettes/invoices/save_new_with_country.yml +46 -0
- data/spec/vcr_cassettes/invoices/save_new_with_country_GB.yml +47 -0
- data/spec/vcr_cassettes/invoices/save_new_with_country_KR.yml +47 -0
- data/spec/vcr_cassettes/invoices/save_new_with_country_Norge.yml +46 -0
- data/spec/vcr_cassettes/invoices/save_new_with_country_Norway.yml +46 -0
- data/spec/vcr_cassettes/invoices/save_new_with_country_Sverige.yml +46 -0
- data/spec/vcr_cassettes/invoices/save_new_with_country_VA.yml +47 -0
- data/spec/vcr_cassettes/invoices/save_new_with_country_VI.yml +47 -0
- data/spec/vcr_cassettes/invoices/save_new_with_country_empty_string.yml +46 -0
- data/spec/vcr_cassettes/invoices/save_new_with_country_nil.yml +46 -0
- data/spec/vcr_cassettes/invoices/save_old.yml +10 -11
- data/spec/vcr_cassettes/invoices/save_old_with_empty_comments.yml +48 -0
- data/spec/vcr_cassettes/invoices/save_old_with_empty_country.yml +47 -0
- data/spec/vcr_cassettes/invoices/save_old_with_nil_comments.yml +48 -0
- data/spec/vcr_cassettes/invoices/save_old_with_nil_country.yml +47 -0
- data/spec/vcr_cassettes/invoices/save_with_nested_model.yml +9 -10
- data/spec/vcr_cassettes/invoices/save_with_specially_named_attribute.yml +9 -10
- data/spec/vcr_cassettes/invoices/search_by_name.yml +13 -9
- data/spec/vcr_cassettes/invoices/search_miss.yml +6 -6
- data/spec/vcr_cassettes/invoices/search_with_special_char.yml +6 -6
- data/spec/vcr_cassettes/invoices/single_param_find_by_hash.yml +9 -9
- data/spec/vcr_cassettes/orders/all.yml +105 -105
- data/spec/vcr_cassettes/orders/filter_hit.yml +13 -10
- data/spec/vcr_cassettes/orders/filter_invalid.yml +6 -6
- data/spec/vcr_cassettes/orders/find_by_hash_failure.yml +6 -6
- data/spec/vcr_cassettes/orders/find_failure.yml +6 -6
- data/spec/vcr_cassettes/orders/find_id_1.yml +8 -8
- data/spec/vcr_cassettes/orders/find_new.yml +11 -12
- data/spec/vcr_cassettes/orders/housework_type_babysitting.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_cleaning.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_construction.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_cooking.yml +6 -6
- data/spec/vcr_cassettes/orders/housework_type_electricity.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_gardening.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_glassmetalwork.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_grounddrainagework.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_hvac.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_masonry.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_othercare.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_othercosts.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_paintingwallpapering.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_snowplowing.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_textileclothing.yml +9 -9
- data/spec/vcr_cassettes/orders/housework_type_tutoring.yml +6 -6
- data/spec/vcr_cassettes/orders/multi_param_find_by_hash.yml +7 -7
- data/spec/vcr_cassettes/orders/save_new.yml +9 -10
- data/spec/vcr_cassettes/orders/save_old.yml +10 -11
- data/spec/vcr_cassettes/orders/save_with_nested_model.yml +9 -10
- data/spec/vcr_cassettes/orders/search_by_name.yml +9 -8
- data/spec/vcr_cassettes/orders/search_miss.yml +6 -6
- data/spec/vcr_cassettes/orders/search_with_special_char.yml +6 -6
- data/spec/vcr_cassettes/orders/single_param_find_by_hash.yml +8 -8
- data/spec/vcr_cassettes/projects/all.yml +18 -8
- data/spec/vcr_cassettes/projects/find_by_hash_failure.yml +6 -6
- data/spec/vcr_cassettes/projects/find_failure.yml +6 -6
- data/spec/vcr_cassettes/projects/find_id_1.yml +6 -6
- data/spec/vcr_cassettes/projects/find_new.yml +9 -9
- data/spec/vcr_cassettes/projects/multi_param_find_by_hash.yml +7 -7
- data/spec/vcr_cassettes/projects/save_new.yml +8 -8
- data/spec/vcr_cassettes/projects/save_old.yml +8 -8
- data/spec/vcr_cassettes/projects/single_param_find_by_hash.yml +7 -7
- data/spec/vcr_cassettes/termsofpayments/all.yml +10 -7
- data/spec/vcr_cassettes/termsofpayments/find_failure.yml +6 -6
- data/spec/vcr_cassettes/termsofpayments/find_id_1.yml +6 -6
- data/spec/vcr_cassettes/termsofpayments/find_new.yml +8 -8
- data/spec/vcr_cassettes/termsofpayments/save_new.yml +8 -8
- data/spec/vcr_cassettes/termsofpayments/save_old.yml +8 -8
- data/spec/vcr_cassettes/units/all.yml +14 -10
- data/spec/vcr_cassettes/units/find_failure.yml +6 -6
- data/spec/vcr_cassettes/units/find_id_1.yml +6 -6
- data/spec/vcr_cassettes/units/find_new.yml +8 -10
- data/spec/vcr_cassettes/units/save_new.yml +8 -10
- data/spec/vcr_cassettes/units/save_old.yml +8 -10
- data/spec/vcr_cassettes/units/save_with_specially_named_attribute.yml +8 -10
- data/temp.txt +1 -0
- metadata +71 -13
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
|
-
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
2
|
+
SHA256:
|
3
|
+
metadata.gz: a174ee3cf9c8f2a5ee1a43ce636806e017e1462263eddfdd5e91968025144fb4
|
4
|
+
data.tar.gz: d5f3c46c81e25009be272bee9bdfafe64e657f4ff5b7a131c272a49b8f9382f5
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 942b59f8380781117425fbcdb713bbf05c3e4651779e517c89b1c1cd339bc521a19a79ca2df9c02098a472eabc31a5b9ae9f1b69945bd21c54e727075d4c66f9
|
7
|
+
data.tar.gz: 598dd75a8a6d7f8af1b84e70a331192df243ebddad2174b09f43161767ab84b0e4c08dc8c020e55b9fa8928d8d3419f6ba7a99e2b5c6d21d541691d0eaacda17
|
data/.rubocop.yml
CHANGED
data/.travis.yml
CHANGED
@@ -1,31 +1,36 @@
|
|
1
1
|
env:
|
2
2
|
global:
|
3
|
-
- CC_TEST_REPORTER_ID=
|
3
|
+
- CC_TEST_REPORTER_ID=43ea0acb059b164537ce31bf67e03e1cb552d63df1ad3e9bd95dc3d844697bb4
|
4
4
|
language: ruby
|
5
5
|
rvm:
|
6
|
-
- 2.3.0
|
7
|
-
- 2.3.1
|
8
|
-
- 2.3.2
|
9
|
-
- 2.3.3
|
10
|
-
- 2.3.4
|
11
|
-
- 2.3.5
|
12
|
-
- 2.3.6
|
13
6
|
- 2.4.0
|
14
7
|
- 2.4.1
|
15
8
|
- 2.4.2
|
16
9
|
- 2.4.3
|
10
|
+
- 2.4.6
|
17
11
|
- 2.5.0
|
18
|
-
|
19
|
-
|
20
|
-
|
12
|
+
- 2.5.5
|
13
|
+
- 2.6.0
|
14
|
+
- 2.6.3
|
15
|
+
- 2.7.0-preview1
|
21
16
|
notifications:
|
22
|
-
slack:
|
17
|
+
slack:
|
18
|
+
secure: UEYDtwLaQgAoMRY7ct1y0Uu5HbInMwrLo+TiYRc3rjDrzqDfDyInEr3bpckyPJ79lnzccrFezMdY4jWzRjmsvQzvYMu+DWJ1mAWOa/9Ws4YZ8nHd5KqXxVQ0EqPWuWwMOyOdyy3DK/MjUOobGSc0//Pv5DeaAAEBKLJzN+e1BQM=
|
23
19
|
email: false
|
20
|
+
before_install:
|
21
|
+
- gem update --system
|
22
|
+
- gem install bundler
|
23
|
+
cache: bundler
|
24
24
|
before_script:
|
25
|
-
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
|
25
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
|
26
|
+
> ./cc-test-reporter
|
26
27
|
- chmod +x ./cc-test-reporter
|
27
|
-
- ./cc-test-reporter before-build
|
28
|
+
- "./cc-test-reporter before-build"
|
28
29
|
script:
|
29
30
|
- bundle exec rspec
|
30
31
|
after_script:
|
31
|
-
- ./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT
|
32
|
+
- "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
|
33
|
+
branches:
|
34
|
+
only:
|
35
|
+
- master
|
36
|
+
- development
|
data/CHANGELOG.md
ADDED
@@ -0,0 +1,18 @@
|
|
1
|
+
# Changelog
|
2
|
+
All notable changes to this project will be documented in this file.
|
3
|
+
|
4
|
+
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
|
+
|
7
|
+
## [0.7.0]
|
8
|
+
### Added
|
9
|
+
- Adds build test for Ruby 2.6.0, 2.6.3 and 2.7.0-preview.
|
10
|
+
|
11
|
+
### Removed
|
12
|
+
- Drops support for Ruby < 2.4.0 since they are deprecated
|
13
|
+
|
14
|
+
### Fixed
|
15
|
+
- Country attribute for Invoice and Order is now validated correctly.
|
16
|
+
- Fixes deprecation warnings
|
17
|
+
|
18
|
+
[0.7.0]: https://github.com/accodeing/fortnox-api/compare/v0.7.0...v0.6.3
|
data/README.md
CHANGED
@@ -3,24 +3,21 @@
|
|
3
3
|
|
4
4
|
# Status for master
|
5
5
|
[](https://rubygems.org/gems/fortnox-api)
|
6
|
-
[](https://gemnasium.com/my-codeworks/fortnox-api)
|
6
|
+
[](https://travis-ci.com/accodeing/fortnox-api)
|
8
7
|
|
9
8
|
# Status for development
|
10
|
-
[](https://travis-ci.com/accodeing/fortnox-api)
|
10
|
+
[](https://codeclimate.com/github/accodeing/fortnox-api/maintainability)
|
11
|
+
[](https://codeclimate.com/github/accodeing/fortnox-api/test_coverage)
|
13
12
|
|
14
|
-
The rough status of this project is as follows (as of October
|
15
|
-
*
|
16
|
-
*
|
13
|
+
The rough status of this project is as follows (as of October 2018):
|
14
|
+
* Development is not as active as it used to be, but the project is not forgotten. We have an app running this gem in production and it works like a charm for what we do.
|
15
|
+
* We are planning on generalize REST API's in general with our [rest_easy gem](https://github.com/accodeing/rest_easy).
|
17
16
|
* Basic structure complete. Things like getting customers and invoices, updating and saving etc.
|
18
17
|
* Some advanced features implemented, for instance support for multiple Access Tokens and filtering entities.
|
19
|
-
*
|
20
|
-
* A few models implemented. Right now we
|
21
|
-
* Massive refactorings no longer occurs weekly :)
|
22
|
-
|
23
|
-
The goal is to have a production ready version that covers at least the `Invoice`, `Order`, `Customer` and `Project` models by January.
|
18
|
+
* We have ideas for more advanced features, like sorting entities, pagination of results but nothing in the pipeline right now.
|
19
|
+
* A few models implemented. Right now we pretty good support for `Customer`, `Invoice`, `Order`, `Article`, `Label` and `Project`. Adding more models in general is quick and easy (that's the whole point with this gem), see the developer guide further down.
|
20
|
+
* Massive refactorings no longer occurs weekly :)
|
24
21
|
|
25
22
|
# Architecture overview
|
26
23
|
The gem is structured with distinct models for the tasks of data, JSON mapping and saving state. These are called: model, type, mapper and repository.
|
@@ -84,12 +81,7 @@ These are responsible for the mapping between our plain old Ruby object models a
|
|
84
81
|
|
85
82
|
# Requirements
|
86
83
|
|
87
|
-
This gem is build for Ruby 2.
|
88
|
-
is [officially outdated and unsupported](https://www.ruby-lang.org/en/news/2016/03/30/ruby-2-1-9-released/)
|
89
|
-
it won't work on older versions.
|
90
|
-
|
91
|
-
If you want or need Ruby 1.9 compatibility please submit a pull request.
|
92
|
-
Instructions can be found below :)
|
84
|
+
This gem is build for Ruby 2.4 or higher (see Travis configuration file for what versions we are testing against).
|
93
85
|
|
94
86
|
## Installation
|
95
87
|
|
data/fortnox-api.gemspec
CHANGED
@@ -23,13 +23,13 @@ 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.
|
26
|
+
spec.required_ruby_version = '>= 2.4'
|
27
|
+
spec.add_dependency 'countries', '~> 3.0'
|
27
28
|
spec.add_dependency 'dry-struct', '~> 0.1'
|
28
29
|
spec.add_dependency 'dry-types', '~> 0.8', '< 0.13.0'
|
29
|
-
|
30
|
-
spec.add_dependency 'httparty', '~> 0.14.0'
|
30
|
+
spec.add_dependency 'httparty', '~> 0.17'
|
31
31
|
|
32
|
-
spec.add_development_dependency 'bundler', '~>
|
32
|
+
spec.add_development_dependency 'bundler', '~> 2.0'
|
33
33
|
spec.add_development_dependency 'guard', '~> 2.12'
|
34
34
|
spec.add_development_dependency 'guard-rspec', '~> 4.5'
|
35
35
|
spec.add_development_dependency 'pry', '~> 0'
|
@@ -39,6 +39,6 @@ Gem::Specification.new do |spec| # rubocop:disable Metrics/BlockLength
|
|
39
39
|
spec.add_development_dependency 'rubocop', '~> 0.52.0'
|
40
40
|
spec.add_development_dependency 'rubocop-rspec', '~> 1.22.2'
|
41
41
|
spec.add_development_dependency 'simplecov', '~> 0.15'
|
42
|
-
spec.add_development_dependency 'vcr', '~>
|
43
|
-
spec.add_development_dependency 'webmock', '~>
|
42
|
+
spec.add_development_dependency 'vcr', '~> 4.0'
|
43
|
+
spec.add_development_dependency 'webmock', '~> 3.5'
|
44
44
|
end
|
data/lib/fortnox/api/mappers.rb
CHANGED
@@ -2,44 +2,11 @@
|
|
2
2
|
|
3
3
|
require 'fortnox/api/types'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
Date = ->(value) { value.to_s }
|
11
|
-
|
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)
|
16
|
-
end
|
17
|
-
end
|
18
|
-
|
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)
|
29
|
-
|
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)
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
5
|
+
require 'fortnox/api/mappers/value/array'
|
6
|
+
require 'fortnox/api/mappers/value/country_code_string'
|
7
|
+
require 'fortnox/api/mappers/value/date'
|
8
|
+
require 'fortnox/api/mappers/value/hash'
|
9
|
+
require 'fortnox/api/mappers/value/identity'
|
43
10
|
require 'fortnox/api/mappers/customer'
|
44
11
|
require 'fortnox/api/mappers/default_delivery_types'
|
45
12
|
require 'fortnox/api/mappers/default_templates'
|
@@ -1,5 +1,6 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
+
require 'fortnox/api/mappers/base/canonical_name_sym'
|
3
4
|
require 'fortnox/api/mappers/base/from_json'
|
4
5
|
require 'fortnox/api/mappers/base/to_json'
|
5
6
|
|
@@ -9,30 +10,7 @@ module Fortnox
|
|
9
10
|
class Base
|
10
11
|
include FromJSON
|
11
12
|
include ToJSON
|
12
|
-
|
13
|
-
Hash = lambda do |hash|
|
14
|
-
hash.each do |key, value|
|
15
|
-
name = Fortnox::API::Mapper::Base.canonical_name_sym(value)
|
16
|
-
hash[key] = Fortnox::API::Registry[name].call(value)
|
17
|
-
end
|
18
|
-
end
|
19
|
-
|
20
|
-
Registry.register(:hash, Fortnox::API::Mapper::Base::Hash)
|
21
|
-
|
22
|
-
def self.canonical_name_sym(*values)
|
23
|
-
klass = if values.empty?
|
24
|
-
self
|
25
|
-
elsif values.first.is_a? Class
|
26
|
-
values.first
|
27
|
-
else
|
28
|
-
values.first.class
|
29
|
-
end
|
30
|
-
|
31
|
-
# For Ruby < 2.4, make sure we don't pass Bignum and Fixnum around
|
32
|
-
klass = Integer if %w[Bignum Fixnum].include?(klass.to_s) # Stringify to avoid warnings on 2.4
|
33
|
-
|
34
|
-
klass.name.split('::').last.downcase.to_sym
|
35
|
-
end
|
13
|
+
extend CanonicalNameSym
|
36
14
|
|
37
15
|
def diff(entity_hash, parent_hash)
|
38
16
|
hash_diff(entity_hash[self.class::JSON_ENTITY_WRAPPER],
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Fortnox
|
4
|
+
module API
|
5
|
+
module Mapper
|
6
|
+
module CanonicalNameSym
|
7
|
+
def canonical_name_sym(*values)
|
8
|
+
klass = if values.empty?
|
9
|
+
self
|
10
|
+
elsif values.first.is_a? Class
|
11
|
+
values.first
|
12
|
+
else
|
13
|
+
values.first.class
|
14
|
+
end
|
15
|
+
|
16
|
+
klass.name.split('::').last.downcase.to_sym
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Fortnox
|
4
|
+
module API
|
5
|
+
module Mapper
|
6
|
+
Array = lambda do |array|
|
7
|
+
array.each_with_object([]) do |item, converted_array|
|
8
|
+
name = Fortnox::API::Mapper::Base.canonical_name_sym(item)
|
9
|
+
converted_array << Fortnox::API::Registry[name].call(item)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
Registry.register(:array, Fortnox::API::Mapper::Array)
|
14
|
+
|
15
|
+
Registry.register(:labels, Fortnox::API::Mapper::Array)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'fortnox/api/mappers/base/canonical_name_sym'
|
4
|
+
|
5
|
+
module Fortnox
|
6
|
+
module API
|
7
|
+
module Mapper
|
8
|
+
class CountryCodeString
|
9
|
+
extend CanonicalNameSym
|
10
|
+
|
11
|
+
CountryCodeMapper = lambda do |code|
|
12
|
+
next code if code.nil? || code == ''
|
13
|
+
|
14
|
+
# Fortnox only supports Swedish country name for Sweden
|
15
|
+
next 'Sverige' if code == 'SE'
|
16
|
+
|
17
|
+
::ISO3166::Country[code].translations['en']
|
18
|
+
end
|
19
|
+
|
20
|
+
Registry.register(canonical_name_sym, CountryCodeMapper)
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Fortnox
|
4
|
+
module API
|
5
|
+
module Mapper
|
6
|
+
Hash = lambda do |hash|
|
7
|
+
hash.each do |key, value|
|
8
|
+
name = Fortnox::API::Mapper::Base.canonical_name_sym(value)
|
9
|
+
hash[key] = Fortnox::API::Registry[name].call(value)
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
Registry.register(:hash, Hash)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module Fortnox
|
4
|
+
module API
|
5
|
+
module Mapper
|
6
|
+
Identity = ->(value) { value }
|
7
|
+
|
8
|
+
Registry.register(:integer, Fortnox::API::Mapper::Identity)
|
9
|
+
Registry.register(:int, Fortnox::API::Mapper::Identity)
|
10
|
+
Registry.register(:float, Fortnox::API::Mapper::Identity)
|
11
|
+
Registry.register(:string, Fortnox::API::Mapper::Identity)
|
12
|
+
Registry.register(:boolean, Fortnox::API::Mapper::Identity)
|
13
|
+
Registry.register(:falseclass, Fortnox::API::Mapper::Identity)
|
14
|
+
Registry.register(:trueclass, Fortnox::API::Mapper::Identity)
|
15
|
+
Registry.register(:nilclass, Fortnox::API::Mapper::Identity)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -109,7 +109,7 @@ module Fortnox
|
|
109
109
|
# HouseWork If there is any row of the document marked "housework".
|
110
110
|
attribute :housework, Types::Nullable::Boolean.is(:read_only)
|
111
111
|
|
112
|
-
attribute :labels, Types::Strict::Array.
|
112
|
+
attribute :labels, Types::Strict::Array.of(Label)
|
113
113
|
|
114
114
|
# Net Net amount
|
115
115
|
attribute :net, Types::Nullable::Float.is(:read_only)
|
@@ -50,7 +50,7 @@ module Fortnox
|
|
50
50
|
attribute :invoice_period_end, Types::Nullable::Date.is(:read_only)
|
51
51
|
|
52
52
|
# InvoiceRows Separate object
|
53
|
-
attribute :invoice_rows, Types::Strict::Array.
|
53
|
+
attribute :invoice_rows, Types::Strict::Array.of(Types::InvoiceRow)
|
54
54
|
|
55
55
|
# InvoiceType The type of invoice.
|
56
56
|
attribute :invoice_type, Types::Nullable::String
|
@@ -16,10 +16,10 @@ module Fortnox
|
|
16
16
|
|
17
17
|
HTTParty::Parser::SupportedFormats['text/html'] = :json
|
18
18
|
|
19
|
-
|
19
|
+
headers(
|
20
20
|
'Content-Type' => 'application/json',
|
21
21
|
'Accept' => 'application/json'
|
22
|
-
|
22
|
+
)
|
23
23
|
|
24
24
|
HTTP_METHODS = %i[get put post delete].freeze
|
25
25
|
|
@@ -31,21 +31,19 @@ module Fortnox
|
|
31
31
|
end
|
32
32
|
|
33
33
|
HTTP_METHODS.each do |method|
|
34
|
-
define_method method do
|
35
|
-
headers
|
34
|
+
define_method method do |path, options = {}, &block|
|
35
|
+
provided_headers = options[:headers] || {}
|
36
|
+
provided_headers['Client-Secret'] = client_secret
|
37
|
+
provided_headers['Access-Token'] = next_access_token
|
38
|
+
options[:headers] = provided_headers
|
39
|
+
options[:base_uri] ||= base_url
|
36
40
|
execute do |remote|
|
37
|
-
remote.send(method,
|
41
|
+
remote.send(method, path, options, &block)
|
38
42
|
end
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
42
46
|
def initialize(keys_filtered_on_save: [:url], token_store: :default)
|
43
|
-
self.class.base_uri(base_url)
|
44
|
-
|
45
|
-
self.headers = DEFAULT_HEADERS.merge(
|
46
|
-
'Client-Secret' => client_secret
|
47
|
-
)
|
48
|
-
|
49
47
|
@keys_filtered_on_save = keys_filtered_on_save
|
50
48
|
@token_store = token_store
|
51
49
|
@mapper = Registry[Mapper::Base.canonical_name_sym(self.class::MODEL)].new
|