super_diff 0.9.0 → 0.10.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 (193) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +65 -26
  3. data/lib/super_diff/active_record/differs/active_record_relation.rb +1 -2
  4. data/lib/super_diff/active_record/differs.rb +1 -1
  5. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model.rb +5 -13
  6. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation.rb +1 -3
  7. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb +2 -2
  8. data/lib/super_diff/active_record/object_inspection.rb +1 -1
  9. data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +1 -2
  10. data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +1 -2
  11. data/lib/super_diff/active_record/operation_tree_builders.rb +2 -2
  12. data/lib/super_diff/active_record/operation_tree_flatteners.rb +1 -1
  13. data/lib/super_diff/active_record/operation_trees.rb +1 -1
  14. data/lib/super_diff/active_record.rb +7 -15
  15. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +5 -6
  16. data/lib/super_diff/active_support/differs.rb +1 -1
  17. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +3 -9
  18. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders.rb +1 -1
  19. data/lib/super_diff/active_support/object_inspection.rb +1 -1
  20. data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +5 -6
  21. data/lib/super_diff/active_support/operation_tree_builders.rb +1 -1
  22. data/lib/super_diff/active_support/operation_tree_flatteners.rb +1 -1
  23. data/lib/super_diff/active_support/operation_trees.rb +1 -1
  24. data/lib/super_diff/active_support.rb +6 -11
  25. data/lib/super_diff/colorized_document_extensions.rb +2 -4
  26. data/lib/super_diff/configuration.rb +14 -8
  27. data/lib/super_diff/csi/color.rb +4 -4
  28. data/lib/super_diff/csi/colorized_document.rb +12 -16
  29. data/lib/super_diff/csi/document.rb +8 -19
  30. data/lib/super_diff/csi/eight_bit_color.rb +19 -19
  31. data/lib/super_diff/csi/four_bit_color.rb +82 -31
  32. data/lib/super_diff/csi/twenty_four_bit_color.rb +12 -11
  33. data/lib/super_diff/csi/uncolorized_document.rb +2 -6
  34. data/lib/super_diff/csi.rb +10 -14
  35. data/lib/super_diff/diff_formatters/collection.rb +35 -41
  36. data/lib/super_diff/differs/default_object.rb +1 -1
  37. data/lib/super_diff/differs/defaults.rb +1 -1
  38. data/lib/super_diff/differs/main.rb +2 -13
  39. data/lib/super_diff/equality_matchers/array.rb +10 -12
  40. data/lib/super_diff/equality_matchers/base.rb +1 -1
  41. data/lib/super_diff/equality_matchers/default.rb +2 -4
  42. data/lib/super_diff/equality_matchers/defaults.rb +1 -1
  43. data/lib/super_diff/equality_matchers/hash.rb +10 -12
  44. data/lib/super_diff/equality_matchers/multiline_string.rb +11 -13
  45. data/lib/super_diff/equality_matchers/primitive.rb +10 -12
  46. data/lib/super_diff/equality_matchers/singleline_string.rb +10 -12
  47. data/lib/super_diff/equality_matchers.rb +1 -1
  48. data/lib/super_diff/errors.rb +3 -3
  49. data/lib/super_diff/gem_version.rb +3 -3
  50. data/lib/super_diff/helpers.rb +10 -10
  51. data/lib/super_diff/implementation_checks.rb +2 -2
  52. data/lib/super_diff/line.rb +3 -3
  53. data/lib/super_diff/object_inspection/inspection_tree.rb +46 -60
  54. data/lib/super_diff/object_inspection/inspection_tree_builders/array.rb +2 -6
  55. data/lib/super_diff/object_inspection/inspection_tree_builders/custom_object.rb +3 -9
  56. data/lib/super_diff/object_inspection/inspection_tree_builders/default_object.rb +5 -14
  57. data/lib/super_diff/object_inspection/inspection_tree_builders/defaults.rb +1 -1
  58. data/lib/super_diff/object_inspection/inspection_tree_builders/hash.rb +4 -12
  59. data/lib/super_diff/object_inspection/inspection_tree_builders/time_like.rb +6 -23
  60. data/lib/super_diff/object_inspection/inspection_tree_builders.rb +9 -9
  61. data/lib/super_diff/object_inspection/nodes/as_lines_when_rendering_to_lines.rb +8 -20
  62. data/lib/super_diff/object_inspection/nodes/as_prefix_when_rendering_to_lines.rb +1 -5
  63. data/lib/super_diff/object_inspection/nodes/as_prelude_when_rendering_to_lines.rb +1 -5
  64. data/lib/super_diff/object_inspection/nodes/as_single_line.rb +3 -7
  65. data/lib/super_diff/object_inspection/nodes/base.rb +9 -14
  66. data/lib/super_diff/object_inspection/nodes/inspection.rb +26 -34
  67. data/lib/super_diff/object_inspection/nodes/nesting.rb +1 -1
  68. data/lib/super_diff/object_inspection/nodes/only_when.rb +2 -6
  69. data/lib/super_diff/object_inspection/nodes/text.rb +1 -5
  70. data/lib/super_diff/object_inspection/nodes/when_empty.rb +2 -6
  71. data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +2 -6
  72. data/lib/super_diff/object_inspection/nodes/when_rendering_to_lines.rb +1 -1
  73. data/lib/super_diff/object_inspection/nodes/when_rendering_to_string.rb +1 -5
  74. data/lib/super_diff/object_inspection/nodes.rb +7 -7
  75. data/lib/super_diff/object_inspection.rb +3 -3
  76. data/lib/super_diff/operation_tree_builders/array.rb +12 -11
  77. data/lib/super_diff/operation_tree_builders/base.rb +17 -15
  78. data/lib/super_diff/operation_tree_builders/custom_object.rb +8 -6
  79. data/lib/super_diff/operation_tree_builders/default_object.rb +29 -21
  80. data/lib/super_diff/operation_tree_builders/hash.rb +23 -24
  81. data/lib/super_diff/operation_tree_builders/main.rb +4 -11
  82. data/lib/super_diff/operation_tree_builders/multiline_string.rb +3 -3
  83. data/lib/super_diff/operation_tree_builders/time_like.rb +1 -11
  84. data/lib/super_diff/operation_tree_builders.rb +1 -1
  85. data/lib/super_diff/operation_tree_flatteners/base.rb +1 -5
  86. data/lib/super_diff/operation_tree_flatteners/collection.rb +13 -16
  87. data/lib/super_diff/operation_tree_flatteners/default_object.rb +1 -2
  88. data/lib/super_diff/operation_tree_flatteners/hash.rb +2 -10
  89. data/lib/super_diff/operation_tree_flatteners/multiline_string.rb +2 -1
  90. data/lib/super_diff/operation_tree_flatteners.rb +3 -3
  91. data/lib/super_diff/operation_trees/base.rb +3 -5
  92. data/lib/super_diff/operation_trees/default_object.rb +1 -3
  93. data/lib/super_diff/operations/binary_operation.rb +2 -2
  94. data/lib/super_diff/operations/unary_operation.rb +1 -1
  95. data/lib/super_diff/rails.rb +2 -1
  96. data/lib/super_diff/recursion_guard.rb +5 -4
  97. data/lib/super_diff/rspec/augmented_matcher.rb +4 -5
  98. data/lib/super_diff/rspec/differ.rb +6 -13
  99. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +3 -2
  100. data/lib/super_diff/rspec/differs/collection_including.rb +1 -1
  101. data/lib/super_diff/rspec/differs/hash_including.rb +1 -1
  102. data/lib/super_diff/rspec/differs.rb +3 -3
  103. data/lib/super_diff/rspec/matcher_text_builders/base.rb +13 -15
  104. data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +5 -7
  105. data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +3 -5
  106. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +1 -5
  107. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +2 -6
  108. data/lib/super_diff/rspec/matcher_text_builders.rb +5 -8
  109. data/lib/super_diff/rspec/matcher_text_template.rb +13 -16
  110. data/lib/super_diff/rspec/monkey_patches.rb +122 -116
  111. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_including.rb +8 -6
  112. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +11 -16
  113. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +2 -1
  114. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/instance_of.rb +8 -6
  115. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/kind_of.rb +8 -6
  116. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +9 -9
  117. data/lib/super_diff/rspec/object_inspection.rb +1 -1
  118. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +11 -10
  119. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +7 -6
  120. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +11 -10
  121. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +22 -17
  122. data/lib/super_diff/rspec/operation_tree_builders.rb +4 -4
  123. data/lib/super_diff/rspec.rb +11 -13
  124. data/lib/super_diff/tiered_lines_elider.rb +87 -115
  125. data/lib/super_diff/tiered_lines_formatter.rb +5 -9
  126. data/lib/super_diff/version.rb +1 -1
  127. data/lib/super_diff.rb +4 -9
  128. data/spec/examples.txt +493 -485
  129. data/spec/integration/rails/active_record_spec.rb +3 -1
  130. data/spec/integration/rails/engines_spec.rb +20 -0
  131. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +3 -1
  132. data/spec/integration/rspec/be_falsey_matcher_spec.rb +40 -35
  133. data/spec/integration/rspec/be_matcher_spec.rb +360 -320
  134. data/spec/integration/rspec/be_nil_matcher_spec.rb +38 -34
  135. data/spec/integration/rspec/be_predicate_matcher_spec.rb +376 -359
  136. data/spec/integration/rspec/be_truthy_matcher_spec.rb +38 -33
  137. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +242 -239
  138. data/spec/integration/rspec/eq_matcher_spec.rb +595 -557
  139. data/spec/integration/rspec/have_attributes_matcher_spec.rb +294 -286
  140. data/spec/integration/rspec/have_predicate_matcher_spec.rb +291 -297
  141. data/spec/integration/rspec/include_matcher_spec.rb +317 -215
  142. data/spec/integration/rspec/match_array_matcher_spec.rb +276 -273
  143. data/spec/integration/rspec/match_matcher_spec.rb +847 -834
  144. data/spec/integration/rspec/raise_error_matcher_spec.rb +468 -453
  145. data/spec/integration/rspec/respond_to_matcher_spec.rb +702 -697
  146. data/spec/integration/rspec/third_party_matcher_spec.rb +142 -138
  147. data/spec/integration/rspec/unhandled_errors_spec.rb +88 -84
  148. data/spec/spec_helper.rb +17 -20
  149. data/spec/support/command_runner.rb +34 -57
  150. data/spec/support/integration/helpers.rb +35 -28
  151. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +28 -23
  152. data/spec/support/integration/test_programs/base.rb +12 -17
  153. data/spec/support/integration/test_programs/plain.rb +6 -0
  154. data/spec/support/integration/test_programs/rspec_active_record.rb +4 -1
  155. data/spec/support/integration/test_programs/rspec_active_support.rb +4 -1
  156. data/spec/support/integration/test_programs/rspec_rails.rb +4 -1
  157. data/spec/support/integration/test_programs/rspec_rails_engine.rb +30 -0
  158. data/spec/support/models/active_record/person.rb +6 -4
  159. data/spec/support/models/active_record/shipping_address.rb +9 -10
  160. data/spec/support/models/customer.rb +2 -4
  161. data/spec/support/models/player.rb +3 -6
  162. data/spec/support/models/shipping_address.rb +4 -13
  163. data/spec/support/shared_examples/active_record.rb +232 -214
  164. data/spec/support/shared_examples/active_support.rb +53 -51
  165. data/spec/support/shared_examples/elided_diffs.rb +405 -381
  166. data/spec/support/shared_examples/hash_with_indifferent_access.rb +424 -388
  167. data/spec/support/shared_examples/key.rb +123 -0
  168. data/spec/support/unit/helpers.rb +1 -3
  169. data/spec/support/unit/matchers/match_output.rb +12 -13
  170. data/spec/unit/active_record/object_inspection_spec.rb +222 -206
  171. data/spec/unit/equality_matchers/main_spec.rb +1049 -984
  172. data/spec/unit/helpers_spec.rb +14 -21
  173. data/spec/unit/operation_tree_flatteners/array_spec.rb +557 -524
  174. data/spec/unit/operation_tree_flatteners/custom_object_spec.rb +619 -601
  175. data/spec/unit/operation_tree_flatteners/default_object_spec.rb +619 -621
  176. data/spec/unit/operation_tree_flatteners/hash_spec.rb +595 -556
  177. data/spec/unit/operation_tree_flatteners/multiline_string_spec.rb +102 -92
  178. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +3 -3
  179. data/spec/unit/rspec/matchers/be_predicate_spec.rb +3 -3
  180. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +1 -1
  181. data/spec/unit/rspec/matchers/have_attributes_spec.rb +1 -1
  182. data/spec/unit/rspec/matchers/have_predicate_spec.rb +2 -2
  183. data/spec/unit/rspec/matchers/include_spec.rb +2 -2
  184. data/spec/unit/rspec/matchers/match_array_spec.rb +2 -2
  185. data/spec/unit/rspec/matchers/raise_error_spec.rb +5 -5
  186. data/spec/unit/rspec/matchers/respond_to_spec.rb +23 -16
  187. data/spec/unit/rspec/object_inspection_spec.rb +349 -324
  188. data/spec/unit/super_diff_spec.rb +1542 -1449
  189. data/spec/unit/tiered_lines_elider_spec.rb +3508 -3536
  190. data/spec/unit/tiered_lines_formatter_spec.rb +54 -116
  191. data/super_diff.gemspec +13 -12
  192. metadata +73 -73
  193. data/spec/tmp/warnings_logger/all_warnings.txt +0 -2
@@ -9,21 +9,21 @@ module SuperDiff
9
9
  type: :noop,
10
10
  indentation_level: indentation_level,
11
11
  value: open_token,
12
- collection_bookend: :open,
12
+ collection_bookend: :open
13
13
  ),
14
14
  *inner_lines,
15
15
  Line.new(
16
16
  type: :noop,
17
17
  indentation_level: indentation_level,
18
18
  value: close_token,
19
- collection_bookend: :close,
20
- ),
19
+ collection_bookend: :close
20
+ )
21
21
  ]
22
22
  end
23
23
 
24
24
  def inner_lines
25
- @_inner_lines ||= operation_tree.
26
- flat_map do |operation|
25
+ @_inner_lines ||=
26
+ operation_tree.flat_map do |operation|
27
27
  lines =
28
28
  if operation.name == :change
29
29
  build_lines_for_change_operation(operation)
@@ -33,7 +33,7 @@ module SuperDiff
33
33
 
34
34
  maybe_add_prefix_at_beginning_of_lines(
35
35
  maybe_add_comma_at_end_of_lines(lines, operation),
36
- operation,
36
+ operation
37
37
  )
38
38
  end
39
39
  end
@@ -51,8 +51,7 @@ module SuperDiff
51
51
  end
52
52
 
53
53
  def add_prefix_at_beginning_of_lines(lines, operation)
54
- [lines[0].prefixed_with(item_prefix_for(operation))] +
55
- lines[1..-1]
54
+ [lines[0].prefixed_with(item_prefix_for(operation))] + lines[1..-1]
56
55
  end
57
56
 
58
57
  def maybe_add_comma_at_end_of_lines(lines, operation)
@@ -79,14 +78,12 @@ module SuperDiff
79
78
  def build_lines_for_change_operation(operation)
80
79
  SuperDiff::RecursionGuard.guarding_recursion_of(
81
80
  operation.left_collection,
82
- operation.right_collection,
81
+ operation.right_collection
83
82
  ) do |already_seen|
84
83
  if already_seen
85
84
  raise InfiniteRecursionError
86
85
  else
87
- operation.children.flatten(
88
- indentation_level: indentation_level + 1,
89
- )
86
+ operation.children.flatten(indentation_level: indentation_level + 1)
90
87
  end
91
88
  end
92
89
  end
@@ -99,14 +96,14 @@ module SuperDiff
99
96
  Line.new(
100
97
  type: operation.name,
101
98
  indentation_level: indentation_level,
102
- value: SuperDiff::RecursionGuard::PLACEHOLDER,
103
- ),
99
+ value: SuperDiff::RecursionGuard::PLACEHOLDER
100
+ )
104
101
  ]
105
102
  else
106
103
  build_lines_from_inspection_of(
107
104
  operation.value,
108
105
  type: operation.name,
109
- indentation_level: indentation_level,
106
+ indentation_level: indentation_level
110
107
  )
111
108
  end
112
109
  end
@@ -125,7 +122,7 @@ module SuperDiff
125
122
  value,
126
123
  as_lines: true,
127
124
  type: type,
128
- indentation_level: indentation_level,
125
+ indentation_level: indentation_level
129
126
  )
130
127
  end
131
128
 
@@ -7,8 +7,7 @@ module SuperDiff
7
7
  "#<#{operation_tree.underlying_object.class.name}:" +
8
8
  SuperDiff::Helpers.object_address_for(
9
9
  operation_tree.underlying_object
10
- ) +
11
- " {"
10
+ ) + " {"
12
11
  end
13
12
 
14
13
  def close_token
@@ -14,11 +14,7 @@ module SuperDiff
14
14
  def item_prefix_for(operation)
15
15
  key = key_for(operation)
16
16
 
17
- if format_keys_as_kwargs?
18
- "#{key}: "
19
- else
20
- "#{key.inspect} => "
21
- end
17
+ format_keys_as_kwargs? ? "#{key}: " : "#{key.inspect} => "
22
18
  end
23
19
 
24
20
  private
@@ -30,11 +26,7 @@ module SuperDiff
30
26
  def key_for(operation)
31
27
  # Note: We could have used the right_key here too, they're both the
32
28
  # same keys
33
- if operation.respond_to?(:left_key)
34
- operation.left_key
35
- else
36
- operation.key
37
- end
29
+ operation.respond_to?(:left_key) ? operation.left_key : operation.key
38
30
  end
39
31
  end
40
32
  end
@@ -8,7 +8,8 @@ module SuperDiff
8
8
  indentation_level: indentation_level,
9
9
  # TODO: Test that quotes and things don't get escaped but escape
10
10
  # characters do
11
- value: operation.value.inspect[1..-2].gsub(/\\"/, '"').gsub(/\\'/, "'")
11
+ value:
12
+ operation.value.inspect[1..-2].gsub(/\\"/, '"').gsub(/\\'/, "'")
12
13
  )
13
14
  end
14
15
  end
@@ -5,16 +5,16 @@ module SuperDiff
5
5
  autoload :Collection, "super_diff/operation_tree_flatteners/collection"
6
6
  autoload(
7
7
  :CustomObject,
8
- "super_diff/operation_tree_flatteners/custom_object",
8
+ "super_diff/operation_tree_flatteners/custom_object"
9
9
  )
10
10
  autoload(
11
11
  :DefaultObject,
12
- "super_diff/operation_tree_flatteners/default_object",
12
+ "super_diff/operation_tree_flatteners/default_object"
13
13
  )
14
14
  autoload :Hash, "super_diff/operation_tree_flatteners/hash"
15
15
  autoload(
16
16
  :MultilineString,
17
- "super_diff/operation_tree_flatteners/multiline_string",
17
+ "super_diff/operation_tree_flatteners/multiline_string"
18
18
  )
19
19
  end
20
20
  end
@@ -20,23 +20,21 @@ module SuperDiff
20
20
 
21
21
  def to_diff(indentation_level:)
22
22
  TieredLinesFormatter.call(
23
- perhaps_elide(flatten(indentation_level: indentation_level)),
23
+ perhaps_elide(flatten(indentation_level: indentation_level))
24
24
  )
25
25
  end
26
26
 
27
27
  def flatten(indentation_level:)
28
28
  operation_tree_flattener_class.call(
29
29
  self,
30
- indentation_level: indentation_level,
30
+ indentation_level: indentation_level
31
31
  )
32
32
  end
33
33
 
34
34
  def pretty_print(pp)
35
35
  pp.group(1, "#<#{self.class.name} [", "]>") do
36
36
  pp.breakable
37
- pp.seplist(self) do |value|
38
- pp.pp value
39
- end
37
+ pp.seplist(self) { |value| pp.pp value }
40
38
  end
41
39
  end
42
40
 
@@ -19,9 +19,7 @@ module SuperDiff
19
19
  pp.text ":operations=>"
20
20
  pp.group(1, "[", "]") do
21
21
  pp.breakable
22
- pp.seplist(self) do |value|
23
- pp.pp value
24
- end
22
+ pp.seplist(self) { |value| pp.pp value }
25
23
  end
26
24
  pp.comma_breakable
27
25
  pp.text ":underlying_object=>"
@@ -14,8 +14,8 @@ module SuperDiff
14
14
  :right_value!,
15
15
  :left_index!,
16
16
  :right_index!,
17
- children: [],
18
- ],
17
+ children: []
18
+ ]
19
19
  )
20
20
  end
21
21
  end
@@ -3,7 +3,7 @@ module SuperDiff
3
3
  class UnaryOperation
4
4
  extend AttrExtras.mixin
5
5
 
6
- rattr_initialize [:name!, :collection!, :key!, :value!, :index!]
6
+ rattr_initialize %i[name! collection! key! value! index!]
7
7
  end
8
8
  end
9
9
  end
@@ -1 +1,2 @@
1
- require "super_diff/active_record"
1
+ require "super_diff/active_support"
2
+ require "super_diff/active_record" if defined?(ActiveRecord)
@@ -1,4 +1,4 @@
1
- require 'set'
1
+ require "set"
2
2
 
3
3
  module SuperDiff
4
4
  module RecursionGuard
@@ -6,9 +6,10 @@ module SuperDiff
6
6
  PLACEHOLDER = "∙∙∙".freeze
7
7
 
8
8
  def self.guarding_recursion_of(*objects, &block)
9
- already_seen_objects, first_seen_objects = objects.partition do |object|
10
- !SuperDiff.primitive?(object) && already_seen?(object)
11
- end
9
+ already_seen_objects, first_seen_objects =
10
+ objects.partition do |object|
11
+ !SuperDiff.primitive?(object) && already_seen?(object)
12
+ end
12
13
 
13
14
  first_seen_objects.each do |object|
14
15
  already_seen_object_ids.add(object.object_id)
@@ -43,8 +43,9 @@ module SuperDiff
43
43
  actual: actual_for_matcher_text,
44
44
  expected_for_failure_message: expected_for_failure_message,
45
45
  expected_for_description: expected_for_description,
46
- expected_action_for_failure_message: expected_action_for_failure_message,
47
- expected_action_for_description: expected_action_for_description,
46
+ expected_action_for_failure_message:
47
+ expected_action_for_failure_message,
48
+ expected_action_for_description: expected_action_for_description
48
49
  }
49
50
  end
50
51
 
@@ -84,9 +85,7 @@ module SuperDiff
84
85
 
85
86
  def matchers
86
87
  Object.new.tap do |object|
87
- object.singleton_class.class_eval do
88
- include ::RSpec::Matchers
89
- end
88
+ object.singleton_class.class_eval { include ::RSpec::Matchers }
90
89
  end
91
90
  end
92
91
 
@@ -7,11 +7,8 @@ module SuperDiff
7
7
 
8
8
  def diff
9
9
  if worth_diffing?
10
- diff = SuperDiff::Differs::Main.call(
11
- expected,
12
- actual,
13
- omit_empty: true,
14
- )
10
+ diff =
11
+ SuperDiff::Differs::Main.call(expected, actual, omit_empty: true)
15
12
  "\n\n" + diff
16
13
  else
17
14
  ""
@@ -23,8 +20,7 @@ module SuperDiff
23
20
  private
24
21
 
25
22
  def worth_diffing?
26
- comparing_inequal_values? &&
27
- !comparing_primitive_values? &&
23
+ comparing_inequal_values? && !comparing_primitive_values? &&
28
24
  !comparing_singleline_strings?
29
25
  end
30
26
 
@@ -33,16 +29,13 @@ module SuperDiff
33
29
  end
34
30
 
35
31
  def comparing_primitive_values?
36
- expected.is_a?(Symbol) ||
37
- expected.is_a?(Integer) ||
32
+ expected.is_a?(Symbol) || expected.is_a?(Integer) ||
38
33
  [true, false, nil].include?(expected)
39
34
  end
40
35
 
41
36
  def comparing_singleline_strings?
42
- expected.is_a?(String) &&
43
- actual.is_a?(String) &&
44
- !expected.include?("\n") &&
45
- !actual.include?("\n")
37
+ expected.is_a?(String) && actual.is_a?(String) &&
38
+ !expected.include?("\n") && !actual.include?("\n")
46
39
  end
47
40
 
48
41
  def helpers
@@ -3,8 +3,9 @@ module SuperDiff
3
3
  module Differs
4
4
  class CollectionContainingExactly < SuperDiff::Differs::Array
5
5
  def self.applies_to?(expected, actual)
6
- SuperDiff::RSpec.a_collection_containing_exactly_something?(expected) &&
7
- actual.is_a?(::Array)
6
+ SuperDiff::RSpec.a_collection_containing_exactly_something?(
7
+ expected
8
+ ) && actual.is_a?(::Array)
8
9
  end
9
10
 
10
11
  private
@@ -5,7 +5,7 @@ module SuperDiff
5
5
  def self.applies_to?(expected, actual)
6
6
  (
7
7
  SuperDiff::RSpec.a_collection_including_something?(expected) ||
8
- SuperDiff::RSpec.array_including_something?(expected)
8
+ SuperDiff::RSpec.array_including_something?(expected)
9
9
  ) && actual.is_a?(::Array)
10
10
  end
11
11
 
@@ -5,7 +5,7 @@ module SuperDiff
5
5
  def self.applies_to?(expected, actual)
6
6
  (
7
7
  SuperDiff::RSpec.a_hash_including_something?(expected) ||
8
- SuperDiff::RSpec.hash_including_something?(expected)
8
+ SuperDiff::RSpec.hash_including_something?(expected)
9
9
  ) && actual.is_a?(::Hash)
10
10
  end
11
11
 
@@ -3,16 +3,16 @@ module SuperDiff
3
3
  module Differs
4
4
  autoload(
5
5
  :CollectionContainingExactly,
6
- "super_diff/rspec/differs/collection_containing_exactly",
6
+ "super_diff/rspec/differs/collection_containing_exactly"
7
7
  )
8
8
  autoload(
9
9
  :CollectionIncluding,
10
- "super_diff/rspec/differs/collection_including",
10
+ "super_diff/rspec/differs/collection_including"
11
11
  )
12
12
  autoload :HashIncluding, "super_diff/rspec/differs/hash_including"
13
13
  autoload(
14
14
  :ObjectHavingAttributes,
15
- "super_diff/rspec/differs/object_having_attributes",
15
+ "super_diff/rspec/differs/object_having_attributes"
16
16
  )
17
17
  end
18
18
  end
@@ -28,11 +28,12 @@ module SuperDiff
28
28
  end
29
29
 
30
30
  def matcher_description
31
- template = MatcherTextTemplate.new do |t|
32
- t.add_text expected_action_for_description
33
- add_expected_value_to_description(t)
34
- add_extra_after_expected_to(t)
35
- end
31
+ template =
32
+ MatcherTextTemplate.new do |t|
33
+ t.add_text expected_action_for_description
34
+ add_expected_value_to_description(t)
35
+ add_extra_after_expected_to(t)
36
+ end
36
37
 
37
38
  Csi.decolorize(template.to_s(as_single_line: true))
38
39
  end
@@ -61,7 +62,7 @@ module SuperDiff
61
62
  :expected_for_description,
62
63
  :expected_action_for_failure_message,
63
64
  :expected_action_for_description,
64
- :template,
65
+ :template
65
66
  )
66
67
 
67
68
  def negated?
@@ -111,7 +112,7 @@ module SuperDiff
111
112
  template.add_text " "
112
113
  template.add_text_in_color(
113
114
  expected_color,
114
- expected_for_failure_message,
115
+ expected_for_failure_message
115
116
  )
116
117
  end
117
118
  end
@@ -130,17 +131,14 @@ module SuperDiff
130
131
  end
131
132
 
132
133
  def to_or_not_to
133
- if negated?
134
- "not to"
135
- else
136
- "to"
137
- end
134
+ negated? ? "not to" : "to"
138
135
  end
139
136
 
140
137
  def phrase_width
141
- [actual_phrase, expected_phrase].
142
- map { |text| Csi.decolorize(text.to_s).length }.
143
- max
138
+ [actual_phrase, expected_phrase].map do |text|
139
+ Csi.decolorize(text.to_s).length
140
+ end
141
+ .max
144
142
  end
145
143
 
146
144
  # TODO: Should this be applied to expected and actual automatically
@@ -31,21 +31,19 @@ module SuperDiff
31
31
  end
32
32
 
33
33
  def add_actual_value
34
- template.add_text_in_color(actual_color) do
35
- description_of(actual)
36
- end
34
+ template.add_text_in_color(actual_color) { description_of(actual) }
37
35
  end
38
36
 
39
37
  def add_expected_value_to_failure_message(template)
40
38
  template.add_text " "
41
39
  template.add_text_in_color(
42
40
  expected_color,
43
- "#{expected_for_failure_message}?",
41
+ "#{expected_for_failure_message}?"
44
42
  )
45
43
  template.add_text " or "
46
44
  template.add_text_in_color(
47
45
  expected_color,
48
- "#{expected_for_failure_message}s?",
46
+ "#{expected_for_failure_message}s?"
49
47
  )
50
48
  end
51
49
 
@@ -53,12 +51,12 @@ module SuperDiff
53
51
  template.add_text " "
54
52
  template.add_text_in_color(
55
53
  expected_color,
56
- "`#{expected_for_description}?`",
54
+ "`#{expected_for_description}?`"
57
55
  )
58
56
  template.add_text " or "
59
57
  template.add_text_in_color(
60
58
  expected_color,
61
- "`#{expected_for_description}s?`",
59
+ "`#{expected_for_description}s?`"
62
60
  )
63
61
  end
64
62
 
@@ -25,16 +25,14 @@ module SuperDiff
25
25
  end
26
26
 
27
27
  def add_actual_value
28
- template.add_text_in_color(actual_color) do
29
- description_of(actual)
30
- end
28
+ template.add_text_in_color(actual_color) { description_of(actual) }
31
29
  end
32
30
 
33
31
  def add_expected_value_to_failure_message(template)
34
32
  template.add_text " "
35
33
  template.add_text_in_color(
36
34
  expected_color,
37
- expected_for_failure_message,
35
+ expected_for_failure_message
38
36
  )
39
37
  end
40
38
 
@@ -42,7 +40,7 @@ module SuperDiff
42
40
  template.add_text " "
43
41
  template.add_text_in_color(
44
42
  expected_color,
45
- "`#{expected_for_description}`",
43
+ "`#{expected_for_description}`"
46
44
  )
47
45
  end
48
46
 
@@ -5,11 +5,7 @@ module SuperDiff
5
5
  protected
6
6
 
7
7
  def actual_phrase
8
- if actual
9
- "Expected raised exception"
10
- else
11
- "Expected"
12
- end
8
+ actual ? "Expected raised exception" : "Expected"
13
9
  end
14
10
 
15
11
  def add_actual_value
@@ -24,9 +24,7 @@ module SuperDiff
24
24
  end
25
25
 
26
26
  def add_extra_after_expected_to(template)
27
- if expected_arity
28
- add_arity_clause_to(template)
29
- end
27
+ add_arity_clause_to(template) if expected_arity
30
28
 
31
29
  if arbitrary_keywords?
32
30
  add_arbitrary_keywords_clause_to(template)
@@ -34,9 +32,7 @@ module SuperDiff
34
32
  add_keywords_clause_to(template)
35
33
  end
36
34
 
37
- if unlimited_arguments?
38
- add_unlimited_arguments_clause_to(template)
39
- end
35
+ add_unlimited_arguments_clause_to(template) if unlimited_arguments?
40
36
  end
41
37
 
42
38
  private
@@ -4,25 +4,22 @@ module SuperDiff
4
4
  autoload :Base, "super_diff/rspec/matcher_text_builders/base"
5
5
  autoload(
6
6
  :BePredicate,
7
- "super_diff/rspec/matcher_text_builders/be_predicate",
7
+ "super_diff/rspec/matcher_text_builders/be_predicate"
8
8
  )
9
9
  autoload(
10
10
  :ContainExactly,
11
- "super_diff/rspec/matcher_text_builders/contain_exactly",
11
+ "super_diff/rspec/matcher_text_builders/contain_exactly"
12
12
  )
13
13
  autoload(
14
14
  :HavePredicate,
15
- "super_diff/rspec/matcher_text_builders/have_predicate",
15
+ "super_diff/rspec/matcher_text_builders/have_predicate"
16
16
  )
17
17
  autoload :Match, "super_diff/rspec/matcher_text_builders/match"
18
18
  autoload(
19
19
  :RaiseError,
20
- "super_diff/rspec/matcher_text_builders/raise_error",
21
- )
22
- autoload(
23
- :RespondTo,
24
- "super_diff/rspec/matcher_text_builders/respond_to",
20
+ "super_diff/rspec/matcher_text_builders/raise_error"
25
21
  )
22
+ autoload(:RespondTo, "super_diff/rspec/matcher_text_builders/respond_to")
26
23
  end
27
24
  end
28
25
  end
@@ -10,9 +10,7 @@ module SuperDiff
10
10
  def initialize
11
11
  @tokens = []
12
12
 
13
- if block_given?
14
- yield self
15
- end
13
+ yield self if block_given?
16
14
  end
17
15
 
18
16
  def add_text(*args, &block)
@@ -44,16 +42,15 @@ module SuperDiff
44
42
  end
45
43
 
46
44
  def length_of_first_paragraph
47
- Csi.decolorize(to_string_in_singleline_mode).
48
- split(/\n\n/).
49
- first.
50
- length
45
+ Csi.decolorize(to_string_in_singleline_mode).split(/\n\n/).first.length
51
46
  end
52
47
 
53
48
  def to_s(as_single_line: nil)
54
- if length_of_first_paragraph > MAX_LINE_LENGTH || as_single_line == false
49
+ if length_of_first_paragraph > MAX_LINE_LENGTH ||
50
+ as_single_line == false
55
51
  to_string_in_multiline_mode
56
- elsif length_of_first_paragraph <= MAX_LINE_LENGTH || as_single_line == true
52
+ elsif length_of_first_paragraph <= MAX_LINE_LENGTH ||
53
+ as_single_line == true
57
54
  to_string_in_singleline_mode
58
55
  end
59
56
  end
@@ -77,14 +74,14 @@ module SuperDiff
77
74
  class Base
78
75
  def to_string_in_singleline_mode
79
76
  raise NotImplementedError.new(
80
- "#{self.class} must support #to_string_in_singleline_mode",
81
- )
77
+ "#{self.class} must support #to_string_in_singleline_mode"
78
+ )
82
79
  end
83
80
 
84
81
  def to_string_in_multiline_mode
85
82
  raise NotImplementedError.new(
86
- "#{self.class} must support #to_string_in_multiline_mode",
87
- )
83
+ "#{self.class} must support #to_string_in_multiline_mode"
84
+ )
88
85
  end
89
86
 
90
87
  def length
@@ -117,8 +114,8 @@ module SuperDiff
117
114
  def evaluate
118
115
  if immediate_value && block
119
116
  raise ArgumentError.new(
120
- "Cannot provide both immediate value and block",
121
- )
117
+ "Cannot provide both immediate value and block"
118
+ )
122
119
  end
123
120
 
124
121
  immediate_value || block.call
@@ -186,7 +183,7 @@ module SuperDiff
186
183
  evaluate.map do |value|
187
184
  colorizer.wrap(
188
185
  ::RSpec::Support::ObjectFormatter.format(value),
189
- color,
186
+ color
190
187
  )
191
188
  end
192
189
  end