fortnox-api 0.1.0 → 0.2.0
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/.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
|