super_diff 0.13.0 → 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 (276) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  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 +6 -4
  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 +2 -0
  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 +15 -9
  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 +4 -2
  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 +12 -10
  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 +9 -6
  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 +14 -38
  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 +13 -11
  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 -10
  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 +2 -0
  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 -26
  185. data/super_diff.gemspec +20 -19
  186. metadata +6 -185
  187. data/spec/examples.txt +0 -450
  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/spec_helper.rb +0 -91
  211. data/spec/support/colorizer.rb +0 -9
  212. data/spec/support/command_runner.rb +0 -253
  213. data/spec/support/helpers.rb +0 -21
  214. data/spec/support/integration/helpers.rb +0 -124
  215. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
  216. data/spec/support/integration/matchers.rb +0 -177
  217. data/spec/support/integration/test_programs/base.rb +0 -143
  218. data/spec/support/integration/test_programs/plain.rb +0 -19
  219. data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
  220. data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
  221. data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
  222. data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
  223. data/spec/support/models/a.rb +0 -11
  224. data/spec/support/models/active_record/person.rb +0 -28
  225. data/spec/support/models/active_record/query.rb +0 -15
  226. data/spec/support/models/active_record/shipping_address.rb +0 -24
  227. data/spec/support/models/customer.rb +0 -22
  228. data/spec/support/models/empty_class.rb +0 -6
  229. data/spec/support/models/item.rb +0 -10
  230. data/spec/support/models/order.rb +0 -9
  231. data/spec/support/models/person.rb +0 -20
  232. data/spec/support/models/player.rb +0 -30
  233. data/spec/support/models/point.rb +0 -7
  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/inspection_tree_builders/data_object_spec.rb +0 -146
  246. data/spec/unit/basic/operation_tree_builders/data_object_spec.rb +0 -82
  247. data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
  248. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  249. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  250. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  251. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  252. data/spec/unit/core/configuration_no_rspec_spec.rb +0 -58
  253. data/spec/unit/core/configuration_spec.rb +0 -176
  254. data/spec/unit/core/helpers_spec.rb +0 -68
  255. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  256. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  257. data/spec/unit/deprecations_spec.rb +0 -176
  258. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  259. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  260. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  261. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  262. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  263. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  264. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  265. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  266. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  267. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  268. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  269. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  270. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  271. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  272. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  273. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  274. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  275. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  276. data/spec/unit/super_diff_spec.rb +0 -2115
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module RSpec
3
5
  module MatcherTextBuilders
@@ -19,7 +21,7 @@ module SuperDiff
19
21
  protected
20
22
 
21
23
  def add_expected_value_to(template, expected)
22
- template.add_text " "
24
+ template.add_text ' '
23
25
  template.add_list_in_color(expected_color, expected)
24
26
  end
25
27
 
@@ -28,7 +30,7 @@ module SuperDiff
28
30
 
29
31
  if arbitrary_keywords?
30
32
  add_arbitrary_keywords_clause_to(template)
31
- elsif has_expected_keywords?
33
+ elsif expected_keywords?
32
34
  add_keywords_clause_to(template)
33
35
  end
34
36
 
@@ -43,8 +45,8 @@ module SuperDiff
43
45
  @arbitrary_keywords
44
46
  end
45
47
 
46
- def has_expected_keywords?
47
- expected_keywords && expected_keywords.count > 0
48
+ def expected_keywords?
49
+ expected_keywords&.count&.positive?
48
50
  end
49
51
 
50
52
  def unlimited_arguments?
@@ -52,34 +54,34 @@ module SuperDiff
52
54
  end
53
55
 
54
56
  def add_arity_clause_to(template)
55
- template.add_text " with "
57
+ template.add_text ' with '
56
58
  template.add_text_in_color expected_color, expected_arity
57
- template.add_text " "
58
- template.add_text pluralize("argument", expected_arity)
59
+ template.add_text ' '
60
+ template.add_text pluralize('argument', expected_arity)
59
61
  end
60
62
 
61
63
  def add_arbitrary_keywords_clause_to(template)
62
- template.add_text " with "
63
- template.add_text_in_color expected_color, "any"
64
- template.add_text " keywords"
64
+ template.add_text ' with '
65
+ template.add_text_in_color expected_color, 'any'
66
+ template.add_text ' keywords'
65
67
  end
66
68
 
67
69
  def add_keywords_clause_to(template)
68
- template.add_text " with "
69
- template.add_text pluralize("keyword", expected_keywords.length)
70
- template.add_text " "
70
+ template.add_text ' with '
71
+ template.add_text pluralize('keyword', expected_keywords.length)
72
+ template.add_text ' '
71
73
  template.add_list_in_color expected_color, expected_keywords
72
74
  end
73
75
 
74
76
  def add_unlimited_arguments_clause_to(template)
75
- if arbitrary_keywords? || has_expected_keywords?
76
- template.add_text " and "
77
+ if arbitrary_keywords? || expected_keywords?
78
+ template.add_text ' and '
77
79
  else
78
- template.add_text " with "
80
+ template.add_text ' with '
79
81
  end
80
82
 
81
- template.add_text_in_color expected_color, "unlimited"
82
- template.add_text " arguments"
83
+ template.add_text_in_color expected_color, 'unlimited'
84
+ template.add_text ' arguments'
83
85
  end
84
86
 
85
87
  def pluralize(word, count)
@@ -1,25 +1,27 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module RSpec
3
5
  module MatcherTextBuilders
4
- autoload :Base, "super_diff/rspec/matcher_text_builders/base"
6
+ autoload :Base, 'super_diff/rspec/matcher_text_builders/base'
5
7
  autoload(
6
8
  :BePredicate,
7
- "super_diff/rspec/matcher_text_builders/be_predicate"
9
+ 'super_diff/rspec/matcher_text_builders/be_predicate'
8
10
  )
9
11
  autoload(
10
12
  :ContainExactly,
11
- "super_diff/rspec/matcher_text_builders/contain_exactly"
13
+ 'super_diff/rspec/matcher_text_builders/contain_exactly'
12
14
  )
13
15
  autoload(
14
16
  :HavePredicate,
15
- "super_diff/rspec/matcher_text_builders/have_predicate"
17
+ 'super_diff/rspec/matcher_text_builders/have_predicate'
16
18
  )
17
- autoload :Match, "super_diff/rspec/matcher_text_builders/match"
19
+ autoload :Match, 'super_diff/rspec/matcher_text_builders/match'
18
20
  autoload(
19
21
  :RaiseError,
20
- "super_diff/rspec/matcher_text_builders/raise_error"
22
+ 'super_diff/rspec/matcher_text_builders/raise_error'
21
23
  )
22
- autoload(:RespondTo, "super_diff/rspec/matcher_text_builders/respond_to")
24
+ autoload(:RespondTo, 'super_diff/rspec/matcher_text_builders/respond_to')
23
25
  end
24
26
  end
25
27
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module RSpec
3
5
  class MatcherTextTemplate
@@ -13,41 +15,41 @@ module SuperDiff
13
15
  yield self if block_given?
14
16
  end
15
17
 
16
- def add_text(*args, &block)
17
- add_token(PlainText, *args, &block)
18
+ def add_text(...)
19
+ add_token(PlainText, ...)
18
20
  end
19
21
 
20
- def add_text_in_color(*args, &block)
21
- add_token(ColorizedText, *args, &block)
22
+ def add_text_in_color(...)
23
+ add_token(ColorizedText, ...)
22
24
  end
23
25
 
24
- def add_text_in_singleline_mode(*args, &block)
25
- add_token(PlainTextInSinglelineMode, *args, &block)
26
+ def add_text_in_singleline_mode(...)
27
+ add_token(PlainTextInSinglelineMode, ...)
26
28
  end
27
29
 
28
- def add_text_in_multiline_mode(*args, &block)
29
- add_token(PlainTextInMultilineMode, *args, &block)
30
+ def add_text_in_multiline_mode(...)
31
+ add_token(PlainTextInMultilineMode, ...)
30
32
  end
31
33
 
32
- def add_list_in_color(*args, &block)
33
- add_token(ColorizedList, *args, &block)
34
+ def add_list_in_color(...)
35
+ add_token(ColorizedList, ...)
34
36
  end
35
37
 
36
- def add_break(*args, &block)
37
- add_token(Break, *args, &block)
38
+ def add_break(...)
39
+ add_token(Break, ...)
38
40
  end
39
41
 
40
- def insert(*args, &block)
41
- add_token(Insertion, *args, &block)
42
+ def insert(...)
43
+ add_token(Insertion, ...)
42
44
  end
43
45
 
44
46
  def length_of_first_paragraph
45
- Csi.decolorize(to_string_in_singleline_mode).split(/\n\n/).first.length
47
+ Csi.decolorize(to_string_in_singleline_mode).split("\n\n").first.length
46
48
  end
47
49
 
48
50
  def to_s(as_single_line: nil)
49
51
  if length_of_first_paragraph > MAX_LINE_LENGTH ||
50
- as_single_line == false
52
+ as_single_line == false
51
53
  to_string_in_multiline_mode
52
54
  elsif length_of_first_paragraph <= MAX_LINE_LENGTH ||
53
55
  as_single_line == true
@@ -67,21 +69,17 @@ module SuperDiff
67
69
 
68
70
  attr_reader :tokens
69
71
 
70
- def add_token(klass, *args, &block)
71
- tokens << klass.new(*args, &block)
72
+ def add_token(klass, ...)
73
+ tokens << klass.new(...)
72
74
  end
73
75
 
74
76
  class Base
75
77
  def to_string_in_singleline_mode
76
- raise NotImplementedError.new(
77
- "#{self.class} must support #to_string_in_singleline_mode"
78
- )
78
+ raise NotImplementedError, "#{self.class} must support #to_string_in_singleline_mode"
79
79
  end
80
80
 
81
81
  def to_string_in_multiline_mode
82
- raise NotImplementedError.new(
83
- "#{self.class} must support #to_string_in_multiline_mode"
84
- )
82
+ raise NotImplementedError, "#{self.class} must support #to_string_in_multiline_mode"
85
83
  end
86
84
 
87
85
  def length
@@ -91,6 +89,7 @@ module SuperDiff
91
89
 
92
90
  class Text < Base
93
91
  def initialize(immediate_value = nil, &block)
92
+ super()
94
93
  @immediate_value = immediate_value
95
94
  @block = block
96
95
  end
@@ -104,7 +103,7 @@ module SuperDiff
104
103
  end
105
104
 
106
105
  def to_s
107
- raise NotImplementedError.new("#{self.class} must support #to_s")
106
+ raise NotImplementedError, "#{self.class} must support #to_s"
108
107
  end
109
108
 
110
109
  protected
@@ -112,11 +111,7 @@ module SuperDiff
112
111
  attr_reader :immediate_value, :block
113
112
 
114
113
  def evaluate
115
- if immediate_value && block
116
- raise ArgumentError.new(
117
- "Cannot provide both immediate value and block"
118
- )
119
- end
114
+ raise ArgumentError, 'Cannot provide both immediate value and block' if immediate_value && block
120
115
 
121
116
  immediate_value || block.call
122
117
  end
@@ -124,12 +119,12 @@ module SuperDiff
124
119
  def to_sentence(values)
125
120
  case values.length
126
121
  when 0
127
- ""
122
+ ''
128
123
  when 1
129
124
  values[0]
130
125
  else
131
126
  # TODO: Use Oxford comma
132
- values[0..-2].join(", ") + " and #{values[-1]}"
127
+ values[0..-2].join(', ') + " and #{values[-1]}"
133
128
  end
134
129
  end
135
130
  end
@@ -141,8 +136,8 @@ module SuperDiff
141
136
  end
142
137
 
143
138
  class ColorizedText < Text
144
- def initialize(color, *args, &block)
145
- super(*args, &block)
139
+ def initialize(color, ...)
140
+ super(...)
146
141
 
147
142
  @color = color
148
143
  end
@@ -165,8 +160,8 @@ module SuperDiff
165
160
  end
166
161
 
167
162
  class ColorizedList < Text
168
- def initialize(color, *args, &block)
169
- super(*args, &block)
163
+ def initialize(color, ...)
164
+ super(...)
170
165
 
171
166
  @color = color
172
167
  end
@@ -199,13 +194,13 @@ module SuperDiff
199
194
  end
200
195
 
201
196
  def to_string_in_multiline_mode
202
- ""
197
+ ''
203
198
  end
204
199
  end
205
200
 
206
201
  class PlainTextInMultilineMode < Text
207
202
  def to_string_in_singleline_mode
208
- ""
203
+ ''
209
204
  end
210
205
 
211
206
  def to_string_in_multiline_mode
@@ -215,7 +210,7 @@ module SuperDiff
215
210
 
216
211
  class Break < Base
217
212
  def to_string_in_singleline_mode
218
- " "
213
+ ' '
219
214
  end
220
215
 
221
216
  def to_string_in_multiline_mode
@@ -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'