super_diff 0.11.0 → 0.12.1

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 (231) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +19 -166
  3. data/lib/super_diff/active_record/differs/active_record_relation.rb +1 -1
  4. data/lib/super_diff/active_record/inspection_tree_builders/active_record_model.rb +57 -0
  5. data/lib/super_diff/active_record/inspection_tree_builders/active_record_relation.rb +34 -0
  6. data/lib/super_diff/active_record/inspection_tree_builders.rb +14 -0
  7. data/lib/super_diff/active_record/monkey_patches.rb +6 -3
  8. data/lib/super_diff/active_record/object_inspection.rb +16 -4
  9. data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +6 -2
  10. data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +1 -1
  11. data/lib/super_diff/active_record/operation_tree_flatteners/active_record_relation.rb +1 -1
  12. data/lib/super_diff/active_record/operation_trees/active_record_relation.rb +1 -1
  13. data/lib/super_diff/active_record.rb +12 -16
  14. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +1 -1
  15. data/lib/super_diff/active_support/inspection_tree_builders/hash_with_indifferent_access.rb +44 -0
  16. data/lib/super_diff/active_support/inspection_tree_builders/ordered_options.rb +44 -0
  17. data/lib/super_diff/active_support/inspection_tree_builders.rb +14 -0
  18. data/lib/super_diff/active_support/object_inspection.rb +16 -4
  19. data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +1 -1
  20. data/lib/super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access.rb +1 -1
  21. data/lib/super_diff/active_support/operation_trees/hash_with_indifferent_access.rb +1 -1
  22. data/lib/super_diff/active_support.rb +11 -15
  23. data/lib/super_diff/basic/diff_formatters/collection.rb +135 -0
  24. data/lib/super_diff/basic/diff_formatters/multiline_string.rb +34 -0
  25. data/lib/super_diff/basic/diff_formatters.rb +11 -0
  26. data/lib/super_diff/basic/differs/array.rb +17 -0
  27. data/lib/super_diff/basic/differs/custom_object.rb +19 -0
  28. data/lib/super_diff/basic/differs/date_like.rb +17 -0
  29. data/lib/super_diff/basic/differs/default_object.rb +24 -0
  30. data/lib/super_diff/basic/differs/hash.rb +17 -0
  31. data/lib/super_diff/basic/differs/multiline_string.rb +18 -0
  32. data/lib/super_diff/basic/differs/time_like.rb +17 -0
  33. data/lib/super_diff/basic/differs.rb +24 -0
  34. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/array.rb +3 -3
  35. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/custom_object.rb +3 -3
  36. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/date_like.rb +3 -3
  37. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/default_object.rb +5 -7
  38. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/hash.rb +3 -3
  39. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/primitive.rb +3 -3
  40. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/time_like.rb +3 -3
  41. data/lib/super_diff/basic/inspection_tree_builders.rb +20 -0
  42. data/lib/super_diff/basic/operation_tree_builders/array.rb +111 -0
  43. data/lib/super_diff/basic/operation_tree_builders/custom_object.rb +42 -0
  44. data/lib/super_diff/basic/operation_tree_builders/date_like.rb +17 -0
  45. data/lib/super_diff/basic/operation_tree_builders/default_object.rb +117 -0
  46. data/lib/super_diff/basic/operation_tree_builders/hash.rb +222 -0
  47. data/lib/super_diff/basic/operation_tree_builders/multiline_string.rb +90 -0
  48. data/lib/super_diff/basic/operation_tree_builders/time_like.rb +26 -0
  49. data/lib/super_diff/basic/operation_tree_builders.rb +34 -0
  50. data/lib/super_diff/basic/operation_tree_flatteners/array.rb +17 -0
  51. data/lib/super_diff/basic/operation_tree_flatteners/collection.rb +140 -0
  52. data/lib/super_diff/basic/operation_tree_flatteners/custom_object.rb +30 -0
  53. data/lib/super_diff/basic/operation_tree_flatteners/default_object.rb +32 -0
  54. data/lib/super_diff/basic/operation_tree_flatteners/hash.rb +35 -0
  55. data/lib/super_diff/basic/operation_tree_flatteners/multiline_string.rb +20 -0
  56. data/lib/super_diff/basic/operation_tree_flatteners.rb +24 -0
  57. data/lib/super_diff/basic/operation_trees/array.rb +17 -0
  58. data/lib/super_diff/basic/operation_trees/custom_object.rb +17 -0
  59. data/lib/super_diff/basic/operation_trees/default_object.rb +42 -0
  60. data/lib/super_diff/basic/operation_trees/hash.rb +17 -0
  61. data/lib/super_diff/basic/operation_trees/multiline_string.rb +17 -0
  62. data/lib/super_diff/basic/operation_trees.rb +25 -0
  63. data/lib/super_diff/basic.rb +48 -0
  64. data/lib/super_diff/{differs/base.rb → core/abstract_differ.rb} +2 -2
  65. data/lib/super_diff/core/abstract_inspection_tree_builder.rb +26 -0
  66. data/lib/super_diff/{operation_trees/base.rb → core/abstract_operation_tree.rb} +6 -2
  67. data/lib/super_diff/{operation_tree_builders/base.rb → core/abstract_operation_tree_builder.rb} +4 -8
  68. data/lib/super_diff/{operation_tree_flatteners/base.rb → core/abstract_operation_tree_flattener.rb} +2 -2
  69. data/lib/super_diff/{operations → core}/binary_operation.rb +1 -1
  70. data/lib/super_diff/core/colorized_document_extensions.rb +20 -0
  71. data/lib/super_diff/core/configuration.rb +192 -0
  72. data/lib/super_diff/core/differ_dispatcher.rb +31 -0
  73. data/lib/super_diff/core/gem_version.rb +47 -0
  74. data/lib/super_diff/core/helpers.rb +88 -0
  75. data/lib/super_diff/core/implementation_checks.rb +21 -0
  76. data/lib/super_diff/{object_inspection → core}/inspection_tree.rb +7 -6
  77. data/lib/super_diff/core/inspection_tree_builder_dispatcher.rb +23 -0
  78. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/as_lines_when_rendering_to_lines.rb +9 -3
  79. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/as_prefix_when_rendering_to_lines.rb +3 -3
  80. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/as_prelude_when_rendering_to_lines.rb +3 -3
  81. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/as_single_line.rb +3 -3
  82. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/base.rb +2 -2
  83. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/inspection.rb +7 -11
  84. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/nesting.rb +2 -2
  85. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/only_when.rb +2 -2
  86. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/text.rb +2 -2
  87. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/when_empty.rb +2 -2
  88. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/when_non_empty.rb +2 -2
  89. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/when_rendering_to_lines.rb +2 -2
  90. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/when_rendering_to_string.rb +2 -2
  91. data/lib/super_diff/core/inspection_tree_nodes.rb +55 -0
  92. data/lib/super_diff/core/line.rb +85 -0
  93. data/lib/super_diff/{errors → core}/no_differ_available_error.rb +1 -1
  94. data/lib/super_diff/core/no_inspection_tree_builder_available_error.rb +21 -0
  95. data/lib/super_diff/core/no_operation_tree_available_error.rb +20 -0
  96. data/lib/super_diff/core/no_operation_tree_builder_available_error.rb +24 -0
  97. data/lib/super_diff/{operation_tree_builders/main.rb → core/operation_tree_builder_dispatcher.rb} +9 -13
  98. data/lib/super_diff/core/operation_tree_finder.rb +27 -0
  99. data/lib/super_diff/core/prefix_for_next_inspection_tree_node.rb +6 -0
  100. data/lib/super_diff/core/prelude_for_next_inspection_tree_node.rb +6 -0
  101. data/lib/super_diff/core/recursion_guard.rb +52 -0
  102. data/lib/super_diff/core/tiered_lines.rb +6 -0
  103. data/lib/super_diff/core/tiered_lines_elider.rb +472 -0
  104. data/lib/super_diff/core/tiered_lines_formatter.rb +77 -0
  105. data/lib/super_diff/{operations → core}/unary_operation.rb +1 -1
  106. data/lib/super_diff/core.rb +69 -0
  107. data/lib/super_diff/differs.rb +19 -12
  108. data/lib/super_diff/equality_matchers/array.rb +3 -3
  109. data/lib/super_diff/equality_matchers/default.rb +8 -3
  110. data/lib/super_diff/equality_matchers/hash.rb +3 -3
  111. data/lib/super_diff/equality_matchers/multiline_string.rb +3 -3
  112. data/lib/super_diff/equality_matchers/primitive.rb +3 -3
  113. data/lib/super_diff/equality_matchers/singleline_string.rb +2 -2
  114. data/lib/super_diff/errors.rb +12 -8
  115. data/lib/super_diff/object_inspection.rb +63 -14
  116. data/lib/super_diff/operation_tree_builders.rb +19 -15
  117. data/lib/super_diff/operation_tree_flatteners.rb +19 -16
  118. data/lib/super_diff/operation_trees.rb +19 -9
  119. data/lib/super_diff/operations.rb +12 -2
  120. data/lib/super_diff/rspec/augmented_matcher.rb +1 -1
  121. data/lib/super_diff/rspec/differ.rb +4 -5
  122. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +1 -1
  123. data/lib/super_diff/rspec/differs/collection_including.rb +1 -1
  124. data/lib/super_diff/rspec/differs/hash_including.rb +1 -1
  125. data/lib/super_diff/rspec/differs/object_having_attributes.rb +1 -1
  126. data/lib/super_diff/rspec/inspection_tree_builders/collection_containing_exactly.rb +34 -0
  127. data/lib/super_diff/rspec/inspection_tree_builders/collection_including.rb +40 -0
  128. data/lib/super_diff/rspec/inspection_tree_builders/double.rb +100 -0
  129. data/lib/super_diff/rspec/inspection_tree_builders/generic_describable_matcher.rb +17 -0
  130. data/lib/super_diff/rspec/inspection_tree_builders/hash_including.rb +40 -0
  131. data/lib/super_diff/rspec/inspection_tree_builders/instance_of.rb +25 -0
  132. data/lib/super_diff/rspec/inspection_tree_builders/kind_of.rb +25 -0
  133. data/lib/super_diff/rspec/inspection_tree_builders/object_having_attributes.rb +34 -0
  134. data/lib/super_diff/rspec/inspection_tree_builders/primitive.rb +9 -0
  135. data/lib/super_diff/rspec/inspection_tree_builders/value_within.rb +30 -0
  136. data/lib/super_diff/rspec/inspection_tree_builders.rb +40 -0
  137. data/lib/super_diff/rspec/object_inspection.rb +14 -4
  138. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +4 -4
  139. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +1 -1
  140. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +1 -1
  141. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +2 -2
  142. data/lib/super_diff/rspec.rb +20 -18
  143. data/lib/super_diff/version.rb +1 -1
  144. data/lib/super_diff.rb +69 -21
  145. data/spec/examples.txt +704 -543
  146. data/spec/support/integration/helpers.rb +4 -1
  147. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +1 -1
  148. data/spec/support/models/active_record/person.rb +8 -1
  149. data/spec/support/shared_examples/active_record.rb +5 -5
  150. data/spec/support/unit/helpers.rb +12 -1
  151. data/spec/support/unit/matchers/be_deprecated_in_favor_of.rb +39 -0
  152. data/spec/unit/active_record/object_inspection_spec.rb +5 -5
  153. data/spec/unit/{operation_tree_flatteners → basic/operation_tree_flatteners}/array_spec.rb +8 -8
  154. data/spec/unit/{operation_tree_flatteners → basic/operation_tree_flatteners}/custom_object_spec.rb +9 -9
  155. data/spec/unit/{operation_tree_flatteners → basic/operation_tree_flatteners}/default_object_spec.rb +9 -9
  156. data/spec/unit/{operation_tree_flatteners → basic/operation_tree_flatteners}/hash_spec.rb +8 -8
  157. data/spec/unit/{operation_tree_flatteners → basic/operation_tree_flatteners}/multiline_string_spec.rb +4 -4
  158. data/spec/unit/{helpers_spec.rb → core/helpers_spec.rb} +2 -2
  159. data/spec/unit/{tiered_lines_elider_spec.rb → core/tiered_lines_elider_spec.rb} +2 -2
  160. data/spec/unit/{tiered_lines_formatter_spec.rb → core/tiered_lines_formatter_spec.rb} +1 -1
  161. data/spec/unit/deprecations_spec.rb +176 -0
  162. data/spec/unit/equality_matchers/main_spec.rb +5 -5
  163. data/super_diff.gemspec +6 -0
  164. metadata +127 -115
  165. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model.rb +0 -51
  166. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation.rb +0 -36
  167. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb +0 -16
  168. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +0 -46
  169. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/ordered_options.rb +0 -46
  170. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders.rb +0 -16
  171. data/lib/super_diff/colorized_document_extensions.rb +0 -18
  172. data/lib/super_diff/configuration.rb +0 -149
  173. data/lib/super_diff/diff_formatters/collection.rb +0 -132
  174. data/lib/super_diff/diff_formatters/multiline_string.rb +0 -31
  175. data/lib/super_diff/differs/array.rb +0 -15
  176. data/lib/super_diff/differs/custom_object.rb +0 -17
  177. data/lib/super_diff/differs/date_like.rb +0 -15
  178. data/lib/super_diff/differs/default_object.rb +0 -19
  179. data/lib/super_diff/differs/defaults.rb +0 -13
  180. data/lib/super_diff/differs/empty.rb +0 -13
  181. data/lib/super_diff/differs/hash.rb +0 -15
  182. data/lib/super_diff/differs/main.rb +0 -31
  183. data/lib/super_diff/differs/multiline_string.rb +0 -16
  184. data/lib/super_diff/differs/time_like.rb +0 -15
  185. data/lib/super_diff/gem_version.rb +0 -45
  186. data/lib/super_diff/helpers.rb +0 -86
  187. data/lib/super_diff/implementation_checks.rb +0 -19
  188. data/lib/super_diff/line.rb +0 -83
  189. data/lib/super_diff/object_inspection/inspection_tree_builders/base.rb +0 -27
  190. data/lib/super_diff/object_inspection/inspection_tree_builders/defaults.rb +0 -15
  191. data/lib/super_diff/object_inspection/inspection_tree_builders/main.rb +0 -30
  192. data/lib/super_diff/object_inspection/inspection_tree_builders.rb +0 -48
  193. data/lib/super_diff/object_inspection/nodes.rb +0 -50
  194. data/lib/super_diff/object_inspection/prefix_for_next_node.rb +0 -6
  195. data/lib/super_diff/object_inspection/prelude_for_next_node.rb +0 -6
  196. data/lib/super_diff/operation_tree_builders/array.rb +0 -107
  197. data/lib/super_diff/operation_tree_builders/custom_object.rb +0 -40
  198. data/lib/super_diff/operation_tree_builders/date_like.rb +0 -15
  199. data/lib/super_diff/operation_tree_builders/default_object.rb +0 -119
  200. data/lib/super_diff/operation_tree_builders/defaults.rb +0 -5
  201. data/lib/super_diff/operation_tree_builders/hash.rb +0 -218
  202. data/lib/super_diff/operation_tree_builders/multiline_string.rb +0 -86
  203. data/lib/super_diff/operation_tree_builders/time_like.rb +0 -24
  204. data/lib/super_diff/operation_tree_flatteners/array.rb +0 -15
  205. data/lib/super_diff/operation_tree_flatteners/collection.rb +0 -136
  206. data/lib/super_diff/operation_tree_flatteners/custom_object.rb +0 -28
  207. data/lib/super_diff/operation_tree_flatteners/default_object.rb +0 -31
  208. data/lib/super_diff/operation_tree_flatteners/hash.rb +0 -33
  209. data/lib/super_diff/operation_tree_flatteners/multiline_string.rb +0 -18
  210. data/lib/super_diff/operation_trees/array.rb +0 -15
  211. data/lib/super_diff/operation_trees/custom_object.rb +0 -15
  212. data/lib/super_diff/operation_trees/default_object.rb +0 -40
  213. data/lib/super_diff/operation_trees/defaults.rb +0 -5
  214. data/lib/super_diff/operation_trees/hash.rb +0 -15
  215. data/lib/super_diff/operation_trees/main.rb +0 -35
  216. data/lib/super_diff/operation_trees/multiline_string.rb +0 -15
  217. data/lib/super_diff/recursion_guard.rb +0 -50
  218. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_containing_exactly.rb +0 -36
  219. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_including.rb +0 -42
  220. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +0 -102
  221. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/generic_describable_matcher.rb +0 -19
  222. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +0 -42
  223. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/instance_of.rb +0 -27
  224. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/kind_of.rb +0 -27
  225. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/object_having_attributes.rb +0 -36
  226. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/primitive.rb +0 -10
  227. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/value_within.rb +0 -32
  228. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +0 -48
  229. data/lib/super_diff/tiered_lines.rb +0 -4
  230. data/lib/super_diff/tiered_lines_elider.rb +0 -462
  231. data/lib/super_diff/tiered_lines_formatter.rb +0 -75
@@ -18,14 +18,14 @@ module SuperDiff
18
18
  protected
19
19
 
20
20
  def expected_line
21
- Helpers.style(
21
+ Core::Helpers.style(
22
22
  :expected,
23
23
  "Expected: " + SuperDiff.inspect_object(expected, as_lines: false)
24
24
  )
25
25
  end
26
26
 
27
27
  def actual_line
28
- Helpers.style(
28
+ Core::Helpers.style(
29
29
  :actual,
30
30
  " Actual: " + SuperDiff.inspect_object(actual, as_lines: false)
31
31
  )
@@ -45,7 +45,12 @@ module SuperDiff
45
45
  end
46
46
 
47
47
  def diff
48
- Differs::Main.call(expected, actual, indent_level: 0)
48
+ SuperDiff.diff(
49
+ expected,
50
+ actual,
51
+ indent_level: 0,
52
+ raise_if_nothing_applies: false
53
+ )
49
54
  end
50
55
  end
51
56
  end
@@ -10,13 +10,13 @@ module SuperDiff
10
10
  Differing hashes.
11
11
 
12
12
  #{
13
- Helpers.style(
13
+ Core::Helpers.style(
14
14
  :expected,
15
15
  "Expected: " + SuperDiff.inspect_object(expected, as_lines: false)
16
16
  )
17
17
  }
18
18
  #{
19
- Helpers.style(
19
+ Core::Helpers.style(
20
20
  :actual,
21
21
  " Actual: " + SuperDiff.inspect_object(actual, as_lines: false)
22
22
  )
@@ -31,7 +31,7 @@ module SuperDiff
31
31
  protected
32
32
 
33
33
  def diff
34
- Differs::Hash.call(expected, actual, indent_level: 0)
34
+ Basic::Differs::Hash.call(expected, actual, indent_level: 0)
35
35
  end
36
36
  end
37
37
  end
@@ -11,13 +11,13 @@ module SuperDiff
11
11
 
12
12
  #{
13
13
  # TODO: This whole thing should not be red or green, just the values
14
- Helpers.style(
14
+ Core::Helpers.style(
15
15
  :expected,
16
16
  "Expected: " + SuperDiff.inspect_object(expected, as_lines: false)
17
17
  )
18
18
  }
19
19
  #{
20
- Helpers.style(
20
+ Core::Helpers.style(
21
21
  :actual,
22
22
  " Actual: " + SuperDiff.inspect_object(actual, as_lines: false)
23
23
  )
@@ -32,7 +32,7 @@ module SuperDiff
32
32
  private
33
33
 
34
34
  def diff
35
- Differs::MultilineString.call(expected, actual, indent_level: 0)
35
+ Basic::Differs::MultilineString.call(expected, actual, indent_level: 0)
36
36
  end
37
37
  end
38
38
  end
@@ -8,16 +8,16 @@ module SuperDiff
8
8
 
9
9
  def fail
10
10
  <<~OUTPUT.strip
11
- Differing #{Helpers.plural_type_for(actual)}.
11
+ Differing #{Core::Helpers.plural_type_for(actual)}.
12
12
 
13
13
  #{
14
- Helpers.style(
14
+ Core::Helpers.style(
15
15
  :expected,
16
16
  "Expected: " + SuperDiff.inspect_object(expected, as_lines: false)
17
17
  )
18
18
  }
19
19
  #{
20
- Helpers.style(
20
+ Core::Helpers.style(
21
21
  :actual,
22
22
  " Actual: " + SuperDiff.inspect_object(actual, as_lines: false)
23
23
  )
@@ -10,13 +10,13 @@ module SuperDiff
10
10
  Differing strings.
11
11
 
12
12
  #{
13
- Helpers.style(
13
+ Core::Helpers.style(
14
14
  :expected,
15
15
  "Expected: " + SuperDiff.inspect_object(expected, as_lines: false)
16
16
  )
17
17
  }
18
18
  #{
19
- Helpers.style(
19
+ Core::Helpers.style(
20
20
  :actual,
21
21
  " Actual: " + SuperDiff.inspect_object(actual, as_lines: false)
22
22
  )
@@ -1,12 +1,16 @@
1
1
  module SuperDiff
2
2
  module Errors
3
- autoload(
4
- :NoDifferAvailableError,
5
- "super_diff/errors/no_differ_available_error"
6
- )
7
- autoload(
8
- :NoOperationTreeBuilderAvailableError,
9
- "super_diff/errors/no_operation_tree_builder_available_error"
10
- )
3
+ def self.const_missing(missing_const_name)
4
+ if Core.const_defined?(missing_const_name)
5
+ warn <<~EOT
6
+ WARNING: SuperDiff::Errors::#{missing_const_name} is deprecated and will be removed in the next major release.
7
+ Please use SuperDiff::Core::#{missing_const_name} instead.
8
+ #{caller_locations.join("\n")}
9
+ EOT
10
+ Core.const_get(missing_const_name)
11
+ else
12
+ super
13
+ end
14
+ end
11
15
  end
12
16
  end
@@ -1,18 +1,67 @@
1
1
  module SuperDiff
2
2
  module ObjectInspection
3
- autoload :InspectionTree, "super_diff/object_inspection/inspection_tree"
4
- autoload(
5
- :InspectionTreeBuilders,
6
- "super_diff/object_inspection/inspection_tree_builders"
7
- )
8
- autoload :Nodes, "super_diff/object_inspection/nodes"
9
- autoload(
10
- :PrefixForNextNode,
11
- "super_diff/object_inspection/prefix_for_next_node"
12
- )
13
- autoload(
14
- :PreludeForNextNode,
15
- "super_diff/object_inspection/prelude_for_next_node"
16
- )
3
+ module InspectionTreeBuilders
4
+ def self.const_missing(missing_const_name)
5
+ if missing_const_name == :Base
6
+ warn <<~EOT
7
+ WARNING: SuperDiff::ObjectInspection::InspectionTreeBuilders::#{missing_const_name} is deprecated and will be removed in the next major release.
8
+ Please use SuperDiff::Core::AbstractInspectionTreeBuilder instead.
9
+ #{caller_locations.join("\n")}
10
+ EOT
11
+ Core::AbstractInspectionTreeBuilder
12
+ elsif Basic::InspectionTreeBuilders.const_defined?(missing_const_name)
13
+ warn <<~EOT
14
+ WARNING: SuperDiff::ObjectInspection::InspectionTreeBuilders::#{missing_const_name} is deprecated and will be removed in the next major release.
15
+ Please use SuperDiff::Basic::InspectionTreeBuilders::#{missing_const_name} instead.
16
+ #{caller_locations.join("\n")}
17
+ EOT
18
+ Basic::InspectionTreeBuilders.const_get(missing_const_name)
19
+ else
20
+ super
21
+ end
22
+ end
23
+ end
24
+
25
+ module Nodes
26
+ def self.const_missing(missing_const_name)
27
+ if Core::InspectionTreeNodes.const_defined?(missing_const_name)
28
+ warn <<~EOT
29
+ WARNING: SuperDiff::ObjectInspection::Nodes::#{missing_const_name} is deprecated and will be removed in the next major release.
30
+ Please use SuperDiff::Core::InspectionTreeNodes::#{missing_const_name} instead.
31
+ #{caller_locations.join("\n")}
32
+ EOT
33
+ Core::InspectionTreeNodes.const_get(missing_const_name)
34
+ else
35
+ super
36
+ end
37
+ end
38
+ end
39
+
40
+ def self.const_missing(missing_const_name)
41
+ if missing_const_name == :PrefixForNextNode
42
+ warn <<~EOT
43
+ WARNING: SuperDiff::ObjectInspection::PrefixForNextNode is deprecated and will be removed in the next major release.
44
+ Please use SuperDiff::Core::PrefixForNextInspectionTreeNode instead.
45
+ #{caller_locations.join("\n")}
46
+ EOT
47
+ Core::PrefixForNextInspectionTreeNode
48
+ elsif missing_const_name == :PreludeForNextNode
49
+ warn <<~EOT
50
+ WARNING: SuperDiff::ObjectInspection::PreludeForNextNode is deprecated and will be removed in the next major release.
51
+ Please use SuperDiff::Core::PreludeForNextInspectionTreeNode instead.
52
+ #{caller_locations.join("\n")}
53
+ EOT
54
+ Core::PreludeForNextInspectionTreeNode
55
+ elsif Core.const_defined?(missing_const_name)
56
+ warn <<~EOT
57
+ WARNING: SuperDiff::ObjectInspection::#{missing_const_name} is deprecated and will be removed in the next major release.
58
+ Please use SuperDiff::Core::#{missing_const_name} instead.
59
+ #{caller_locations.join("\n")}
60
+ EOT
61
+ Core.const_get(missing_const_name)
62
+ else
63
+ super
64
+ end
65
+ end
17
66
  end
18
67
  end
@@ -1,19 +1,23 @@
1
1
  module SuperDiff
2
2
  module OperationTreeBuilders
3
- autoload :Array, "super_diff/operation_tree_builders/array"
4
- autoload :Base, "super_diff/operation_tree_builders/base"
5
- autoload :CustomObject, "super_diff/operation_tree_builders/custom_object"
6
- autoload :DefaultObject, "super_diff/operation_tree_builders/default_object"
7
- autoload :Hash, "super_diff/operation_tree_builders/hash"
8
- autoload :Main, "super_diff/operation_tree_builders/main"
9
- # TODO: Where is this used?
10
- autoload(
11
- :MultilineString,
12
- "super_diff/operation_tree_builders/multiline_string"
13
- )
14
- autoload :TimeLike, "super_diff/operation_tree_builders/time_like"
15
- autoload :DateLike, "super_diff/operation_tree_builders/date_like"
3
+ def self.const_missing(missing_const_name)
4
+ if missing_const_name == :Base
5
+ warn <<~EOT
6
+ WARNING: SuperDiff::OperationTreeBuilders::#{missing_const_name} is deprecated and will be removed in the next major release.
7
+ Please use SuperDiff::Core::AbstractOperationTreeBuilder instead.
8
+ #{caller_locations.join("\n")}
9
+ EOT
10
+ Core::AbstractOperationTreeBuilder
11
+ elsif Basic::OperationTreeBuilders.const_defined?(missing_const_name)
12
+ warn <<~EOT
13
+ WARNING: SuperDiff::OperationTreeBuilders::#{missing_const_name} is deprecated and will be removed in the next major release.
14
+ Please use SuperDiff::Basic::OperationTreeBuilders::#{missing_const_name} instead.
15
+ #{caller_locations.join("\n")}
16
+ EOT
17
+ Basic::OperationTreeBuilders.const_get(missing_const_name)
18
+ else
19
+ super
20
+ end
21
+ end
16
22
  end
17
23
  end
18
-
19
- require "super_diff/operation_tree_builders/defaults"
@@ -1,20 +1,23 @@
1
1
  module SuperDiff
2
2
  module OperationTreeFlatteners
3
- autoload :Array, "super_diff/operation_tree_flatteners/array"
4
- autoload :Base, "super_diff/operation_tree_flatteners/base"
5
- autoload :Collection, "super_diff/operation_tree_flatteners/collection"
6
- autoload(
7
- :CustomObject,
8
- "super_diff/operation_tree_flatteners/custom_object"
9
- )
10
- autoload(
11
- :DefaultObject,
12
- "super_diff/operation_tree_flatteners/default_object"
13
- )
14
- autoload :Hash, "super_diff/operation_tree_flatteners/hash"
15
- autoload(
16
- :MultilineString,
17
- "super_diff/operation_tree_flatteners/multiline_string"
18
- )
3
+ def self.const_missing(missing_const_name)
4
+ if missing_const_name == :Base
5
+ warn <<~EOT
6
+ WARNING: SuperDiff::OperationTreeFlatteners::#{missing_const_name} is deprecated and will be removed in the next major release.
7
+ Please use SuperDiff::Core::AbstractOperationTreeFlattener instead.
8
+ #{caller_locations.join("\n")}
9
+ EOT
10
+ Core::AbstractOperationTreeFlattener
11
+ elsif Basic::OperationTreeFlatteners.const_defined?(missing_const_name)
12
+ warn <<~EOT
13
+ WARNING: SuperDiff::OperationTreeFlatteners::#{missing_const_name} is deprecated and will be removed in the next major release.
14
+ Please use SuperDiff::Basic::OperationTreeFlatteners::#{missing_const_name} instead.
15
+ #{caller_locations.join("\n")}
16
+ EOT
17
+ Basic::OperationTreeFlatteners.const_get(missing_const_name)
18
+ else
19
+ super
20
+ end
21
+ end
19
22
  end
20
23
  end
@@ -1,13 +1,23 @@
1
1
  module SuperDiff
2
2
  module OperationTrees
3
- autoload :Array, "super_diff/operation_trees/array"
4
- autoload :Base, "super_diff/operation_trees/base"
5
- autoload :CustomObject, "super_diff/operation_trees/custom_object"
6
- autoload :DefaultObject, "super_diff/operation_trees/default_object"
7
- autoload :Hash, "super_diff/operation_trees/hash"
8
- autoload :Main, "super_diff/operation_trees/main"
9
- autoload :MultilineString, "super_diff/operation_trees/multiline_string"
3
+ def self.const_missing(missing_const_name)
4
+ if missing_const_name == :Base
5
+ warn <<~EOT
6
+ WARNING: SuperDiff::OperationTrees::#{missing_const_name} is deprecated and will be removed in the next major release.
7
+ Please use SuperDiff::Core::AbstractOperationTree instead.
8
+ #{caller_locations.join("\n")}
9
+ EOT
10
+ Core::AbstractOperationTree
11
+ elsif Basic::OperationTrees.const_defined?(missing_const_name)
12
+ warn <<~EOT
13
+ WARNING: SuperDiff::OperationTrees::#{missing_const_name} is deprecated and will be removed in the next major release.
14
+ Please use SuperDiff::Basic::OperationTrees::#{missing_const_name} instead.
15
+ #{caller_locations.join("\n")}
16
+ EOT
17
+ Basic::OperationTrees.const_get(missing_const_name)
18
+ else
19
+ super
20
+ end
21
+ end
10
22
  end
11
23
  end
12
-
13
- require "super_diff/operation_trees/defaults"
@@ -1,6 +1,16 @@
1
1
  module SuperDiff
2
2
  module Operations
3
- autoload :BinaryOperation, "super_diff/operations/binary_operation"
4
- autoload :UnaryOperation, "super_diff/operations/unary_operation"
3
+ def self.const_missing(missing_const_name)
4
+ if Core.const_defined?(missing_const_name)
5
+ warn <<~EOT
6
+ WARNING: SuperDiff::Operations::#{missing_const_name} is deprecated and will be removed in the next major release.
7
+ Please use SuperDiff::Core::#{missing_const_name} instead.
8
+ #{caller_locations.join("\n")}
9
+ EOT
10
+ Core.const_get(missing_const_name)
11
+ else
12
+ super
13
+ end
14
+ end
5
15
  end
6
16
  end
@@ -35,7 +35,7 @@ module SuperDiff
35
35
  end
36
36
 
37
37
  def matcher_text_builder_class
38
- RSpec::MatcherTextBuilders::Base
38
+ MatcherTextBuilders::Base
39
39
  end
40
40
 
41
41
  def matcher_text_builder_args
@@ -7,13 +7,12 @@ module SuperDiff
7
7
 
8
8
  def diff
9
9
  if worth_diffing?
10
- diff =
11
- SuperDiff::Differs::Main.call(expected, actual, omit_empty: true)
10
+ diff = SuperDiff.diff(expected, actual)
12
11
  "\n\n" + diff
13
12
  else
14
13
  ""
15
14
  end
16
- rescue SuperDiff::Errors::NoDifferAvailableError
15
+ rescue Core::NoDifferAvailableError
17
16
  ""
18
17
  end
19
18
 
@@ -39,10 +38,10 @@ module SuperDiff
39
38
  end
40
39
 
41
40
  def helpers
42
- @_helpers ||= Helpers.new
41
+ @_helpers ||= RSpecHelpers.new
43
42
  end
44
43
 
45
- class Helpers
44
+ class RSpecHelpers
46
45
  include ::RSpec::Matchers::Composable
47
46
 
48
47
  public :values_match?
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module RSpec
3
3
  module Differs
4
- class CollectionContainingExactly < SuperDiff::Differs::Array
4
+ class CollectionContainingExactly < Basic::Differs::Array
5
5
  def self.applies_to?(expected, actual)
6
6
  SuperDiff::RSpec.a_collection_containing_exactly_something?(
7
7
  expected
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module RSpec
3
3
  module Differs
4
- class CollectionIncluding < SuperDiff::Differs::Array
4
+ class CollectionIncluding < Basic::Differs::Array
5
5
  def self.applies_to?(expected, actual)
6
6
  (
7
7
  SuperDiff::RSpec.a_collection_including_something?(expected) ||
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module RSpec
3
3
  module Differs
4
- class HashIncluding < SuperDiff::Differs::Hash
4
+ class HashIncluding < Basic::Differs::Hash
5
5
  def self.applies_to?(expected, actual)
6
6
  (
7
7
  SuperDiff::RSpec.a_hash_including_something?(expected) ||
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module RSpec
3
3
  module Differs
4
- class ObjectHavingAttributes < SuperDiff::Differs::DefaultObject
4
+ class ObjectHavingAttributes < Basic::Differs::DefaultObject
5
5
  def self.applies_to?(expected, _actual)
6
6
  SuperDiff::RSpec.an_object_having_some_attributes?(expected)
7
7
  end
@@ -0,0 +1,34 @@
1
+ module SuperDiff
2
+ module RSpec
3
+ module InspectionTreeBuilders
4
+ class CollectionContainingExactly < Core::AbstractInspectionTreeBuilder
5
+ def self.applies_to?(value)
6
+ SuperDiff::RSpec.a_collection_containing_exactly_something?(value)
7
+ end
8
+
9
+ def call
10
+ Core::InspectionTree.new do |t1|
11
+ # stree-ignore
12
+ t1.as_lines_when_rendering_to_lines(
13
+ collection_bookend: :open
14
+ ) do |t2|
15
+ t2.add_text "#<a collection containing exactly ("
16
+ end
17
+
18
+ # stree-ignore
19
+ t1.nested do |t2|
20
+ t2.insert_array_inspection_of(object.expected)
21
+ end
22
+
23
+ # stree-ignore
24
+ t1.as_lines_when_rendering_to_lines(
25
+ collection_bookend: :close
26
+ ) do |t2|
27
+ t2.add_text ")>"
28
+ end
29
+ end
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
@@ -0,0 +1,40 @@
1
+ module SuperDiff
2
+ module RSpec
3
+ module InspectionTreeBuilders
4
+ class CollectionIncluding < Core::AbstractInspectionTreeBuilder
5
+ def self.applies_to?(value)
6
+ SuperDiff::RSpec.a_collection_including_something?(value) ||
7
+ SuperDiff::RSpec.array_including_something?(value)
8
+ end
9
+
10
+ def call
11
+ Core::InspectionTree.new do |t1|
12
+ # stree-ignore
13
+ t1.as_lines_when_rendering_to_lines(
14
+ collection_bookend: :open
15
+ ) do |t2|
16
+ t2.add_text "#<a collection including ("
17
+ end
18
+
19
+ t1.nested do |t2|
20
+ if SuperDiff::RSpec.a_collection_including_something?(object)
21
+ t2.insert_array_inspection_of(object.expecteds)
22
+ else
23
+ t2.insert_array_inspection_of(
24
+ object.instance_variable_get(:@expected)
25
+ )
26
+ end
27
+ end
28
+
29
+ # stree-ignore
30
+ t1.as_lines_when_rendering_to_lines(
31
+ collection_bookend: :close
32
+ ) do |t2|
33
+ t2.add_text ")>"
34
+ end
35
+ end
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
@@ -0,0 +1,100 @@
1
+ module SuperDiff
2
+ module RSpec
3
+ module InspectionTreeBuilders
4
+ class Double < Core::AbstractInspectionTreeBuilder
5
+ def self.applies_to?(value)
6
+ value.is_a?(::RSpec::Mocks::Double)
7
+ end
8
+
9
+ def call
10
+ Core::InspectionTree.new do |t1|
11
+ t1.only_when method(:empty?) do |t2|
12
+ t2.as_lines_when_rendering_to_lines do |t3|
13
+ t3.add_text("#<#{inspected_class} #{inspected_name}>")
14
+ end
15
+ end
16
+
17
+ t1.only_when method(:nonempty?) do |t2|
18
+ t2.as_lines_when_rendering_to_lines(
19
+ collection_bookend: :open
20
+ ) do |t3|
21
+ t3.add_text("#<#{inspected_class} #{inspected_name}")
22
+
23
+ # stree-ignore
24
+ t3.when_rendering_to_lines do |t4|
25
+ t4.add_text " {"
26
+ end
27
+ end
28
+
29
+ # stree-ignore
30
+ t2.when_rendering_to_string do |t3|
31
+ t3.add_text " "
32
+ end
33
+
34
+ # stree-ignore
35
+ t2.nested do |t3|
36
+ t3.insert_hash_inspection_of doubled_methods
37
+ end
38
+
39
+ t2.as_lines_when_rendering_to_lines(
40
+ collection_bookend: :close
41
+ ) do |t3|
42
+ # stree-ignore
43
+ t3.when_rendering_to_lines do |t4|
44
+ t4.add_text "}"
45
+ end
46
+
47
+ t3.add_text ">"
48
+ end
49
+ end
50
+ end
51
+ end
52
+
53
+ private
54
+
55
+ def empty?
56
+ doubled_methods.empty?
57
+ end
58
+
59
+ def nonempty?
60
+ !empty?
61
+ end
62
+
63
+ def inspected_class
64
+ case object
65
+ when ::RSpec::Mocks::InstanceVerifyingDouble
66
+ "InstanceDouble"
67
+ when ::RSpec::Mocks::ClassVerifyingDouble
68
+ "ClassDouble"
69
+ when ::RSpec::Mocks::ObjectVerifyingDouble
70
+ "ObjectDouble"
71
+ else
72
+ "Double"
73
+ end
74
+ end
75
+
76
+ def inspected_name
77
+ if object.instance_variable_get("@name")
78
+ object.instance_variable_get("@name").inspect
79
+ else
80
+ "(anonymous)"
81
+ end
82
+ end
83
+
84
+ def doubled_methods
85
+ @_doubled_methods ||=
86
+ doubled_method_names.reduce({}) do |hash, key|
87
+ hash.merge(key => object.public_send(key))
88
+ end
89
+ end
90
+
91
+ def doubled_method_names
92
+ object
93
+ .__send__(:__mock_proxy)
94
+ .instance_variable_get("@method_doubles")
95
+ .keys
96
+ end
97
+ end
98
+ end
99
+ end
100
+ end
@@ -0,0 +1,17 @@
1
+ module SuperDiff
2
+ module RSpec
3
+ module InspectionTreeBuilders
4
+ class GenericDescribableMatcher < Core::AbstractInspectionTreeBuilder
5
+ def self.applies_to?(value)
6
+ ::RSpec::Matchers.is_a_describable_matcher?(value)
7
+ end
8
+
9
+ def call
10
+ Core::InspectionTree.new do |t1|
11
+ t1.add_text "#<#{object.description}>"
12
+ end
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end