fortnox-api 0.8.2 → 0.9.1
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 +4 -4
- data/.env.template +7 -0
- data/.env.test +11 -3
- data/.gitignore +7 -1
- data/.rubocop.yml +17 -1
- data/.travis.yml +10 -9
- data/CHANGELOG.md +27 -6
- data/CONTRIBUTE.md +21 -9
- data/DEVELOPER_README.md +69 -0
- data/Guardfile +13 -4
- data/README.md +226 -64
- data/Rakefile +128 -0
- data/bin/get_tokens +79 -0
- data/bin/renew_tokens +28 -0
- data/fortnox-api.gemspec +10 -9
- data/lib/fortnox/api/mappers/base/from_json.rb +4 -3
- data/lib/fortnox/api/mappers/base/to_json.rb +2 -3
- data/lib/fortnox/api/models/article.rb +1 -1
- data/lib/fortnox/api/models/base.rb +12 -10
- data/lib/fortnox/api/models/customer.rb +55 -55
- data/lib/fortnox/api/models/label.rb +2 -2
- 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 +21 -35
- data/lib/fortnox/api/repositories.rb +1 -0
- data/lib/fortnox/api/request_handling.rb +30 -18
- data/lib/fortnox/api/types/document_row.rb +3 -3
- data/lib/fortnox/api/types/enums.rb +27 -11
- data/lib/fortnox/api/types/model.rb +1 -3
- data/lib/fortnox/api/types/sized.rb +2 -2
- data/lib/fortnox/api/types.rb +14 -1
- data/lib/fortnox/api/version.rb +1 -1
- data/lib/fortnox/api.rb +12 -32
- data/spec/fortnox/api/mappers/base/canonical_name_sym_spec.rb +4 -4
- 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/unit_spec.rb +3 -4
- data/spec/fortnox/api/models/base_spec.rb +27 -16
- data/spec/fortnox/api/models/unit_spec.rb +5 -3
- data/spec/fortnox/api/repositories/article_spec.rb +46 -9
- data/spec/fortnox/api/repositories/authentication_spec.rb +103 -0
- data/spec/fortnox/api/repositories/base_spec.rb +106 -319
- 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 +117 -15
- 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/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 +54 -61
- data/spec/fortnox/api/types/model_spec.rb +3 -7
- data/spec/fortnox/api/types/order_row_spec.rb +2 -2
- data/spec/fortnox/api/types/required_spec.rb +6 -11
- 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/have_nullable_date_matcher.rb +6 -4
- 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 +16 -43
- data/spec/vcr_cassettes/articles/find_by_hash_failure.yml +10 -12
- data/spec/vcr_cassettes/articles/find_failure.yml +10 -12
- data/spec/vcr_cassettes/articles/find_id_1.yml +13 -14
- data/spec/vcr_cassettes/articles/find_new.yml +14 -16
- data/spec/vcr_cassettes/articles/limits/quantity_in_stock_min_value.yml +63 -0
- data/spec/vcr_cassettes/articles/limits/quantity_in_stock_rounding_positive_value.yml +63 -0
- data/spec/vcr_cassettes/articles/multi_param_find_by_hash.yml +13 -15
- data/spec/vcr_cassettes/articles/save_new.yml +13 -15
- data/spec/vcr_cassettes/articles/save_old.yml +14 -16
- data/spec/vcr_cassettes/articles/save_with_specially_named_attribute.yml +13 -15
- data/spec/vcr_cassettes/articles/search_by_name.yml +16 -15
- data/spec/vcr_cassettes/articles/search_miss.yml +10 -12
- data/spec/vcr_cassettes/articles/search_with_special_char.yml +10 -12
- data/spec/vcr_cassettes/articles/single_param_find_by_hash.yml +13 -27
- 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 +20 -127
- data/spec/vcr_cassettes/customers/find_by_hash_failure.yml +10 -12
- data/spec/vcr_cassettes/customers/find_failure.yml +10 -12
- data/spec/vcr_cassettes/customers/find_id_1.yml +14 -15
- data/spec/vcr_cassettes/customers/find_new.yml +13 -15
- data/spec/vcr_cassettes/customers/find_with_sales_account.yml +63 -0
- data/spec/vcr_cassettes/customers/multi_param_find_by_hash.yml +13 -15
- data/spec/vcr_cassettes/customers/save_new.yml +12 -14
- data/spec/vcr_cassettes/customers/save_new_with_country_code_SE.yml +12 -14
- data/spec/vcr_cassettes/customers/save_new_with_sales_account.yml +63 -0
- data/spec/vcr_cassettes/customers/save_old.yml +13 -15
- data/spec/vcr_cassettes/customers/save_with_specially_named_attribute.yml +12 -14
- data/spec/vcr_cassettes/customers/search_by_name.yml +13 -45
- data/spec/vcr_cassettes/customers/search_miss.yml +10 -12
- data/spec/vcr_cassettes/customers/search_with_special_char.yml +10 -12
- data/spec/vcr_cassettes/customers/single_param_find_by_hash.yml +14 -16
- data/spec/vcr_cassettes/invoices/all.yml +47 -112
- data/spec/vcr_cassettes/invoices/filter_hit.yml +14 -18
- data/spec/vcr_cassettes/invoices/filter_invalid.yml +10 -12
- data/spec/vcr_cassettes/invoices/find_by_hash_failure.yml +10 -12
- data/spec/vcr_cassettes/invoices/find_failure.yml +10 -12
- data/spec/vcr_cassettes/invoices/find_id_1.yml +15 -16
- data/spec/vcr_cassettes/invoices/find_new.yml +16 -18
- data/spec/vcr_cassettes/invoices/multi_param_find_by_hash.yml +13 -15
- data/spec/vcr_cassettes/invoices/row_delivered_quantity_decimals.yml +65 -0
- data/spec/vcr_cassettes/invoices/row_delivered_quantity_decimals_round_up.yml +65 -0
- data/spec/vcr_cassettes/invoices/row_description_limit.yml +65 -0
- data/spec/vcr_cassettes/invoices/row_price_limit.yml +65 -0
- data/spec/vcr_cassettes/invoices/row_price_limit_round_up.yml +65 -0
- data/spec/vcr_cassettes/invoices/save_new.yml +14 -16
- data/spec/vcr_cassettes/invoices/save_new_with_comments.yml +14 -16
- data/spec/vcr_cassettes/invoices/save_new_with_country.yml +14 -15
- data/spec/vcr_cassettes/invoices/save_new_with_country_GB.yml +15 -16
- data/spec/vcr_cassettes/invoices/save_new_with_country_Norge.yml +14 -15
- data/spec/vcr_cassettes/invoices/save_new_with_country_Norway.yml +14 -15
- data/spec/vcr_cassettes/invoices/save_new_with_country_Sverige.yml +14 -15
- data/spec/vcr_cassettes/invoices/save_new_with_country_VA.yml +15 -16
- data/spec/vcr_cassettes/invoices/save_new_with_country_VI.yml +15 -16
- data/spec/vcr_cassettes/invoices/save_new_with_country_empty_string.yml +14 -15
- data/spec/vcr_cassettes/invoices/save_new_with_country_nil.yml +14 -15
- data/spec/vcr_cassettes/invoices/save_new_with_unsaved_parent.yml +65 -0
- data/spec/vcr_cassettes/invoices/save_old.yml +16 -18
- data/spec/vcr_cassettes/invoices/save_old_with_empty_comments.yml +16 -18
- data/spec/vcr_cassettes/invoices/save_old_with_empty_country.yml +16 -17
- data/spec/vcr_cassettes/invoices/save_old_with_nil_comments.yml +16 -18
- data/spec/vcr_cassettes/invoices/save_old_with_nil_country.yml +16 -17
- data/spec/vcr_cassettes/invoices/save_with_nested_model.yml +15 -16
- data/spec/vcr_cassettes/invoices/save_with_specially_named_attribute.yml +14 -15
- data/spec/vcr_cassettes/invoices/search_by_name.yml +13 -21
- data/spec/vcr_cassettes/invoices/search_miss.yml +10 -12
- data/spec/vcr_cassettes/invoices/search_with_special_char.yml +10 -12
- data/spec/vcr_cassettes/invoices/single_param_find_by_hash.yml +14 -16
- data/spec/vcr_cassettes/orders/all.yml +19 -113
- data/spec/vcr_cassettes/orders/filter_hit.yml +14 -20
- data/spec/vcr_cassettes/orders/filter_invalid.yml +10 -12
- data/spec/vcr_cassettes/orders/find_by_hash_failure.yml +10 -12
- data/spec/vcr_cassettes/orders/find_failure.yml +10 -12
- data/spec/vcr_cassettes/orders/find_id_1.yml +17 -17
- data/spec/vcr_cassettes/orders/find_new.yml +16 -18
- data/spec/vcr_cassettes/orders/housework_invalid_tax_reduction_type.yml +11 -13
- data/spec/vcr_cassettes/orders/housework_othercoses_invalid.yml +11 -13
- data/spec/vcr_cassettes/orders/housework_type_babysitting.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_cleaning.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_construction.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_cooking.yml +11 -13
- data/spec/vcr_cassettes/orders/housework_type_electricity.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_gardening.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_glassmetalwork.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_grounddrainagework.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_hvac.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_itservices.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_majorappliancerepair.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_masonry.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_movingservices.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_othercare.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_othercosts.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_paintingwallpapering.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_snowplowing.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_textileclothing.yml +15 -16
- data/spec/vcr_cassettes/orders/housework_type_tutoring.yml +11 -13
- data/spec/vcr_cassettes/orders/multi_param_find_by_hash.yml +13 -15
- data/spec/vcr_cassettes/orders/save_new.yml +16 -18
- data/spec/vcr_cassettes/orders/save_old.yml +16 -18
- data/spec/vcr_cassettes/orders/save_with_nested_model.yml +15 -16
- data/spec/vcr_cassettes/orders/search_by_name.yml +13 -17
- data/spec/vcr_cassettes/orders/search_miss.yml +10 -12
- data/spec/vcr_cassettes/orders/search_with_special_char.yml +10 -12
- data/spec/vcr_cassettes/orders/single_param_find_by_hash.yml +14 -16
- data/spec/vcr_cassettes/projects/all.yml +14 -37
- data/spec/vcr_cassettes/projects/find_by_hash_failure.yml +10 -12
- data/spec/vcr_cassettes/projects/find_failure.yml +10 -12
- data/spec/vcr_cassettes/projects/find_id_1.yml +13 -15
- data/spec/vcr_cassettes/projects/find_new.yml +14 -16
- data/spec/vcr_cassettes/projects/multi_param_find_by_hash.yml +15 -16
- data/spec/vcr_cassettes/projects/save_new.yml +13 -15
- data/spec/vcr_cassettes/projects/save_old.yml +14 -16
- data/spec/vcr_cassettes/projects/single_param_find_by_hash.yml +12 -14
- data/spec/vcr_cassettes/termsofpayments/all.yml +16 -23
- data/spec/vcr_cassettes/termsofpayments/find_failure.yml +10 -12
- data/spec/vcr_cassettes/termsofpayments/find_id_1.yml +13 -16
- data/spec/vcr_cassettes/termsofpayments/find_new.yml +12 -14
- data/spec/vcr_cassettes/termsofpayments/save_new.yml +12 -14
- data/spec/vcr_cassettes/termsofpayments/save_old.yml +12 -14
- data/spec/vcr_cassettes/units/all.yml +13 -24
- data/spec/vcr_cassettes/units/find_failure.yml +10 -12
- data/spec/vcr_cassettes/units/find_id_1.yml +13 -15
- data/spec/vcr_cassettes/units/find_new.yml +12 -14
- data/spec/vcr_cassettes/units/save_new.yml +12 -14
- data/spec/vcr_cassettes/units/save_old.yml +12 -14
- data/spec/vcr_cassettes/units/save_with_specially_named_attribute.yml +12 -14
- metadata +45 -230
- data/lib/fortnox/api/circular_queue.rb +0 -39
- data/spec/fortnox/api/circular_queue_spec.rb +0 -52
- data/spec/support/helpers/when_performing_helper.rb +0 -7
- 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: ea75f17f262d1586930c15e3114c1d65590a7f542ea7d75069c6d864c0db52ba
|
4
|
+
data.tar.gz: bcdc7c31ac33686637badff069fc6eedf9668e915a974420bccfef183c3e335b
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 56e587b9a912a34d08ceaed8207d9097638726423b62bc8cacd0b440d57203f079f8c527aa30bb78bd3f82cd359a11f6c153d344026109e0c9de92ff1f054e44
|
7
|
+
data.tar.gz: e02fe96b0107463dbeab810717dc08549a8d2292216455c59089f7477725df1e1ecf883af02d521c3ec69bee52fe22f4afaeddf2b473408e7f8e8f40fe039b7f
|
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
@@ -3,6 +3,7 @@ require: rubocop-rspec
|
|
3
3
|
AllCops:
|
4
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/.travis.yml
CHANGED
@@ -1,7 +1,8 @@
|
|
1
1
|
env:
|
2
2
|
global:
|
3
|
-
|
3
|
+
- CC_TEST_REPORTER_ID=43ea0acb059b164537ce31bf67e03e1cb552d63df1ad3e9bd95dc3d844697bb4
|
4
4
|
language: ruby
|
5
|
+
dist: focal
|
5
6
|
rvm:
|
6
7
|
- 2.7.7
|
7
8
|
- 3.0.5
|
@@ -13,18 +14,18 @@ notifications:
|
|
13
14
|
secure: UEYDtwLaQgAoMRY7ct1y0Uu5HbInMwrLo+TiYRc3rjDrzqDfDyInEr3bpckyPJ79lnzccrFezMdY4jWzRjmsvQzvYMu+DWJ1mAWOa/9Ws4YZ8nHd5KqXxVQ0EqPWuWwMOyOdyy3DK/MjUOobGSc0//Pv5DeaAAEBKLJzN+e1BQM=
|
14
15
|
email: false
|
15
16
|
before_install:
|
16
|
-
- gem update --system
|
17
|
-
- gem install bundler
|
17
|
+
- gem update --system
|
18
|
+
- gem install bundler
|
18
19
|
cache: bundler
|
19
20
|
before_script:
|
20
|
-
- curl -L https://codeclimate.com/downloads/test-reporter/test-reporter-latest-linux-amd64
|
21
|
-
|
22
|
-
- chmod +x ./cc-test-reporter
|
23
|
-
- "./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"
|
24
25
|
script:
|
25
|
-
- bundle exec rspec
|
26
|
+
- bundle exec rspec
|
26
27
|
after_script:
|
27
|
-
- "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
|
28
|
+
- "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
|
28
29
|
branches:
|
29
30
|
only:
|
30
31
|
- master
|
data/CHANGELOG.md
CHANGED
@@ -6,20 +6,37 @@ The format is based on [Keep a Changelog](http://keepachangelog.com/en/1.0.0/)
|
|
6
6
|
and this project adheres to
|
7
7
|
[Semantic Versioning](http://semver.org/spec/v2.0.0.html).
|
8
8
|
|
9
|
-
## [0.
|
9
|
+
## [0.9.1]
|
10
10
|
|
11
11
|
### Fixed
|
12
12
|
- Restored undocumented support for string keys in model attributes,
|
13
|
-
which was inadvertently removed in `v0.
|
13
|
+
which was inadvertently removed in `v0.9.0`.
|
14
|
+
- Set correct lower limit for `Article#quantity_in_stock`
|
14
15
|
|
15
|
-
## [0.
|
16
|
+
## [0.9.0]
|
17
|
+
|
18
|
+
### Added
|
19
|
+
|
20
|
+
- Script in `bin/get_tokens` to issue access and refresh tokens
|
21
|
+
- Script in `bin/renew_tokens` (convenience feature for developers)
|
22
|
+
- `Fortnox::API::Repository::Authentication.renew_token`, used for token renewal
|
23
|
+
|
24
|
+
### Changed
|
25
|
+
|
26
|
+
- **Breaking** The auth process is rewritten to support
|
27
|
+
[the new auth flow](https://developer.fortnox.se/general/authentication/) that
|
28
|
+
Fortnox has implemented. You also need to set the access token explicitly with
|
29
|
+
`Fortnox::API.access_token ' your token'`. See [README](README.md) for more
|
30
|
+
instructions.
|
16
31
|
|
17
32
|
### Fixed
|
18
33
|
|
19
|
-
- Missing runtime dependencies dry-configurable and dry-container is added.
|
34
|
+
- Missing runtime dependencies `dry-configurable` and `dry-container` is added.
|
20
35
|
Those were indirect dependencies before via other dry libs, but we use them
|
21
36
|
explicitly in the gem, so they should be included as real dependencies. Also,
|
22
37
|
newer versions of these gems did actually break the gem.
|
38
|
+
- Not trying to update resource if diff against parent is an empty object
|
39
|
+
(#238).
|
23
40
|
|
24
41
|
### Removed
|
25
42
|
|
@@ -27,6 +44,10 @@ and this project adheres to
|
|
27
44
|
- Token rotation is removed since Fortnox counts rate limit on tenant and client
|
28
45
|
id. Before, you could get around this by using multiple access tokens. That's
|
29
46
|
not possible anymore, so token rotation is simply removed.
|
47
|
+
- **Breaking** Removes `client_id` and `client_secret` from configuration. These
|
48
|
+
value are only used for token renewal, so they are now arguments to the
|
49
|
+
`Authentication` repository. This means there are no longer any required
|
50
|
+
configuration to set in `Fortnox::API.configuration`.
|
30
51
|
|
31
52
|
## [0.8.0]
|
32
53
|
|
@@ -80,8 +101,8 @@ and this project adheres to
|
|
80
101
|
|
81
102
|
- Model attribute `url` is no longer null
|
82
103
|
|
83
|
-
[0.
|
84
|
-
[0.
|
104
|
+
[0.9.1]: https://github.com/accodeing/fortnox-api/compare/v0.9.0...v0.9.1
|
105
|
+
[0.9.0]: https://github.com/accodeing/fortnox-api/compare/v0.8.0...v0.9.0
|
85
106
|
[0.8.0]: https://github.com/accodeing/fortnox-api/compare/v0.7.2...v0.8.0
|
86
107
|
[0.7.2]: https://github.com/accodeing/fortnox-api/compare/v0.7.1...v0.7.2
|
87
108
|
[0.7.1]: https://github.com/accodeing/fortnox-api/compare/v0.7.0...v0.7.1
|
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,69 @@
|
|
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
|
+
See our separate guide for releasing Ruby gems.
|
62
|
+
|
63
|
+
# Contributing
|
64
|
+
|
65
|
+
See the [CONTRIBUTE](CONTRIBUTE.md) readme.
|
66
|
+
|
67
|
+
# Dummy trigger
|
68
|
+
|
69
|
+
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
|