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.
Files changed (212) hide show
  1. checksums.yaml +4 -4
  2. data/.codeclimate.yml +3 -2
  3. data/.env.test +3 -0
  4. data/.rubocop.yml +32 -23
  5. data/.travis.yml +3 -2
  6. data/Guardfile +2 -2
  7. data/LICENSE.txt +165 -22
  8. data/README.md +56 -37
  9. data/fortnox-api.gemspec +9 -6
  10. data/lib/fortnox/api.rb +18 -2
  11. data/lib/fortnox/api/base.rb +5 -3
  12. data/lib/fortnox/api/environment_validation.rb +51 -6
  13. data/lib/fortnox/api/mappers.rb +49 -0
  14. data/lib/fortnox/api/mappers/base.rb +47 -0
  15. data/lib/fortnox/api/mappers/base/from_json.rb +78 -0
  16. data/lib/fortnox/api/mappers/base/to_json.rb +65 -0
  17. data/lib/fortnox/api/mappers/customer.rb +27 -0
  18. data/lib/fortnox/api/mappers/default_delivery_types.rb +13 -0
  19. data/lib/fortnox/api/mappers/default_templates.rb +15 -0
  20. data/lib/fortnox/api/mappers/edi_information.rb +22 -0
  21. data/lib/fortnox/api/mappers/email_information.rb +18 -0
  22. data/lib/fortnox/api/mappers/invoice.rb +27 -0
  23. data/lib/fortnox/api/mappers/invoice_row.rb +20 -0
  24. data/lib/fortnox/api/mappers/order.rb +23 -0
  25. data/lib/fortnox/api/mappers/order_row.rb +16 -0
  26. data/lib/fortnox/api/models.rb +2 -0
  27. data/lib/fortnox/api/models/base.rb +56 -13
  28. data/lib/fortnox/api/models/customer.rb +112 -101
  29. data/lib/fortnox/api/models/document_base.rb +189 -0
  30. data/lib/fortnox/api/models/invoice.rb +29 -195
  31. data/lib/fortnox/api/models/label.rb +17 -0
  32. data/lib/fortnox/api/models/order.rb +27 -0
  33. data/lib/fortnox/api/repositories.rb +2 -0
  34. data/lib/fortnox/api/repositories/base.rb +4 -5
  35. data/lib/fortnox/api/repositories/base/loaders.rb +22 -14
  36. data/lib/fortnox/api/repositories/base/savers.rb +30 -16
  37. data/lib/fortnox/api/repositories/customer.rb +3 -25
  38. data/lib/fortnox/api/repositories/invoice.rb +3 -22
  39. data/lib/fortnox/api/repositories/order.rb +16 -0
  40. data/lib/fortnox/api/request_handling.rb +3 -3
  41. data/lib/fortnox/api/types.rb +44 -0
  42. data/lib/fortnox/api/types/default_delivery_types.rb +20 -0
  43. data/lib/fortnox/api/types/default_templates.rb +23 -0
  44. data/lib/fortnox/api/types/defaulted.rb +11 -0
  45. data/lib/fortnox/api/types/document_row.rb +65 -0
  46. data/lib/fortnox/api/types/edi_information.rb +29 -0
  47. data/lib/fortnox/api/types/email_information.rb +26 -0
  48. data/lib/fortnox/api/types/enums.rb +75 -0
  49. data/lib/fortnox/api/types/invoice_row.rb +19 -0
  50. data/lib/fortnox/api/types/model.rb +40 -0
  51. data/lib/fortnox/api/types/nullable.rb +21 -0
  52. data/lib/fortnox/api/types/order_row.rb +16 -0
  53. data/lib/fortnox/api/types/required.rb +13 -0
  54. data/lib/fortnox/api/types/sized.rb +25 -0
  55. data/lib/fortnox/api/version.rb +1 -1
  56. data/spec/fortnox/api/base_spec.rb +85 -14
  57. data/spec/fortnox/api/mappers/base/from_json_spec.rb +70 -0
  58. data/spec/fortnox/api/mappers/base/to_json_spec.rb +76 -0
  59. data/spec/fortnox/api/mappers/base_spec.rb +156 -0
  60. data/spec/fortnox/api/mappers/contexts/json_conversion.rb +56 -0
  61. data/spec/fortnox/api/mappers/customer_spec.rb +25 -0
  62. data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +12 -0
  63. data/spec/fortnox/api/mappers/edi_information_spec.rb +21 -0
  64. data/spec/fortnox/api/mappers/email_information_spec.rb +17 -0
  65. data/spec/fortnox/api/mappers/examples/mapper.rb +26 -0
  66. data/spec/fortnox/api/mappers/invoice_row_spec.rb +19 -0
  67. data/spec/fortnox/api/mappers/invoice_spec.rb +24 -0
  68. data/spec/fortnox/api/mappers/order_row_spec.rb +14 -0
  69. data/spec/fortnox/api/mappers/order_spec.rb +20 -0
  70. data/spec/fortnox/api/models/base_spec.rb +44 -22
  71. data/spec/fortnox/api/models/customer_spec.rb +9 -0
  72. data/spec/fortnox/api/models/examples/document_base.rb +13 -0
  73. data/spec/fortnox/api/models/examples/model.rb +13 -0
  74. data/spec/fortnox/api/models/invoice_spec.rb +7 -31
  75. data/spec/fortnox/api/models/order_spec.rb +13 -0
  76. data/spec/fortnox/api/repositories/customer_spec.rb +20 -76
  77. data/spec/fortnox/api/repositories/examples/all.rb +17 -0
  78. data/spec/fortnox/api/repositories/examples/find.rb +25 -0
  79. data/spec/fortnox/api/repositories/examples/only.rb +42 -0
  80. data/spec/fortnox/api/repositories/examples/save.rb +69 -0
  81. data/spec/fortnox/api/repositories/examples/save_with_nested_model.rb +32 -0
  82. data/spec/fortnox/api/repositories/examples/save_with_specially_named_attribute.rb +27 -0
  83. data/spec/fortnox/api/repositories/examples/search.rb +31 -0
  84. data/spec/fortnox/api/repositories/invoice_spec.rb +36 -5
  85. data/spec/fortnox/api/repositories/order_spec.rb +35 -0
  86. data/spec/fortnox/api/types/account_number_spec.rb +28 -0
  87. data/spec/fortnox/api/types/default_delivery_types_spec.rb +10 -0
  88. data/spec/fortnox/api/types/edi_information_spec.rb +13 -0
  89. data/spec/fortnox/api/types/email_information_spec.rb +13 -0
  90. data/spec/fortnox/api/types/email_spec.rb +29 -0
  91. data/spec/fortnox/api/types/enums_spec.rb +13 -0
  92. data/spec/fortnox/api/types/examples/document_row.rb +15 -0
  93. data/spec/fortnox/api/types/examples/enum.rb +48 -0
  94. data/spec/fortnox/api/types/examples/types.rb +9 -0
  95. data/spec/fortnox/api/types/house_work_types_spec.rb +60 -0
  96. data/spec/fortnox/api/types/invoice_row_spec.rb +9 -0
  97. data/spec/fortnox/api/types/model_spec.rb +56 -0
  98. data/spec/fortnox/api/types/nullable_spec.rb +57 -0
  99. data/spec/fortnox/api/types/order_row_spec.rb +13 -0
  100. data/spec/fortnox/api/types/required_spec.rb +42 -0
  101. data/spec/fortnox/api/types/sized_spec.rb +74 -0
  102. data/spec/fortnox/api_spec.rb +16 -15
  103. data/spec/spec_helper.rb +19 -9
  104. data/spec/support/helpers/dummy_class_helper.rb +19 -0
  105. data/spec/support/helpers/environment_helper.rb +7 -0
  106. data/spec/support/helpers/repository_helper.rb +8 -0
  107. data/spec/support/helpers/when_performing_helper.rb +5 -0
  108. data/spec/support/matchers.rb +1 -1
  109. data/spec/support/matchers/type.rb +17 -0
  110. data/spec/support/matchers/type/attribute_matcher.rb +39 -0
  111. data/spec/support/matchers/type/enum_matcher.rb +21 -0
  112. data/spec/support/matchers/type/have_account_number_matcher.rb +21 -0
  113. data/spec/support/matchers/type/have_country_code_matcher.rb +13 -0
  114. data/spec/support/matchers/type/have_currency_matcher.rb +7 -0
  115. data/spec/support/matchers/type/have_customer_type_matcher.rb +13 -0
  116. data/spec/support/matchers/type/have_default_delivery_type_matcher.rb +7 -0
  117. data/spec/support/matchers/type/have_discount_type_matcher.rb +7 -0
  118. data/spec/support/matchers/type/have_email_matcher.rb +22 -0
  119. data/spec/support/matchers/type/have_house_work_type_matcher.rb +7 -0
  120. data/spec/support/matchers/type/have_nullable_date_matcher.rb +58 -0
  121. data/spec/support/matchers/type/have_nullable_matcher.rb +52 -0
  122. data/spec/support/matchers/type/have_nullable_string_matcher.rb +49 -0
  123. data/spec/support/matchers/type/have_sized_float_matcher.rb +8 -0
  124. data/spec/support/matchers/type/have_sized_integer_matcher.rb +8 -0
  125. data/spec/support/matchers/type/have_sized_string_matcher.rb +35 -0
  126. data/spec/support/matchers/type/have_vat_type_matcher.rb +7 -0
  127. data/spec/support/matchers/type/numeric_matcher.rb +50 -0
  128. data/spec/support/matchers/type/require_attribute_matcher.rb +69 -0
  129. data/spec/support/matchers/type/type_matcher.rb +38 -0
  130. data/spec/vcr_cassettes/customers/all.yml +119 -9
  131. data/spec/vcr_cassettes/customers/find_id_1.yml +8 -9
  132. data/spec/vcr_cassettes/customers/find_new.yml +46 -0
  133. data/spec/vcr_cassettes/customers/save_new.yml +9 -11
  134. data/spec/vcr_cassettes/customers/save_old.yml +9 -12
  135. data/spec/vcr_cassettes/customers/save_with_specially_named_attribute.yml +45 -0
  136. data/spec/vcr_cassettes/customers/search_by_name.yml +66 -0
  137. data/spec/vcr_cassettes/customers/search_miss.yml +45 -0
  138. data/spec/vcr_cassettes/invoices/all.yml +104 -0
  139. data/spec/vcr_cassettes/invoices/filter_hit.yml +46 -0
  140. data/spec/vcr_cassettes/invoices/filter_invalid.yml +42 -0
  141. data/spec/vcr_cassettes/invoices/find_id_1.yml +47 -0
  142. data/spec/vcr_cassettes/invoices/find_new.yml +49 -0
  143. data/spec/vcr_cassettes/invoices/save_new.yml +48 -0
  144. data/spec/vcr_cassettes/invoices/save_old.yml +49 -0
  145. data/spec/vcr_cassettes/invoices/save_with_nested_model.yml +47 -0
  146. data/spec/vcr_cassettes/invoices/save_with_specially_named_attribute.yml +47 -0
  147. data/spec/vcr_cassettes/invoices/search_by_name.yml +48 -0
  148. data/spec/vcr_cassettes/invoices/search_miss.yml +45 -0
  149. data/spec/vcr_cassettes/orders/all.yml +144 -0
  150. data/spec/vcr_cassettes/orders/filter_hit.yml +48 -0
  151. data/spec/vcr_cassettes/orders/filter_invalid.yml +42 -0
  152. data/spec/vcr_cassettes/orders/find_id_1.yml +48 -0
  153. data/spec/vcr_cassettes/orders/find_new.yml +49 -0
  154. data/spec/vcr_cassettes/orders/house_work_type_babysitting.yml +47 -0
  155. data/spec/vcr_cassettes/orders/house_work_type_cleaning.yml +47 -0
  156. data/spec/vcr_cassettes/orders/house_work_type_construction.yml +47 -0
  157. data/spec/vcr_cassettes/orders/house_work_type_cooking.yml +43 -0
  158. data/spec/vcr_cassettes/orders/house_work_type_electricity.yml +47 -0
  159. data/spec/vcr_cassettes/orders/house_work_type_gardening.yml +47 -0
  160. data/spec/vcr_cassettes/orders/house_work_type_glassmetalwork.yml +47 -0
  161. data/spec/vcr_cassettes/orders/house_work_type_grounddrainagework.yml +47 -0
  162. data/spec/vcr_cassettes/orders/house_work_type_hvac.yml +47 -0
  163. data/spec/vcr_cassettes/orders/house_work_type_masonry.yml +47 -0
  164. data/spec/vcr_cassettes/orders/house_work_type_othercare.yml +47 -0
  165. data/spec/vcr_cassettes/orders/house_work_type_othercosts.yml +47 -0
  166. data/spec/vcr_cassettes/orders/house_work_type_paintingwallpapering.yml +47 -0
  167. data/spec/vcr_cassettes/orders/house_work_type_snowplowing.yml +47 -0
  168. data/spec/vcr_cassettes/orders/house_work_type_textileclothing.yml +47 -0
  169. data/spec/vcr_cassettes/orders/house_work_type_tutoring.yml +43 -0
  170. data/spec/vcr_cassettes/orders/save_new.yml +48 -0
  171. data/spec/vcr_cassettes/orders/save_old.yml +49 -0
  172. data/spec/vcr_cassettes/orders/save_with_nested_model.yml +47 -0
  173. data/spec/vcr_cassettes/orders/search_by_name.yml +47 -0
  174. data/spec/vcr_cassettes/orders/search_miss.yml +45 -0
  175. metadata +301 -71
  176. data/lib/fortnox/api/models/attributes/country_code.rb +0 -17
  177. data/lib/fortnox/api/models/attributes/currency.rb +0 -17
  178. data/lib/fortnox/api/models/edi_information.rb +0 -28
  179. data/lib/fortnox/api/models/email_information.rb +0 -25
  180. data/lib/fortnox/api/models/row.rb +0 -82
  181. data/lib/fortnox/api/repositories/base/json_convertion.rb +0 -68
  182. data/lib/fortnox/api/repositories/base/options.rb +0 -33
  183. data/lib/fortnox/api/validators.rb +0 -1
  184. data/lib/fortnox/api/validators/attributes/country_code.rb +0 -42
  185. data/lib/fortnox/api/validators/attributes/currency.rb +0 -38
  186. data/lib/fortnox/api/validators/base.rb +0 -70
  187. data/lib/fortnox/api/validators/constant.rb +0 -21
  188. data/lib/fortnox/api/validators/customer.rb +0 -29
  189. data/lib/fortnox/api/validators/edi_information.rb +0 -11
  190. data/lib/fortnox/api/validators/email_information.rb +0 -19
  191. data/lib/fortnox/api/validators/invoice.rb +0 -33
  192. data/lib/fortnox/api/validators/row.rb +0 -22
  193. data/spec/fortnox/api/models/attributes/country_code_spec.rb +0 -23
  194. data/spec/fortnox/api/models/attributes/currency_spec.rb +0 -23
  195. data/spec/fortnox/api/models/attributes/dummy_model_context.rb +0 -9
  196. data/spec/fortnox/api/models/row_spec.rb +0 -13
  197. data/spec/fortnox/api/repositories/context.rb +0 -10
  198. data/spec/fortnox/api/repositories/examples.rb +0 -16
  199. data/spec/fortnox/api/validators/attributes/country_code_spec.rb +0 -9
  200. data/spec/fortnox/api/validators/attributes/currency_spec.rb +0 -9
  201. data/spec/fortnox/api/validators/attributes/examples_for_validate.rb +0 -29
  202. data/spec/fortnox/api/validators/base_spec.rb +0 -61
  203. data/spec/fortnox/api/validators/constant_spec.rb +0 -12
  204. data/spec/fortnox/api/validators/context.rb +0 -102
  205. data/spec/fortnox/api/validators/customer_spec.rb +0 -31
  206. data/spec/fortnox/api/validators/edi_information_spec.rb +0 -18
  207. data/spec/fortnox/api/validators/email_information_spec.rb +0 -26
  208. data/spec/fortnox/api/validators/invoice_spec.rb +0 -36
  209. data/spec/fortnox/api/validators/row_spec.rb +0 -27
  210. data/spec/fortnox/api/validators/validator_examples.rb +0 -20
  211. data/spec/support/matchers/models.rb +0 -27
  212. 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,17 +0,0 @@
1
- require "virtus"
2
-
3
- module Fortnox::API::Model
4
- module Attribute
5
- module Currency
6
-
7
- include Virtus.module
8
-
9
- attribute :currency, String
10
-
11
- def currency=( currency )
12
- super currency.upcase[0...3]
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
@@ -1,21 +0,0 @@
1
- module Fortnox
2
- module API
3
- module Validator
4
- class Constant
5
-
6
- def validate( _ )
7
- true
8
- end
9
-
10
- def violations
11
- Set.new
12
- end
13
-
14
- def instance
15
- self
16
- end
17
-
18
- end
19
- end
20
- end
21
- end