super_diff 0.13.0 → 0.15.0

Sign up to get free protection for your applications and to get access to all the features.
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'