fortnox-api 0.5.2 → 0.6.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +3 -0
  3. data/.rubocop.yml +9 -1104
  4. data/.travis.yml +22 -2
  5. data/Gemfile +3 -1
  6. data/Guardfile +4 -2
  7. data/README.md +2 -2
  8. data/Rakefile +3 -1
  9. data/bin/console +17 -3
  10. data/fortnox-api.gemspec +32 -27
  11. data/lib/fortnox/api.rb +17 -16
  12. data/lib/fortnox/api/circular_queue.rb +13 -7
  13. data/lib/fortnox/api/mappers.rb +29 -25
  14. data/lib/fortnox/api/mappers/article.rb +7 -6
  15. data/lib/fortnox/api/mappers/base.rb +18 -16
  16. data/lib/fortnox/api/mappers/base/from_json.rb +37 -30
  17. data/lib/fortnox/api/mappers/base/to_json.rb +39 -37
  18. data/lib/fortnox/api/mappers/customer.rb +7 -7
  19. data/lib/fortnox/api/mappers/default_delivery_types.rb +4 -2
  20. data/lib/fortnox/api/mappers/default_templates.rb +5 -4
  21. data/lib/fortnox/api/mappers/edi_information.rb +5 -4
  22. data/lib/fortnox/api/mappers/email_information.rb +5 -4
  23. data/lib/fortnox/api/mappers/invoice.rb +10 -8
  24. data/lib/fortnox/api/mappers/invoice_row.rb +12 -7
  25. data/lib/fortnox/api/mappers/order.rb +10 -7
  26. data/lib/fortnox/api/mappers/order_row.rb +13 -6
  27. data/lib/fortnox/api/mappers/project.rb +6 -4
  28. data/lib/fortnox/api/mappers/terms_of_payments.rb +17 -0
  29. data/lib/fortnox/api/mappers/unit.rb +17 -0
  30. data/lib/fortnox/api/models.rb +9 -5
  31. data/lib/fortnox/api/models/article.rb +68 -67
  32. data/lib/fortnox/api/models/base.rb +52 -36
  33. data/lib/fortnox/api/models/customer.rb +95 -94
  34. data/lib/fortnox/api/models/document.rb +186 -0
  35. data/lib/fortnox/api/models/invoice.rb +44 -44
  36. data/lib/fortnox/api/models/label.rb +5 -3
  37. data/lib/fortnox/api/models/order.rb +8 -8
  38. data/lib/fortnox/api/models/project.rb +10 -8
  39. data/lib/fortnox/api/models/terms_of_payments.rb +28 -0
  40. data/lib/fortnox/api/models/unit.rb +24 -0
  41. data/lib/fortnox/api/repositories.rb +9 -5
  42. data/lib/fortnox/api/repositories/article.rb +6 -4
  43. data/lib/fortnox/api/repositories/base.rb +49 -46
  44. data/lib/fortnox/api/repositories/base/loaders.rb +32 -36
  45. data/lib/fortnox/api/repositories/base/savers.rb +23 -21
  46. data/lib/fortnox/api/repositories/customer.rb +6 -4
  47. data/lib/fortnox/api/repositories/invoice.rb +6 -4
  48. data/lib/fortnox/api/repositories/order.rb +6 -4
  49. data/lib/fortnox/api/repositories/project.rb +6 -4
  50. data/lib/fortnox/api/repositories/terms_of_payments.rb +17 -0
  51. data/lib/fortnox/api/repositories/unit.rb +17 -0
  52. data/lib/fortnox/api/request_handling.rb +12 -12
  53. data/lib/fortnox/api/types.rb +62 -11
  54. data/lib/fortnox/api/types/default_delivery_types.rb +5 -3
  55. data/lib/fortnox/api/types/default_templates.rb +3 -1
  56. data/lib/fortnox/api/types/defaulted.rb +2 -2
  57. data/lib/fortnox/api/types/document_row.rb +41 -42
  58. data/lib/fortnox/api/types/edi_information.rb +10 -8
  59. data/lib/fortnox/api/types/email_information.rb +10 -8
  60. data/lib/fortnox/api/types/enums.rb +60 -47
  61. data/lib/fortnox/api/types/invoice_row.rb +8 -8
  62. data/lib/fortnox/api/types/model.rb +14 -10
  63. data/lib/fortnox/api/types/nullable.rb +7 -7
  64. data/lib/fortnox/api/types/order_row.rb +5 -5
  65. data/lib/fortnox/api/types/required.rb +5 -5
  66. data/lib/fortnox/api/types/sized.rb +14 -6
  67. data/lib/fortnox/api/version.rb +3 -1
  68. data/spec/fortnox/api/mappers/article_spec.rb +3 -1
  69. data/spec/fortnox/api/mappers/base/from_json_spec.rb +15 -13
  70. data/spec/fortnox/api/mappers/base/to_json_spec.rb +4 -3
  71. data/spec/fortnox/api/mappers/base_spec.rb +40 -35
  72. data/spec/fortnox/api/mappers/contexts/json_conversion.rb +12 -11
  73. data/spec/fortnox/api/mappers/customer_spec.rb +3 -1
  74. data/spec/fortnox/api/mappers/default_delivery_types_spec.rb +3 -1
  75. data/spec/fortnox/api/mappers/edi_information_spec.rb +4 -2
  76. data/spec/fortnox/api/mappers/email_information_spec.rb +4 -2
  77. data/spec/fortnox/api/mappers/examples/mapper.rb +17 -9
  78. data/spec/fortnox/api/mappers/invoice_row_spec.rb +8 -3
  79. data/spec/fortnox/api/mappers/invoice_spec.rb +4 -1
  80. data/spec/fortnox/api/mappers/order_row_spec.rb +9 -2
  81. data/spec/fortnox/api/mappers/order_spec.rb +4 -1
  82. data/spec/fortnox/api/mappers/project_spec.rb +3 -1
  83. data/spec/fortnox/api/mappers/terms_of_payments_spec.rb +16 -0
  84. data/spec/fortnox/api/mappers/unit_spec.rb +57 -0
  85. data/spec/fortnox/api/models/article_spec.rb +2 -0
  86. data/spec/fortnox/api/models/base_spec.rb +46 -38
  87. data/spec/fortnox/api/models/customer_spec.rb +2 -0
  88. data/spec/fortnox/api/models/examples/document_base.rb +5 -3
  89. data/spec/fortnox/api/models/examples/model.rb +12 -9
  90. data/spec/fortnox/api/models/invoice_spec.rb +2 -0
  91. data/spec/fortnox/api/models/order_spec.rb +2 -0
  92. data/spec/fortnox/api/models/project_spec.rb +2 -0
  93. data/spec/fortnox/api/models/terms_of_payments_spec.rb +9 -0
  94. data/spec/fortnox/api/models/unit_spec.rb +31 -0
  95. data/spec/fortnox/api/repositories/article_spec.rb +7 -5
  96. data/spec/fortnox/api/repositories/base_spec.rb +121 -100
  97. data/spec/fortnox/api/repositories/customer_spec.rb +7 -5
  98. data/spec/fortnox/api/repositories/examples/all.rb +5 -4
  99. data/spec/fortnox/api/repositories/examples/find.rb +50 -41
  100. data/spec/fortnox/api/repositories/examples/only.rb +14 -13
  101. data/spec/fortnox/api/repositories/examples/save.rb +23 -29
  102. data/spec/fortnox/api/repositories/examples/save_with_nested_model.rb +11 -11
  103. data/spec/fortnox/api/repositories/examples/save_with_specially_named_attribute.rb +11 -10
  104. data/spec/fortnox/api/repositories/examples/search.rb +15 -15
  105. data/spec/fortnox/api/repositories/invoice_spec.rb +8 -6
  106. data/spec/fortnox/api/repositories/order_spec.rb +8 -6
  107. data/spec/fortnox/api/repositories/project_spec.rb +7 -5
  108. data/spec/fortnox/api/repositories/terms_of_payments_spec.rb +30 -0
  109. data/spec/fortnox/api/repositories/unit_spec.rb +34 -0
  110. data/spec/fortnox/api/types/account_number_spec.rb +12 -9
  111. data/spec/fortnox/api/types/default_delivery_types_spec.rb +6 -4
  112. data/spec/fortnox/api/types/edi_information_spec.rb +9 -7
  113. data/spec/fortnox/api/types/email_information_spec.rb +8 -6
  114. data/spec/fortnox/api/types/email_spec.rb +27 -14
  115. data/spec/fortnox/api/types/enums_spec.rb +3 -1
  116. data/spec/fortnox/api/types/examples/document_row.rb +10 -8
  117. data/spec/fortnox/api/types/examples/enum.rb +29 -22
  118. data/spec/fortnox/api/types/examples/types.rb +8 -4
  119. data/spec/fortnox/api/types/housework_types_spec.rb +68 -0
  120. data/spec/fortnox/api/types/invoice_row_spec.rb +3 -1
  121. data/spec/fortnox/api/types/model_spec.rb +12 -9
  122. data/spec/fortnox/api/types/nullable_spec.rb +8 -6
  123. data/spec/fortnox/api/types/order_row_spec.rb +4 -2
  124. data/spec/fortnox/api/types/required_spec.rb +4 -2
  125. data/spec/fortnox/api/types/sized_spec.rb +18 -16
  126. data/spec/fortnox/api_spec.rb +45 -43
  127. data/spec/spec_helper.rb +9 -6
  128. data/spec/support/helpers.rb +3 -1
  129. data/spec/support/helpers/configuration_helper.rb +2 -0
  130. data/spec/support/helpers/dummy_class_helper.rb +7 -8
  131. data/spec/support/helpers/repository_helper.rb +2 -0
  132. data/spec/support/helpers/when_performing_helper.rb +3 -1
  133. data/spec/support/matchers.rb +2 -0
  134. data/spec/support/matchers/type.rb +3 -1
  135. data/spec/support/matchers/type/attribute_matcher.rb +15 -14
  136. data/spec/support/matchers/type/enum_matcher.rb +9 -7
  137. data/spec/support/matchers/type/have_account_number_matcher.rb +11 -9
  138. data/spec/support/matchers/type/have_country_code_matcher.rb +6 -4
  139. data/spec/support/matchers/type/have_currency_matcher.rb +4 -2
  140. data/spec/support/matchers/type/have_customer_type_matcher.rb +6 -4
  141. data/spec/support/matchers/type/have_default_delivery_type_matcher.rb +4 -2
  142. data/spec/support/matchers/type/have_discount_type_matcher.rb +4 -2
  143. data/spec/support/matchers/type/have_email_matcher.rb +11 -9
  144. data/spec/support/matchers/type/have_housework_type_matcher.rb +9 -0
  145. data/spec/support/matchers/type/have_nullable_date_matcher.rb +29 -29
  146. data/spec/support/matchers/type/have_nullable_matcher.rb +23 -21
  147. data/spec/support/matchers/type/have_nullable_string_matcher.rb +30 -32
  148. data/spec/support/matchers/type/have_sized_float_matcher.rb +4 -2
  149. data/spec/support/matchers/type/have_sized_integer_matcher.rb +4 -2
  150. data/spec/support/matchers/type/have_sized_string_matcher.rb +16 -15
  151. data/spec/support/matchers/type/have_vat_type_matcher.rb +4 -2
  152. data/spec/support/matchers/type/numeric_matcher.rb +25 -23
  153. data/spec/support/matchers/type/require_attribute_matcher.rb +36 -37
  154. data/spec/support/matchers/type/type_matcher.rb +18 -16
  155. data/spec/support/vcr_setup.rb +2 -0
  156. data/spec/vcr_cassettes/orders/{house_work_type_babysitting.yml → housework_type_babysitting.yml} +9 -10
  157. data/spec/vcr_cassettes/orders/{house_work_type_cleaning.yml → housework_type_cleaning.yml} +9 -10
  158. data/spec/vcr_cassettes/orders/{house_work_type_construction.yml → housework_type_construction.yml} +9 -10
  159. data/spec/vcr_cassettes/orders/{house_work_type_cooking.yml → housework_type_cooking.yml} +7 -7
  160. data/spec/vcr_cassettes/orders/{house_work_type_electricity.yml → housework_type_electricity.yml} +9 -10
  161. data/spec/vcr_cassettes/orders/{house_work_type_gardening.yml → housework_type_gardening.yml} +9 -10
  162. data/spec/vcr_cassettes/orders/{house_work_type_glassmetalwork.yml → housework_type_glassmetalwork.yml} +9 -10
  163. data/spec/vcr_cassettes/orders/{house_work_type_grounddrainagework.yml → housework_type_grounddrainagework.yml} +9 -10
  164. data/spec/vcr_cassettes/orders/{house_work_type_hvac.yml → housework_type_hvac.yml} +9 -10
  165. data/spec/vcr_cassettes/orders/{house_work_type_masonry.yml → housework_type_masonry.yml} +9 -10
  166. data/spec/vcr_cassettes/orders/{house_work_type_othercare.yml → housework_type_othercare.yml} +9 -10
  167. data/spec/vcr_cassettes/orders/{house_work_type_othercosts.yml → housework_type_othercosts.yml} +9 -10
  168. data/spec/vcr_cassettes/orders/{house_work_type_paintingwallpapering.yml → housework_type_paintingwallpapering.yml} +9 -10
  169. data/spec/vcr_cassettes/orders/{house_work_type_snowplowing.yml → housework_type_snowplowing.yml} +9 -10
  170. data/spec/vcr_cassettes/orders/{house_work_type_textileclothing.yml → housework_type_textileclothing.yml} +9 -10
  171. data/spec/vcr_cassettes/orders/{house_work_type_tutoring.yml → housework_type_tutoring.yml} +7 -7
  172. data/spec/vcr_cassettes/termsofpayments/all.yml +51 -0
  173. data/spec/vcr_cassettes/termsofpayments/find_failure.yml +45 -0
  174. data/spec/vcr_cassettes/termsofpayments/find_id_1.yml +46 -0
  175. data/spec/vcr_cassettes/termsofpayments/find_new.yml +46 -0
  176. data/spec/vcr_cassettes/termsofpayments/save_new.yml +45 -0
  177. data/spec/vcr_cassettes/termsofpayments/save_old.yml +46 -0
  178. data/spec/vcr_cassettes/units/all.yml +48 -0
  179. data/spec/vcr_cassettes/units/find_failure.yml +45 -0
  180. data/spec/vcr_cassettes/units/find_id_1.yml +46 -0
  181. data/spec/vcr_cassettes/units/find_new.yml +48 -0
  182. data/spec/vcr_cassettes/units/save_new.yml +47 -0
  183. data/spec/vcr_cassettes/units/save_old.yml +48 -0
  184. data/spec/vcr_cassettes/units/save_with_specially_named_attribute.yml +47 -0
  185. metadata +127 -88
  186. data/docs/account.rb +0 -59
  187. data/docs/extraction_script.js +0 -23
  188. data/docs/generation_script.rb +0 -43
  189. data/docs/json/account.json +0 -77
  190. data/lib/fortnox/api/models/document_base.rb +0 -189
  191. data/spec/fortnox/api/types/house_work_types_spec.rb +0 -64
  192. data/spec/support/matchers/type/have_house_work_type_matcher.rb +0 -7
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Matchers
2
4
  module Type
3
- def have_nullable( attribute, valid_value, invalid_value, default_value )
4
- HaveNullableMatcher.new( attribute, valid_value, invalid_value, default_value )
5
+ def have_nullable(attribute, valid_value, invalid_value, default_value)
6
+ HaveNullableMatcher.new(attribute, valid_value, invalid_value, default_value)
5
7
  end
6
8
 
7
9
  class HaveNullableMatcher
8
- def initialize( attribute, valid_value, invalid_value, default_value )
10
+ def initialize(attribute, valid_value, invalid_value, default_value)
9
11
  @attribute = attribute
10
12
  @valid_value = valid_value
11
13
  @invalid_value = invalid_value
@@ -13,40 +15,40 @@ module Matchers
13
15
  @failure_description = ''
14
16
  end
15
17
 
16
- def matches?( klass )
18
+ def matches?(klass)
17
19
  @klass = klass
18
20
 
19
21
  accepts_nil? && accepts_valid_value? && defaults_invalid_value?
20
22
  end
21
23
 
22
24
  def description
23
- "have nullable attribute #{ @attribute.inspect }"
25
+ "have nullable attribute #{@attribute.inspect}"
24
26
  end
25
27
 
26
28
  def failure_message
27
- "Expected class to have nullable attribute #{ @attribute.inspect }" << @failure_description
29
+ "Expected class to have nullable attribute #{@attribute.inspect}" << @failure_description
28
30
  end
29
31
 
30
32
  private
31
33
 
32
- def accepts_nil?
33
- @klass.new(@attribute => nil)
34
- end
34
+ def accepts_nil?
35
+ @klass.new(@attribute => nil)
36
+ end
35
37
 
36
- def accepts_valid_value?
37
- model = @klass.new(@attribute => @valid_value)
38
- model.send(@attribute) == @valid_value
39
- end
38
+ def accepts_valid_value?
39
+ model = @klass.new(@attribute => @valid_value)
40
+ model.send(@attribute) == @valid_value
41
+ end
40
42
 
41
- def defaults_invalid_value?
42
- model = @klass.new(@attribute => @invalid_value)
43
- value = model.send(@attribute)
44
- return true if value == @default_value
43
+ def defaults_invalid_value?
44
+ model = @klass.new(@attribute => @invalid_value)
45
+ value = model.send(@attribute)
46
+ return true if value == @default_value
45
47
 
46
- @failure_description << " (Expected #{ @invalid_value.inspect } to default to "\
47
- "#{ @default_value.inspect }), but got #{ value.inspect }"
48
- false
49
- end
48
+ @failure_description << " (Expected #{@invalid_value.inspect} to default to "\
49
+ "#{@default_value.inspect}), but got #{value.inspect}"
50
+ false
51
+ end
50
52
  end
51
53
  end
52
54
  end
@@ -1,15 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Matchers
2
4
  module Type
3
- def have_nullable_string( attribute, valid_hash = {} )
4
- HaveNullableStringMatcher.new( attribute, valid_hash )
5
+ def have_nullable_string(attribute, valid_hash = {})
6
+ HaveNullableStringMatcher.new(attribute, valid_hash)
5
7
  end
6
8
 
7
9
  class HaveNullableStringMatcher < AttributeMatcher
8
- def initialize( attribute, valid_hash )
9
- super( attribute, valid_hash, 'nullable string' )
10
+ def initialize(attribute, valid_hash)
11
+ super(attribute, valid_hash, 'nullable string')
10
12
  end
11
13
 
12
- def matches?( klass )
14
+ def matches?(klass)
13
15
  super
14
16
 
15
17
  accepts_nil? && accepts_string? && rejects_non_string?
@@ -17,33 +19,29 @@ module Matchers
17
19
 
18
20
  private
19
21
 
20
- def accepts_nil?
21
- model = @klass.new( @valid_hash.merge( @attribute => nil ) )
22
- model.send(@attribute).nil?
23
- end
24
-
25
- def accepts_string?
26
- valid_string = 'A string'
27
- model = @klass.new( @valid_hash.merge( @attribute => valid_string ) )
28
- model.send(@attribute) == 'A string'
29
- end
30
-
31
- def rejects_non_string?
32
- non_string = 10.0
33
- @klass.new( @valid_hash.merge( @attribute => non_string ) )
34
- rescue Fortnox::API::InvalidAttributeValueError => error
35
- expected_message = "#{ non_string.inspect } (#{ non_string.class }) "\
36
- "has invalid type for #{ @attribute.inspect }"
37
- if error.message.include?(expected_message)
38
- return true
39
- else
40
- fail_message = "Expected error message to include #{ expected_message.inspect }, "\
41
- "but was #{ error.message.inspect }"
42
- fail(fail_message)
43
- end
44
-
45
- end
46
- end
22
+ def accepts_nil?
23
+ model = @klass.new(@valid_hash.merge(@attribute => nil))
24
+ model.send(@attribute).nil?
25
+ end
47
26
 
27
+ def accepts_string?
28
+ valid_string = 'A string'
29
+ model = @klass.new(@valid_hash.merge(@attribute => valid_string))
30
+ model.send(@attribute) == 'A string'
31
+ end
32
+
33
+ def rejects_non_string?
34
+ non_string = 10.0
35
+ @klass.new(@valid_hash.merge(@attribute => non_string))
36
+ rescue Fortnox::API::InvalidAttributeValueError => error
37
+ expected_message = "#{non_string.inspect} (#{non_string.class}) "\
38
+ "has invalid type for #{@attribute.inspect}"
39
+ return true if error.message.include?(expected_message)
40
+
41
+ fail_message = "Expected error message to include #{expected_message.inspect}, "\
42
+ "but was #{error.message.inspect}"
43
+ raise(fail_message)
44
+ end
45
+ end
48
46
  end
49
47
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Matchers
2
4
  module Type
3
- def have_sized_float( attribute, min_value, max_value, valid_hash = {} )
5
+ def have_sized_float(attribute, min_value, max_value, valid_hash = {})
4
6
  options = { min_value: min_value, max_value: max_value, step: 0.1 }
5
- NumericMatcher.new( attribute, valid_hash, 'sized float', options )
7
+ NumericMatcher.new(attribute, valid_hash, 'sized float', options)
6
8
  end
7
9
  end
8
10
  end
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Matchers
2
4
  module Type
3
- def have_sized_integer( attribute, min_value, max_value, valid_hash = {} )
5
+ def have_sized_integer(attribute, min_value, max_value, valid_hash = {})
4
6
  options = { min_value: min_value, max_value: max_value, step: 1 }
5
- NumericMatcher.new( attribute, valid_hash, 'sized integer', options )
7
+ NumericMatcher.new(attribute, valid_hash, 'sized integer', options)
6
8
  end
7
9
  end
8
10
  end
@@ -1,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Matchers
2
4
  module Type
3
- def have_sized_string( attribute, max_size, valid_hash = {} )
4
- HaveSizedStringMatcher.new( attribute, max_size, valid_hash )
5
+ def have_sized_string(attribute, max_size, valid_hash = {})
6
+ HaveSizedStringMatcher.new(attribute, max_size, valid_hash)
5
7
  end
6
8
 
7
9
  class HaveSizedStringMatcher < AttributeMatcher
8
- def initialize( attribute, max_size, valid_hash )
9
- super( attribute, valid_hash, 'sized string' )
10
+ def initialize(attribute, max_size, valid_hash)
11
+ super(attribute, valid_hash, 'sized string')
10
12
  @max_size = max_size
11
13
  end
12
14
 
13
- def matches?( klass )
15
+ def matches?(klass)
14
16
  @klass = klass
15
17
 
16
18
  accepts_max_size? && rejects_too_long_string?
@@ -18,18 +20,17 @@ module Matchers
18
20
 
19
21
  private
20
22
 
21
- def accepts_max_size?
22
- @klass.new( @valid_hash.merge( @attribute => 'a' * @max_size ) )
23
- end
23
+ def accepts_max_size?
24
+ @klass.new(@valid_hash.merge(@attribute => 'a' * @max_size))
25
+ end
24
26
 
25
- def rejects_too_long_string?
26
- too_long = @max_size + 1
27
- too_long_string = 'a' * too_long
28
- expect_error("Exception missing for too long string (#{ too_long } characters)") do
29
- @klass.new( @valid_hash.merge( @attribute => too_long_string ) )
30
- end
27
+ def rejects_too_long_string?
28
+ too_long = @max_size + 1
29
+ too_long_string = 'a' * too_long
30
+ expect_error("Exception missing for too long string (#{too_long} characters)") do
31
+ @klass.new(@valid_hash.merge(@attribute => too_long_string))
31
32
  end
33
+ end
32
34
  end
33
-
34
35
  end
35
36
  end
@@ -1,7 +1,9 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Matchers
2
4
  module Type
3
- def have_vat_type( attribute, valid_hash = {} )
4
- EnumMatcher.new( attribute, valid_hash, 'VATType', 'VATTypes' )
5
+ def have_vat_type(attribute, valid_hash = {})
6
+ EnumMatcher.new(attribute, valid_hash, 'VATType', 'VATTypes')
5
7
  end
6
8
  end
7
9
  end
@@ -1,15 +1,17 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Matchers
2
4
  module Type
3
5
  class NumericMatcher < AttributeMatcher
4
- def initialize( attribute, valid_hash, attr_type, options )
5
- super( attribute, valid_hash, attr_type )
6
+ def initialize(attribute, valid_hash, attr_type, options)
7
+ super(attribute, valid_hash, attr_type)
6
8
 
7
9
  @min_value = options[:min_value]
8
10
  @max_value = options[:max_value]
9
11
  @step = options[:step]
10
12
  end
11
13
 
12
- def matches?( klass )
14
+ def matches?(klass)
13
15
  super
14
16
 
15
17
  rejects_too_small_value? &&
@@ -20,31 +22,31 @@ module Matchers
20
22
 
21
23
  private
22
24
 
23
- def rejects_too_small_value?
24
- too_small_value = @min_value - @step
25
- expected_error_message = "Exception missing for too small value (#{ too_small_value })"
26
- rejects_value?(too_small_value, expected_error_message)
27
- end
25
+ def rejects_too_small_value?
26
+ too_small_value = @min_value - @step
27
+ expected_error_message = "Exception missing for too small value (#{too_small_value})"
28
+ rejects_value?(too_small_value, expected_error_message)
29
+ end
28
30
 
29
- def accepts_min_value?
30
- @klass.new( @valid_hash.merge( @attribute => @min_value ) )
31
- end
31
+ def accepts_min_value?
32
+ @klass.new(@valid_hash.merge(@attribute => @min_value))
33
+ end
32
34
 
33
- def accepts_max_value?
34
- @klass.new( @valid_hash.merge( @attribute => @max_value ) )
35
- end
35
+ def accepts_max_value?
36
+ @klass.new(@valid_hash.merge(@attribute => @max_value))
37
+ end
36
38
 
37
- def rejects_too_big_value?
38
- too_big_value = @max_value + @step
39
- expected_error_message = "Exception missing for too big value (#{ too_big_value })"
40
- rejects_value?(too_big_value, expected_error_message)
41
- end
39
+ def rejects_too_big_value?
40
+ too_big_value = @max_value + @step
41
+ expected_error_message = "Exception missing for too big value (#{too_big_value})"
42
+ rejects_value?(too_big_value, expected_error_message)
43
+ end
42
44
 
43
- def rejects_value?(value, expected_error_message)
44
- expect_error(expected_error_message) do
45
- @klass.new( @valid_hash.merge( @attribute => value ) )
46
- end
45
+ def rejects_value?(value, expected_error_message)
46
+ expect_error(expected_error_message) do
47
+ @klass.new(@valid_hash.merge(@attribute => value))
47
48
  end
49
+ end
48
50
  end
49
51
  end
50
52
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'fortnox/api'
2
4
 
3
5
  module Matchers
@@ -9,12 +11,12 @@ module Matchers
9
11
  class RequireAttributeMatcher
10
12
  EXCEPTION = Fortnox::API::MissingAttributeError
11
13
 
12
- def initialize( attribute, valid_hash )
14
+ def initialize(attribute, valid_hash)
13
15
  @attribute = attribute
14
- @invalid_hash = valid_hash.dup.tap{ |hash| hash.delete( attribute ) }
16
+ @invalid_hash = valid_hash.dup.tap { |hash| hash.delete(attribute) }
15
17
  end
16
18
 
17
- def matches?( klass )
19
+ def matches?(klass)
18
20
  @klass = klass
19
21
 
20
22
  raise_error && includes_error_message
@@ -26,44 +28,41 @@ module Matchers
26
28
  end
27
29
 
28
30
  def description
29
- "require attribute #{ @attribute.inspect }"
31
+ "require attribute #{@attribute.inspect}"
30
32
  end
31
33
 
32
34
  private
33
35
 
34
- def raise_error
35
- @klass.new(@invalid_hash)
36
-
37
- false # Fail test since expected error is not thrown
38
-
39
- rescue EXCEPTION
40
- true
41
- end
42
-
43
- def includes_error_message
44
- @klass.new(@invalid_hash)
45
- rescue EXCEPTION => error
46
- if error.message.include? expected_error_message
47
- return true
48
- else
49
- @wrong_error_message = error.message
50
- return false
51
- end
52
- end
53
-
54
- def expected_error_message
55
- @attribute.to_s
56
- end
57
-
58
- def no_exception_failure_message
59
- "Expected class to raise #{ EXCEPTION } "\
60
- "when attribute #{ @attribute.inspect } is missing."
61
- end
62
-
63
- def wrong_error_message
64
- "Expected exception to equal #{ expected_error_message.inspect }. "\
65
- "Message was #{ @wrong_error_message.inspect }."
66
- end
36
+ def raise_error
37
+ @klass.new(@invalid_hash)
38
+
39
+ false # Fail test since expected error is not thrown
40
+ rescue EXCEPTION
41
+ true
42
+ end
43
+
44
+ def includes_error_message
45
+ @klass.new(@invalid_hash)
46
+ rescue EXCEPTION => error
47
+ return true if error.message.include? expected_error_message
48
+
49
+ @wrong_error_message = error.message
50
+ false
51
+ end
52
+
53
+ def expected_error_message
54
+ @attribute.to_s
55
+ end
56
+
57
+ def no_exception_failure_message
58
+ "Expected class to raise #{EXCEPTION} "\
59
+ "when attribute #{@attribute.inspect} is missing."
60
+ end
61
+
62
+ def wrong_error_message
63
+ "Expected exception to equal #{expected_error_message.inspect}. "\
64
+ "Message was #{@wrong_error_message.inspect}."
65
+ end
67
66
  end
68
67
  end
69
68
  end
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Matchers
2
4
  module Type
3
5
  class TypeMatcher < AttributeMatcher
4
- def initialize( attr, valid_hash, attr_name, valid_value, invalid_value )
5
- super( attr, valid_hash, attr_name )
6
+ def initialize(attr, valid_hash, attr_name, valid_value, invalid_value)
7
+ super(attr, valid_hash, attr_name)
6
8
 
7
9
  @valid_value = valid_value
8
10
  @invalid_value = invalid_value
9
11
  end
10
12
 
11
- def matches?( klass )
13
+ def matches?(klass)
12
14
  super
13
15
 
14
16
  correct_type? && rejects_invalid_value? && accepts_valid_value?
@@ -16,23 +18,23 @@ module Matchers
16
18
 
17
19
  private
18
20
 
19
- def correct_type?
20
- return true if expected_type?
21
+ def correct_type?
22
+ return true if expected_type?
21
23
 
22
- @errors << "Attribute #{ @attribute.inspect } was expected to be of type #{ @attribute_type }, but was #{ @actual_type }"
23
- return false
24
- end
24
+ @errors << "Attribute #{@attribute.inspect} was expected to be of type #{@attribute_type}, "\
25
+ "but was #{@actual_type}"
26
+ false
27
+ end
25
28
 
26
- def accepts_valid_value?
27
- @klass.new( @valid_hash.merge( @attribute => @valid_value ) )
28
- end
29
+ def accepts_valid_value?
30
+ @klass.new(@valid_hash.merge(@attribute => @valid_value))
31
+ end
29
32
 
30
- def rejects_invalid_value?
31
- expect_error(@expected_error) do
32
- @klass.new( @valid_hash.merge( @attribute => @invalid_value ) )
33
- end
33
+ def rejects_invalid_value?
34
+ expect_error(@expected_error) do
35
+ @klass.new(@valid_hash.merge(@attribute => @invalid_value))
34
36
  end
35
-
37
+ end
36
38
  end
37
39
  end
38
40
  end