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
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 843c49685ec54b6f9e9adb7f5a16a67dc827f0d7b5e58b3d8bd8bd9fccced0db
|
4
|
+
data.tar.gz: 306a7d66d0b820cc8250b887d14362a7117e8aebbffae5449ba277f30013a06d
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1da53b39993c540c59290b111cf30b7ed99b84da62606462671fe178a342dd136f0e64ad552646c2f66d3091088b5a1961c77f9bf18a16e655e9fdfff360bc8f
|
7
|
+
data.tar.gz: 293879cf697a4c9fde27fa6fa8e89d2f59d082bd983a00ee5c8b345bc5864a231c61dc4bb256e424d3c721706dd01f851c88ef886b7d8b611e34481a2558ccfe
|
data/.codeclimate.yml
CHANGED
data/.env.template
ADDED
data/.env.test
CHANGED
@@ -1,3 +1,11 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
DEBUG=false
|
2
|
+
|
3
|
+
EXPIRED_ACCESS_TOKEN=eyJ0eXAiOiJKV1QiLCJhbGciOiJIUzI1NiJ9.eyJ1c2VySWQiOjIsInRlbmFudElkIjoxMzY4MjY3LCJjbGllbnRJZCI6ImR2UEE0Mnk0ME9XSiIsInJpZ2h0c0FzSnNvbiI6Ikg0c0lBQUFBQUFBQUE0MVgzVzdyTmd4K2wxNnZlWWVzUlE4SzdPd1VTSWZoWUJnQzJtSWN6WkpvU0hMYTdPbEhXWkl0MlUyd080dWt5SVwvXC84bDhQRmp2cHZMM3VHakQ5dm0xcE5ONDlcL1BMUWlKMDcwd2NvMVNxSk13MWFMeVwvZ3NTWUtMVTNRTWpPZ2JkRUZMblFXVVRObEYwaURcLzhPaDNXZGF1SDNhbmFRQjAwcFFQeEhzQWIyWHBuT1JkYUd4UGFPTmg5WWk2M2ZTWEVpMnlPcnNDS3BrZ2ZKb016OHlCcmdHUTI3c09uUmVrb2xrQVZKZFBmU0xwUThyUGI1SWhlOTB1RHFQK29XVVlHMUpQd05FVmF0TzJCeURicytnUTl5U2NsUVZiaWNSUHdleWlUMmdQWkhWRmY3SmV1MzZLV0N4WU53SlYwR1ozS3dzTkVSOURTNEdKQWxWcGhaMFVrT1h4QjFjc0ZZQW96K1RsZjlpME4wakRsK0JyMjhFV0ZzazZ1UXE5UFdwU053NlpsSXZNYk40UWV0Vms1bVYzVml6Rmx2aUtsSVNsalRQVHFReXlBaU1xRldVcUZtMHRzSktTQmRLcDFoVlR0UkIyV1NtSW1RZkZMVTkzNU1rN25qQnVVS2ZNSjY1djhoZUZYVTVKQzNLNGN1YUtwd2pxbUpNcDlNRUpKQUxIOEtSQzFCWEY4aUtXVGJXZjBrQklVcGx2dkZkZWQ3d2lxdnNWY2t1NFpVbUozTHR5YnBOTXBEaW11V1FnYXZBNTI5RlpsQ2p1OVZaK3ZxWWtzQktRTVFMWlpUQzBZN21HSkdWaERPMlwvVXIrR01wa2tVbGZQU2d1UHJCeTFNY3dYYjhpTFwvZHFzaEpVMkFUUG85QnZCUXVSd2tBYzhtaVBYQ2lPekRRTElqMzBHSVAxNExPTDZ5QUgybzJRVmFvZGgwRkRZVDkyVWo1NStDeE9vUzlZeVVwSEtHYmVRaWRFNFhielYwVU40VWxicXFJUDVQeUVNQ3lvcVZWVlo2ZDBhekRjRTgrb0pNOFFpYTVncFdMNWZsdGlVR0RlWW5NZFBMZnNPMlRZU1lEM1l4bVFSRVVoXC9hdHBHS1Y0b3BpbXhJbkY4MlpKakJQUUh6WnRtZGxpdEhaSElxcDROUzN4MXUyK0VZa3ZmTHJGSHNhd3JSeHV0SWFwK0hhTHFSbU1DbkdQUzMzZTJJOStDYm5iNVZYeE5QS28wbWlMZlB5UFc0ZHhHUGp0c0w3RnBXbjlPRHgyb3hRWXNubDlwdGRwS3JCM0J6OHRKblpWVDJVRUhHNDlnTGtXT1VuTXFheFwvZkpndFI0UHQwY2UwbHNKUDhpTGIzMGZkVElXWk9JcWE1cm9jNXlXMXN2SmtVZkRDWVdkTFE5UndIeTFuanJXZlkxb3FPR2kzNTlVVkZMUjU4eVIrYU9wbjZhQlJLUFpDXC9NYkQwYmhjc2pkcVwvWDZkMzYzeGJYMVwvWGR2ckNsSGJZYTF1dm1uNk1MYTVXRlBSOWF2aHZ6eGYrcmhNbHFYQUJNV1RnM2NtbDFUcjArVnBXVlZDaGo1ZFpZK25FV2RvekxNaWlzU242OEN2b2lRVnAxVHhMT2lyZFZXWmlQU01wR0tWRDhCb0tYNnNJOVRmaTFBWWZIY01iZ0JIQXFkbHNQUVBab0U2Q292UERDNUhPQlhMT243VmVYN3JWVlJwbUJxZTJaWHo5WE5wQTV5ZkhWeUFmc0hicHVtUjBsdStrM0ltamNnR3N5RlBnbmd5aGtYOFF2WTluSmdxWU5kWkdzT0lBS04yNEJpSU9cL0tMb1Nha2RWOVEwaEFPaW0xYWt0elU3MUpqSklVZTJDc1ZmbWJjUWsxd2ZnVW5IWE8zeERcLzVHWWo3NzVGUmQ1WmZ0ZERmXC93RTV2eUZHbWcwQUFBPT0iLCJzY29wZXMiOlsiYXJ0aWNsZSIsImludm9pY2UiLCJzZXR0aW5ncyIsImN1c3RvbWVyIiwib3JkZXIiLCJwcm9qZWN0Il0sImF1dGhzb3VyY2UiOiJPQVVUSDIiLCJpZCI6IjRiNThjM2M2ZDEwOTU3Njc0ZTQwNzE3Y2ZkODdkOGZkNzExMDQ0YTYiLCJqdGkiOiI0YjU4YzNjNmQxMDk1NzY3NGU0MDcxN2NmZDg3ZDhmZDcxMTA0NGE2IiwiaXNzIjoiaHR0cHM6XC9cL2FwaS5mb3J0bm94LnNlXC9vYXV0aDIiLCJhdWQiOiJkdlBBNDJ5NDBPV0oiLCJzdWIiOiIyQDEzNjgyNjciLCJleHAiOjE2NzUxMDI0MjEsImlhdCI6MTY3NTA5ODgyMSwidG9rZW5fdHlwZSI6ImJlYXJlciIsInNjb3BlIjoiYXJ0aWNsZSBpbnZvaWNlIHNldHRpbmdzIGN1c3RvbWVyIG9yZGVyIHByb2plY3QifQ.wW3fBY0ZkZkBNaGrNSwJlJzNa7EmSGCKhY_QLEAcmIA
|
4
|
+
|
5
|
+
# VCR: Real credentials are required when renewing authentication cassettes
|
6
|
+
FORTNOX_API_CLIENT_ID=test_client_id
|
7
|
+
FORTNOX_API_CLIENT_SECRET=test_client_secret
|
8
|
+
FORTNOX_API_REFRESH_TOKEN=test_refresh_token
|
9
|
+
|
10
|
+
# VCR: Valid token is required for rerecording cassettes
|
11
|
+
FORTNOX_API_ACCESS_TOKEN=test_access_token
|
data/.gitignore
CHANGED
data/.rubocop.yml
CHANGED
@@ -1,8 +1,9 @@
|
|
1
1
|
require: rubocop-rspec
|
2
2
|
|
3
3
|
AllCops:
|
4
|
-
TargetRubyVersion: 2.
|
4
|
+
TargetRubyVersion: 2.7
|
5
5
|
DisplayCopNames: true
|
6
|
+
NewCops: enable
|
6
7
|
|
7
8
|
RSpec/FilePath:
|
8
9
|
Enabled: false
|
@@ -13,7 +14,7 @@ RSpec/NestedGroups:
|
|
13
14
|
Style/Documentation:
|
14
15
|
Enabled: false
|
15
16
|
|
16
|
-
|
17
|
+
Layout/LineLength:
|
17
18
|
Max: 120
|
18
19
|
|
19
20
|
Metrics/BlockLength:
|
@@ -23,3 +24,18 @@ Metrics/BlockLength:
|
|
23
24
|
Naming/PredicateName:
|
24
25
|
Exclude:
|
25
26
|
- 'spec/support/matchers/**/*'
|
27
|
+
|
28
|
+
Naming/RescuedExceptionsVariableName:
|
29
|
+
PreferredName: exception
|
30
|
+
|
31
|
+
Style/WordArray:
|
32
|
+
EnforcedStyle: brackets
|
33
|
+
|
34
|
+
RSpec/MultipleMemoizedHelpers:
|
35
|
+
Max: 7
|
36
|
+
|
37
|
+
Lint/RaiseException:
|
38
|
+
# You must specify the nearest module, not the fully qualified name
|
39
|
+
AllowedImplicitNamespaces:
|
40
|
+
- 'API'
|
41
|
+
- 'Repository'
|
data/.tool-versions
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
ruby 3.2.0
|
data/.travis.yml
CHANGED
@@ -1,35 +1,31 @@
|
|
1
1
|
env:
|
2
2
|
global:
|
3
|
-
|
3
|
+
- CC_TEST_REPORTER_ID=43ea0acb059b164537ce31bf67e03e1cb552d63df1ad3e9bd95dc3d844697bb4
|
4
4
|
language: ruby
|
5
|
+
dist: focal
|
5
6
|
rvm:
|
6
|
-
- 2.
|
7
|
-
-
|
8
|
-
-
|
9
|
-
- 2.
|
10
|
-
|
11
|
-
- 2.5.0
|
12
|
-
- 2.5.5
|
13
|
-
- 2.6.0
|
14
|
-
- 2.6.3
|
15
|
-
- 2.7.0-preview1
|
7
|
+
- 2.7.7
|
8
|
+
- 3.0.5
|
9
|
+
- 3.1.3
|
10
|
+
- 3.2.0
|
11
|
+
|
16
12
|
notifications:
|
17
13
|
slack:
|
18
14
|
secure: UEYDtwLaQgAoMRY7ct1y0Uu5HbInMwrLo+TiYRc3rjDrzqDfDyInEr3bpckyPJ79lnzccrFezMdY4jWzRjmsvQzvYMu+DWJ1mAWOa/9Ws4YZ8nHd5KqXxVQ0EqPWuWwMOyOdyy3DK/MjUOobGSc0//Pv5DeaAAEBKLJzN+e1BQM=
|
19
15
|
email: false
|
20
16
|
before_install:
|
21
|
-
- gem update --system
|
22
|
-
- gem install bundler
|
17
|
+
- gem update --system
|
18
|
+
- gem install bundler
|
23
19
|
cache: bundler
|
24
20
|
before_script:
|
25
|
-
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
|
26
|
-
|
27
|
-
- chmod +x ./cc-test-reporter
|
28
|
-
- "./cc-test-reporter before-build"
|
21
|
+
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
|
22
|
+
> ./cc-test-reporter
|
23
|
+
- chmod +x ./cc-test-reporter
|
24
|
+
- "./cc-test-reporter before-build"
|
29
25
|
script:
|
30
|
-
- bundle exec rspec
|
26
|
+
- bundle exec rspec
|
31
27
|
after_script:
|
32
|
-
- "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
|
28
|
+
- "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
|
33
29
|
branches:
|
34
30
|
only:
|
35
31
|
- master
|
data/CHANGELOG.md
CHANGED
@@ -1,37 +1,102 @@
|
|
1
1
|
# Changelog
|
2
|
+
|
2
3
|
All notable changes to this project will be documented in this file.
|
3
4
|
|
4
5
|
The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
5
|
-
and this project adheres to
|
6
|
+
and this project adheres to
|
7
|
+
[Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
8
|
+
|
9
|
+
## [Unreleased]
|
10
|
+
|
11
|
+
## [0.9.0]
|
12
|
+
|
13
|
+
### Added
|
14
|
+
|
15
|
+
- Script in `bin/get_tokens` to issue access and refresh tokens
|
16
|
+
- Script in `bin/renew_tokens` (convenience feature for developers)
|
17
|
+
- `Fortnox::API::Repository::Authentication.renew_token`, used for token renewal
|
18
|
+
|
19
|
+
### Changed
|
20
|
+
|
21
|
+
- **Breaking** The auth process is rewritten to support
|
22
|
+
[the new auth flow](https://developer.fortnox.se/general/authentication/) that
|
23
|
+
Fortnox has implemented. You also need to set the access token explicitly with
|
24
|
+
`Fortnox::API.access_token ' your token'`. See [README](README.md) for more
|
25
|
+
instructions.
|
26
|
+
|
27
|
+
### Fixed
|
28
|
+
|
29
|
+
- Missing runtime dependencies `dry-configurable` and `dry-container` is added.
|
30
|
+
Those were indirect dependencies before via other dry libs, but we use them
|
31
|
+
explicitly in the gem, so they should be included as real dependencies. Also,
|
32
|
+
newer versions of these gems did actually break the gem.
|
33
|
+
- Not trying to update resource if diff against parent is an empty object
|
34
|
+
(#238).
|
35
|
+
|
36
|
+
### Removed
|
37
|
+
|
38
|
+
- **Breaking** Drops support for Ruby 2.6 since it's reached end of life
|
39
|
+
- Token rotation is removed since Fortnox counts rate limit on tenant and client
|
40
|
+
id. Before, you could get around this by using multiple access tokens. That's
|
41
|
+
not possible anymore, so token rotation is simply removed.
|
42
|
+
- **Breaking** Removes `client_id` and `client_secret` from configuration. These
|
43
|
+
value are only used for token renewal, so they are now arguments to the
|
44
|
+
`Authentication` repository. This means there are no longer any required
|
45
|
+
configuration to set in `Fortnox::API.configuration`.
|
46
|
+
|
47
|
+
## [0.8.0]
|
48
|
+
|
49
|
+
### Changed
|
50
|
+
|
51
|
+
- `Fortnox::API::CURRENT_HOUSEWORK_TYPES` is now renamed to `HOUSEWORK_TYPES`
|
52
|
+
and is instead a Hash with keys for the different categories of types. It also
|
53
|
+
includes legacy types, which means `Fortnox::API::LEGACY_HOUSEWORK_TYPES` is
|
54
|
+
removed.
|
55
|
+
|
56
|
+
### Removed
|
57
|
+
|
58
|
+
- Drops support for Ruby < `2.5.0` since they are deprecated
|
6
59
|
|
7
60
|
## [0.7.2]
|
61
|
+
|
8
62
|
### Fixed
|
63
|
+
|
9
64
|
- Invalid validation for Customer's account number attribute
|
10
65
|
|
11
66
|
## [0.7.1]
|
67
|
+
|
12
68
|
### Fixed
|
69
|
+
|
13
70
|
- Invalid validation for Customer's country attributes
|
14
71
|
|
15
72
|
## [0.7.0]
|
73
|
+
|
16
74
|
### Added
|
75
|
+
|
17
76
|
- Adds build test for Ruby `2.6.0`, `2.6.3` and `2.7.0-preview`.
|
18
77
|
|
19
78
|
### Removed
|
79
|
+
|
20
80
|
- Drops support for Ruby < `2.4.0` since they are deprecated
|
21
81
|
|
22
82
|
### Fixed
|
83
|
+
|
23
84
|
- Country attribute for `Invoice` and `Order` is now validated correctly.
|
24
85
|
- Fixes deprecation warnings
|
25
86
|
- Unlocks pinned `HTTParty` version
|
26
87
|
- Invalid email validation
|
27
88
|
|
28
89
|
## [0.6.3]
|
90
|
+
|
29
91
|
### Changed
|
92
|
+
|
30
93
|
- Pins `dry-types` to `< 0.13.0` due to breaking changes
|
31
94
|
|
32
95
|
### Fixed
|
96
|
+
|
33
97
|
- Model attribute `url` is no longer null
|
34
98
|
|
99
|
+
[0.8.0]: https://github.com/accodeing/fortnox-api/compare/v0.7.2...v0.8.0
|
35
100
|
[0.7.2]: https://github.com/accodeing/fortnox-api/compare/v0.7.1...v0.7.2
|
36
101
|
[0.7.1]: https://github.com/accodeing/fortnox-api/compare/v0.7.0...v0.7.1
|
37
102
|
[0.7.0]: https://github.com/accodeing/fortnox-api/compare/v0.6.3...v0.7.0
|
data/CONTRIBUTE.md
CHANGED
@@ -1,24 +1,36 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
|
1
|
+
# Contribute to the project
|
2
|
+
|
3
|
+
If you want to participate in the development somehow, please send us an email
|
4
|
+
at info@accodeing.com and let us know. Both small and large contributions are
|
5
|
+
appreciated. We have a Slack channel where developers are more than welcome :)
|
6
|
+
|
7
|
+
Please start with reading the [DEVELOPER_README](DEVELOPER_README.md).
|
8
|
+
|
9
|
+
To contribute:
|
10
|
+
|
11
|
+
1. Fork it ( http://github.com/accodeing/fortnox-api/fork )
|
12
|
+
2. Clone your fork
|
13
|
+
(`git clone https://github.com/<your GitHub user name>/fortnox-api.git`)
|
4
14
|
3. Create your feature branch (`git checkout -b my-new-feature`)
|
5
15
|
4. Commit your changes (`git commit -am 'Add some feature'`)
|
6
16
|
5. Push to the branch (`git push origin my-new-feature`)
|
7
|
-
6. Create new Pull Request
|
17
|
+
6. Create new Pull Request against our `development` branch
|
8
18
|
|
9
|
-
|
19
|
+
# Adding upstream remote
|
10
20
|
|
11
21
|
If you want to keep contributing, it is a good idea to add the original repo as
|
12
|
-
remote server to your clone (
|
13
|
-
https://github.com/
|
14
|
-
this to update your fork:
|
22
|
+
remote server to your clone (
|
23
|
+
`git remote add upstream https://github.com/accodeing/fortnox-api` ). Then you
|
24
|
+
can do something like this to update your fork:
|
15
25
|
|
16
26
|
1. Fetch branches from upstream (`git fetch upstream`)
|
17
27
|
2. Checkout your master branch (`git checkout master`)
|
18
28
|
3. Update it (`git rebase upstream/master`)
|
19
|
-
4. And push it to your fork (`git push origin master`)
|
29
|
+
4. And push it to your fork (`git push origin master`) (might need a `--force`
|
30
|
+
if branches have diverged)
|
20
31
|
|
21
32
|
If you want to update another branch:
|
33
|
+
|
22
34
|
```
|
23
35
|
git checkout branch-name
|
24
36
|
git rebase upstream/branch-name
|
data/DEVELOPER_README.md
ADDED
@@ -0,0 +1,72 @@
|
|
1
|
+
# Readme for Developers
|
2
|
+
|
3
|
+
## Testing
|
4
|
+
|
5
|
+
This gem has integration tests to verify the code against the real API. It uses
|
6
|
+
[vcr](https://github.com/vcr/vcr) to record API endpoint responses. These
|
7
|
+
responses are stored locally and are called vcr cassettes. If no cassettes are
|
8
|
+
available, vcr will record new ones for you. Once in a while, it's good to throw
|
9
|
+
away all cassettes and rerecord them. Fortnox updates their endpoints and we
|
10
|
+
need to keep our code up to date with the reality. There's a handy rake task for
|
11
|
+
removing all cassettes, see `rake -T`. Note that when rerecording all cassettes,
|
12
|
+
do it one repository at a time, otherwise you'll definitely get
|
13
|
+
`429 Too Many Requests` from Fortnox. Run them manually with something like
|
14
|
+
`bundle exec rspec spec/fortnox/api/repositories/article_spec.rb`. Also, you
|
15
|
+
will need to update some test data in specs, see notes in specs.
|
16
|
+
|
17
|
+
### Test environment variables
|
18
|
+
|
19
|
+
`.env.test` includes environment variables used for testing. If you want to run
|
20
|
+
tests against a real (or test) Fortnox account you need to provide valid
|
21
|
+
credentials in `.env`. See [Get tokens](get-tokens) for how to issue valid
|
22
|
+
tokens and `.env.template` for which values you need to provide. Then, you must
|
23
|
+
move these into `.env.test` since that's the environment file used for testing.
|
24
|
+
|
25
|
+
If you want the gem to refresh your tokens during testing, you can enable that
|
26
|
+
feature by setting the environment variable `REFRESH_TOKENS=true`.
|
27
|
+
|
28
|
+
### Seeding
|
29
|
+
|
30
|
+
There's a Rake task for seeding the Test Fortnox instance with data that the
|
31
|
+
test suite needs. See `rake -T` to find the task.
|
32
|
+
|
33
|
+
### Debug mode while running tests
|
34
|
+
|
35
|
+
There's a `DEBUG` environment variable to set if you want to debug during
|
36
|
+
testing.
|
37
|
+
|
38
|
+
## Rubocop
|
39
|
+
|
40
|
+
When updating Rubocop in `fortnox-api.gemspec`, you need to set the explicit
|
41
|
+
version that codeclimate runs in `.codeclimate.yml`
|
42
|
+
|
43
|
+
## Updating Ruby version
|
44
|
+
|
45
|
+
When updating the required Ruby version, you need to do the following:
|
46
|
+
|
47
|
+
- Bump Ruby version in `fortnox-api.gemspec`
|
48
|
+
- Update gems if needed
|
49
|
+
- Verify that the test suite is passing
|
50
|
+
- Bump `TargetRubyVersion` in `.rubocop.yml` and verify that the Rubocop version
|
51
|
+
we are using is supporting that Ruby version. Otherwise you need to upgrade
|
52
|
+
Rubocop as well, see [Rubocop instructions](#rubocop). The version here should
|
53
|
+
be the lowest version we support.
|
54
|
+
- Update `.tool-versions` to the **newest version we support**
|
55
|
+
- Update `.travis.yml` with the new Ruby versions
|
56
|
+
- Update required Ruby version in the readme
|
57
|
+
- Verify that all GitHub integrations works in the pull request you are creating
|
58
|
+
|
59
|
+
# Release
|
60
|
+
|
61
|
+
1. Update `CHANGELOG.md`
|
62
|
+
2. Bump version in `lib/fortnox/api/version.rb`
|
63
|
+
3. Release gem with `gem build fortnox-api.gemspec` and
|
64
|
+
`gem push fortnox-api-[VERSION].gem`
|
65
|
+
|
66
|
+
# Contributing
|
67
|
+
|
68
|
+
See the [CONTRIBUTE](CONTRIBUTE.md) readme.
|
69
|
+
|
70
|
+
# Dummy trigger
|
71
|
+
|
72
|
+
A dummy trigger: 1
|
data/Guardfile
CHANGED
@@ -1,7 +1,16 @@
|
|
1
1
|
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
3
|
+
group :rspec do
|
4
|
+
guard :rspec, cmd: 'bundle exec rspec --color', all_after_pass: true do
|
5
|
+
watch(%r{^spec/.+_spec\.rb$})
|
6
|
+
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/#{m[1]}_spec.rb" }
|
7
|
+
watch('spec/spec_helper.rb') { 'spec' }
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
group :rubocop do
|
12
|
+
guard :rubocop, cli: ['--display-cop-names'] do
|
13
|
+
watch(/.+\.rb$/)
|
14
|
+
watch(%r{(?:.+/)?\.rubocop(?:_todo)?\.yml$}) { |m| File.dirname(m[0]) }
|
15
|
+
end
|
7
16
|
end
|