fortnox-api 0.1.0 → 0.2.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 +3 -2
- data/.env.test +3 -0
- data/.rubocop.yml +32 -23
- data/.travis.yml +3 -2
- data/Guardfile +2 -2
- data/LICENSE.txt +165 -22
- data/README.md +56 -37
- data/fortnox-api.gemspec +9 -6
- data/lib/fortnox/api.rb +18 -2
- data/lib/fortnox/api/base.rb +5 -3
- data/lib/fortnox/api/environment_validation.rb +51 -6
- data/lib/fortnox/api/mappers.rb +49 -0
- data/lib/fortnox/api/mappers/base.rb +47 -0
- data/lib/fortnox/api/mappers/base/from_json.rb +78 -0
- data/lib/fortnox/api/mappers/base/to_json.rb +65 -0
- data/lib/fortnox/api/mappers/customer.rb +27 -0
- data/lib/fortnox/api/mappers/default_delivery_types.rb +13 -0
- data/lib/fortnox/api/mappers/default_templates.rb +15 -0
- data/lib/fortnox/api/mappers/edi_information.rb +22 -0
- data/lib/fortnox/api/mappers/email_information.rb +18 -0
- data/lib/fortnox/api/mappers/invoice.rb +27 -0
- data/lib/fortnox/api/mappers/invoice_row.rb +20 -0
- data/lib/fortnox/api/mappers/order.rb +23 -0
- data/lib/fortnox/api/mappers/order_row.rb +16 -0
- data/lib/fortnox/api/models.rb +2 -0
- data/lib/fortnox/api/models/base.rb +56 -13
- data/lib/fortnox/api/models/customer.rb +112 -101
- data/lib/fortnox/api/models/document_base.rb +189 -0
- data/lib/fortnox/api/models/invoice.rb +29 -195
- data/lib/fortnox/api/models/label.rb +17 -0
- data/lib/fortnox/api/models/order.rb +27 -0
- data/lib/fortnox/api/repositories.rb +2 -0
- data/lib/fortnox/api/repositories/base.rb +4 -5
- data/lib/fortnox/api/repositories/base/loaders.rb +22 -14
- data/lib/fortnox/api/repositories/base/savers.rb +30 -16
- data/lib/fortnox/api/repositories/customer.rb +3 -25
- data/lib/fortnox/api/repositories/invoice.rb +3 -22
- data/lib/fortnox/api/repositories/order.rb +16 -0
- data/lib/fortnox/api/request_handling.rb +3 -3
- data/lib/fortnox/api/types.rb +44 -0
- data/lib/fortnox/api/types/default_delivery_types.rb +20 -0
- data/lib/fortnox/api/types/default_templates.rb +23 -0
- data/lib/fortnox/api/types/defaulted.rb +11 -0
- data/lib/fortnox/api/types/document_row.rb +65 -0
- data/lib/fortnox/api/types/edi_information.rb +29 -0
- data/lib/fortnox/api/types/email_information.rb +26 -0
- data/lib/fortnox/api/types/enums.rb +75 -0
- data/lib/fortnox/api/types/invoice_row.rb +19 -0
- data/lib/fortnox/api/types/model.rb +40 -0
- data/lib/fortnox/api/types/nullable.rb +21 -0
- data/lib/fortnox/api/types/order_row.rb +16 -0
- data/lib/fortnox/api/types/required.rb +13 -0
- data/lib/fortnox/api/types/sized.rb +25 -0
- data/lib/fortnox/api/version.rb +1 -1
- data/spec/fortnox/api/base_spec.rb +85 -14
- data/spec/fortnox/api/mappers/base/from_json_spec.rb +70 -0
- data/spec/fortnox/api/mappers/base/to_json_spec.rb +76 -0
- data/spec/fortnox/api/mappers/base_spec.rb +156 -0
- data/spec/fortnox/api/mappers/contexts/json_conversion.rb +56 -0
- data/spec/fortnox/api/mappers/customer_spec.rb +25 -0
- data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +12 -0
- data/spec/fortnox/api/mappers/edi_information_spec.rb +21 -0
- data/spec/fortnox/api/mappers/email_information_spec.rb +17 -0
- data/spec/fortnox/api/mappers/examples/mapper.rb +26 -0
- data/spec/fortnox/api/mappers/invoice_row_spec.rb +19 -0
- data/spec/fortnox/api/mappers/invoice_spec.rb +24 -0
- data/spec/fortnox/api/mappers/order_row_spec.rb +14 -0
- data/spec/fortnox/api/mappers/order_spec.rb +20 -0
- data/spec/fortnox/api/models/base_spec.rb +44 -22
- data/spec/fortnox/api/models/customer_spec.rb +9 -0
- data/spec/fortnox/api/models/examples/document_base.rb +13 -0
- data/spec/fortnox/api/models/examples/model.rb +13 -0
- data/spec/fortnox/api/models/invoice_spec.rb +7 -31
- data/spec/fortnox/api/models/order_spec.rb +13 -0
- data/spec/fortnox/api/repositories/customer_spec.rb +20 -76
- data/spec/fortnox/api/repositories/examples/all.rb +17 -0
- data/spec/fortnox/api/repositories/examples/find.rb +25 -0
- data/spec/fortnox/api/repositories/examples/only.rb +42 -0
- data/spec/fortnox/api/repositories/examples/save.rb +69 -0
- data/spec/fortnox/api/repositories/examples/save_with_nested_model.rb +32 -0
- data/spec/fortnox/api/repositories/examples/save_with_specially_named_attribute.rb +27 -0
- data/spec/fortnox/api/repositories/examples/search.rb +31 -0
- data/spec/fortnox/api/repositories/invoice_spec.rb +36 -5
- data/spec/fortnox/api/repositories/order_spec.rb +35 -0
- data/spec/fortnox/api/types/account_number_spec.rb +28 -0
- data/spec/fortnox/api/types/default_delivery_types_spec.rb +10 -0
- data/spec/fortnox/api/types/edi_information_spec.rb +13 -0
- data/spec/fortnox/api/types/email_information_spec.rb +13 -0
- data/spec/fortnox/api/types/email_spec.rb +29 -0
- data/spec/fortnox/api/types/enums_spec.rb +13 -0
- data/spec/fortnox/api/types/examples/document_row.rb +15 -0
- data/spec/fortnox/api/types/examples/enum.rb +48 -0
- data/spec/fortnox/api/types/examples/types.rb +9 -0
- data/spec/fortnox/api/types/house_work_types_spec.rb +60 -0
- data/spec/fortnox/api/types/invoice_row_spec.rb +9 -0
- data/spec/fortnox/api/types/model_spec.rb +56 -0
- data/spec/fortnox/api/types/nullable_spec.rb +57 -0
- data/spec/fortnox/api/types/order_row_spec.rb +13 -0
- data/spec/fortnox/api/types/required_spec.rb +42 -0
- data/spec/fortnox/api/types/sized_spec.rb +74 -0
- data/spec/fortnox/api_spec.rb +16 -15
- data/spec/spec_helper.rb +19 -9
- data/spec/support/helpers/dummy_class_helper.rb +19 -0
- data/spec/support/helpers/environment_helper.rb +7 -0
- data/spec/support/helpers/repository_helper.rb +8 -0
- data/spec/support/helpers/when_performing_helper.rb +5 -0
- data/spec/support/matchers.rb +1 -1
- data/spec/support/matchers/type.rb +17 -0
- data/spec/support/matchers/type/attribute_matcher.rb +39 -0
- data/spec/support/matchers/type/enum_matcher.rb +21 -0
- data/spec/support/matchers/type/have_account_number_matcher.rb +21 -0
- data/spec/support/matchers/type/have_country_code_matcher.rb +13 -0
- data/spec/support/matchers/type/have_currency_matcher.rb +7 -0
- data/spec/support/matchers/type/have_customer_type_matcher.rb +13 -0
- data/spec/support/matchers/type/have_default_delivery_type_matcher.rb +7 -0
- data/spec/support/matchers/type/have_discount_type_matcher.rb +7 -0
- data/spec/support/matchers/type/have_email_matcher.rb +22 -0
- data/spec/support/matchers/type/have_house_work_type_matcher.rb +7 -0
- data/spec/support/matchers/type/have_nullable_date_matcher.rb +58 -0
- data/spec/support/matchers/type/have_nullable_matcher.rb +52 -0
- data/spec/support/matchers/type/have_nullable_string_matcher.rb +49 -0
- data/spec/support/matchers/type/have_sized_float_matcher.rb +8 -0
- data/spec/support/matchers/type/have_sized_integer_matcher.rb +8 -0
- data/spec/support/matchers/type/have_sized_string_matcher.rb +35 -0
- data/spec/support/matchers/type/have_vat_type_matcher.rb +7 -0
- data/spec/support/matchers/type/numeric_matcher.rb +50 -0
- data/spec/support/matchers/type/require_attribute_matcher.rb +69 -0
- data/spec/support/matchers/type/type_matcher.rb +38 -0
- data/spec/vcr_cassettes/customers/all.yml +119 -9
- data/spec/vcr_cassettes/customers/find_id_1.yml +8 -9
- data/spec/vcr_cassettes/customers/find_new.yml +46 -0
- data/spec/vcr_cassettes/customers/save_new.yml +9 -11
- data/spec/vcr_cassettes/customers/save_old.yml +9 -12
- data/spec/vcr_cassettes/customers/save_with_specially_named_attribute.yml +45 -0
- data/spec/vcr_cassettes/customers/search_by_name.yml +66 -0
- data/spec/vcr_cassettes/customers/search_miss.yml +45 -0
- data/spec/vcr_cassettes/invoices/all.yml +104 -0
- data/spec/vcr_cassettes/invoices/filter_hit.yml +46 -0
- data/spec/vcr_cassettes/invoices/filter_invalid.yml +42 -0
- data/spec/vcr_cassettes/invoices/find_id_1.yml +47 -0
- data/spec/vcr_cassettes/invoices/find_new.yml +49 -0
- data/spec/vcr_cassettes/invoices/save_new.yml +48 -0
- data/spec/vcr_cassettes/invoices/save_old.yml +49 -0
- data/spec/vcr_cassettes/invoices/save_with_nested_model.yml +47 -0
- data/spec/vcr_cassettes/invoices/save_with_specially_named_attribute.yml +47 -0
- data/spec/vcr_cassettes/invoices/search_by_name.yml +48 -0
- data/spec/vcr_cassettes/invoices/search_miss.yml +45 -0
- data/spec/vcr_cassettes/orders/all.yml +144 -0
- data/spec/vcr_cassettes/orders/filter_hit.yml +48 -0
- data/spec/vcr_cassettes/orders/filter_invalid.yml +42 -0
- data/spec/vcr_cassettes/orders/find_id_1.yml +48 -0
- data/spec/vcr_cassettes/orders/find_new.yml +49 -0
- data/spec/vcr_cassettes/orders/house_work_type_babysitting.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_cleaning.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_construction.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_cooking.yml +43 -0
- data/spec/vcr_cassettes/orders/house_work_type_electricity.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_gardening.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_glassmetalwork.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_grounddrainagework.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_hvac.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_masonry.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_othercare.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_othercosts.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_paintingwallpapering.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_snowplowing.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_textileclothing.yml +47 -0
- data/spec/vcr_cassettes/orders/house_work_type_tutoring.yml +43 -0
- data/spec/vcr_cassettes/orders/save_new.yml +48 -0
- data/spec/vcr_cassettes/orders/save_old.yml +49 -0
- data/spec/vcr_cassettes/orders/save_with_nested_model.yml +47 -0
- data/spec/vcr_cassettes/orders/search_by_name.yml +47 -0
- data/spec/vcr_cassettes/orders/search_miss.yml +45 -0
- metadata +301 -71
- data/lib/fortnox/api/models/attributes/country_code.rb +0 -17
- data/lib/fortnox/api/models/attributes/currency.rb +0 -17
- data/lib/fortnox/api/models/edi_information.rb +0 -28
- data/lib/fortnox/api/models/email_information.rb +0 -25
- data/lib/fortnox/api/models/row.rb +0 -82
- data/lib/fortnox/api/repositories/base/json_convertion.rb +0 -68
- data/lib/fortnox/api/repositories/base/options.rb +0 -33
- data/lib/fortnox/api/validators.rb +0 -1
- data/lib/fortnox/api/validators/attributes/country_code.rb +0 -42
- data/lib/fortnox/api/validators/attributes/currency.rb +0 -38
- data/lib/fortnox/api/validators/base.rb +0 -70
- data/lib/fortnox/api/validators/constant.rb +0 -21
- data/lib/fortnox/api/validators/customer.rb +0 -29
- data/lib/fortnox/api/validators/edi_information.rb +0 -11
- data/lib/fortnox/api/validators/email_information.rb +0 -19
- data/lib/fortnox/api/validators/invoice.rb +0 -33
- data/lib/fortnox/api/validators/row.rb +0 -22
- data/spec/fortnox/api/models/attributes/country_code_spec.rb +0 -23
- data/spec/fortnox/api/models/attributes/currency_spec.rb +0 -23
- data/spec/fortnox/api/models/attributes/dummy_model_context.rb +0 -9
- data/spec/fortnox/api/models/row_spec.rb +0 -13
- data/spec/fortnox/api/repositories/context.rb +0 -10
- data/spec/fortnox/api/repositories/examples.rb +0 -16
- data/spec/fortnox/api/validators/attributes/country_code_spec.rb +0 -9
- data/spec/fortnox/api/validators/attributes/currency_spec.rb +0 -9
- data/spec/fortnox/api/validators/attributes/examples_for_validate.rb +0 -29
- data/spec/fortnox/api/validators/base_spec.rb +0 -61
- data/spec/fortnox/api/validators/constant_spec.rb +0 -12
- data/spec/fortnox/api/validators/context.rb +0 -102
- data/spec/fortnox/api/validators/customer_spec.rb +0 -31
- data/spec/fortnox/api/validators/edi_information_spec.rb +0 -18
- data/spec/fortnox/api/validators/email_information_spec.rb +0 -26
- data/spec/fortnox/api/validators/invoice_spec.rb +0 -36
- data/spec/fortnox/api/validators/row_spec.rb +0 -27
- data/spec/fortnox/api/validators/validator_examples.rb +0 -20
- data/spec/support/matchers/models.rb +0 -27
- data/spec/support/matchers/validators.rb +0 -36
@@ -1,17 +0,0 @@
|
|
1
|
-
require "virtus"
|
2
|
-
|
3
|
-
module Fortnox::API::Model
|
4
|
-
module Attribute
|
5
|
-
module CountryCode
|
6
|
-
|
7
|
-
include Virtus.module
|
8
|
-
|
9
|
-
attribute :country_code, String
|
10
|
-
|
11
|
-
def country_code=( country_code )
|
12
|
-
super country_code.upcase[0...2]
|
13
|
-
end
|
14
|
-
|
15
|
-
end
|
16
|
-
end
|
17
|
-
end
|
@@ -1,28 +0,0 @@
|
|
1
|
-
require "fortnox/api/models/base"
|
2
|
-
|
3
|
-
module Fortnox
|
4
|
-
module API
|
5
|
-
module Model
|
6
|
-
class EDIInformation < Fortnox::API::Model::Base
|
7
|
-
|
8
|
-
#EDIGlobalLocationNumber Invoice address GLN for EDI
|
9
|
-
attribute :edi_global_location_number, String
|
10
|
-
|
11
|
-
#EDIGlobalLocationNumberDelivery Delivery address GLN for EDI
|
12
|
-
attribute :edi_global_location_number_delivery, String
|
13
|
-
|
14
|
-
#EDIInvoiceExtra1 Extra EDI Information
|
15
|
-
attribute :edi_invoice_extra1, String
|
16
|
-
|
17
|
-
#EDIInvoiceExtra2 Extra EDI Information
|
18
|
-
attribute :edi_invoice_extra2, String
|
19
|
-
|
20
|
-
#EDIOurElectronicReference Our electronic reference for EDI
|
21
|
-
attribute :edi_our_electronic_reference, String
|
22
|
-
|
23
|
-
#EDIYourElectronicReference Your electronic reference for EDI
|
24
|
-
attribute :edi_your_electronic_reference, String
|
25
|
-
end
|
26
|
-
end
|
27
|
-
end
|
28
|
-
end
|
@@ -1,25 +0,0 @@
|
|
1
|
-
require "fortnox/api/models/base"
|
2
|
-
|
3
|
-
module Fortnox
|
4
|
-
module API
|
5
|
-
module Model
|
6
|
-
class EmailInformation < Fortnox::API::Model::Base
|
7
|
-
|
8
|
-
#EmailAddressTo Customer e-mail address. Must be a valid e-mail address. 1024 characters
|
9
|
-
attribute :email_address_to, String
|
10
|
-
|
11
|
-
#EmailAddressCC Customer e-mail address – Copy. Must be a valid e-mail address. 1024 characters
|
12
|
-
attribute :email_address_cc, String
|
13
|
-
|
14
|
-
#EmailAddressBCC Customer e-mail address – Blind carbon copy. Must be a valid e-mail address. 1024 characters
|
15
|
-
attribute :email_address_bcc, String
|
16
|
-
|
17
|
-
#EmailSubject Subject of the e-mail, 100 characters. The variable {no} = document number. The variable {name} = customer name.
|
18
|
-
attribute :email_subject, String
|
19
|
-
|
20
|
-
#EmailBody Body of the e-mail, 20000 characters. The variable {no} = document number. The variable {name} = customer name
|
21
|
-
attribute :email_body, String
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
end
|
@@ -1,82 +0,0 @@
|
|
1
|
-
require "fortnox/api/models/base"
|
2
|
-
|
3
|
-
module Fortnox
|
4
|
-
module API
|
5
|
-
module Model
|
6
|
-
class Row < Fortnox::API::Model::Base
|
7
|
-
|
8
|
-
DISCOUNT_TYPES = %w(AMOUNT PERCENT)
|
9
|
-
HOUSE_WORK_TYPES = %w(CONSTRUCTION ELECTRICITY GLASSMETALWORK GROUNDDRAINAGEWORK MASONRY PAINTINGWALLPAPERING HVAC CLEANING TEXTILECLOTHING COOKING SNOWPLOWING GARDENING BABYSITTING OTHERCARE TUTORING OTHERCOSTS)
|
10
|
-
|
11
|
-
#AccountNumber Account number. 4 digits
|
12
|
-
attribute :account_number, Integer
|
13
|
-
|
14
|
-
#ArticleNumber Article number. 50 characters
|
15
|
-
attribute :article_number, String
|
16
|
-
|
17
|
-
#ContributionPercent Contribution Percent.
|
18
|
-
attribute :contribution_percent, Float, writer: :private
|
19
|
-
|
20
|
-
#ContributionValue Contribution Value.
|
21
|
-
attribute :contribution_value, Float, writer: :private
|
22
|
-
|
23
|
-
#CostCenter Code of the cost center for the row.
|
24
|
-
attribute :cost_center, String
|
25
|
-
|
26
|
-
#DeliveredQuantity Delivered quantity. 14 digits
|
27
|
-
attribute :delivered_quantity, Float
|
28
|
-
|
29
|
-
#Description Description Row description. 50 characters
|
30
|
-
attribute :description, String
|
31
|
-
|
32
|
-
# Discount amount. 12 digits (for amount) / 5 digits (for percent)
|
33
|
-
# TODO: Verify that we can send in more than 5 digits through the actual
|
34
|
-
# API for DiscountType PERCENT.
|
35
|
-
attribute :discount, Float
|
36
|
-
|
37
|
-
#DiscountType The type of discount used for the row.
|
38
|
-
attribute :discount_type, String
|
39
|
-
|
40
|
-
#HouseWork If the row is housework
|
41
|
-
attribute :house_work, Boolean
|
42
|
-
|
43
|
-
#HouseWorkHoursToReport Hours to be reported if the quantity of the row should not be used as hours. 5 digits
|
44
|
-
attribute :house_work_hours_to_report, Integer
|
45
|
-
|
46
|
-
#HouseWorkType The type of house work.
|
47
|
-
attribute :house_work_type, String
|
48
|
-
|
49
|
-
#Price Price per unit. 12 digits
|
50
|
-
attribute :price, Float
|
51
|
-
|
52
|
-
#PriceExcludingVAT Price per unit excluding VAT.
|
53
|
-
attribute :price_excluding_vat, Float, writer: :private
|
54
|
-
|
55
|
-
#Project Code of the project for the row.
|
56
|
-
attribute :project, String
|
57
|
-
|
58
|
-
#Total Total amount for the row.
|
59
|
-
attribute :total, Float, writer: :private
|
60
|
-
|
61
|
-
#TotalExcludingVAT Total amount for the row excluding VAT.
|
62
|
-
attribute :total_excluding_vat, Float, writer: :private
|
63
|
-
|
64
|
-
#Unit Code of the unit for the row.
|
65
|
-
attribute :unit, String
|
66
|
-
|
67
|
-
#VAT VAT percentage of the row.
|
68
|
-
attribute :vat, Integer
|
69
|
-
|
70
|
-
def discount_type=( raw_discount_type )
|
71
|
-
discount_type = raw_discount_type.upcase
|
72
|
-
super discount_type if DISCOUNT_TYPES.include? discount_type
|
73
|
-
end
|
74
|
-
|
75
|
-
def house_work_type=( raw_house_work_type )
|
76
|
-
house_work_type = raw_house_work_type.upcase
|
77
|
-
super house_work_type if HOUSE_WORK_TYPES.include? house_work_type
|
78
|
-
end
|
79
|
-
end
|
80
|
-
end
|
81
|
-
end
|
82
|
-
end
|
@@ -1,68 +0,0 @@
|
|
1
|
-
module Fortnox
|
2
|
-
module API
|
3
|
-
module Repository
|
4
|
-
module JSONConvertion
|
5
|
-
|
6
|
-
private
|
7
|
-
|
8
|
-
def hash_to_entity( entity_json_hash )
|
9
|
-
remove_nil_values(entity_json_hash)
|
10
|
-
entity_hash = convert_hash_keys_from_json_format( entity_json_hash )
|
11
|
-
instansiate( entity_hash )
|
12
|
-
end
|
13
|
-
|
14
|
-
def entity_to_hash( entity )
|
15
|
-
entity_hash = entity.to_hash
|
16
|
-
clean_entity_hash = sanitise( entity_hash )
|
17
|
-
entity_json_hash = convert_hash_keys_to_json_format( clean_entity_hash )
|
18
|
-
{ @options.json_entity_wrapper => entity_json_hash }
|
19
|
-
end
|
20
|
-
|
21
|
-
def convert_hash_keys_from_json_format( hash )
|
22
|
-
hash.each_with_object( {} ) do |(key, value), json_hash|
|
23
|
-
json_hash[ convert_key_from_json( key ) ] = value
|
24
|
-
end
|
25
|
-
end
|
26
|
-
|
27
|
-
def convert_key_from_json( key )
|
28
|
-
@options.json_to_attr_map.fetch( key ){ default_key_from_json_transform( key ) }
|
29
|
-
end
|
30
|
-
|
31
|
-
def default_key_from_json_transform( key )
|
32
|
-
key = key.to_s
|
33
|
-
return key.downcase if key.match(/\A[A-Z]+\z/)
|
34
|
-
key.gsub(/([A-Z]+)([A-Z][a-z])/, '\1_\2').
|
35
|
-
gsub(/([a-z])([A-Z])/, '\1_\2').
|
36
|
-
downcase.
|
37
|
-
to_sym
|
38
|
-
end
|
39
|
-
|
40
|
-
def convert_hash_keys_to_json_format( hash )
|
41
|
-
hash.each_with_object( {} ) do |(key, value), json_hash|
|
42
|
-
json_hash[ convert_key_to_json( key ) ] = value
|
43
|
-
end
|
44
|
-
end
|
45
|
-
|
46
|
-
def convert_key_to_json( key )
|
47
|
-
@options.attr_to_json_map.fetch( key ){ default_key_to_json_transform( key ) }
|
48
|
-
end
|
49
|
-
|
50
|
-
def default_key_to_json_transform( key )
|
51
|
-
key.to_s.split('_').map(&:capitalize).join('')
|
52
|
-
end
|
53
|
-
|
54
|
-
def sanitise( hash )
|
55
|
-
hash.select do |key, value|
|
56
|
-
next false if @options.keys_filtered_on_save.include?( key )
|
57
|
-
value != nil
|
58
|
-
end
|
59
|
-
end
|
60
|
-
|
61
|
-
def remove_nil_values( hash )
|
62
|
-
hash.delete_if{ |_, value| value.nil? }
|
63
|
-
end
|
64
|
-
|
65
|
-
end
|
66
|
-
end
|
67
|
-
end
|
68
|
-
end
|
@@ -1,33 +0,0 @@
|
|
1
|
-
module Fortnox
|
2
|
-
module API
|
3
|
-
module Repository
|
4
|
-
class Base
|
5
|
-
class Options
|
6
|
-
|
7
|
-
attr_accessor :uri, :json_collection_wrapper, :json_entity_wrapper,
|
8
|
-
:unique_id, :attr_to_json_map, :json_to_attr_map,
|
9
|
-
:keys_filtered_on_save
|
10
|
-
|
11
|
-
def initialize(
|
12
|
-
uri:,
|
13
|
-
json_collection_wrapper:,
|
14
|
-
json_entity_wrapper:,
|
15
|
-
unique_id:,
|
16
|
-
attribute_name_to_json_key_map: {},
|
17
|
-
keys_filtered_on_save: [ :url ]
|
18
|
-
)
|
19
|
-
|
20
|
-
@uri = uri
|
21
|
-
@json_collection_wrapper = json_collection_wrapper
|
22
|
-
@json_entity_wrapper = json_entity_wrapper
|
23
|
-
@unique_id = unique_id
|
24
|
-
@attr_to_json_map = attribute_name_to_json_key_map
|
25
|
-
@json_to_attr_map = @attr_to_json_map.invert
|
26
|
-
@keys_filtered_on_save = keys_filtered_on_save
|
27
|
-
end
|
28
|
-
|
29
|
-
end
|
30
|
-
end
|
31
|
-
end
|
32
|
-
end
|
33
|
-
end
|
@@ -1 +0,0 @@
|
|
1
|
-
require "fortnox/api/validators/customer"
|
@@ -1,42 +0,0 @@
|
|
1
|
-
require "fortnox/api/validators/base"
|
2
|
-
|
3
|
-
module Fortnox
|
4
|
-
module API
|
5
|
-
module Validator
|
6
|
-
module Attribute
|
7
|
-
module CountryCode
|
8
|
-
|
9
|
-
COUNTRY_CODES = [
|
10
|
-
'AF','AX','AL','DZ','AS','AD','AO','AI','AQ','AG','AR','AM','AW',
|
11
|
-
'AU','AT','AZ','BS','BH','BD','BB','BY','BE','BZ','BJ','BM','BT',
|
12
|
-
'BO','BQ','BA','BW','BV','BR','IO','BN','BG','BF','BI','CV','KH',
|
13
|
-
'CM','CA','KY','CF','TD','CL','CN','CX','CC','CO','KM','CG','CD',
|
14
|
-
'CK','CR','CI','HR','CU','CW','CY','CZ','DK','DJ','DM','DO','EC',
|
15
|
-
'EG','SV','GQ','ER','EE','ET','FK','FO','FJ','FI','FR','GF','PF',
|
16
|
-
'TF','GA','GM','GE','DE','GH','GI','GR','GL','GD','GP','GU','GT',
|
17
|
-
'GG','GN','GW','GY','HT','HM','VA','HN','HK','HU','IS','IN','ID',
|
18
|
-
'IR','IQ','IE','IM','IL','IT','JM','JP','JE','JO','KZ','KE','KI',
|
19
|
-
'KP','KR','KW','KG','LA','LV','LB','LS','LR','LY','LI','LT','LU',
|
20
|
-
'MO','MK','MG','MW','MY','MV','ML','MT','MH','MQ','MR','MU','YT',
|
21
|
-
'MX','FM','MD','MC','MN','ME','MS','MA','MZ','MM','NA','NR','NP',
|
22
|
-
'NL','NC','NZ','NI','NE','NG','NU','NF','MP','NO','OM','PK','PW',
|
23
|
-
'PS','PA','PG','PY','PE','PH','PN','PL','PT','PR','QA','RE','RO',
|
24
|
-
'RU','RW','BL','SH','KN','LC','MF','PM','VC','WS','SM','ST','SA',
|
25
|
-
'SN','RS','SC','SL','SG','SX','SK','SI','SB','SO','ZA','GS','SS',
|
26
|
-
'ES','LK','SD','SR','SJ','SZ','SE','CH','SY','TW','TJ','TZ','TH',
|
27
|
-
'TL','TG','TK','TO','TT','TN','TR','TM','TC','TV','UG','UA','AE',
|
28
|
-
'GB','US','UM','UY','UZ','VU','VE','VN','VG','VI','WF','EH','YE',
|
29
|
-
'ZM','ZW'
|
30
|
-
]
|
31
|
-
|
32
|
-
def self.included( other )
|
33
|
-
other.using_validations do
|
34
|
-
validates_inclusion_of :country_code, within: COUNTRY_CODES, if: :country_code?
|
35
|
-
end
|
36
|
-
end
|
37
|
-
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
@@ -1,38 +0,0 @@
|
|
1
|
-
require "fortnox/api/validators/base"
|
2
|
-
|
3
|
-
module Fortnox
|
4
|
-
module API
|
5
|
-
module Validator
|
6
|
-
module Attribute
|
7
|
-
module Currency
|
8
|
-
|
9
|
-
CURRENCIES = [
|
10
|
-
'AED','AFN','ALL','AMD','ANG','AOA','ARS','AUD','AWG','AZN','BAM',
|
11
|
-
'BBD','BDT','BGN','BHD','BIF','BMD','BND','BOB','BOV','BRL','BSD',
|
12
|
-
'BTN','BWP','BYR','BZD','CAD','CDF','CHE','CHF','CHW','CLF','CLP',
|
13
|
-
'CNY','COP','COU','CRC','CUP','CVE','CZK','DJF','DKK','DOP','DZD',
|
14
|
-
'EGP','ERN','ETB','EUR','FJD','FKP','GBP','GEL','GHS','GIP','GMD',
|
15
|
-
'GNF','GTQ','GYD','HKD','HNL','HRK','HTG','HUF','IDR','ILS','INR',
|
16
|
-
'IQD','IRR','ISK','JMD','JOD','JPY','KES','KGS','KHR','KUR','KMF',
|
17
|
-
'KPW','KRW','KWD','KYD','KZT','LAK','LBP','LKR','LRD','LSL','LYD',
|
18
|
-
'MAD','MDL','MGA','MKD','MMK','MNT','MOP','MRO','MUR','MVR','MWK',
|
19
|
-
'MXN','MXV','MYR','MZN','NAD','NGN','NIO','NOK','NPR','NZD','OMR',
|
20
|
-
'PAB','PEN','PGK','PHP','PKR','PLN','PYG','QAR','RON','RSD','RUB',
|
21
|
-
'RWF','SAR','SBD','SCR','SDG','SEK','SGD','SHP','SLL','SOS','SRD',
|
22
|
-
'SSP','STD','SYP','SZL','THB','TJS','TMM','TND','TOP','TRY','TTD',
|
23
|
-
'TWD','TZS','UAH','UGX','USD','USN','USS','UYU','UZS','VEF','VND',
|
24
|
-
'VUV','WST','XAF','XAG','XAU','XBA','XBB','XBC','XBD','XCD','XDR',
|
25
|
-
'XFU','XOF','XPD','XPF','XPT','XTS','XXX','YER','ZAR','ZMK','ZWD'
|
26
|
-
]
|
27
|
-
|
28
|
-
def self.included( other )
|
29
|
-
other.using_validations do
|
30
|
-
validates_inclusion_of :currency, within: CURRENCIES, if: :currency?
|
31
|
-
end
|
32
|
-
end
|
33
|
-
|
34
|
-
end
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
end
|
@@ -1,70 +0,0 @@
|
|
1
|
-
require "vanguard"
|
2
|
-
|
3
|
-
module Fortnox
|
4
|
-
module API
|
5
|
-
module Validator
|
6
|
-
|
7
|
-
module Mixin
|
8
|
-
class << self
|
9
|
-
def included( base )
|
10
|
-
base.extend ClassMethods
|
11
|
-
end
|
12
|
-
end
|
13
|
-
|
14
|
-
module ClassMethods
|
15
|
-
def using_validations &block
|
16
|
-
@validators ||= []
|
17
|
-
@validators << Vanguard::Validator.build( &block )
|
18
|
-
end
|
19
|
-
|
20
|
-
def validators
|
21
|
-
@validators || []
|
22
|
-
end
|
23
|
-
end
|
24
|
-
end
|
25
|
-
|
26
|
-
class Base
|
27
|
-
|
28
|
-
include Mixin
|
29
|
-
|
30
|
-
def validate( instance )
|
31
|
-
raise_error_if_no_validator
|
32
|
-
|
33
|
-
valid = true
|
34
|
-
|
35
|
-
validators.each do |validator|
|
36
|
-
validation_result = validator.call( instance )
|
37
|
-
violations.merge( validation_result.violations )
|
38
|
-
valid = valid && validation_result.valid?
|
39
|
-
end
|
40
|
-
|
41
|
-
return valid
|
42
|
-
end
|
43
|
-
|
44
|
-
def violations
|
45
|
-
raise_error_if_no_validator
|
46
|
-
|
47
|
-
@violations ||= Set.new
|
48
|
-
end
|
49
|
-
|
50
|
-
def instance
|
51
|
-
raise_error_if_no_validator
|
52
|
-
|
53
|
-
self
|
54
|
-
end
|
55
|
-
|
56
|
-
private
|
57
|
-
|
58
|
-
def validators
|
59
|
-
self.class.validators
|
60
|
-
end
|
61
|
-
|
62
|
-
def raise_error_if_no_validator
|
63
|
-
return if validators.length > 0
|
64
|
-
raise ArgumentError, "No validator given"
|
65
|
-
end
|
66
|
-
|
67
|
-
end
|
68
|
-
end
|
69
|
-
end
|
70
|
-
end
|