shoulda-matchers 4.4.0 → 5.0.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 (98) hide show
  1. checksums.yaml +4 -4
  2. data/LICENSE +22 -0
  3. data/README.md +18 -18
  4. data/lib/shoulda/matchers.rb +12 -13
  5. data/lib/shoulda/matchers/action_controller.rb +13 -13
  6. data/lib/shoulda/matchers/action_controller/callback_matcher.rb +4 -89
  7. data/lib/shoulda/matchers/action_controller/filter_param_matcher.rb +3 -2
  8. data/lib/shoulda/matchers/action_controller/flash_store.rb +2 -4
  9. data/lib/shoulda/matchers/action_controller/permit_matcher.rb +29 -27
  10. data/lib/shoulda/matchers/action_controller/redirect_to_matcher.rb +6 -8
  11. data/lib/shoulda/matchers/action_controller/render_template_matcher.rb +6 -8
  12. data/lib/shoulda/matchers/action_controller/render_with_layout_matcher.rb +16 -13
  13. data/lib/shoulda/matchers/action_controller/rescue_from_matcher.rb +2 -1
  14. data/lib/shoulda/matchers/action_controller/route_matcher.rb +5 -6
  15. data/lib/shoulda/matchers/action_controller/route_params.rb +1 -1
  16. data/lib/shoulda/matchers/action_controller/set_session_or_flash_matcher.rb +19 -13
  17. data/lib/shoulda/matchers/active_model.rb +25 -15
  18. data/lib/shoulda/matchers/active_model/allow_value_matcher.rb +29 -36
  19. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_changed_value_error.rb +1 -1
  20. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter.rb +5 -5
  21. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setter_and_validator.rb +2 -2
  22. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters.rb +1 -1
  23. data/lib/shoulda/matchers/active_model/allow_value_matcher/attribute_setters_and_validators.rb +1 -1
  24. data/lib/shoulda/matchers/active_model/disallow_value_matcher.rb +1 -1
  25. data/lib/shoulda/matchers/active_model/have_secure_password_matcher.rb +51 -25
  26. data/lib/shoulda/matchers/active_model/helpers.rb +2 -2
  27. data/lib/shoulda/matchers/active_model/numericality_matchers.rb +0 -5
  28. data/lib/shoulda/matchers/active_model/numericality_matchers/comparison_matcher.rb +32 -34
  29. data/lib/shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher.rb +1 -1
  30. data/lib/shoulda/matchers/active_model/qualifiers/ignoring_interference_by_writer.rb +1 -1
  31. data/lib/shoulda/matchers/active_model/validate_absence_of_matcher.rb +10 -2
  32. data/lib/shoulda/matchers/active_model/validate_confirmation_of_matcher.rb +2 -2
  33. data/lib/shoulda/matchers/active_model/validate_exclusion_of_matcher.rb +8 -7
  34. data/lib/shoulda/matchers/active_model/validate_inclusion_of_matcher.rb +26 -25
  35. data/lib/shoulda/matchers/active_model/validate_length_of_matcher.rb +6 -6
  36. data/lib/shoulda/matchers/active_model/validate_numericality_of_matcher.rb +40 -27
  37. data/lib/shoulda/matchers/active_model/validate_presence_of_matcher.rb +4 -4
  38. data/lib/shoulda/matchers/active_model/validation_matcher.rb +6 -8
  39. data/lib/shoulda/matchers/active_model/validation_matcher/build_description.rb +2 -4
  40. data/lib/shoulda/matchers/active_model/validation_message_finder.rb +2 -4
  41. data/lib/shoulda/matchers/active_model/validator.rb +4 -9
  42. data/lib/shoulda/matchers/active_record.rb +26 -14
  43. data/lib/shoulda/matchers/active_record/accept_nested_attributes_for_matcher.rb +6 -3
  44. data/lib/shoulda/matchers/active_record/association_matcher.rb +101 -48
  45. data/lib/shoulda/matchers/active_record/association_matchers.rb +0 -12
  46. data/lib/shoulda/matchers/active_record/association_matchers/counter_cache_matcher.rb +5 -2
  47. data/lib/shoulda/matchers/active_record/association_matchers/dependent_matcher.rb +4 -4
  48. data/lib/shoulda/matchers/active_record/association_matchers/inverse_of_matcher.rb +1 -1
  49. data/lib/shoulda/matchers/active_record/association_matchers/join_table_matcher.rb +11 -6
  50. data/lib/shoulda/matchers/active_record/association_matchers/model_reflection.rb +2 -9
  51. data/lib/shoulda/matchers/active_record/association_matchers/model_reflector.rb +12 -7
  52. data/lib/shoulda/matchers/active_record/association_matchers/option_verifier.rb +23 -5
  53. data/lib/shoulda/matchers/active_record/association_matchers/optional_matcher.rb +3 -3
  54. data/lib/shoulda/matchers/active_record/association_matchers/order_matcher.rb +1 -1
  55. data/lib/shoulda/matchers/active_record/association_matchers/required_matcher.rb +4 -4
  56. data/lib/shoulda/matchers/active_record/association_matchers/source_matcher.rb +3 -2
  57. data/lib/shoulda/matchers/active_record/association_matchers/through_matcher.rb +7 -5
  58. data/lib/shoulda/matchers/active_record/define_enum_for_matcher.rb +18 -9
  59. data/lib/shoulda/matchers/active_record/have_attached_matcher.rb +46 -8
  60. data/lib/shoulda/matchers/active_record/have_db_column_matcher.rb +39 -17
  61. data/lib/shoulda/matchers/active_record/have_db_index_matcher.rb +1 -1
  62. data/lib/shoulda/matchers/active_record/have_implicit_order_column.rb +7 -7
  63. data/lib/shoulda/matchers/active_record/have_readonly_attribute_matcher.rb +12 -10
  64. data/lib/shoulda/matchers/active_record/have_rich_text_matcher.rb +11 -7
  65. data/lib/shoulda/matchers/active_record/have_secure_token_matcher.rb +2 -0
  66. data/lib/shoulda/matchers/active_record/serialize_matcher.rb +13 -9
  67. data/lib/shoulda/matchers/active_record/uniqueness.rb +4 -4
  68. data/lib/shoulda/matchers/active_record/uniqueness/test_model_creator.rb +1 -3
  69. data/lib/shoulda/matchers/active_record/uniqueness/test_models.rb +0 -2
  70. data/lib/shoulda/matchers/active_record/validate_uniqueness_of_matcher.rb +78 -71
  71. data/lib/shoulda/matchers/doublespeak.rb +9 -9
  72. data/lib/shoulda/matchers/doublespeak/double.rb +1 -1
  73. data/lib/shoulda/matchers/doublespeak/double_collection.rb +3 -3
  74. data/lib/shoulda/matchers/doublespeak/double_implementation_registry.rb +8 -5
  75. data/lib/shoulda/matchers/doublespeak/object_double.rb +1 -1
  76. data/lib/shoulda/matchers/doublespeak/stub_implementation.rb +1 -5
  77. data/lib/shoulda/matchers/doublespeak/world.rb +2 -2
  78. data/lib/shoulda/matchers/error.rb +1 -1
  79. data/lib/shoulda/matchers/independent.rb +1 -0
  80. data/lib/shoulda/matchers/independent/delegate_method_matcher.rb +14 -16
  81. data/lib/shoulda/matchers/integrations.rb +6 -6
  82. data/lib/shoulda/matchers/integrations/configuration.rb +1 -1
  83. data/lib/shoulda/matchers/integrations/libraries/action_controller.rb +1 -1
  84. data/lib/shoulda/matchers/integrations/libraries/rails.rb +2 -2
  85. data/lib/shoulda/matchers/integrations/test_frameworks.rb +2 -4
  86. data/lib/shoulda/matchers/integrations/test_frameworks/active_support_test_case.rb +1 -1
  87. data/lib/shoulda/matchers/integrations/test_frameworks/minitest_4.rb +1 -1
  88. data/lib/shoulda/matchers/integrations/test_frameworks/minitest_5.rb +1 -1
  89. data/lib/shoulda/matchers/integrations/test_frameworks/missing_test_framework.rb +1 -1
  90. data/lib/shoulda/matchers/integrations/test_frameworks/test_unit.rb +1 -1
  91. data/lib/shoulda/matchers/rails_shim.rb +5 -42
  92. data/lib/shoulda/matchers/util.rb +9 -2
  93. data/lib/shoulda/matchers/util/word_wrap.rb +7 -7
  94. data/lib/shoulda/matchers/version.rb +1 -1
  95. data/lib/shoulda/matchers/warn.rb +3 -3
  96. data/shoulda-matchers.gemspec +12 -9
  97. metadata +14 -14
  98. data/lib/shoulda/matchers/active_model/allow_mass_assignment_of_matcher.rb +0 -159
@@ -31,7 +31,7 @@ need to do something different.
31
31
  If you need help, feel free to ask a question on the shoulda-matchers
32
32
  issues list:
33
33
 
34
- http://github.com/thoughtbot/shoulda-matchers/issues
34
+ https://github.com/thoughtbot/shoulda-matchers/issues
35
35
  MESSAGE
36
36
  end
37
37
 
@@ -23,7 +23,7 @@ module Shoulda
23
23
  @value_written = args.fetch(:value)
24
24
  @ignore_interference_by_writer = args.fetch(
25
25
  :ignore_interference_by_writer,
26
- Qualifiers::IgnoreInterferenceByWriter.new
26
+ Qualifiers::IgnoreInterferenceByWriter.new,
27
27
  )
28
28
  @after_set_callback = args.fetch(:after_set_callback, -> { })
29
29
 
@@ -36,9 +36,9 @@ module Shoulda
36
36
  description << Shoulda::Matchers::Util.inspect_value(value_written)
37
37
 
38
38
  if attribute_changed_value?
39
- description << " -- which was read back as "
39
+ description << ' -- which was read back as '
40
40
  description << Shoulda::Matchers::Util.inspect_value(value_read)
41
- description << " --"
41
+ description << ' --'
42
42
  end
43
43
 
44
44
  description
@@ -206,7 +206,7 @@ module Shoulda
206
206
  model: object.class,
207
207
  attribute_name: attribute_name,
208
208
  value_written: value_written,
209
- value_read: value_read
209
+ value_read: value_read,
210
210
  )
211
211
  end
212
212
 
@@ -218,7 +218,7 @@ module Shoulda
218
218
  AttributeDoesNotExistError.create(
219
219
  model: object.class,
220
220
  attribute_name: attribute_name,
221
- value: value_written
221
+ value: value_written,
222
222
  )
223
223
  end
224
224
 
@@ -34,7 +34,7 @@ module Shoulda
34
34
  attribute_name: attribute_name,
35
35
  value: value,
36
36
  ignore_interference_by_writer: ignore_interference_by_writer,
37
- after_set_callback: after_setting_value_callback
37
+ after_set_callback: after_setting_value_callback,
38
38
  )
39
39
  end
40
40
 
@@ -48,7 +48,7 @@ module Shoulda
48
48
  attribute_to_check_message_against,
49
49
  context: context,
50
50
  expects_strict: expects_strict?,
51
- expected_message: expected_message
51
+ expected_message: expected_message,
52
52
  )
53
53
  end
54
54
 
@@ -11,7 +11,7 @@ module Shoulda
11
11
  AttributeSetterAndValidator.new(
12
12
  allow_value_matcher,
13
13
  attribute_name,
14
- value
14
+ value,
15
15
  )
16
16
  end
17
17
  end
@@ -11,7 +11,7 @@ module Shoulda
11
11
  AttributeSetterAndValidator.new(
12
12
  allow_value_matcher,
13
13
  attribute_name,
14
- value
14
+ value,
15
15
  )
16
16
  end
17
17
  end
@@ -46,7 +46,7 @@ module Shoulda
46
46
  self
47
47
  end
48
48
 
49
- def with_message(message, options={})
49
+ def with_message(message, options = {})
50
50
  allow_matcher.with_message(message, options)
51
51
  self
52
52
  end
@@ -10,49 +10,51 @@ module Shoulda
10
10
  # include ActiveModel::Model
11
11
  # include ActiveModel::SecurePassword
12
12
  # attr_accessor :password
13
+ # attr_accessor :reset_password
13
14
  #
14
15
  # has_secure_password
16
+ # has_secure_password :reset_password
15
17
  # end
16
18
  #
17
19
  # # RSpec
18
20
  # RSpec.describe User, type: :model do
19
21
  # it { should have_secure_password }
22
+ # it { should have_secure_password(:reset_password) }
20
23
  # end
21
24
  #
22
25
  # # Minitest (Shoulda)
23
26
  # class UserTest < ActiveSupport::TestCase
24
27
  # should have_secure_password
28
+ # should have_secure_password(:reset_password)
25
29
  # end
26
30
  #
27
31
  # @return [HaveSecurePasswordMatcher]
28
32
  #
29
- def have_secure_password
30
- HaveSecurePasswordMatcher.new
33
+ def have_secure_password(attr = :password)
34
+ HaveSecurePasswordMatcher.new(attr)
31
35
  end
32
36
 
33
37
  # @private
34
38
  class HaveSecurePasswordMatcher
35
39
  attr_reader :failure_message
36
40
 
37
- CORRECT_PASSWORD = "aBcDe12345"
38
- INCORRECT_PASSWORD = "password"
39
-
40
- EXPECTED_METHODS = [
41
- :authenticate,
42
- :password=,
43
- :password_confirmation=,
44
- :password_digest,
45
- :password_digest=,
46
- ]
41
+ CORRECT_PASSWORD = 'aBcDe12345'.freeze
42
+ INCORRECT_PASSWORD = 'password'.freeze
47
43
 
48
44
  MESSAGES = {
49
- authenticated_incorrect_password: "expected %{subject} to not authenticate an incorrect password",
50
- did_not_authenticate_correct_password: "expected %{subject} to authenticate the correct password",
51
- method_not_found: "expected %{subject} to respond to %{methods}"
52
- }
45
+ authenticated_incorrect_password: 'expected %{subject} to not'\
46
+ ' authenticate an incorrect %{attribute}',
47
+ did_not_authenticate_correct_password: 'expected %{subject} to'\
48
+ ' authenticate the correct %{attribute}',
49
+ method_not_found: 'expected %{subject} to respond to %{methods}',
50
+ }.freeze
51
+
52
+ def initialize(attribute)
53
+ @attribute = attribute.to_sym
54
+ end
53
55
 
54
56
  def description
55
- "have a secure password"
57
+ "have a secure password, defined on #{@attribute} attribute"
56
58
  end
57
59
 
58
60
  def matches?(subject)
@@ -60,7 +62,8 @@ module Shoulda
60
62
 
61
63
  if failure = validate
62
64
  key, params = failure
63
- @failure_message = MESSAGES[key] % { subject: subject.class }.merge(params)
65
+ @failure_message =
66
+ MESSAGES[key] % { subject: subject.class }.merge(params)
64
67
  end
65
68
 
66
69
  failure.nil?
@@ -71,21 +74,44 @@ module Shoulda
71
74
  attr_reader :subject
72
75
 
73
76
  def validate
74
- missing_methods = EXPECTED_METHODS.select {|m| !subject.respond_to?(m) }
77
+ missing_methods = expected_methods.reject do |m|
78
+ subject.respond_to?(m)
79
+ end
75
80
 
76
81
  if missing_methods.present?
77
82
  [:method_not_found, { methods: missing_methods.to_sentence }]
78
83
  else
79
- subject.password = CORRECT_PASSWORD
80
- subject.password_confirmation = CORRECT_PASSWORD
84
+ subject.send("#{@attribute}=", CORRECT_PASSWORD)
85
+ subject.send("#{@attribute}_confirmation=", CORRECT_PASSWORD)
81
86
 
82
- if not subject.authenticate(CORRECT_PASSWORD)
83
- [:did_not_authenticate_correct_password, {}]
84
- elsif subject.authenticate(INCORRECT_PASSWORD)
85
- [:authenticated_incorrect_password, {}]
87
+ if not subject.send(authenticate_method, CORRECT_PASSWORD)
88
+ [:did_not_authenticate_correct_password,
89
+ { attribute: @attribute },]
90
+ elsif subject.send(authenticate_method, INCORRECT_PASSWORD)
91
+ [:authenticated_incorrect_password, { attribute: @attribute }]
86
92
  end
87
93
  end
88
94
  end
95
+
96
+ private
97
+
98
+ def expected_methods
99
+ @_expected_methods ||= %I[
100
+ #{authenticate_method}
101
+ #{@attribute}=
102
+ #{@attribute}_confirmation=
103
+ #{@attribute}_digest
104
+ #{@attribute}_digest=
105
+ ]
106
+ end
107
+
108
+ def authenticate_method
109
+ if @attribute == :password
110
+ :authenticate
111
+ else
112
+ "authenticate_#{@attribute}".to_sym
113
+ end
114
+ end
89
115
  end
90
116
  end
91
117
  end
@@ -8,7 +8,7 @@ module Shoulda
8
8
  end
9
9
 
10
10
  def format_validation_errors(errors)
11
- list_items = errors.keys.map do |attribute|
11
+ list_items = errors.to_hash.keys.map do |attribute|
12
12
  messages = errors[attribute]
13
13
  "* #{attribute}: #{messages}"
14
14
  end
@@ -26,7 +26,7 @@ module Shoulda
26
26
  attribute.to_sym,
27
27
  type,
28
28
  model_name,
29
- options
29
+ options,
30
30
  )
31
31
  end
32
32
  end
@@ -3,11 +3,6 @@ module Shoulda
3
3
  module ActiveModel
4
4
  # @private
5
5
  module NumericalityMatchers
6
- autoload :ComparisonMatcher, 'shoulda/matchers/active_model/numericality_matchers/comparison_matcher'
7
- autoload :EvenNumberMatcher, 'shoulda/matchers/active_model/numericality_matchers/even_number_matcher'
8
- autoload :NumericTypeMatcher, 'shoulda/matchers/active_model/numericality_matchers/numeric_type_matcher'
9
- autoload :OddNumberMatcher, 'shoulda/matchers/active_model/numericality_matchers/odd_number_matcher'
10
- autoload :OnlyIntegerMatcher, 'shoulda/matchers/active_model/numericality_matchers/only_integer_matcher'
11
6
  end
12
7
  end
13
8
  end
@@ -5,23 +5,42 @@ module Shoulda
5
5
  # @private
6
6
  class ComparisonMatcher < ValidationMatcher
7
7
  ERROR_MESSAGES = {
8
- :> => :greater_than,
9
- :>= => :greater_than_or_equal_to,
10
- :< => :less_than,
11
- :<= => :less_than_or_equal_to,
12
- :== => :equal_to,
13
- :!= => :other_than,
14
- }
8
+ :> => {
9
+ label: :greater_than,
10
+ assertions: [false, false, true],
11
+ },
12
+ :>= => {
13
+ label: :greater_than_or_equal_to,
14
+ assertions: [false, true, true],
15
+ },
16
+ :< => {
17
+ label: :less_than,
18
+ assertions: [true, false, false],
19
+ },
20
+ :<= => {
21
+ label: :less_than_or_equal_to,
22
+ assertions: [true, true, false],
23
+ },
24
+ :== => {
25
+ label: :equal_to,
26
+ assertions: [false, true, false],
27
+ },
28
+ :!= => {
29
+ label: :other_than,
30
+ assertions: [true, false, true],
31
+ },
32
+ }.freeze
15
33
 
16
34
  def initialize(numericality_matcher, value, operator)
17
35
  super(nil)
18
36
  unless numericality_matcher.respond_to? :diff_to_compare
19
37
  raise ArgumentError, 'numericality_matcher is invalid'
20
38
  end
39
+
21
40
  @numericality_matcher = numericality_matcher
22
41
  @value = value
23
42
  @operator = operator
24
- @message = ERROR_MESSAGES[operator]
43
+ @message = ERROR_MESSAGES[operator][:label]
25
44
  end
26
45
 
27
46
  def simple_description
@@ -94,10 +113,9 @@ module Shoulda
94
113
  end
95
114
 
96
115
  def submatchers_and_results
97
- @_submatchers_and_results ||=
98
- submatchers.map do |matcher|
99
- { matcher: matcher, matched: matcher.matches?(@subject) }
100
- end
116
+ @_submatchers_and_results ||= submatchers.map do |matcher|
117
+ { matcher: matcher, matched: matcher.matches?(@subject) }
118
+ end
101
119
  end
102
120
 
103
121
  def comparison_combos
@@ -115,20 +133,7 @@ module Shoulda
115
133
  end
116
134
 
117
135
  def assertions
118
- case @operator
119
- when :>
120
- [false, false, true]
121
- when :>=
122
- [false, true, true]
123
- when :==
124
- [false, true, false]
125
- when :<
126
- [true, false, false]
127
- when :<=
128
- [true, true, false]
129
- when :!=
130
- [true, false, true]
131
- end
136
+ ERROR_MESSAGES[@operator][:assertions]
132
137
  end
133
138
 
134
139
  def diffs_to_compare
@@ -143,14 +148,7 @@ module Shoulda
143
148
  end
144
149
 
145
150
  def comparison_expectation
146
- case @operator
147
- when :> then "greater than"
148
- when :>= then "greater than or equal to"
149
- when :== then "equal to"
150
- when :< then "less than"
151
- when :<= then "less than or equal to"
152
- when :!= then 'other than'
153
- end
151
+ ERROR_MESSAGES[@operator][:label].to_s.tr('_', ' ')
154
152
  end
155
153
  end
156
154
  end
@@ -44,7 +44,7 @@ module Shoulda
44
44
 
45
45
  attr_reader :attribute
46
46
 
47
- def wrap_disallow_value_matcher(matcher)
47
+ def wrap_disallow_value_matcher(_matcher)
48
48
  raise NotImplementedError
49
49
  end
50
50
 
@@ -6,7 +6,7 @@ module Shoulda
6
6
  module IgnoringInterferenceByWriter
7
7
  attr_reader :ignore_interference_by_writer
8
8
 
9
- def initialize(*args)
9
+ def initialize(*)
10
10
  @ignore_interference_by_writer = IgnoreInterferenceByWriter.new
11
11
  end
12
12
 
@@ -103,15 +103,17 @@ module Shoulda
103
103
  if reflection
104
104
  obj = reflection.klass.new
105
105
  if collection?
106
- [ obj ]
106
+ [obj]
107
107
  else
108
108
  obj
109
109
  end
110
+ elsif array_column?
111
+ ['an arbitary value']
110
112
  else
111
113
  case column_type
112
114
  when :integer, :float then 1
113
115
  when :decimal then BigDecimal(1, 0)
114
- when :datetime, :time, :timestamp then Time.now
116
+ when :datetime, :time, :timestamp then Time.current
115
117
  when :date then Date.new
116
118
  when :binary then '0'
117
119
  else 'an arbitrary value'
@@ -137,6 +139,12 @@ module Shoulda
137
139
  @subject.class.respond_to?(:reflect_on_association) &&
138
140
  @subject.class.reflect_on_association(@attribute)
139
141
  end
142
+
143
+ def array_column?
144
+ @subject.class.respond_to?(:columns_hash) &&
145
+ @subject.class.columns_hash[@attribute.to_s].respond_to?(:array) &&
146
+ @subject.class.columns_hash[@attribute.to_s].array
147
+ end
140
148
  end
141
149
  end
142
150
  end
@@ -148,12 +148,12 @@ module Shoulda
148
148
 
149
149
  def qualify_matcher(matcher, confirmation_attribute_value)
150
150
  matcher.values_to_preset = {
151
- confirmation_attribute => confirmation_attribute_value
151
+ confirmation_attribute => confirmation_attribute_value,
152
152
  }
153
153
  matcher.with_message(
154
154
  @expected_message,
155
155
  against: confirmation_attribute,
156
- values: { attribute: attribute }
156
+ values: { attribute: attribute },
157
157
  )
158
158
  end
159
159
  end
@@ -146,11 +146,12 @@ module Shoulda
146
146
  else
147
147
  description = "validate that :#{@attribute}"
148
148
 
149
- if @array.many?
150
- description << " is neither #{inspected_array}"
151
- else
152
- description << " is not #{inspected_array}"
153
- end
149
+ description <<
150
+ if @array.many?
151
+ " is neither #{inspected_array}"
152
+ else
153
+ " is not #{inspected_array}"
154
+ end
154
155
 
155
156
  description
156
157
  end
@@ -238,8 +239,8 @@ module Shoulda
238
239
 
239
240
  def inspected_array
240
241
  Shoulda::Matchers::Util.inspect_values(@array).to_sentence(
241
- two_words_connector: " nor ",
242
- last_word_connector: ", nor "
242
+ two_words_connector: ' nor ',
243
+ last_word_connector: ', nor ',
243
244
  )
244
245
  end
245
246
  end