fortnox-api 0.7.2 → 0.9.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/.codeclimate.yml +1 -0
- data/.env.template +7 -0
- data/.env.test +11 -3
- data/.gitignore +7 -1
- data/.rubocop.yml +18 -2
- data/.tool-versions +1 -0
- data/.travis.yml +15 -19
- data/CHANGELOG.md +66 -1
- data/CONTRIBUTE.md +21 -9
- data/DEVELOPER_README.md +72 -0
- data/Guardfile +13 -4
- data/README.md +226 -61
- data/Rakefile +133 -0
- data/bin/get_tokens +79 -0
- data/bin/renew_tokens +28 -0
- data/fortnox-api.gemspec +31 -25
- data/lib/fortnox/api/mappers/article.rb +1 -1
- data/lib/fortnox/api/mappers/base/from_json.rb +7 -6
- data/lib/fortnox/api/mappers/base/to_json.rb +4 -5
- data/lib/fortnox/api/mappers/base.rb +3 -3
- data/lib/fortnox/api/mappers/customer.rb +1 -1
- data/lib/fortnox/api/mappers/default_delivery_types.rb +1 -1
- data/lib/fortnox/api/mappers/default_templates.rb +1 -1
- data/lib/fortnox/api/mappers/edi_information.rb +1 -1
- data/lib/fortnox/api/mappers/email_information.rb +1 -1
- data/lib/fortnox/api/mappers/invoice.rb +4 -4
- data/lib/fortnox/api/mappers/invoice_row.rb +1 -1
- data/lib/fortnox/api/mappers/order.rb +4 -4
- data/lib/fortnox/api/mappers/order_row.rb +1 -1
- data/lib/fortnox/api/mappers/project.rb +1 -1
- data/lib/fortnox/api/mappers/terms_of_payment.rb +1 -1
- data/lib/fortnox/api/mappers/unit.rb +1 -1
- data/lib/fortnox/api/mappers/value/country_string.rb +1 -1
- data/lib/fortnox/api/mappers.rb +18 -18
- data/lib/fortnox/api/models/article.rb +2 -2
- data/lib/fortnox/api/models/base.rb +23 -21
- data/lib/fortnox/api/models/customer.rb +57 -57
- data/lib/fortnox/api/models/document.rb +5 -2
- data/lib/fortnox/api/models/invoice.rb +2 -2
- data/lib/fortnox/api/models/label.rb +3 -3
- data/lib/fortnox/api/models/order.rb +2 -2
- data/lib/fortnox/api/models/project.rb +2 -2
- data/lib/fortnox/api/models/terms_of_payment.rb +2 -2
- data/lib/fortnox/api/models/unit.rb +2 -2
- data/lib/fortnox/api/models.rb +7 -7
- data/lib/fortnox/api/repositories/article.rb +3 -3
- data/lib/fortnox/api/repositories/authentication.rb +61 -0
- data/lib/fortnox/api/repositories/base/savers.rb +3 -1
- data/lib/fortnox/api/repositories/base.rb +25 -38
- data/lib/fortnox/api/repositories/customer.rb +3 -3
- data/lib/fortnox/api/repositories/invoice.rb +3 -3
- data/lib/fortnox/api/repositories/order.rb +3 -3
- data/lib/fortnox/api/repositories/project.rb +3 -3
- data/lib/fortnox/api/repositories/terms_of_payment.rb +3 -3
- data/lib/fortnox/api/repositories/unit.rb +3 -3
- data/lib/fortnox/api/repositories.rb +8 -7
- data/lib/fortnox/api/request_handling.rb +30 -18
- data/lib/fortnox/api/types/default_delivery_types.rb +0 -2
- data/lib/fortnox/api/types/default_templates.rb +0 -2
- data/lib/fortnox/api/types/document_row.rb +3 -3
- data/lib/fortnox/api/types/edi_information.rb +0 -2
- data/lib/fortnox/api/types/email_information.rb +0 -2
- data/lib/fortnox/api/types/enums.rb +54 -10
- data/lib/fortnox/api/types/invoice_row.rb +1 -1
- data/lib/fortnox/api/types/model.rb +5 -9
- data/lib/fortnox/api/types/nullable.rb +13 -9
- data/lib/fortnox/api/types/order_row.rb +1 -1
- data/lib/fortnox/api/types/required.rb +3 -3
- data/lib/fortnox/api/types/sized.rb +4 -4
- data/lib/fortnox/api/types.rb +37 -24
- data/lib/fortnox/api/version.rb +1 -1
- data/lib/fortnox/api.rb +21 -39
- data/spec/fortnox/api/mappers/base/canonical_name_sym_spec.rb +13 -11
- data/spec/fortnox/api/mappers/base/from_json_spec.rb +10 -12
- data/spec/fortnox/api/mappers/base/to_json_spec.rb +48 -57
- data/spec/fortnox/api/mappers/base_spec.rb +4 -7
- data/spec/fortnox/api/mappers/contexts/json_conversion.rb +38 -33
- data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +1 -1
- data/spec/fortnox/api/mappers/examples/mapper.rb +1 -1
- data/spec/fortnox/api/mappers/unit_spec.rb +3 -4
- data/spec/fortnox/api/models/base_spec.rb +33 -22
- data/spec/fortnox/api/models/unit_spec.rb +5 -3
- data/spec/fortnox/api/repositories/article_spec.rb +14 -9
- data/spec/fortnox/api/repositories/authentication_spec.rb +103 -0
- data/spec/fortnox/api/repositories/base_spec.rb +105 -326
- data/spec/fortnox/api/repositories/customer_spec.rb +37 -7
- data/spec/fortnox/api/repositories/examples/all.rb +0 -1
- data/spec/fortnox/api/repositories/examples/find.rb +5 -8
- data/spec/fortnox/api/repositories/examples/only.rb +4 -13
- data/spec/fortnox/api/repositories/examples/save.rb +32 -18
- data/spec/fortnox/api/repositories/examples/save_with_nested_model.rb +0 -5
- data/spec/fortnox/api/repositories/examples/save_with_specially_named_attribute.rb +1 -4
- data/spec/fortnox/api/repositories/examples/search.rb +4 -7
- data/spec/fortnox/api/repositories/invoice_spec.rb +72 -29
- data/spec/fortnox/api/repositories/order_spec.rb +11 -9
- data/spec/fortnox/api/repositories/project_spec.rb +7 -6
- data/spec/fortnox/api/repositories/terms_of_payment_spec.rb +9 -7
- data/spec/fortnox/api/repositories/unit_spec.rb +13 -11
- data/spec/fortnox/api/types/country_spec.rb +1 -1
- data/spec/fortnox/api/types/email_spec.rb +2 -2
- data/spec/fortnox/api/types/enums_spec.rb +1 -0
- data/spec/fortnox/api/types/examples/document_row.rb +3 -3
- data/spec/fortnox/api/types/examples/enum.rb +4 -4
- data/spec/fortnox/api/types/examples/types.rb +1 -3
- data/spec/fortnox/api/types/housework_types_spec.rb +124 -43
- data/spec/fortnox/api/types/model_spec.rb +13 -23
- data/spec/fortnox/api/types/nullable_spec.rb +30 -10
- data/spec/fortnox/api/types/order_row_spec.rb +2 -2
- data/spec/fortnox/api/types/required_spec.rb +7 -15
- data/spec/fortnox/api/types/sales_account_spec.rb +57 -0
- data/spec/fortnox/api_spec.rb +19 -124
- data/spec/spec_helper.rb +0 -14
- data/spec/support/helpers/configuration_helper.rb +30 -3
- data/spec/support/helpers.rb +1 -1
- data/spec/support/matchers/type/attribute_matcher.rb +2 -2
- data/spec/support/matchers/type/enum_matcher.rb +1 -1
- data/spec/support/matchers/type/have_account_number_matcher.rb +1 -1
- data/spec/support/matchers/type/have_email_matcher.rb +1 -1
- data/spec/support/matchers/type/have_nullable_date_matcher.rb +7 -5
- data/spec/support/matchers/type/have_nullable_matcher.rb +1 -1
- data/spec/support/matchers/type/have_nullable_string_matcher.rb +5 -5
- data/spec/support/matchers/type/require_attribute_matcher.rb +5 -5
- data/spec/support/matchers/type/type_matcher.rb +1 -1
- data/spec/support/vcr_setup.rb +16 -0
- data/spec/vcr_cassettes/articles/all.yml +41 -42
- data/spec/vcr_cassettes/articles/find_by_hash_failure.yml +36 -19
- data/spec/vcr_cassettes/articles/find_failure.yml +36 -19
- data/spec/vcr_cassettes/articles/find_id_1.yml +38 -20
- data/spec/vcr_cassettes/articles/find_new.yml +39 -22
- data/spec/vcr_cassettes/articles/multi_param_find_by_hash.yml +38 -21
- data/spec/vcr_cassettes/articles/save_new.yml +37 -19
- data/spec/vcr_cassettes/articles/save_old.yml +39 -22
- data/spec/vcr_cassettes/articles/save_with_specially_named_attribute.yml +37 -19
- data/spec/vcr_cassettes/articles/search_by_name.yml +41 -21
- data/spec/vcr_cassettes/articles/search_miss.yml +36 -19
- data/spec/vcr_cassettes/articles/search_with_special_char.yml +36 -19
- data/spec/vcr_cassettes/articles/single_param_find_by_hash.yml +38 -32
- data/spec/vcr_cassettes/authentication/expired_token.yml +54 -0
- data/spec/vcr_cassettes/authentication/invalid_authorization.yml +57 -0
- data/spec/vcr_cassettes/authentication/invalid_refresh_token.yml +58 -0
- data/spec/vcr_cassettes/authentication/valid_request.yml +63 -0
- data/spec/vcr_cassettes/customers/all.yml +44 -132
- data/spec/vcr_cassettes/customers/find_by_hash_failure.yml +36 -19
- data/spec/vcr_cassettes/customers/find_failure.yml +36 -19
- data/spec/vcr_cassettes/customers/find_id_1.yml +39 -21
- data/spec/vcr_cassettes/customers/find_new.yml +38 -21
- data/spec/vcr_cassettes/customers/find_with_sales_account.yml +63 -0
- data/spec/vcr_cassettes/customers/multi_param_find_by_hash.yml +38 -21
- data/spec/vcr_cassettes/customers/save_new.yml +36 -18
- data/spec/vcr_cassettes/customers/save_new_with_country_code_SE.yml +32 -24
- data/spec/vcr_cassettes/customers/save_new_with_sales_account.yml +63 -0
- data/spec/vcr_cassettes/customers/save_old.yml +38 -21
- data/spec/vcr_cassettes/customers/save_with_specially_named_attribute.yml +36 -18
- data/spec/vcr_cassettes/customers/search_by_name.yml +38 -48
- data/spec/vcr_cassettes/customers/search_miss.yml +36 -19
- data/spec/vcr_cassettes/customers/search_with_special_char.yml +36 -19
- data/spec/vcr_cassettes/customers/single_param_find_by_hash.yml +39 -22
- data/spec/vcr_cassettes/invoices/all.yml +71 -114
- data/spec/vcr_cassettes/invoices/filter_hit.yml +39 -24
- data/spec/vcr_cassettes/invoices/filter_invalid.yml +35 -17
- data/spec/vcr_cassettes/invoices/find_by_hash_failure.yml +36 -19
- data/spec/vcr_cassettes/invoices/find_failure.yml +36 -19
- data/spec/vcr_cassettes/invoices/find_id_1.yml +40 -22
- data/spec/vcr_cassettes/invoices/find_new.yml +41 -24
- data/spec/vcr_cassettes/invoices/multi_param_find_by_hash.yml +38 -21
- data/spec/vcr_cassettes/invoices/row_description_limit.yml +65 -0
- data/spec/vcr_cassettes/invoices/save_new.yml +39 -21
- data/spec/vcr_cassettes/invoices/save_new_with_comments.yml +39 -21
- data/spec/vcr_cassettes/invoices/save_new_with_country.yml +35 -26
- data/spec/vcr_cassettes/invoices/save_new_with_country_GB.yml +36 -27
- data/spec/vcr_cassettes/invoices/save_new_with_country_Norge.yml +35 -26
- data/spec/vcr_cassettes/invoices/save_new_with_country_Norway.yml +35 -26
- data/spec/vcr_cassettes/invoices/save_new_with_country_Sverige.yml +35 -26
- data/spec/vcr_cassettes/invoices/save_new_with_country_VA.yml +36 -27
- data/spec/vcr_cassettes/invoices/save_new_with_country_VI.yml +36 -27
- data/spec/vcr_cassettes/invoices/save_new_with_country_empty_string.yml +35 -26
- data/spec/vcr_cassettes/invoices/save_new_with_country_nil.yml +35 -26
- data/spec/vcr_cassettes/invoices/save_new_with_unsaved_parent.yml +65 -0
- data/spec/vcr_cassettes/invoices/save_old.yml +41 -24
- data/spec/vcr_cassettes/invoices/save_old_with_empty_comments.yml +41 -24
- data/spec/vcr_cassettes/invoices/save_old_with_empty_country.yml +37 -29
- data/spec/vcr_cassettes/invoices/save_old_with_nil_comments.yml +41 -24
- data/spec/vcr_cassettes/invoices/save_old_with_nil_country.yml +37 -29
- data/spec/vcr_cassettes/invoices/save_with_nested_model.yml +40 -21
- data/spec/vcr_cassettes/invoices/save_with_specially_named_attribute.yml +39 -20
- data/spec/vcr_cassettes/invoices/search_by_name.yml +38 -27
- data/spec/vcr_cassettes/invoices/search_miss.yml +36 -19
- data/spec/vcr_cassettes/invoices/search_with_special_char.yml +36 -19
- data/spec/vcr_cassettes/invoices/single_param_find_by_hash.yml +39 -22
- data/spec/vcr_cassettes/orders/all.yml +44 -119
- data/spec/vcr_cassettes/orders/filter_hit.yml +39 -26
- data/spec/vcr_cassettes/orders/filter_invalid.yml +35 -17
- data/spec/vcr_cassettes/orders/find_by_hash_failure.yml +36 -19
- data/spec/vcr_cassettes/orders/find_failure.yml +36 -19
- data/spec/vcr_cassettes/orders/find_id_1.yml +42 -23
- data/spec/vcr_cassettes/orders/find_new.yml +41 -24
- data/spec/vcr_cassettes/orders/housework_invalid_tax_reduction_type.yml +61 -0
- data/spec/vcr_cassettes/orders/housework_othercoses_invalid.yml +61 -0
- data/spec/vcr_cassettes/orders/housework_type_babysitting.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_cleaning.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_construction.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_cooking.yml +36 -18
- data/spec/vcr_cassettes/orders/housework_type_electricity.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_gardening.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_glassmetalwork.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_grounddrainagework.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_hvac.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_itservices.yml +65 -0
- data/spec/vcr_cassettes/orders/housework_type_majorappliancerepair.yml +65 -0
- data/spec/vcr_cassettes/orders/housework_type_masonry.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_movingservices.yml +65 -0
- data/spec/vcr_cassettes/orders/housework_type_othercare.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_othercosts.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_paintingwallpapering.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_snowplowing.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_textileclothing.yml +40 -21
- data/spec/vcr_cassettes/orders/housework_type_tutoring.yml +36 -18
- data/spec/vcr_cassettes/orders/multi_param_find_by_hash.yml +38 -21
- data/spec/vcr_cassettes/orders/save_new.yml +40 -22
- data/spec/vcr_cassettes/orders/save_old.yml +41 -24
- data/spec/vcr_cassettes/orders/save_with_nested_model.yml +40 -21
- data/spec/vcr_cassettes/orders/search_by_name.yml +38 -23
- data/spec/vcr_cassettes/orders/search_miss.yml +36 -19
- data/spec/vcr_cassettes/orders/search_with_special_char.yml +36 -19
- data/spec/vcr_cassettes/orders/single_param_find_by_hash.yml +39 -22
- data/spec/vcr_cassettes/projects/all.yml +39 -37
- data/spec/vcr_cassettes/projects/find_by_hash_failure.yml +36 -19
- data/spec/vcr_cassettes/projects/find_failure.yml +36 -19
- data/spec/vcr_cassettes/projects/find_id_1.yml +38 -21
- data/spec/vcr_cassettes/projects/find_new.yml +39 -22
- data/spec/vcr_cassettes/projects/multi_param_find_by_hash.yml +40 -22
- data/spec/vcr_cassettes/projects/save_new.yml +37 -19
- data/spec/vcr_cassettes/projects/save_old.yml +39 -22
- data/spec/vcr_cassettes/projects/single_param_find_by_hash.yml +38 -21
- data/spec/vcr_cassettes/termsofpayments/all.yml +43 -29
- data/spec/vcr_cassettes/termsofpayments/find_failure.yml +36 -19
- data/spec/vcr_cassettes/termsofpayments/find_id_1.yml +38 -22
- data/spec/vcr_cassettes/termsofpayments/find_new.yml +38 -21
- data/spec/vcr_cassettes/termsofpayments/save_new.yml +37 -19
- data/spec/vcr_cassettes/termsofpayments/save_old.yml +38 -21
- data/spec/vcr_cassettes/units/all.yml +38 -26
- data/spec/vcr_cassettes/units/find_failure.yml +36 -19
- data/spec/vcr_cassettes/units/find_id_1.yml +38 -21
- data/spec/vcr_cassettes/units/find_new.yml +38 -21
- data/spec/vcr_cassettes/units/save_new.yml +37 -19
- data/spec/vcr_cassettes/units/save_old.yml +38 -21
- data/spec/vcr_cassettes/units/save_with_specially_named_attribute.yml +37 -19
- metadata +133 -252
- data/lib/fortnox/api/circular_queue.rb +0 -39
- data/spec/fortnox/api/circular_queue_spec.rb +0 -52
- data/spec/support/helpers/dummy_class_helper.rb +0 -38
- data/spec/support/helpers/when_performing_helper.rb +0 -7
- data/spec/vcr_cassettes/invoices/save_new_with_country_KR.yml +0 -57
- data/temp.txt +0 -1
data/fortnox-api.gemspec
CHANGED
@@ -1,44 +1,50 @@
|
|
1
|
-
|
2
1
|
# frozen_string_literal: true
|
3
2
|
|
4
|
-
lib = File.expand_path('
|
3
|
+
lib = File.expand_path('lib', __dir__)
|
5
4
|
$LOAD_PATH.unshift(lib) unless $LOAD_PATH.include?(lib)
|
6
|
-
|
5
|
+
require_relative 'lib/fortnox/api/version'
|
7
6
|
|
8
|
-
Gem::Specification.new do |spec|
|
7
|
+
Gem::Specification.new do |spec|
|
9
8
|
spec.name = 'fortnox-api'
|
10
9
|
spec.version = Fortnox::API::VERSION
|
11
|
-
spec.authors = ['Jonas Schubert Erlandsson', 'Hannes Elvemyr', 'Felix Holmgren']
|
10
|
+
spec.authors = ['Jonas Schubert Erlandsson', 'Hannes Elvemyr', 'Felix Holmgren', 'Mike Eirih']
|
12
11
|
spec.email = ['info@accodeing.com']
|
13
12
|
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
|
16
|
-
'like `all`, `find`, `find_by_...` and so on. And each individual instance can be
|
17
|
-
'persistable to Fortnox again using the `save` method.'
|
13
|
+
spec.description = 'This gem uses the HTTParty library to abstract away the REST calls. It gives you access to a ' \
|
14
|
+
'number of objects that behave a lot like ActiveRecord instances, giving you access to ' \
|
15
|
+
'methods like `all`, `find`, `find_by_...` and so on. And each individual instance can be' \
|
16
|
+
'easily persistable to Fortnox again using the `save` method.'
|
18
17
|
spec.homepage = 'http://github.com/accodeing/fortnox-api'
|
19
18
|
spec.license = 'LGPL-3.0'
|
19
|
+
spec.metadata = {
|
20
|
+
'rubygems_mfa_required' => 'true'
|
21
|
+
}
|
20
22
|
|
21
23
|
spec.files = `git ls-files -z`.split("\x0")
|
22
24
|
spec.executables = spec.files.grep(%r{^bin/}) { |f| File.basename(f) }
|
23
|
-
spec.test_files = spec.files.grep(%r{^(spec)/})
|
24
25
|
spec.require_paths = ['lib']
|
25
26
|
|
26
|
-
spec.required_ruby_version = '>= 2.
|
27
|
-
spec.add_dependency 'countries', '~>
|
28
|
-
spec.add_dependency 'dry-
|
29
|
-
spec.add_dependency 'dry-
|
30
|
-
spec.add_dependency '
|
27
|
+
spec.required_ruby_version = '>= 2.7'
|
28
|
+
spec.add_dependency 'countries', '~> 5.0'
|
29
|
+
spec.add_dependency 'dry-configurable', '~> 1.0'
|
30
|
+
spec.add_dependency 'dry-container', '~> 0.10'
|
31
|
+
spec.add_dependency 'dry-struct', '~> 1.6'
|
32
|
+
spec.add_dependency 'dry-types', '~> 1.7'
|
33
|
+
spec.add_dependency 'httparty', '~> 0.21'
|
34
|
+
spec.add_dependency 'jwt', '~> 2.3'
|
31
35
|
|
32
|
-
spec.add_development_dependency 'bundler', '~> 2.
|
33
|
-
spec.add_development_dependency '
|
34
|
-
spec.add_development_dependency 'guard
|
36
|
+
spec.add_development_dependency 'bundler', '~> 2.4'
|
37
|
+
spec.add_development_dependency 'dotenv', '~> 2.8'
|
38
|
+
spec.add_development_dependency 'guard', '~> 2.18'
|
39
|
+
spec.add_development_dependency 'guard-rspec', '~> 4.7'
|
40
|
+
spec.add_development_dependency 'guard-rubocop', '~> 1.5'
|
35
41
|
spec.add_development_dependency 'pry', '~> 0'
|
36
|
-
spec.add_development_dependency 'rake', '~>
|
37
|
-
spec.add_development_dependency 'rspec', '~> 3.
|
42
|
+
spec.add_development_dependency 'rake', '~> 13.0'
|
43
|
+
spec.add_development_dependency 'rspec', '~> 3.12'
|
38
44
|
spec.add_development_dependency 'rspec-collection_matchers', '~> 0'
|
39
|
-
spec.add_development_dependency 'rubocop', '~>
|
40
|
-
spec.add_development_dependency 'rubocop-rspec', '~>
|
41
|
-
spec.add_development_dependency 'simplecov', '~> 0.
|
42
|
-
spec.add_development_dependency 'vcr', '~>
|
43
|
-
spec.add_development_dependency 'webmock', '~> 3.
|
45
|
+
spec.add_development_dependency 'rubocop', '~> 1.39.0'
|
46
|
+
spec.add_development_dependency 'rubocop-rspec', '~> 2.16.0'
|
47
|
+
spec.add_development_dependency 'simplecov', '~> 0.22'
|
48
|
+
spec.add_development_dependency 'vcr', '~> 6.1'
|
49
|
+
spec.add_development_dependency 'webmock', '~> 3.18'
|
44
50
|
end
|
@@ -4,7 +4,7 @@ module Fortnox
|
|
4
4
|
module API
|
5
5
|
module Mapper
|
6
6
|
module FromJSON
|
7
|
-
class MissingModelOrMapperException <
|
7
|
+
class MissingModelOrMapperException < Fortnox::API::Exception
|
8
8
|
end
|
9
9
|
|
10
10
|
def wrapped_json_collection_to_entities_hash(json_collection_hash)
|
@@ -45,12 +45,13 @@ module Fortnox
|
|
45
45
|
# Raise exception during test run if this happens so that we can
|
46
46
|
# add it before a new release.
|
47
47
|
|
48
|
-
message = "for #{key} (#{mapper_name}, #{Fortnox::API::Mapper::DefaultTemplates.canonical_name_sym})
|
49
|
-
" #{collection}"
|
48
|
+
message = "for #{key} (#{mapper_name}, #{Fortnox::API::Mapper::DefaultTemplates.canonical_name_sym}) " \
|
49
|
+
"with #{collection}"
|
50
50
|
|
51
51
|
raise MissingModelOrMapperException, message if ENV['RUBY_ENV']
|
52
|
+
|
52
53
|
Fortnox::API.logger.warn("Missing Model or Mapper implementation for #{key} with attributes: #{collection}")
|
53
|
-
|
54
|
+
convert_hash_keys_from_json_format(collection, {})
|
54
55
|
end
|
55
56
|
end
|
56
57
|
|
@@ -72,8 +73,8 @@ module Fortnox
|
|
72
73
|
|
73
74
|
def default_key_from_json_transform(key)
|
74
75
|
key = key.to_s
|
75
|
-
key = camelcase_to_underscore(key) unless key
|
76
|
-
key = strip_at_symbol(key) if key
|
76
|
+
key = camelcase_to_underscore(key) unless key.match?(/\A[A-Z]+\z/)
|
77
|
+
key = strip_at_symbol(key) if key.match?(/\A@.*\z/)
|
77
78
|
key.downcase.to_sym
|
78
79
|
end
|
79
80
|
|
@@ -25,8 +25,8 @@ module Fortnox
|
|
25
25
|
# PRIVATE
|
26
26
|
|
27
27
|
def convert_hash_keys_to_json_format(hash)
|
28
|
-
hash.
|
29
|
-
|
28
|
+
hash.transform_keys do |key|
|
29
|
+
convert_key_to_json(key)
|
30
30
|
end
|
31
31
|
end
|
32
32
|
|
@@ -35,13 +35,12 @@ module Fortnox
|
|
35
35
|
end
|
36
36
|
|
37
37
|
def default_key_to_json_transform(key)
|
38
|
-
key.to_s.split('_').map(&:capitalize).join
|
38
|
+
key.to_s.split('_').map(&:capitalize).join
|
39
39
|
end
|
40
40
|
|
41
41
|
def sanitise(hash, keys_to_filter)
|
42
42
|
hash.reject do |key, value|
|
43
|
-
|
44
|
-
value.nil?
|
43
|
+
keys_to_filter.include?(key) || value.nil?
|
45
44
|
end
|
46
45
|
end
|
47
46
|
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
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,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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,9 +1,9 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
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
|
data/lib/fortnox/api/mappers.rb
CHANGED
@@ -1,21 +1,21 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require_relative 'types'
|
4
4
|
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
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,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
|
@@ -25,8 +26,8 @@ module Fortnox
|
|
25
26
|
obj = preserve_meta_properties(hash) do
|
26
27
|
super(hash)
|
27
28
|
end
|
28
|
-
rescue Dry::Struct::Error =>
|
29
|
-
raise Fortnox::API::AttributeError,
|
29
|
+
rescue Dry::Struct::Error => exception
|
30
|
+
raise Fortnox::API::AttributeError, exception
|
30
31
|
end
|
31
32
|
|
32
33
|
IceNine.deep_freeze(obj)
|
@@ -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,25 +52,30 @@ module Fortnox
|
|
47
52
|
end
|
48
53
|
end
|
49
54
|
|
50
|
-
def
|
51
|
-
|
55
|
+
def to_hash(recursive = false) # rubocop:disable Style/OptionalBooleanParameter
|
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 send("#{key.name}?")
|
61
|
+
end
|
52
62
|
end
|
53
63
|
|
54
64
|
def update(hash)
|
55
65
|
old_attributes = to_hash
|
56
|
-
new_attributes = old_attributes.merge(hash)
|
66
|
+
new_attributes = old_attributes.merge(hash).compact
|
57
67
|
|
58
68
|
return self if new_attributes == old_attributes
|
59
69
|
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
self.class.new(new_hash)
|
70
|
+
new_attributes[:new] = @new
|
71
|
+
new_attributes[:parent] = self
|
72
|
+
self.class.new(new_attributes)
|
64
73
|
end
|
65
74
|
|
66
75
|
# Generic comparison, by value, use .eql? or .equal? for object identity.
|
67
76
|
def ==(other)
|
68
77
|
return false unless other.is_a? self.class
|
78
|
+
|
69
79
|
to_hash == other.to_hash
|
70
80
|
end
|
71
81
|
|
@@ -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
|
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 }
|
@@ -115,6 +115,8 @@ module Fortnox
|
|
115
115
|
obj
|
116
116
|
end
|
117
117
|
|
118
|
+
private_class_method :preserve_meta_properties
|
119
|
+
|
118
120
|
private
|
119
121
|
|
120
122
|
def private_attributes
|