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.
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