super_diff 0.12.1 → 0.15.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 (272) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -19
  3. data/lib/super_diff/active_record/differs/active_record_relation.rb +2 -0
  4. data/lib/super_diff/active_record/differs.rb +3 -1
  5. data/lib/super_diff/active_record/inspection_tree_builders/active_record_model.rb +7 -5
  6. data/lib/super_diff/active_record/inspection_tree_builders/active_record_relation.rb +12 -10
  7. data/lib/super_diff/active_record/inspection_tree_builders.rb +4 -2
  8. data/lib/super_diff/active_record/monkey_patches.rb +4 -2
  9. data/lib/super_diff/active_record/object_inspection.rb +6 -4
  10. data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +3 -1
  11. data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +3 -1
  12. data/lib/super_diff/active_record/operation_tree_builders.rb +4 -2
  13. data/lib/super_diff/active_record/operation_tree_flatteners/active_record_relation.rb +4 -2
  14. data/lib/super_diff/active_record/operation_tree_flatteners.rb +3 -1
  15. data/lib/super_diff/active_record/operation_trees/active_record_relation.rb +2 -0
  16. data/lib/super_diff/active_record/operation_trees.rb +3 -1
  17. data/lib/super_diff/active_record.rb +10 -8
  18. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +2 -0
  19. data/lib/super_diff/active_support/differs.rb +3 -1
  20. data/lib/super_diff/active_support/inspection_tree_builders/hash_with_indifferent_access.rb +16 -14
  21. data/lib/super_diff/active_support/inspection_tree_builders/ordered_options.rb +16 -14
  22. data/lib/super_diff/active_support/inspection_tree_builders.rb +4 -2
  23. data/lib/super_diff/active_support/object_inspection.rb +6 -4
  24. data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +6 -4
  25. data/lib/super_diff/active_support/operation_tree_builders.rb +3 -1
  26. data/lib/super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access.rb +4 -2
  27. data/lib/super_diff/active_support/operation_tree_flatteners.rb +3 -1
  28. data/lib/super_diff/active_support/operation_trees/hash_with_indifferent_access.rb +2 -0
  29. data/lib/super_diff/active_support/operation_trees.rb +3 -1
  30. data/lib/super_diff/active_support.rb +8 -6
  31. data/lib/super_diff/basic/diff_formatters/collection.rb +18 -18
  32. data/lib/super_diff/basic/diff_formatters/multiline_string.rb +2 -0
  33. data/lib/super_diff/basic/diff_formatters.rb +4 -2
  34. data/lib/super_diff/basic/differs/array.rb +2 -0
  35. data/lib/super_diff/basic/differs/custom_object.rb +3 -1
  36. data/lib/super_diff/basic/differs/date_like.rb +2 -0
  37. data/lib/super_diff/basic/differs/default_object.rb +3 -1
  38. data/lib/super_diff/basic/differs/hash.rb +2 -0
  39. data/lib/super_diff/basic/differs/multiline_string.rb +2 -0
  40. data/lib/super_diff/basic/differs/time_like.rb +2 -0
  41. data/lib/super_diff/basic/differs.rb +11 -9
  42. data/lib/super_diff/basic/inspection_tree_builders/array.rb +5 -3
  43. data/lib/super_diff/basic/inspection_tree_builders/custom_object.rb +5 -3
  44. data/lib/super_diff/basic/inspection_tree_builders/data_object.rb +42 -0
  45. data/lib/super_diff/basic/inspection_tree_builders/date_like.rb +7 -5
  46. data/lib/super_diff/basic/inspection_tree_builders/default_object.rb +7 -5
  47. data/lib/super_diff/basic/inspection_tree_builders/hash.rb +7 -5
  48. data/lib/super_diff/basic/inspection_tree_builders/primitive.rb +3 -1
  49. data/lib/super_diff/basic/inspection_tree_builders/range_object.rb +19 -0
  50. data/lib/super_diff/basic/inspection_tree_builders/time_like.rb +8 -8
  51. data/lib/super_diff/basic/inspection_tree_builders.rb +18 -8
  52. data/lib/super_diff/basic/operation_tree_builders/array.rb +6 -4
  53. data/lib/super_diff/basic/operation_tree_builders/custom_object.rb +3 -1
  54. data/lib/super_diff/basic/operation_tree_builders/data_object.rb +20 -0
  55. data/lib/super_diff/basic/operation_tree_builders/date_like.rb +2 -0
  56. data/lib/super_diff/basic/operation_tree_builders/default_object.rb +32 -31
  57. data/lib/super_diff/basic/operation_tree_builders/hash.rb +49 -46
  58. data/lib/super_diff/basic/operation_tree_builders/multiline_string.rb +5 -3
  59. data/lib/super_diff/basic/operation_tree_builders/time_like.rb +5 -3
  60. data/lib/super_diff/basic/operation_tree_builders.rb +15 -9
  61. data/lib/super_diff/basic/operation_tree_flatteners/array.rb +4 -2
  62. data/lib/super_diff/basic/operation_tree_flatteners/collection.rb +11 -11
  63. data/lib/super_diff/basic/operation_tree_flatteners/custom_object.rb +5 -3
  64. data/lib/super_diff/basic/operation_tree_flatteners/default_object.rb +6 -5
  65. data/lib/super_diff/basic/operation_tree_flatteners/hash.rb +5 -3
  66. data/lib/super_diff/basic/operation_tree_flatteners/multiline_string.rb +3 -1
  67. data/lib/super_diff/basic/operation_tree_flatteners.rb +8 -6
  68. data/lib/super_diff/basic/operation_trees/array.rb +2 -0
  69. data/lib/super_diff/basic/operation_trees/custom_object.rb +2 -0
  70. data/lib/super_diff/basic/operation_trees/default_object.rb +6 -4
  71. data/lib/super_diff/basic/operation_trees/hash.rb +2 -0
  72. data/lib/super_diff/basic/operation_trees/multiline_string.rb +3 -1
  73. data/lib/super_diff/basic/operation_trees.rb +9 -7
  74. data/lib/super_diff/basic.rb +12 -7
  75. data/lib/super_diff/core/abstract_differ.rb +2 -0
  76. data/lib/super_diff/core/abstract_inspection_tree_builder.rb +2 -0
  77. data/lib/super_diff/core/abstract_operation_tree.rb +4 -2
  78. data/lib/super_diff/core/abstract_operation_tree_builder.rb +15 -18
  79. data/lib/super_diff/core/abstract_operation_tree_flattener.rb +5 -3
  80. data/lib/super_diff/core/binary_operation.rb +3 -1
  81. data/lib/super_diff/core/colorized_document_extensions.rb +2 -0
  82. data/lib/super_diff/core/configuration.rb +23 -43
  83. data/lib/super_diff/core/differ_dispatcher.rb +4 -2
  84. data/lib/super_diff/core/gem_version.rb +2 -0
  85. data/lib/super_diff/core/helpers.rb +14 -12
  86. data/lib/super_diff/core/implementation_checks.rb +6 -2
  87. data/lib/super_diff/core/inspection_tree.rb +38 -38
  88. data/lib/super_diff/core/inspection_tree_builder_dispatcher.rb +5 -5
  89. data/lib/super_diff/core/inspection_tree_nodes/as_lines_when_rendering_to_lines.rb +3 -1
  90. data/lib/super_diff/core/inspection_tree_nodes/as_prefix_when_rendering_to_lines.rb +2 -0
  91. data/lib/super_diff/core/inspection_tree_nodes/as_prelude_when_rendering_to_lines.rb +2 -0
  92. data/lib/super_diff/core/inspection_tree_nodes/as_single_line.rb +2 -0
  93. data/lib/super_diff/core/inspection_tree_nodes/base.rb +9 -9
  94. data/lib/super_diff/core/inspection_tree_nodes/inspection.rb +2 -0
  95. data/lib/super_diff/core/inspection_tree_nodes/nesting.rb +2 -0
  96. data/lib/super_diff/core/inspection_tree_nodes/only_when.rb +5 -1
  97. data/lib/super_diff/core/inspection_tree_nodes/text.rb +2 -0
  98. data/lib/super_diff/core/inspection_tree_nodes/when_empty.rb +3 -1
  99. data/lib/super_diff/core/inspection_tree_nodes/when_non_empty.rb +3 -1
  100. data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_lines.rb +3 -1
  101. data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_string.rb +2 -0
  102. data/lib/super_diff/core/inspection_tree_nodes.rb +16 -14
  103. data/lib/super_diff/core/line.rb +9 -7
  104. data/lib/super_diff/core/no_differ_available_error.rb +7 -5
  105. data/lib/super_diff/core/no_inspection_tree_builder_available_error.rb +5 -3
  106. data/lib/super_diff/core/no_operation_tree_available_error.rb +4 -2
  107. data/lib/super_diff/core/no_operation_tree_builder_available_error.rb +7 -5
  108. data/lib/super_diff/core/operation_tree_builder_dispatcher.rb +3 -3
  109. data/lib/super_diff/core/operation_tree_finder.rb +8 -8
  110. data/lib/super_diff/core/prefix_for_next_inspection_tree_node.rb +2 -0
  111. data/lib/super_diff/core/prelude_for_next_inspection_tree_node.rb +2 -0
  112. data/lib/super_diff/core/recursion_guard.rb +6 -4
  113. data/lib/super_diff/core/tiered_lines.rb +2 -0
  114. data/lib/super_diff/core/tiered_lines_elider.rb +53 -54
  115. data/lib/super_diff/core/tiered_lines_formatter.rb +6 -4
  116. data/lib/super_diff/core/unary_operation.rb +2 -0
  117. data/lib/super_diff/core.rb +31 -29
  118. data/lib/super_diff/csi/bold_sequence.rb +2 -0
  119. data/lib/super_diff/csi/color.rb +4 -4
  120. data/lib/super_diff/csi/color_sequence_block.rb +3 -1
  121. data/lib/super_diff/csi/colorized_document.rb +7 -9
  122. data/lib/super_diff/csi/document.rb +15 -18
  123. data/lib/super_diff/csi/eight_bit_color.rb +32 -37
  124. data/lib/super_diff/csi/four_bit_color.rb +12 -9
  125. data/lib/super_diff/csi/reset_sequence.rb +2 -0
  126. data/lib/super_diff/csi/twenty_four_bit_color.rb +22 -21
  127. data/lib/super_diff/csi/uncolorized_document.rb +2 -0
  128. data/lib/super_diff/csi.rb +12 -42
  129. data/lib/super_diff/differs.rb +6 -4
  130. data/lib/super_diff/equality_matchers/array.rb +18 -16
  131. data/lib/super_diff/equality_matchers/base.rb +6 -4
  132. data/lib/super_diff/equality_matchers/default.rb +5 -3
  133. data/lib/super_diff/equality_matchers/defaults.rb +3 -1
  134. data/lib/super_diff/equality_matchers/hash.rb +18 -16
  135. data/lib/super_diff/equality_matchers/main.rb +3 -1
  136. data/lib/super_diff/equality_matchers/multiline_string.rb +18 -16
  137. data/lib/super_diff/equality_matchers/primitive.rb +15 -13
  138. data/lib/super_diff/equality_matchers/singleline_string.rb +16 -14
  139. data/lib/super_diff/equality_matchers.rb +11 -9
  140. data/lib/super_diff/errors.rb +4 -2
  141. data/lib/super_diff/object_inspection.rb +17 -15
  142. data/lib/super_diff/operation_tree_builders.rb +6 -4
  143. data/lib/super_diff/operation_tree_flatteners.rb +6 -4
  144. data/lib/super_diff/operation_trees.rb +6 -4
  145. data/lib/super_diff/operations.rb +4 -2
  146. data/lib/super_diff/rails.rb +4 -2
  147. data/lib/super_diff/rspec/augmented_matcher.rb +3 -1
  148. data/lib/super_diff/rspec/differ.rb +16 -7
  149. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +2 -0
  150. data/lib/super_diff/rspec/differs/collection_including.rb +2 -0
  151. data/lib/super_diff/rspec/differs/hash_including.rb +2 -0
  152. data/lib/super_diff/rspec/differs/object_having_attributes.rb +2 -0
  153. data/lib/super_diff/rspec/differs.rb +6 -4
  154. data/lib/super_diff/rspec/inspection_tree_builders/collection_containing_exactly.rb +12 -10
  155. data/lib/super_diff/rspec/inspection_tree_builders/collection_including.rb +10 -8
  156. data/lib/super_diff/rspec/inspection_tree_builders/double.rb +20 -18
  157. data/lib/super_diff/rspec/inspection_tree_builders/generic_describable_matcher.rb +2 -0
  158. data/lib/super_diff/rspec/inspection_tree_builders/hash_including.rb +10 -8
  159. data/lib/super_diff/rspec/inspection_tree_builders/instance_of.rb +2 -0
  160. data/lib/super_diff/rspec/inspection_tree_builders/kind_of.rb +2 -0
  161. data/lib/super_diff/rspec/inspection_tree_builders/object_having_attributes.rb +12 -10
  162. data/lib/super_diff/rspec/inspection_tree_builders/primitive.rb +2 -0
  163. data/lib/super_diff/rspec/inspection_tree_builders/value_within.rb +6 -4
  164. data/lib/super_diff/rspec/inspection_tree_builders.rb +12 -10
  165. data/lib/super_diff/rspec/matcher_text_builders/base.rb +12 -12
  166. data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +19 -17
  167. data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +3 -1
  168. data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +7 -5
  169. data/lib/super_diff/rspec/matcher_text_builders/match.rb +6 -4
  170. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +5 -3
  171. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +20 -18
  172. data/lib/super_diff/rspec/matcher_text_builders.rb +9 -7
  173. data/lib/super_diff/rspec/matcher_text_template.rb +34 -39
  174. data/lib/super_diff/rspec/monkey_patches.rb +129 -56
  175. data/lib/super_diff/rspec/object_inspection.rb +7 -5
  176. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +4 -4
  177. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +2 -0
  178. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +2 -0
  179. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +2 -0
  180. data/lib/super_diff/rspec/operation_tree_builders.rb +6 -4
  181. data/lib/super_diff/rspec-rails.rb +4 -2
  182. data/lib/super_diff/rspec.rb +27 -14
  183. data/lib/super_diff/version.rb +3 -1
  184. data/lib/super_diff.rb +24 -27
  185. data/super_diff.gemspec +20 -18
  186. metadata +15 -182
  187. data/spec/examples.txt +0 -704
  188. data/spec/integration/rails/active_record_spec.rb +0 -21
  189. data/spec/integration/rails/active_support_spec.rb +0 -19
  190. data/spec/integration/rails/engines_spec.rb +0 -25
  191. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +0 -21
  192. data/spec/integration/rspec/be_falsey_matcher_spec.rb +0 -58
  193. data/spec/integration/rspec/be_matcher_spec.rb +0 -605
  194. data/spec/integration/rspec/be_nil_matcher_spec.rb +0 -57
  195. data/spec/integration/rspec/be_predicate_matcher_spec.rb +0 -615
  196. data/spec/integration/rspec/be_truthy_matcher_spec.rb +0 -62
  197. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +0 -377
  198. data/spec/integration/rspec/eq_matcher_spec.rb +0 -1066
  199. data/spec/integration/rspec/generic_describable_matchers_spec.rb +0 -177
  200. data/spec/integration/rspec/have_attributes_matcher_spec.rb +0 -443
  201. data/spec/integration/rspec/have_predicate_matcher_spec.rb +0 -478
  202. data/spec/integration/rspec/include_matcher_spec.rb +0 -452
  203. data/spec/integration/rspec/magic_metadata_spec.rb +0 -51
  204. data/spec/integration/rspec/match_array_matcher_spec.rb +0 -424
  205. data/spec/integration/rspec/match_matcher_spec.rb +0 -1359
  206. data/spec/integration/rspec/raise_error_matcher_spec.rb +0 -1488
  207. data/spec/integration/rspec/respond_to_matcher_spec.rb +0 -999
  208. data/spec/integration/rspec/third_party_matcher_spec.rb +0 -245
  209. data/spec/integration/rspec/unhandled_errors_spec.rb +0 -150
  210. data/spec/internal/log/test.log +0 -0
  211. data/spec/spec_helper.rb +0 -90
  212. data/spec/support/colorizer.rb +0 -9
  213. data/spec/support/command_runner.rb +0 -253
  214. data/spec/support/helpers.rb +0 -21
  215. data/spec/support/integration/helpers.rb +0 -124
  216. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
  217. data/spec/support/integration/matchers.rb +0 -177
  218. data/spec/support/integration/test_programs/base.rb +0 -143
  219. data/spec/support/integration/test_programs/plain.rb +0 -19
  220. data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
  221. data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
  222. data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
  223. data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
  224. data/spec/support/models/a.rb +0 -11
  225. data/spec/support/models/active_record/person.rb +0 -28
  226. data/spec/support/models/active_record/query.rb +0 -15
  227. data/spec/support/models/active_record/shipping_address.rb +0 -24
  228. data/spec/support/models/customer.rb +0 -22
  229. data/spec/support/models/empty_class.rb +0 -6
  230. data/spec/support/models/item.rb +0 -10
  231. data/spec/support/models/order.rb +0 -9
  232. data/spec/support/models/person.rb +0 -20
  233. data/spec/support/models/player.rb +0 -30
  234. data/spec/support/models/shipping_address.rb +0 -25
  235. data/spec/support/shared_examples/active_record.rb +0 -428
  236. data/spec/support/shared_examples/active_support.rb +0 -188
  237. data/spec/support/shared_examples/elided_diffs.rb +0 -938
  238. data/spec/support/shared_examples/hash_with_indifferent_access.rb +0 -749
  239. data/spec/support/shared_examples/key.rb +0 -123
  240. data/spec/support/unit/helpers.rb +0 -24
  241. data/spec/support/unit/matchers/be_deprecated_in_favor_of.rb +0 -39
  242. data/spec/support/unit/matchers/match_output.rb +0 -40
  243. data/spec/unit/active_record/object_inspection_spec.rb +0 -289
  244. data/spec/unit/active_support/object_inspection_spec.rb +0 -170
  245. data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
  246. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  247. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  248. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  249. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  250. data/spec/unit/core/helpers_spec.rb +0 -68
  251. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  252. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  253. data/spec/unit/deprecations_spec.rb +0 -176
  254. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  255. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  256. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  257. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  258. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  259. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  260. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  261. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  262. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  263. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  264. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  265. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  266. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  267. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  268. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  269. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  270. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  271. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  272. data/spec/unit/super_diff_spec.rb +0 -2115
@@ -309,73 +309,146 @@ module RSpec
309
309
  end
310
310
 
311
311
  module Matchers
312
- class ExpectedsForMultipleDiffs
313
- SuperDiff.insert_singleton_overrides(self) do
314
- # Add a key for different sides
315
- def from(expected)
316
- return expected if self === expected
317
-
318
- text = colorizer.wrap("Diff:", SuperDiff.configuration.header_color)
319
-
320
- if SuperDiff.configuration.key_enabled?
321
- text +=
322
- "\n\n" +
323
- colorizer.wrap(
324
- "┌ (Key) ──────────────────────────┐",
325
- SuperDiff.configuration.border_color
326
- ) + "\n" +
327
- colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
328
- colorizer.wrap(
329
- "‹-› in expected, not in actual",
330
- SuperDiff.configuration.expected_color
331
- ) +
332
- colorizer.wrap(" │", SuperDiff.configuration.border_color) +
333
- "\n" +
334
- colorizer.wrap("", SuperDiff.configuration.border_color) +
335
- colorizer.wrap(
336
- "‹+› in actual, not in expected",
337
- SuperDiff.configuration.actual_color
338
- ) +
339
- colorizer.wrap(" │", SuperDiff.configuration.border_color) +
340
- "\n" +
341
- colorizer.wrap("", SuperDiff.configuration.border_color) +
342
- " in both expected and actual" +
343
- colorizer.wrap(" ", SuperDiff.configuration.border_color) +
344
- "\n" +
345
- colorizer.wrap(
346
- "└─────────────────────────────────┘",
347
- SuperDiff.configuration.border_color
348
- )
312
+ if SuperDiff::RSpec.rspec_version < "3.13.0"
313
+ class ExpectedsForMultipleDiffs
314
+ SuperDiff.insert_singleton_overrides(self) do
315
+ # Add a key for different sides
316
+ def from(expected)
317
+ return expected if self === expected
318
+
319
+ text = colorizer.wrap("Diff:", SuperDiff.configuration.header_color)
320
+
321
+ if SuperDiff.configuration.key_enabled?
322
+ text +=
323
+ "\n\n" +
324
+ colorizer.wrap(
325
+ "┌ (Key) ──────────────────────────┐",
326
+ SuperDiff.configuration.border_color
327
+ ) + "\n" +
328
+ colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
329
+ colorizer.wrap(
330
+ "‹-› in expected, not in actual",
331
+ SuperDiff.configuration.expected_color
332
+ ) +
333
+ colorizer.wrap("", SuperDiff.configuration.border_color) +
334
+ "\n" +
335
+ colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
336
+ colorizer.wrap(
337
+ "‹+› in actual, not in expected",
338
+ SuperDiff.configuration.actual_color
339
+ ) +
340
+ colorizer.wrap("", SuperDiff.configuration.border_color) +
341
+ "\n" +
342
+ colorizer.wrap(" ", SuperDiff.configuration.border_color) +
343
+ " › in both expected and actual" +
344
+ colorizer.wrap("", SuperDiff.configuration.border_color) +
345
+ "\n" +
346
+ colorizer.wrap(
347
+ "└─────────────────────────────────┘",
348
+ SuperDiff.configuration.border_color
349
+ )
350
+ end
351
+
352
+ new([[expected, text]])
349
353
  end
350
354
 
351
- new([[expected, text]])
355
+ def colorizer
356
+ RSpec::Core::Formatters::ConsoleCodes
357
+ end
352
358
  end
353
359
 
354
- def colorizer
355
- RSpec::Core::Formatters::ConsoleCodes
360
+ SuperDiff.insert_overrides(self) do
361
+ # Add an extra line break
362
+ def message_with_diff(message, differ, actual)
363
+ diff = diffs(differ, actual)
364
+
365
+ diff.empty? ? message : "#{message.rstrip}\n\n#{diff}"
366
+ end
367
+
368
+ private
369
+
370
+ # Add extra line breaks in between diffs, and colorize the word "Diff"
371
+ def diffs(differ, actual)
372
+ @expected_list
373
+ .map do |(expected, diff_label)|
374
+ diff = differ.diff(actual, expected)
375
+ next if diff.strip.empty?
376
+ diff_label + diff
377
+ end
378
+ .compact
379
+ .join("\n\n")
380
+ end
356
381
  end
357
382
  end
383
+ else
384
+ class MultiMatcherDiff
385
+ SuperDiff.insert_singleton_overrides(self) do
386
+ # Add a key for different sides
387
+ def from(expected, actual)
388
+ return expected if self === expected
389
+
390
+ text = colorizer.wrap("Diff:", SuperDiff.configuration.header_color)
391
+
392
+ if SuperDiff.configuration.key_enabled?
393
+ text +=
394
+ "\n\n" +
395
+ colorizer.wrap(
396
+ "┌ (Key) ──────────────────────────┐",
397
+ SuperDiff.configuration.border_color
398
+ ) + "\n" +
399
+ colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
400
+ colorizer.wrap(
401
+ "‹-› in expected, not in actual",
402
+ SuperDiff.configuration.expected_color
403
+ ) +
404
+ colorizer.wrap(" │", SuperDiff.configuration.border_color) +
405
+ "\n" +
406
+ colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
407
+ colorizer.wrap(
408
+ "‹+› in actual, not in expected",
409
+ SuperDiff.configuration.actual_color
410
+ ) +
411
+ colorizer.wrap(" │", SuperDiff.configuration.border_color) +
412
+ "\n" +
413
+ colorizer.wrap("│ ", SuperDiff.configuration.border_color) +
414
+ "‹ › in both expected and actual" +
415
+ colorizer.wrap(" │", SuperDiff.configuration.border_color) +
416
+ "\n" +
417
+ colorizer.wrap(
418
+ "└─────────────────────────────────┘",
419
+ SuperDiff.configuration.border_color
420
+ )
421
+ end
358
422
 
359
- SuperDiff.insert_overrides(self) do
360
- # Add an extra line break
361
- def message_with_diff(message, differ, actual)
362
- diff = diffs(differ, actual)
423
+ new([[expected, text, actual]])
424
+ end
363
425
 
364
- diff.empty? ? message : "#{message.rstrip}\n\n#{diff}"
426
+ def colorizer
427
+ RSpec::Core::Formatters::ConsoleCodes
428
+ end
365
429
  end
366
430
 
367
- private
431
+ SuperDiff.insert_overrides(self) do
432
+ # Add an extra line break
433
+ def message_with_diff(message, differ)
434
+ diff = diffs(differ)
435
+
436
+ diff.empty? ? message : "#{message.rstrip}\n\n#{diff}"
437
+ end
368
438
 
369
- # Add extra line breaks in between diffs, and colorize the word "Diff"
370
- def diffs(differ, actual)
371
- @expected_list
372
- .map do |(expected, diff_label)|
373
- diff = differ.diff(actual, expected)
374
- next if diff.strip.empty?
375
- diff_label + diff
376
- end
377
- .compact
378
- .join("\n\n")
439
+ private
440
+
441
+ # Add extra line breaks in between diffs, and colorize the word "Diff"
442
+ def diffs(differ)
443
+ @expected_list
444
+ .map do |(expected, diff_label, actual)|
445
+ diff = differ.diff(actual, expected)
446
+ next if diff.strip.empty?
447
+ diff_label + diff
448
+ end
449
+ .compact
450
+ .join("\n\n")
451
+ end
379
452
  end
380
453
  end
381
454
  end
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module RSpec
3
5
  module ObjectInspection
4
6
  module InspectionTreeBuilders
5
7
  def self.const_missing(missing_const_name)
6
8
  if RSpec::InspectionTreeBuilders.const_defined?(missing_const_name)
7
- warn <<~EOT
8
- WARNING: SuperDiff::RSpec::ObjectInspection::InspectionTreeBuilders::#{missing_const_name} is deprecated and will be removed in the next major release.
9
- Please use SuperDiff::RSpec::InspectionTreeBuilders::#{missing_const_name} instead.
10
- #{caller_locations.join("\n")}
11
- EOT
9
+ warn <<~WARNING
10
+ WARNING: SuperDiff::RSpec::ObjectInspection::InspectionTreeBuilders::#{missing_const_name} is deprecated and will be removed in the next major release.
11
+ Please use SuperDiff::RSpec::InspectionTreeBuilders::#{missing_const_name} instead.
12
+ #{caller_locations.join("\n")}
13
+ WARNING
12
14
  RSpec::InspectionTreeBuilders.const_get(missing_const_name)
13
15
  else
14
16
  super
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module RSpec
3
5
  module OperationTreeBuilders
@@ -19,9 +21,7 @@ module SuperDiff
19
21
  operations = []
20
22
 
21
23
  (0...actual.length)
22
- .reject do |index|
23
- indexes_in_actual_but_not_in_expected.include?(index)
24
- end
24
+ .reject { |index| indexes_in_actual_but_not_in_expected.include?(index) }
25
25
  .each { |index| add_noop_to(operations, index) }
26
26
 
27
27
  indexes_in_actual_but_not_in_expected.each do |index|
@@ -36,7 +36,7 @@ module SuperDiff
36
36
  end
37
37
 
38
38
  def build_operation_tree
39
- OperationTrees::Array.new([])
39
+ Basic::OperationTrees::Array.new([])
40
40
  end
41
41
 
42
42
  private
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module RSpec
3
5
  module OperationTreeBuilders
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module RSpec
3
5
  module OperationTreeBuilders
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module RSpec
3
5
  module OperationTreeBuilders
@@ -1,21 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module RSpec
3
5
  module OperationTreeBuilders
4
6
  autoload(
5
7
  :CollectionContainingExactly,
6
- "super_diff/rspec/operation_tree_builders/collection_containing_exactly"
8
+ 'super_diff/rspec/operation_tree_builders/collection_containing_exactly'
7
9
  )
8
10
  autoload(
9
11
  :CollectionIncluding,
10
- "super_diff/rspec/operation_tree_builders/collection_including"
12
+ 'super_diff/rspec/operation_tree_builders/collection_including'
11
13
  )
12
14
  autoload(
13
15
  :HashIncluding,
14
- "super_diff/rspec/operation_tree_builders/hash_including"
16
+ 'super_diff/rspec/operation_tree_builders/hash_including'
15
17
  )
16
18
  autoload(
17
19
  :ObjectHavingAttributes,
18
- "super_diff/rspec/operation_tree_builders/object_having_attributes"
20
+ 'super_diff/rspec/operation_tree_builders/object_having_attributes'
19
21
  )
20
22
  end
21
23
  end
@@ -1,2 +1,4 @@
1
- require "super_diff/rspec"
2
- require "super_diff/rails"
1
+ # frozen_string_literal: true
2
+
3
+ require 'super_diff/rspec'
4
+ require 'super_diff/rails'
@@ -1,17 +1,19 @@
1
- require "super_diff"
1
+ # frozen_string_literal: true
2
2
 
3
- require "super_diff/rspec/differs"
4
- require "super_diff/rspec/inspection_tree_builders"
5
- require "super_diff/rspec/operation_tree_builders"
3
+ require 'super_diff'
4
+
5
+ require 'super_diff/rspec/differs'
6
+ require 'super_diff/rspec/inspection_tree_builders'
7
+ require 'super_diff/rspec/operation_tree_builders'
6
8
 
7
9
  module SuperDiff
8
10
  module RSpec
9
- autoload :AugmentedMatcher, "super_diff/rspec/augmented_matcher"
10
- autoload :Configuration, "super_diff/rspec/configuration"
11
- autoload :Differ, "super_diff/rspec/differ"
12
- autoload :MatcherTextBuilders, "super_diff/rspec/matcher_text_builders"
13
- autoload :MatcherTextTemplate, "super_diff/rspec/matcher_text_template"
14
- autoload :ObjectInspection, "super_diff/rspec/object_inspection"
11
+ autoload :AugmentedMatcher, 'super_diff/rspec/augmented_matcher'
12
+ autoload :Configuration, 'super_diff/rspec/configuration'
13
+ autoload :Differ, 'super_diff/rspec/differ'
14
+ autoload :MatcherTextBuilders, 'super_diff/rspec/matcher_text_builders'
15
+ autoload :MatcherTextTemplate, 'super_diff/rspec/matcher_text_template'
16
+ autoload :ObjectInspection, 'super_diff/rspec/object_inspection'
15
17
 
16
18
  def self.configure(&block)
17
19
  SuperDiff.configure(&block)
@@ -79,13 +81,22 @@ module SuperDiff
79
81
  end
80
82
 
81
83
  def self.aliased_matcher?(value)
82
- value.is_a?(::RSpec::Matchers::AliasedMatcher)
84
+ if SuperDiff::RSpec.rspec_version < '3.13.0'
85
+ value.is_a?(::RSpec::Matchers::AliasedMatcher)
86
+ else # See Github issue #250.
87
+ !ordered_options?(value) && value.respond_to?(:base_matcher)
88
+ end
89
+ end
90
+
91
+ def self.ordered_options?(value)
92
+ defined?(::ActiveSupport::OrderedOptions) &&
93
+ value.is_a?(::ActiveSupport::OrderedOptions)
83
94
  end
84
95
 
85
96
  def self.rspec_version
86
- @_rspec_version ||=
97
+ @rspec_version ||=
87
98
  begin
88
- require "rspec/core/version"
99
+ require 'rspec/core/version'
89
100
  Core::GemVersion.new(::RSpec::Core::Version::STRING)
90
101
  end
91
102
  end
@@ -121,4 +132,6 @@ module SuperDiff
121
132
  end
122
133
  end
123
134
 
124
- require_relative "rspec/monkey_patches"
135
+ require_relative 'rspec/monkey_patches'
136
+
137
+ RSpec.configuration.filter_gems_from_backtrace('super_diff')
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
- VERSION = "0.12.1".freeze
4
+ VERSION = '0.15.0'
3
5
  end
data/lib/super_diff.rb CHANGED
@@ -1,33 +1,35 @@
1
- require "attr_extras/explicit"
2
- require "date"
1
+ # frozen_string_literal: true
2
+
3
+ require 'attr_extras/explicit'
4
+ require 'date'
3
5
 
4
6
  module SuperDiff
5
- autoload :Core, "super_diff/core"
6
- autoload :Csi, "super_diff/csi"
7
- autoload :Differs, "super_diff/differs"
8
- autoload :EqualityMatchers, "super_diff/equality_matchers"
9
- autoload :Errors, "super_diff/errors"
10
- autoload :ObjectInspection, "super_diff/object_inspection"
11
- autoload :OperationTreeBuilders, "super_diff/operation_tree_builders"
12
- autoload :OperationTreeFlatteners, "super_diff/operation_tree_flatteners"
13
- autoload :OperationTrees, "super_diff/operation_trees"
14
- autoload :Operations, "super_diff/operations"
15
- autoload :VERSION, "super_diff/version"
7
+ autoload :Core, 'super_diff/core'
8
+ autoload :Csi, 'super_diff/csi'
9
+ autoload :Differs, 'super_diff/differs'
10
+ autoload :EqualityMatchers, 'super_diff/equality_matchers'
11
+ autoload :Errors, 'super_diff/errors'
12
+ autoload :ObjectInspection, 'super_diff/object_inspection'
13
+ autoload :OperationTreeBuilders, 'super_diff/operation_tree_builders'
14
+ autoload :OperationTreeFlatteners, 'super_diff/operation_tree_flatteners'
15
+ autoload :OperationTrees, 'super_diff/operation_trees'
16
+ autoload :Operations, 'super_diff/operations'
17
+ autoload :VERSION, 'super_diff/version'
16
18
 
17
19
  def self.const_missing(missing_const_name)
18
20
  if Core.const_defined?(missing_const_name)
19
- warn <<~EOT
21
+ warn <<~WARNING
20
22
  WARNING: SuperDiff::#{missing_const_name} is deprecated and will be removed in the next major release.
21
23
  Please use SuperDiff::Core::#{missing_const_name} instead.
22
24
  #{caller_locations.join("\n")}
23
- EOT
25
+ WARNING
24
26
  Core.const_get(missing_const_name)
25
27
  elsif Basic.const_defined?(missing_const_name)
26
- warn <<~EOT
28
+ warn <<~WARNING
27
29
  WARNING: SuperDiff::#{missing_const_name} is deprecated and will be removed in the next major release.
28
30
  Please use SuperDiff::Basic::#{missing_const_name} instead.
29
31
  #{caller_locations.join("\n")}
30
- EOT
32
+ WARNING
31
33
  Basic.const_get(missing_const_name)
32
34
  else
33
35
  super
@@ -36,11 +38,10 @@ module SuperDiff
36
38
 
37
39
  def self.configure
38
40
  yield configuration
39
- configuration.updated
40
41
  end
41
42
 
42
43
  def self.configuration
43
- @_configuration ||= Core::Configuration.new
44
+ @configuration ||= Core::Configuration.new
44
45
  end
45
46
 
46
47
  def self.diff(
@@ -114,7 +115,7 @@ module SuperDiff
114
115
 
115
116
  def self.primitive?(value)
116
117
  case value
117
- when true, false, nil, Symbol, Numeric, Regexp, Class
118
+ when true, false, nil, Symbol, Numeric, Regexp, Class, Module, String
118
119
  true
119
120
  else
120
121
  false
@@ -122,16 +123,12 @@ module SuperDiff
122
123
  end
123
124
 
124
125
  def self.insert_overrides(target_module, mod = nil, &block)
125
- mod ? target_module.prepend(mod) : target_module.prepend(Module.new(&block))
126
+ target_module.prepend(mod || Module.new(&block))
126
127
  end
127
128
 
128
129
  def self.insert_singleton_overrides(target_module, mod = nil, &block)
129
- if mod
130
- target_module.singleton_class.prepend(mod)
131
- else
132
- target_module.singleton_class.prepend(Module.new(&block))
133
- end
130
+ target_module.singleton_class.prepend(mod || Module.new(&block))
134
131
  end
135
132
  end
136
133
 
137
- require "super_diff/basic"
134
+ require 'super_diff/basic'
data/super_diff.gemspec CHANGED
@@ -1,31 +1,33 @@
1
- require File.expand_path("lib/super_diff/version", __dir__)
1
+ # frozen_string_literal: true
2
+
3
+ require File.expand_path('lib/super_diff/version', __dir__)
2
4
 
3
5
  Gem::Specification.new do |s|
4
- s.name = "super_diff"
6
+ s.name = 'super_diff'
5
7
  s.version = SuperDiff::VERSION
6
- s.authors = ["Elliot Winkler"]
7
- s.email = ["elliot.winkler@gmail.com"]
8
- s.homepage = "https://github.com/mcmire/super_diff"
8
+ s.authors = ['Elliot Winkler', 'Splitwise, Inc.']
9
+ s.email = ['oss-community@splitwise.com']
10
+ s.homepage = 'https://github.com/splitwise/super_diff'
9
11
  s.summary =
10
- "A better way to view differences between complex data structures in RSpec."
11
- s.license = "MIT"
12
+ 'A better way to view differences between complex data structures in RSpec.'
13
+ s.license = 'MIT'
12
14
  s.description = <<~DESC
13
15
  SuperDiff is a gem that hooks into RSpec to intelligently display the
14
16
  differences between two data structures of any type.
15
17
  DESC
16
18
  s.metadata = {
17
- "bug_tracker_uri" => "https://github.com/mcmire/super_diff/issues",
18
- "changelog_uri" =>
19
- "https://github.com/mcmire/super_diff/blob/main/CHANGELOG.md",
20
- "source_code_uri" => "https://github.com/mcmire/super_diff"
19
+ 'bug_tracker_uri' => 'https://github.com/splitwise/super_diff/issues',
20
+ 'changelog_uri' =>
21
+ 'https://github.com/splitwise/super_diff/blob/main/CHANGELOG.md',
22
+ 'rubygems_mfa_required' => 'true',
23
+ 'source_code_uri' => 'https://github.com/splitwise/super_diff'
21
24
  }
22
- s.required_ruby_version = ">= 3"
25
+ s.required_ruby_version = '>= 3.0'
23
26
 
24
- s.files = %w[README.md super_diff.gemspec] + Dir["lib/**/*"]
25
- s.test_files = Dir["spec/**/*"]
26
- s.executables = Dir["exe/**/*"].map { |f| File.basename(f) }
27
+ s.files = %w[README.md super_diff.gemspec] + Dir['lib/**/*']
28
+ s.executables = Dir['exe/**/*'].map { |f| File.basename(f) }
27
29
 
28
- s.add_dependency "attr_extras", ">= 6.2.4"
29
- s.add_dependency "diff-lcs"
30
- s.add_dependency "patience_diff"
30
+ s.add_dependency 'attr_extras', '>= 6.2.4'
31
+ s.add_dependency 'diff-lcs'
32
+ s.add_dependency 'patience_diff'
31
33
  end