super_diff 0.13.0 → 0.14.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 (275) 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/object_inspection.rb +7 -5
  175. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +4 -4
  176. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +2 -0
  177. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +2 -0
  178. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +2 -0
  179. data/lib/super_diff/rspec/operation_tree_builders.rb +6 -4
  180. data/lib/super_diff/rspec-rails.rb +4 -2
  181. data/lib/super_diff/rspec.rb +15 -13
  182. data/lib/super_diff/version.rb +3 -1
  183. data/lib/super_diff.rb +24 -26
  184. data/super_diff.gemspec +20 -19
  185. metadata +6 -185
  186. data/spec/examples.txt +0 -450
  187. data/spec/integration/rails/active_record_spec.rb +0 -21
  188. data/spec/integration/rails/active_support_spec.rb +0 -19
  189. data/spec/integration/rails/engines_spec.rb +0 -25
  190. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +0 -21
  191. data/spec/integration/rspec/be_falsey_matcher_spec.rb +0 -58
  192. data/spec/integration/rspec/be_matcher_spec.rb +0 -605
  193. data/spec/integration/rspec/be_nil_matcher_spec.rb +0 -57
  194. data/spec/integration/rspec/be_predicate_matcher_spec.rb +0 -615
  195. data/spec/integration/rspec/be_truthy_matcher_spec.rb +0 -62
  196. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +0 -377
  197. data/spec/integration/rspec/eq_matcher_spec.rb +0 -1066
  198. data/spec/integration/rspec/generic_describable_matchers_spec.rb +0 -177
  199. data/spec/integration/rspec/have_attributes_matcher_spec.rb +0 -443
  200. data/spec/integration/rspec/have_predicate_matcher_spec.rb +0 -478
  201. data/spec/integration/rspec/include_matcher_spec.rb +0 -452
  202. data/spec/integration/rspec/magic_metadata_spec.rb +0 -51
  203. data/spec/integration/rspec/match_array_matcher_spec.rb +0 -424
  204. data/spec/integration/rspec/match_matcher_spec.rb +0 -1359
  205. data/spec/integration/rspec/raise_error_matcher_spec.rb +0 -1488
  206. data/spec/integration/rspec/respond_to_matcher_spec.rb +0 -999
  207. data/spec/integration/rspec/third_party_matcher_spec.rb +0 -245
  208. data/spec/integration/rspec/unhandled_errors_spec.rb +0 -150
  209. data/spec/spec_helper.rb +0 -91
  210. data/spec/support/colorizer.rb +0 -9
  211. data/spec/support/command_runner.rb +0 -253
  212. data/spec/support/helpers.rb +0 -21
  213. data/spec/support/integration/helpers.rb +0 -124
  214. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
  215. data/spec/support/integration/matchers.rb +0 -177
  216. data/spec/support/integration/test_programs/base.rb +0 -143
  217. data/spec/support/integration/test_programs/plain.rb +0 -19
  218. data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
  219. data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
  220. data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
  221. data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
  222. data/spec/support/models/a.rb +0 -11
  223. data/spec/support/models/active_record/person.rb +0 -28
  224. data/spec/support/models/active_record/query.rb +0 -15
  225. data/spec/support/models/active_record/shipping_address.rb +0 -24
  226. data/spec/support/models/customer.rb +0 -22
  227. data/spec/support/models/empty_class.rb +0 -6
  228. data/spec/support/models/item.rb +0 -10
  229. data/spec/support/models/order.rb +0 -9
  230. data/spec/support/models/person.rb +0 -20
  231. data/spec/support/models/player.rb +0 -30
  232. data/spec/support/models/point.rb +0 -7
  233. data/spec/support/models/shipping_address.rb +0 -25
  234. data/spec/support/shared_examples/active_record.rb +0 -428
  235. data/spec/support/shared_examples/active_support.rb +0 -188
  236. data/spec/support/shared_examples/elided_diffs.rb +0 -938
  237. data/spec/support/shared_examples/hash_with_indifferent_access.rb +0 -749
  238. data/spec/support/shared_examples/key.rb +0 -123
  239. data/spec/support/unit/helpers.rb +0 -24
  240. data/spec/support/unit/matchers/be_deprecated_in_favor_of.rb +0 -39
  241. data/spec/support/unit/matchers/match_output.rb +0 -40
  242. data/spec/unit/active_record/object_inspection_spec.rb +0 -289
  243. data/spec/unit/active_support/object_inspection_spec.rb +0 -170
  244. data/spec/unit/basic/inspection_tree_builders/data_object_spec.rb +0 -146
  245. data/spec/unit/basic/operation_tree_builders/data_object_spec.rb +0 -82
  246. data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
  247. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  248. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  249. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  250. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  251. data/spec/unit/core/configuration_no_rspec_spec.rb +0 -58
  252. data/spec/unit/core/configuration_spec.rb +0 -176
  253. data/spec/unit/core/helpers_spec.rb +0 -68
  254. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  255. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  256. data/spec/unit/deprecations_spec.rb +0 -176
  257. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  258. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  259. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  260. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  261. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  262. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  263. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  264. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  265. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  266. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  267. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  268. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  269. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  270. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  271. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  272. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  273. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  274. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  275. 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
@@ -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)
@@ -83,9 +85,9 @@ module SuperDiff
83
85
  end
84
86
 
85
87
  def self.rspec_version
86
- @_rspec_version ||=
88
+ @rspec_version ||=
87
89
  begin
88
- require "rspec/core/version"
90
+ require 'rspec/core/version'
89
91
  Core::GemVersion.new(::RSpec::Core::Version::STRING)
90
92
  end
91
93
  end
@@ -121,4 +123,4 @@ module SuperDiff
121
123
  end
122
124
  end
123
125
 
124
- require_relative "rspec/monkey_patches"
126
+ require_relative 'rspec/monkey_patches'
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
- VERSION = "0.13.0".freeze
4
+ VERSION = '0.14.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
@@ -39,7 +41,7 @@ module SuperDiff
39
41
  end
40
42
 
41
43
  def self.configuration
42
- @_configuration ||= Core::Configuration.new
44
+ @configuration ||= Core::Configuration.new
43
45
  end
44
46
 
45
47
  def self.diff(
@@ -113,7 +115,7 @@ module SuperDiff
113
115
 
114
116
  def self.primitive?(value)
115
117
  case value
116
- when true, false, nil, Symbol, Numeric, Regexp, Class, String
118
+ when true, false, nil, Symbol, Numeric, Regexp, Class, Module, String
117
119
  true
118
120
  else
119
121
  false
@@ -121,16 +123,12 @@ module SuperDiff
121
123
  end
122
124
 
123
125
  def self.insert_overrides(target_module, mod = nil, &block)
124
- mod ? target_module.prepend(mod) : target_module.prepend(Module.new(&block))
126
+ target_module.prepend(mod || Module.new(&block))
125
127
  end
126
128
 
127
129
  def self.insert_singleton_overrides(target_module, mod = nil, &block)
128
- if mod
129
- target_module.singleton_class.prepend(mod)
130
- else
131
- target_module.singleton_class.prepend(Module.new(&block))
132
- end
130
+ target_module.singleton_class.prepend(mod || Module.new(&block))
133
131
  end
134
132
  end
135
133
 
136
- require "super_diff/basic"
134
+ require 'super_diff/basic'
data/super_diff.gemspec CHANGED
@@ -1,32 +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", "Splitwise, Inc."]
7
- s.email = ["oss-community@splitwise.com"]
8
- s.homepage = "https://github.com/splitwise/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/splitwise/super_diff/issues",
18
- "changelog_uri" =>
19
- "https://github.com/splitwise/super_diff/blob/main/CHANGELOG.md",
20
- "rubygems_mfa_required" => "true",
21
- "source_code_uri" => "https://github.com/splitwise/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'
22
24
  }
23
- s.required_ruby_version = ">= 3"
25
+ s.required_ruby_version = '>= 3.0'
24
26
 
25
- s.files = %w[README.md super_diff.gemspec] + Dir["lib/**/*"]
26
- s.test_files = Dir["spec/**/*"]
27
- 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) }
28
29
 
29
- s.add_dependency "attr_extras", ">= 6.2.4"
30
- s.add_dependency "diff-lcs"
31
- 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'
32
33
  end