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
@@ -1,39 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'forwardable'
|
4
|
-
|
5
|
-
# rubocop:disable Style/ClassVars
|
6
|
-
|
7
|
-
module Fortnox
|
8
|
-
module API
|
9
|
-
class CircularQueue
|
10
|
-
extend Forwardable
|
11
|
-
|
12
|
-
def initialize(*items)
|
13
|
-
@queue = [*items]
|
14
|
-
@@next_index = random_start_index
|
15
|
-
end
|
16
|
-
|
17
|
-
# support some general Array methods that fit Queues well
|
18
|
-
def_delegators :@queue, :new, :[], :size
|
19
|
-
|
20
|
-
def next
|
21
|
-
value = @queue[@@next_index]
|
22
|
-
if @@next_index == size - 1
|
23
|
-
@@next_index = 0
|
24
|
-
else
|
25
|
-
@@next_index += 1
|
26
|
-
end
|
27
|
-
value
|
28
|
-
end
|
29
|
-
|
30
|
-
private
|
31
|
-
|
32
|
-
def random_start_index
|
33
|
-
Random.rand(@queue.size)
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
# rubocop:enable Style/ClassVars
|
@@ -1,52 +0,0 @@
|
|
1
|
-
# frozen_string_literal: true
|
2
|
-
|
3
|
-
require 'spec_helper'
|
4
|
-
require 'fortnox/api/circular_queue'
|
5
|
-
|
6
|
-
describe Fortnox::API::CircularQueue do
|
7
|
-
describe 'start index' do
|
8
|
-
context 'when running several times' do
|
9
|
-
subject { Set.new(samples).size }
|
10
|
-
|
11
|
-
let(:test_array) { (0..99).to_a }
|
12
|
-
let(:samples) { Array.new(100) { described_class.new(*test_array).next } }
|
13
|
-
|
14
|
-
# NOTE: This test is not perfect. We are testing that a random generator
|
15
|
-
# with 100 items to choose from does not choose the same item 100 times in a row.
|
16
|
-
# Yes, the possibility is low, but I thought I should just mention it :)
|
17
|
-
it 'does not start with the same item each time' do
|
18
|
-
is_expected.to be > 1
|
19
|
-
end
|
20
|
-
end
|
21
|
-
end
|
22
|
-
|
23
|
-
describe '#next' do
|
24
|
-
context 'when several items in queue' do
|
25
|
-
let(:queue) { described_class.new(1, 2, 3) }
|
26
|
-
let(:first_round) { Array.new(3) { queue.next } }
|
27
|
-
let(:second_round) { Array.new(3) { queue.next } }
|
28
|
-
|
29
|
-
it 'circulates the items' do
|
30
|
-
first_round
|
31
|
-
expect(first_round[0]).to eq(queue.next)
|
32
|
-
end
|
33
|
-
|
34
|
-
it 'circulates the items in the same order each time' do
|
35
|
-
expect(first_round).to eq(second_round)
|
36
|
-
end
|
37
|
-
|
38
|
-
it 'circulates through given input' do
|
39
|
-
expect(first_round.sort).to eq([1, 2, 3])
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
context 'when only one item in queue' do
|
44
|
-
let(:queue) { described_class.new(1) }
|
45
|
-
|
46
|
-
it 'circulates the item' do
|
47
|
-
first_item = queue.next
|
48
|
-
expect(first_item).to eq(queue.next)
|
49
|
-
end
|
50
|
-
end
|
51
|
-
end
|
52
|
-
end
|
data/temp.txt
DELETED
@@ -1 +0,0 @@
|
|
1
|
-
temp2
|