fortnox-api 0.9.2 → 1.0.0.rc2
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/CHANGELOG.md +120 -95
- data/{LICENSE.txt → LICENSE.md} +0 -0
- data/README.md +245 -248
- data/bin/fortnox-setup +211 -0
- data/bin/fortnox-update-env +38 -0
- data/fortnox.gemspec +29 -0
- data/lib/fortnox/auth/thread_local.rb +28 -0
- data/lib/fortnox/collection.rb +23 -0
- data/lib/fortnox/mappers/country_code.rb +34 -0
- data/lib/fortnox/mappers/date.rb +21 -0
- data/lib/fortnox/mappers/document_row.rb +12 -0
- data/lib/fortnox/mappers/edi_information.rb +15 -0
- data/lib/fortnox/mappers/email_information.rb +11 -0
- data/lib/fortnox/mappers/invoice_row.rb +14 -0
- data/lib/fortnox/mappers/label_references.rb +24 -0
- data/lib/fortnox/mappers/order_row.rb +9 -0
- data/lib/fortnox/mappers/struct.rb +71 -0
- data/lib/fortnox/mappers/struct_array.rb +31 -0
- data/lib/fortnox/resource.rb +131 -0
- data/lib/fortnox/resources/article.rb +160 -0
- data/lib/fortnox/resources/customer.rb +209 -0
- data/lib/fortnox/resources/document.rb +202 -0
- data/lib/fortnox/resources/invoice.rb +92 -0
- data/lib/fortnox/resources/label.rb +15 -0
- data/lib/fortnox/resources/order.rb +38 -0
- data/lib/fortnox/resources/project.rb +41 -0
- data/lib/fortnox/resources/terms_of_payment.rb +23 -0
- data/lib/fortnox/resources/unit.rb +26 -0
- data/lib/fortnox/struct.rb +24 -0
- data/lib/fortnox/structs/default_delivery_types.rb +16 -0
- data/lib/fortnox/structs/default_templates.rb +19 -0
- data/lib/fortnox/structs/document_row.rb +62 -0
- data/lib/fortnox/structs/edi_information.rb +25 -0
- data/lib/fortnox/structs/email_information.rb +22 -0
- data/lib/fortnox/structs/invoice_row.rb +13 -0
- data/lib/fortnox/structs/order_row.rb +10 -0
- data/lib/fortnox/types.rb +129 -0
- data/lib/fortnox/{api/version.rb → version.rb} +1 -3
- data/lib/fortnox.rb +111 -0
- metadata +55 -580
- data/.codeclimate.yml +0 -20
- data/.env.template +0 -7
- data/.env.test +0 -11
- data/.gitignore +0 -20
- data/.rspec +0 -2
- data/.rubocop.yml +0 -41
- data/.tool-versions +0 -1
- data/.travis.yml +0 -32
- data/CLAUDE.md +0 -79
- data/CONTRIBUTE.md +0 -38
- data/DEVELOPER_README.md +0 -69
- data/Gemfile +0 -6
- data/Guardfile +0 -16
- data/Rakefile +0 -140
- data/bin/console +0 -22
- data/bin/fortnox +0 -285
- data/bin/get_tokens +0 -79
- data/bin/renew_tokens +0 -28
- data/docs/gotchas.md +0 -146
- data/fortnox-api.gemspec +0 -50
- data/lib/fortnox/api/mappers/article.rb +0 -23
- data/lib/fortnox/api/mappers/base/canonical_name_sym.rb +0 -21
- data/lib/fortnox/api/mappers/base/from_json.rb +0 -91
- data/lib/fortnox/api/mappers/base/to_json.rb +0 -66
- data/lib/fortnox/api/mappers/base.rb +0 -30
- data/lib/fortnox/api/mappers/customer.rb +0 -27
- data/lib/fortnox/api/mappers/default_delivery_types.rb +0 -15
- data/lib/fortnox/api/mappers/default_templates.rb +0 -16
- data/lib/fortnox/api/mappers/edi_information.rb +0 -23
- data/lib/fortnox/api/mappers/email_information.rb +0 -19
- data/lib/fortnox/api/mappers/invoice.rb +0 -29
- data/lib/fortnox/api/mappers/invoice_row.rb +0 -25
- data/lib/fortnox/api/mappers/order.rb +0 -26
- data/lib/fortnox/api/mappers/order_row.rb +0 -23
- data/lib/fortnox/api/mappers/project.rb +0 -17
- data/lib/fortnox/api/mappers/terms_of_payment.rb +0 -17
- data/lib/fortnox/api/mappers/unit.rb +0 -17
- data/lib/fortnox/api/mappers/value/array.rb +0 -18
- data/lib/fortnox/api/mappers/value/country_string.rb +0 -24
- data/lib/fortnox/api/mappers/value/date.rb +0 -11
- data/lib/fortnox/api/mappers/value/hash.rb +0 -16
- data/lib/fortnox/api/mappers/value/identity.rb +0 -18
- data/lib/fortnox/api/mappers.rb +0 -21
- data/lib/fortnox/api/models/article.rb +0 -134
- data/lib/fortnox/api/models/base.rb +0 -128
- data/lib/fortnox/api/models/customer.rb +0 -210
- data/lib/fortnox/api/models/document.rb +0 -189
- data/lib/fortnox/api/models/invoice.rb +0 -87
- data/lib/fortnox/api/models/label.rb +0 -19
- data/lib/fortnox/api/models/order.rb +0 -27
- data/lib/fortnox/api/models/project.rb +0 -42
- data/lib/fortnox/api/models/terms_of_payment.rb +0 -28
- data/lib/fortnox/api/models/unit.rb +0 -24
- data/lib/fortnox/api/models.rb +0 -9
- data/lib/fortnox/api/repositories/article.rb +0 -17
- data/lib/fortnox/api/repositories/authentication.rb +0 -61
- data/lib/fortnox/api/repositories/base/loaders.rb +0 -64
- data/lib/fortnox/api/repositories/base/savers.rb +0 -57
- data/lib/fortnox/api/repositories/base.rb +0 -93
- data/lib/fortnox/api/repositories/customer.rb +0 -17
- data/lib/fortnox/api/repositories/invoice.rb +0 -17
- data/lib/fortnox/api/repositories/order.rb +0 -17
- data/lib/fortnox/api/repositories/project.rb +0 -17
- data/lib/fortnox/api/repositories/terms_of_payment.rb +0 -17
- data/lib/fortnox/api/repositories/unit.rb +0 -17
- data/lib/fortnox/api/repositories.rb +0 -10
- data/lib/fortnox/api/request_handling.rb +0 -46
- data/lib/fortnox/api/types/default_delivery_types.rb +0 -20
- data/lib/fortnox/api/types/default_templates.rb +0 -23
- data/lib/fortnox/api/types/defaulted.rb +0 -11
- data/lib/fortnox/api/types/document_row.rb +0 -64
- data/lib/fortnox/api/types/edi_information.rb +0 -29
- data/lib/fortnox/api/types/email_information.rb +0 -26
- data/lib/fortnox/api/types/enums.rb +0 -116
- data/lib/fortnox/api/types/invoice_row.rb +0 -19
- data/lib/fortnox/api/types/model.rb +0 -37
- data/lib/fortnox/api/types/nullable.rb +0 -25
- data/lib/fortnox/api/types/order_row.rb +0 -16
- data/lib/fortnox/api/types/required.rb +0 -13
- data/lib/fortnox/api/types/shim/country_string.rb +0 -10
- data/lib/fortnox/api/types/sized.rb +0 -33
- data/lib/fortnox/api/types.rb +0 -144
- data/lib/fortnox/api.rb +0 -62
- data/spec/fortnox/api/mappers/article_spec.rb +0 -17
- data/spec/fortnox/api/mappers/base/canonical_name_sym_spec.rb +0 -36
- data/spec/fortnox/api/mappers/base/from_json_spec.rb +0 -70
- data/spec/fortnox/api/mappers/base/to_json_spec.rb +0 -68
- data/spec/fortnox/api/mappers/base_spec.rb +0 -154
- data/spec/fortnox/api/mappers/contexts/json_conversion.rb +0 -62
- data/spec/fortnox/api/mappers/customer_spec.rb +0 -27
- data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +0 -14
- data/spec/fortnox/api/mappers/edi_information_spec.rb +0 -23
- data/spec/fortnox/api/mappers/email_information_spec.rb +0 -19
- data/spec/fortnox/api/mappers/examples/mapper.rb +0 -34
- data/spec/fortnox/api/mappers/invoice_row_spec.rb +0 -24
- data/spec/fortnox/api/mappers/invoice_spec.rb +0 -27
- data/spec/fortnox/api/mappers/order_row_spec.rb +0 -21
- data/spec/fortnox/api/mappers/order_spec.rb +0 -23
- data/spec/fortnox/api/mappers/project_spec.rb +0 -12
- data/spec/fortnox/api/mappers/terms_of_payment_spec.rb +0 -16
- data/spec/fortnox/api/mappers/unit_spec.rb +0 -56
- data/spec/fortnox/api/models/article_spec.rb +0 -9
- data/spec/fortnox/api/models/base_spec.rb +0 -117
- data/spec/fortnox/api/models/customer_spec.rb +0 -9
- data/spec/fortnox/api/models/examples/document_base.rb +0 -15
- data/spec/fortnox/api/models/examples/model.rb +0 -22
- data/spec/fortnox/api/models/invoice_spec.rb +0 -11
- data/spec/fortnox/api/models/order_spec.rb +0 -12
- data/spec/fortnox/api/models/project_spec.rb +0 -9
- data/spec/fortnox/api/models/terms_of_payment_spec.rb +0 -9
- data/spec/fortnox/api/models/unit_spec.rb +0 -33
- data/spec/fortnox/api/repositories/article_spec.rb +0 -80
- data/spec/fortnox/api/repositories/authentication_spec.rb +0 -103
- data/spec/fortnox/api/repositories/base_spec.rb +0 -168
- data/spec/fortnox/api/repositories/customer_spec.rb +0 -119
- data/spec/fortnox/api/repositories/examples/all.rb +0 -17
- data/spec/fortnox/api/repositories/examples/find.rb +0 -84
- data/spec/fortnox/api/repositories/examples/only.rb +0 -34
- data/spec/fortnox/api/repositories/examples/save.rb +0 -76
- data/spec/fortnox/api/repositories/examples/save_with_nested_model.rb +0 -28
- data/spec/fortnox/api/repositories/examples/save_with_specially_named_attribute.rb +0 -26
- data/spec/fortnox/api/repositories/examples/search.rb +0 -39
- data/spec/fortnox/api/repositories/invoice_spec.rb +0 -297
- data/spec/fortnox/api/repositories/order_spec.rb +0 -53
- data/spec/fortnox/api/repositories/project_spec.rb +0 -36
- data/spec/fortnox/api/repositories/terms_of_payment_spec.rb +0 -34
- data/spec/fortnox/api/repositories/unit_spec.rb +0 -39
- data/spec/fortnox/api/types/account_number_spec.rb +0 -35
- data/spec/fortnox/api/types/country_code_spec.rb +0 -42
- data/spec/fortnox/api/types/country_spec.rb +0 -67
- data/spec/fortnox/api/types/default_delivery_types_spec.rb +0 -12
- data/spec/fortnox/api/types/edi_information_spec.rb +0 -15
- data/spec/fortnox/api/types/email_information_spec.rb +0 -15
- data/spec/fortnox/api/types/email_spec.rb +0 -56
- data/spec/fortnox/api/types/enums_spec.rb +0 -17
- data/spec/fortnox/api/types/examples/document_row.rb +0 -25
- data/spec/fortnox/api/types/examples/enum.rb +0 -55
- data/spec/fortnox/api/types/examples/types.rb +0 -11
- data/spec/fortnox/api/types/housework_types_spec.rb +0 -149
- data/spec/fortnox/api/types/invoice_row_spec.rb +0 -11
- data/spec/fortnox/api/types/model_spec.rb +0 -69
- data/spec/fortnox/api/types/nullable_spec.rb +0 -79
- data/spec/fortnox/api/types/order_row_spec.rb +0 -15
- data/spec/fortnox/api/types/required_spec.rb +0 -36
- data/spec/fortnox/api/types/sales_account_spec.rb +0 -57
- data/spec/fortnox/api/types/sized_spec.rb +0 -76
- data/spec/fortnox/api_spec.rb +0 -66
- data/spec/spec_helper.rb +0 -35
- data/spec/support/helpers/configuration_helper.rb +0 -39
- data/spec/support/helpers/repository_helper.rb +0 -10
- data/spec/support/helpers.rb +0 -3
- data/spec/support/matchers/type/attribute_matcher.rb +0 -40
- data/spec/support/matchers/type/enum_matcher.rb +0 -23
- data/spec/support/matchers/type/have_account_number_matcher.rb +0 -23
- data/spec/support/matchers/type/have_currency_matcher.rb +0 -9
- data/spec/support/matchers/type/have_customer_type_matcher.rb +0 -15
- data/spec/support/matchers/type/have_default_delivery_type_matcher.rb +0 -9
- data/spec/support/matchers/type/have_discount_type_matcher.rb +0 -9
- data/spec/support/matchers/type/have_email_matcher.rb +0 -24
- data/spec/support/matchers/type/have_housework_type_matcher.rb +0 -9
- data/spec/support/matchers/type/have_nullable_date_matcher.rb +0 -60
- data/spec/support/matchers/type/have_nullable_matcher.rb +0 -54
- data/spec/support/matchers/type/have_nullable_string_matcher.rb +0 -47
- data/spec/support/matchers/type/have_sized_float_matcher.rb +0 -10
- data/spec/support/matchers/type/have_sized_integer_matcher.rb +0 -10
- data/spec/support/matchers/type/have_sized_string_matcher.rb +0 -36
- data/spec/support/matchers/type/have_vat_type_matcher.rb +0 -9
- data/spec/support/matchers/type/numeric_matcher.rb +0 -52
- data/spec/support/matchers/type/require_attribute_matcher.rb +0 -68
- data/spec/support/matchers/type/type_matcher.rb +0 -40
- data/spec/support/matchers/type.rb +0 -19
- data/spec/support/matchers.rb +0 -3
- data/spec/support/vcr_setup.rb +0 -25
- data/spec/vcr_cassettes/articles/all.yml +0 -67
- data/spec/vcr_cassettes/articles/find_by_hash_failure.yml +0 -62
- data/spec/vcr_cassettes/articles/find_failure.yml +0 -62
- data/spec/vcr_cassettes/articles/find_id_1.yml +0 -63
- data/spec/vcr_cassettes/articles/find_new.yml +0 -63
- data/spec/vcr_cassettes/articles/limits/quantity_in_stock_min_value.yml +0 -63
- data/spec/vcr_cassettes/articles/limits/quantity_in_stock_rounding_positive_value.yml +0 -63
- data/spec/vcr_cassettes/articles/multi_param_find_by_hash.yml +0 -62
- data/spec/vcr_cassettes/articles/save_new.yml +0 -63
- data/spec/vcr_cassettes/articles/save_old.yml +0 -63
- data/spec/vcr_cassettes/articles/save_with_specially_named_attribute.yml +0 -63
- data/spec/vcr_cassettes/articles/search_by_name.yml +0 -65
- data/spec/vcr_cassettes/articles/search_miss.yml +0 -62
- data/spec/vcr_cassettes/articles/search_with_special_char.yml +0 -62
- data/spec/vcr_cassettes/articles/single_param_find_by_hash.yml +0 -62
- data/spec/vcr_cassettes/authentication/expired_token.yml +0 -54
- data/spec/vcr_cassettes/authentication/invalid_authorization.yml +0 -57
- data/spec/vcr_cassettes/authentication/invalid_refresh_token.yml +0 -58
- data/spec/vcr_cassettes/authentication/valid_request.yml +0 -63
- data/spec/vcr_cassettes/customers/all.yml +0 -69
- data/spec/vcr_cassettes/customers/find_by_hash_failure.yml +0 -62
- data/spec/vcr_cassettes/customers/find_failure.yml +0 -62
- data/spec/vcr_cassettes/customers/find_id_1.yml +0 -64
- data/spec/vcr_cassettes/customers/find_new.yml +0 -63
- data/spec/vcr_cassettes/customers/find_with_sales_account.yml +0 -63
- data/spec/vcr_cassettes/customers/multi_param_find_by_hash.yml +0 -63
- data/spec/vcr_cassettes/customers/save_new.yml +0 -63
- data/spec/vcr_cassettes/customers/save_new_with_country_code_SE.yml +0 -64
- data/spec/vcr_cassettes/customers/save_new_with_idn_email.yml +0 -67
- data/spec/vcr_cassettes/customers/save_new_with_sales_account.yml +0 -63
- data/spec/vcr_cassettes/customers/save_old.yml +0 -63
- data/spec/vcr_cassettes/customers/save_with_specially_named_attribute.yml +0 -63
- data/spec/vcr_cassettes/customers/search_by_name.yml +0 -64
- data/spec/vcr_cassettes/customers/search_miss.yml +0 -62
- data/spec/vcr_cassettes/customers/search_with_special_char.yml +0 -62
- data/spec/vcr_cassettes/customers/single_param_find_by_hash.yml +0 -64
- data/spec/vcr_cassettes/invoices/all.yml +0 -96
- data/spec/vcr_cassettes/invoices/filter_hit.yml +0 -64
- data/spec/vcr_cassettes/invoices/filter_invalid.yml +0 -60
- data/spec/vcr_cassettes/invoices/find_by_hash_failure.yml +0 -62
- data/spec/vcr_cassettes/invoices/find_failure.yml +0 -62
- data/spec/vcr_cassettes/invoices/find_id_1.yml +0 -65
- data/spec/vcr_cassettes/invoices/find_new.yml +0 -65
- data/spec/vcr_cassettes/invoices/multi_param_find_by_hash.yml +0 -63
- data/spec/vcr_cassettes/invoices/row_delivered_quantity_decimals.yml +0 -65
- data/spec/vcr_cassettes/invoices/row_delivered_quantity_decimals_round_up.yml +0 -65
- data/spec/vcr_cassettes/invoices/row_description_limit.yml +0 -65
- data/spec/vcr_cassettes/invoices/row_price_limit.yml +0 -65
- data/spec/vcr_cassettes/invoices/row_price_limit_round_up.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_new.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_new_with_comments.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_new_with_country.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_new_with_country_GB.yml +0 -66
- data/spec/vcr_cassettes/invoices/save_new_with_country_Norge.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_new_with_country_Norway.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_new_with_country_Sverige.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_new_with_country_VA.yml +0 -66
- data/spec/vcr_cassettes/invoices/save_new_with_country_VI.yml +0 -66
- data/spec/vcr_cassettes/invoices/save_new_with_country_empty_string.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_new_with_country_nil.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_new_with_unsaved_parent.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_old.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_old_with_empty_comments.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_old_with_empty_country.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_old_with_nil_comments.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_old_with_nil_country.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_with_nested_model.yml +0 -65
- data/spec/vcr_cassettes/invoices/save_with_specially_named_attribute.yml +0 -65
- data/spec/vcr_cassettes/invoices/search_by_name.yml +0 -63
- data/spec/vcr_cassettes/invoices/search_miss.yml +0 -62
- data/spec/vcr_cassettes/invoices/search_with_special_char.yml +0 -62
- data/spec/vcr_cassettes/invoices/single_param_find_by_hash.yml +0 -64
- data/spec/vcr_cassettes/orders/all.yml +0 -69
- data/spec/vcr_cassettes/orders/filter_hit.yml +0 -64
- data/spec/vcr_cassettes/orders/filter_invalid.yml +0 -60
- data/spec/vcr_cassettes/orders/find_by_hash_failure.yml +0 -62
- data/spec/vcr_cassettes/orders/find_failure.yml +0 -62
- data/spec/vcr_cassettes/orders/find_id_1.yml +0 -67
- data/spec/vcr_cassettes/orders/find_new.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_invalid_tax_reduction_type.yml +0 -61
- data/spec/vcr_cassettes/orders/housework_othercoses_invalid.yml +0 -61
- data/spec/vcr_cassettes/orders/housework_type_babysitting.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_cleaning.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_construction.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_cooking.yml +0 -61
- data/spec/vcr_cassettes/orders/housework_type_electricity.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_gardening.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_glassmetalwork.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_grounddrainagework.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_hvac.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_itservices.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_majorappliancerepair.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_masonry.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_movingservices.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_othercare.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_othercosts.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_paintingwallpapering.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_snowplowing.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_textileclothing.yml +0 -65
- data/spec/vcr_cassettes/orders/housework_type_tutoring.yml +0 -61
- data/spec/vcr_cassettes/orders/multi_param_find_by_hash.yml +0 -63
- data/spec/vcr_cassettes/orders/save_new.yml +0 -65
- data/spec/vcr_cassettes/orders/save_old.yml +0 -65
- data/spec/vcr_cassettes/orders/save_with_nested_model.yml +0 -65
- data/spec/vcr_cassettes/orders/search_by_name.yml +0 -63
- data/spec/vcr_cassettes/orders/search_miss.yml +0 -62
- data/spec/vcr_cassettes/orders/search_with_special_char.yml +0 -62
- data/spec/vcr_cassettes/orders/single_param_find_by_hash.yml +0 -64
- data/spec/vcr_cassettes/projects/all.yml +0 -64
- data/spec/vcr_cassettes/projects/find_by_hash_failure.yml +0 -62
- data/spec/vcr_cassettes/projects/find_failure.yml +0 -62
- data/spec/vcr_cassettes/projects/find_id_1.yml +0 -63
- data/spec/vcr_cassettes/projects/find_new.yml +0 -63
- data/spec/vcr_cassettes/projects/multi_param_find_by_hash.yml +0 -64
- data/spec/vcr_cassettes/projects/save_new.yml +0 -63
- data/spec/vcr_cassettes/projects/save_old.yml +0 -63
- data/spec/vcr_cassettes/projects/single_param_find_by_hash.yml +0 -63
- data/spec/vcr_cassettes/termsofpayments/all.yml +0 -68
- data/spec/vcr_cassettes/termsofpayments/find_failure.yml +0 -62
- data/spec/vcr_cassettes/termsofpayments/find_id_1.yml +0 -62
- data/spec/vcr_cassettes/termsofpayments/find_new.yml +0 -63
- data/spec/vcr_cassettes/termsofpayments/save_new.yml +0 -63
- data/spec/vcr_cassettes/termsofpayments/save_old.yml +0 -63
- data/spec/vcr_cassettes/units/all.yml +0 -64
- data/spec/vcr_cassettes/units/find_failure.yml +0 -62
- data/spec/vcr_cassettes/units/find_id_1.yml +0 -63
- data/spec/vcr_cassettes/units/find_new.yml +0 -63
- data/spec/vcr_cassettes/units/save_new.yml +0 -63
- data/spec/vcr_cassettes/units/save_old.yml +0 -63
- data/spec/vcr_cassettes/units/save_with_specially_named_attribute.yml +0 -63
data/.codeclimate.yml
DELETED
|
@@ -1,20 +0,0 @@
|
|
|
1
|
-
---
|
|
2
|
-
engines:
|
|
3
|
-
duplication:
|
|
4
|
-
enabled: true
|
|
5
|
-
config:
|
|
6
|
-
languages:
|
|
7
|
-
- ruby
|
|
8
|
-
exclude_fingerprints:
|
|
9
|
-
- e90f5ceaaaf6e613e221ffc4dd84fa37
|
|
10
|
-
- 1fca042e9b232b8f28944f0c89d5f34c
|
|
11
|
-
fixme:
|
|
12
|
-
enabled: false
|
|
13
|
-
rubocop:
|
|
14
|
-
enabled: true
|
|
15
|
-
channel: rubocop-1-39-0
|
|
16
|
-
ratings:
|
|
17
|
-
paths:
|
|
18
|
-
- "**.rb"
|
|
19
|
-
exclude_paths:
|
|
20
|
-
- ".*"
|
data/.env.template
DELETED
data/.env.test
DELETED
|
@@ -1,11 +0,0 @@
|
|
|
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
DELETED
data/.rspec
DELETED
data/.rubocop.yml
DELETED
|
@@ -1,41 +0,0 @@
|
|
|
1
|
-
require: rubocop-rspec
|
|
2
|
-
|
|
3
|
-
AllCops:
|
|
4
|
-
TargetRubyVersion: 2.7
|
|
5
|
-
DisplayCopNames: true
|
|
6
|
-
NewCops: enable
|
|
7
|
-
|
|
8
|
-
RSpec/FilePath:
|
|
9
|
-
Enabled: false
|
|
10
|
-
|
|
11
|
-
RSpec/NestedGroups:
|
|
12
|
-
Max: 4
|
|
13
|
-
|
|
14
|
-
Style/Documentation:
|
|
15
|
-
Enabled: false
|
|
16
|
-
|
|
17
|
-
Layout/LineLength:
|
|
18
|
-
Max: 120
|
|
19
|
-
|
|
20
|
-
Metrics/BlockLength:
|
|
21
|
-
Exclude:
|
|
22
|
-
- 'spec/**/*'
|
|
23
|
-
|
|
24
|
-
Naming/PredicateName:
|
|
25
|
-
Exclude:
|
|
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
DELETED
|
@@ -1 +0,0 @@
|
|
|
1
|
-
ruby 3.2.0
|
data/.travis.yml
DELETED
|
@@ -1,32 +0,0 @@
|
|
|
1
|
-
env:
|
|
2
|
-
global:
|
|
3
|
-
- CC_TEST_REPORTER_ID=43ea0acb059b164537ce31bf67e03e1cb552d63df1ad3e9bd95dc3d844697bb4
|
|
4
|
-
language: ruby
|
|
5
|
-
dist: focal
|
|
6
|
-
rvm:
|
|
7
|
-
- 2.7.7
|
|
8
|
-
- 3.0.5
|
|
9
|
-
- 3.1.3
|
|
10
|
-
- 3.2.0
|
|
11
|
-
|
|
12
|
-
notifications:
|
|
13
|
-
slack:
|
|
14
|
-
secure: UEYDtwLaQgAoMRY7ct1y0Uu5HbInMwrLo+TiYRc3rjDrzqDfDyInEr3bpckyPJ79lnzccrFezMdY4jWzRjmsvQzvYMu+DWJ1mAWOa/9Ws4YZ8nHd5KqXxVQ0EqPWuWwMOyOdyy3DK/MjUOobGSc0//Pv5DeaAAEBKLJzN+e1BQM=
|
|
15
|
-
email: false
|
|
16
|
-
before_install:
|
|
17
|
-
- gem update --system
|
|
18
|
-
- gem install bundler
|
|
19
|
-
cache: bundler
|
|
20
|
-
before_script:
|
|
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"
|
|
25
|
-
script:
|
|
26
|
-
- bundle exec rspec
|
|
27
|
-
after_script:
|
|
28
|
-
- "./cc-test-reporter after-build --exit-code $TRAVIS_TEST_RESULT"
|
|
29
|
-
branches:
|
|
30
|
-
only:
|
|
31
|
-
- master
|
|
32
|
-
- development
|
data/CLAUDE.md
DELETED
|
@@ -1,79 +0,0 @@
|
|
|
1
|
-
# CLAUDE.md
|
|
2
|
-
|
|
3
|
-
This file provides guidance to Claude Code (claude.ai/code) when working with code in this repository.
|
|
4
|
-
|
|
5
|
-
## Project Overview
|
|
6
|
-
|
|
7
|
-
Ruby gem wrapping Fortnox AB's version 3 REST API. Uses the data mapper pattern (not ActiveRecord) with separate concerns for models, types, mappers, and repositories.
|
|
8
|
-
|
|
9
|
-
## Common Commands
|
|
10
|
-
|
|
11
|
-
```bash
|
|
12
|
-
# Run all tests
|
|
13
|
-
bundle exec rspec
|
|
14
|
-
|
|
15
|
-
# Run a single test file
|
|
16
|
-
bundle exec rspec spec/fortnox/api/repositories/customer_spec.rb
|
|
17
|
-
|
|
18
|
-
# Run tests matching a pattern
|
|
19
|
-
bundle exec rspec --example "Customer"
|
|
20
|
-
|
|
21
|
-
# Run linter
|
|
22
|
-
bundle exec rubocop
|
|
23
|
-
|
|
24
|
-
# Run linter with auto-fix
|
|
25
|
-
bundle exec rubocop -a
|
|
26
|
-
|
|
27
|
-
# List rake tasks
|
|
28
|
-
rake -T
|
|
29
|
-
|
|
30
|
-
# Remove all VCR cassettes (for re-recording)
|
|
31
|
-
rake throw_vcr_cassettes
|
|
32
|
-
|
|
33
|
-
# Seed test Fortnox instance with required data
|
|
34
|
-
rake seed_fortnox_test_instance
|
|
35
|
-
|
|
36
|
-
# Get new OAuth tokens (requires credentials in .env)
|
|
37
|
-
bin/get_tokens
|
|
38
|
-
```
|
|
39
|
-
|
|
40
|
-
## Architecture
|
|
41
|
-
|
|
42
|
-
### Data Mapper Pattern
|
|
43
|
-
|
|
44
|
-
Unlike Rails' ActiveRecord, this gem separates concerns:
|
|
45
|
-
|
|
46
|
-
- **Models** (`lib/fortnox/api/models/`): Immutable data objects. Use `model.update(attr: value)` to get a new instance with changed attributes.
|
|
47
|
-
- **Types** (`lib/fortnox/api/types/`): Enforce constraints on attribute values, lengths, and content.
|
|
48
|
-
- **Mappers** (`lib/fortnox/api/mappers/`): Convert between Ruby objects and Fortnox JSON. Used internally by repositories.
|
|
49
|
-
- **Repositories** (`lib/fortnox/api/repositories/`): Handle HTTP requests. Methods: `all`, `find(id)`, `find_by(attr: value)`, `save`.
|
|
50
|
-
|
|
51
|
-
### Key Classes
|
|
52
|
-
|
|
53
|
-
- `Fortnox::API` - Main module with configuration and thread-local access token
|
|
54
|
-
- `Fortnox::API::Repository::Authentication` - Token renewal via `renew_tokens`
|
|
55
|
-
- Available models: Article, Customer, Invoice, Label, Order, Project, TermsOfPayment, Unit
|
|
56
|
-
|
|
57
|
-
### Exception Hierarchy
|
|
58
|
-
|
|
59
|
-
- `Fortnox::API::AttributeError` - Invalid attribute value
|
|
60
|
-
- `Fortnox::API::MissingAttributeError` - Required attribute missing
|
|
61
|
-
- `Fortnox::API::RemoteServerError` - Server-side error from Fortnox
|
|
62
|
-
|
|
63
|
-
## Testing
|
|
64
|
-
|
|
65
|
-
- Uses VCR to record API responses as cassettes in `spec/vcr_cassettes/`
|
|
66
|
-
- When re-recording cassettes, do one repository at a time to avoid 429 rate limits
|
|
67
|
-
- Environment variables for testing go in `.env.test` (see `.env.template`)
|
|
68
|
-
- Set `DEBUG=true` for debug output during tests
|
|
69
|
-
- Set `REFRESH_TOKENS=true` to enable token refresh during testing
|
|
70
|
-
|
|
71
|
-
## Fortnox API Gotchas
|
|
72
|
-
|
|
73
|
-
See `docs/gotchas.md` for detailed API quirks including:
|
|
74
|
-
- `SalesAccount` default values may reference non-existent accounts
|
|
75
|
-
- Legacy `HouseWorkType` values that can't be used for new orders/invoices
|
|
76
|
-
- `VATIncluded` affects all price fields (no VAT-inclusive fields when false)
|
|
77
|
-
- `TermsOfPayments.code` is case-sensitive (`30DAYS` not `30days`)
|
|
78
|
-
- Row descriptions limited to 255 characters (undocumented)
|
|
79
|
-
- Only one active refresh token per Fortnox account per integration
|
data/CONTRIBUTE.md
DELETED
|
@@ -1,38 +0,0 @@
|
|
|
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`)
|
|
14
|
-
3. Create your feature branch (`git checkout -b my-new-feature`)
|
|
15
|
-
4. Commit your changes (`git commit -am 'Add some feature'`)
|
|
16
|
-
5. Push to the branch (`git push origin my-new-feature`)
|
|
17
|
-
6. Create new Pull Request against our `development` branch
|
|
18
|
-
|
|
19
|
-
# Adding upstream remote
|
|
20
|
-
|
|
21
|
-
If you want to keep contributing, it is a good idea to add the original repo as
|
|
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:
|
|
25
|
-
|
|
26
|
-
1. Fetch branches from upstream (`git fetch upstream`)
|
|
27
|
-
2. Checkout your master branch (`git checkout master`)
|
|
28
|
-
3. Update it (`git rebase upstream/master`)
|
|
29
|
-
4. And push it to your fork (`git push origin master`) (might need a `--force`
|
|
30
|
-
if branches have diverged)
|
|
31
|
-
|
|
32
|
-
If you want to update another branch:
|
|
33
|
-
|
|
34
|
-
```
|
|
35
|
-
git checkout branch-name
|
|
36
|
-
git rebase upstream/branch-name
|
|
37
|
-
git push origin branch-name
|
|
38
|
-
```
|
data/DEVELOPER_README.md
DELETED
|
@@ -1,69 +0,0 @@
|
|
|
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/Gemfile
DELETED
data/Guardfile
DELETED
|
@@ -1,16 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
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
|
|
16
|
-
end
|
data/Rakefile
DELETED
|
@@ -1,140 +0,0 @@
|
|
|
1
|
-
# frozen_string_literal: true
|
|
2
|
-
|
|
3
|
-
# rubocop:disable Metrics/MethodLength
|
|
4
|
-
|
|
5
|
-
require 'rspec/core/rake_task'
|
|
6
|
-
require 'dotenv'
|
|
7
|
-
|
|
8
|
-
require_relative 'lib/fortnox/api'
|
|
9
|
-
|
|
10
|
-
Dotenv.load('.env.test')
|
|
11
|
-
|
|
12
|
-
RSpec::Core::RakeTask.new(:spec)
|
|
13
|
-
|
|
14
|
-
task default: :spec
|
|
15
|
-
|
|
16
|
-
desc 'Remove all VCR cassettes so we can rerecord them'
|
|
17
|
-
task :throw_vcr_cassettes do
|
|
18
|
-
FileUtils.rm_rf(Dir.glob('spec/vcr_cassettes/**'))
|
|
19
|
-
end
|
|
20
|
-
|
|
21
|
-
desc 'Seed Fortnox test instane with data required for the test suite'
|
|
22
|
-
task :seed_fortnox_test_instance do
|
|
23
|
-
Fortnox::API.configure do |config|
|
|
24
|
-
config.client_id = ENV.fetch('FORTNOX_API_CLIENT_ID')
|
|
25
|
-
config.client_secret = ENV.fetch('FORTNOX_API_CLIENT_SECRET')
|
|
26
|
-
config.storage = Class.new do
|
|
27
|
-
def access_token
|
|
28
|
-
ENV.fetch('FORTNOX_API_ACCESS_TOKEN')
|
|
29
|
-
end
|
|
30
|
-
|
|
31
|
-
def refresh_token; end
|
|
32
|
-
|
|
33
|
-
def access_token=(token); end
|
|
34
|
-
|
|
35
|
-
def refresh_token=(token); end
|
|
36
|
-
end.new
|
|
37
|
-
end
|
|
38
|
-
|
|
39
|
-
puts 'Seeting Fortnox test instance account with data required for testing...'
|
|
40
|
-
|
|
41
|
-
seed_customer_data
|
|
42
|
-
seed_article_data
|
|
43
|
-
seed_invoice_data
|
|
44
|
-
seed_order_data
|
|
45
|
-
|
|
46
|
-
puts 'Done'
|
|
47
|
-
end
|
|
48
|
-
|
|
49
|
-
def seed_customer_data
|
|
50
|
-
customer_repository = Fortnox::API::Repository::Customer.new
|
|
51
|
-
|
|
52
|
-
customer_repository.save(
|
|
53
|
-
Fortnox::API::Model::Customer.new(
|
|
54
|
-
name: 'A customer from New York',
|
|
55
|
-
city: 'New York'
|
|
56
|
-
)
|
|
57
|
-
)
|
|
58
|
-
customer_repository.save(
|
|
59
|
-
Fortnox::API::Model::Customer.new(
|
|
60
|
-
name: 'Another customer from New York',
|
|
61
|
-
city: 'New York',
|
|
62
|
-
zip_code: '10001'
|
|
63
|
-
)
|
|
64
|
-
)
|
|
65
|
-
end
|
|
66
|
-
|
|
67
|
-
def seed_article_data
|
|
68
|
-
article_repository = Fortnox::API::Repository::Article.new
|
|
69
|
-
|
|
70
|
-
article_repository.save(
|
|
71
|
-
Fortnox::API::Model::Article.new(
|
|
72
|
-
article_number: 101,
|
|
73
|
-
description: 'Hammer'
|
|
74
|
-
)
|
|
75
|
-
)
|
|
76
|
-
|
|
77
|
-
article_repository.save(
|
|
78
|
-
Fortnox::API::Model::Article.new(
|
|
79
|
-
article_number: 102,
|
|
80
|
-
description: 'Hammer'
|
|
81
|
-
)
|
|
82
|
-
)
|
|
83
|
-
|
|
84
|
-
article_repository.save(
|
|
85
|
-
Fortnox::API::Model::Article.new(
|
|
86
|
-
description: 'Test article'
|
|
87
|
-
)
|
|
88
|
-
)
|
|
89
|
-
|
|
90
|
-
article_repository.save(
|
|
91
|
-
Fortnox::API::Model::Article.new(
|
|
92
|
-
description: 'Test article'
|
|
93
|
-
)
|
|
94
|
-
)
|
|
95
|
-
end
|
|
96
|
-
|
|
97
|
-
# TODO: When we have support for actions, we should set the states for
|
|
98
|
-
# Invoices required by the Invoice Repository spec.
|
|
99
|
-
def seed_invoice_data
|
|
100
|
-
invoice_repository = Fortnox::API::Repository::Invoice.new
|
|
101
|
-
|
|
102
|
-
invoice_repository.save(
|
|
103
|
-
Fortnox::API::Model::Invoice.new(
|
|
104
|
-
customer_number: '1',
|
|
105
|
-
your_reference: 'Gandalf the Grey'
|
|
106
|
-
)
|
|
107
|
-
)
|
|
108
|
-
|
|
109
|
-
invoice_repository.save(
|
|
110
|
-
Fortnox::API::Model::Invoice.new(
|
|
111
|
-
customer_number: '1',
|
|
112
|
-
your_reference: 'Gandalf the Grey',
|
|
113
|
-
our_reference: 'Radagast the Brown'
|
|
114
|
-
)
|
|
115
|
-
)
|
|
116
|
-
end
|
|
117
|
-
|
|
118
|
-
# TODO: When we have support for actions, we should set the states for
|
|
119
|
-
# Order required by the Order Repository spec.
|
|
120
|
-
# Also, we should create Orders needed for search tests.
|
|
121
|
-
def seed_order_data
|
|
122
|
-
order_repository = Fortnox::API::Repository::Order.new
|
|
123
|
-
|
|
124
|
-
order_repository.save(
|
|
125
|
-
Fortnox::API::Model::Order.new(
|
|
126
|
-
customer_number: '1',
|
|
127
|
-
our_reference: 'Belladonna Took'
|
|
128
|
-
)
|
|
129
|
-
)
|
|
130
|
-
|
|
131
|
-
order_repository.save(
|
|
132
|
-
Fortnox::API::Model::Order.new(
|
|
133
|
-
customer_number: '1',
|
|
134
|
-
our_reference: 'Belladonna Took',
|
|
135
|
-
your_reference: 'Bodo Proudfoot'
|
|
136
|
-
)
|
|
137
|
-
)
|
|
138
|
-
end
|
|
139
|
-
|
|
140
|
-
# rubocop:enable Metrics/MethodLength
|
data/bin/console
DELETED
|
@@ -1,22 +0,0 @@
|
|
|
1
|
-
#!/usr/bin/env ruby
|
|
2
|
-
# frozen_string_literal: true
|
|
3
|
-
|
|
4
|
-
require 'bundler/setup'
|
|
5
|
-
|
|
6
|
-
require 'pry'
|
|
7
|
-
require 'fortnox/api'
|
|
8
|
-
|
|
9
|
-
##
|
|
10
|
-
# Starts a new copy of this script, replacing the current session.
|
|
11
|
-
#
|
|
12
|
-
# When run the current process, this script, will be replaced by the result from
|
|
13
|
-
# exec, a new copy of this script.
|
|
14
|
-
#
|
|
15
|
-
# Together with Pry's history this makes it look like you basically just
|
|
16
|
-
# reloaded the gem and all of it's dependancies with their latest versions.
|
|
17
|
-
|
|
18
|
-
def reload!
|
|
19
|
-
exec([File.absolute_path(__FILE__), __FILE__], *ARGV)
|
|
20
|
-
end
|
|
21
|
-
|
|
22
|
-
Pry.start
|