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
@@ -0,0 +1,40 @@
1
+ module SuperDiff
2
+ module RSpec
3
+ module InspectionTreeBuilders
4
+ class HashIncluding < Core::AbstractInspectionTreeBuilder
5
+ def self.applies_to?(value)
6
+ SuperDiff::RSpec.a_hash_including_something?(value) ||
7
+ SuperDiff::RSpec.hash_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 hash including ("
17
+ end
18
+
19
+ t1.nested do |t2|
20
+ if SuperDiff::RSpec.a_hash_including_something?(object)
21
+ t2.insert_hash_inspection_of(object.expecteds.first)
22
+ else
23
+ t2.insert_hash_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,25 @@
1
+ module SuperDiff
2
+ module RSpec
3
+ module InspectionTreeBuilders
4
+ class InstanceOf < Core::AbstractInspectionTreeBuilder
5
+ def self.applies_to?(value)
6
+ SuperDiff::RSpec.an_instance_of_something?(value) ||
7
+ SuperDiff::RSpec.instance_of_something?(value)
8
+ end
9
+
10
+ def call
11
+ Core::InspectionTree.new do |t1|
12
+ klass =
13
+ if SuperDiff::RSpec.an_instance_of_something?(object)
14
+ object.expected
15
+ else
16
+ object.instance_variable_get(:@klass)
17
+ end
18
+
19
+ t1.add_text "#<an instance of #{klass}>"
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,25 @@
1
+ module SuperDiff
2
+ module RSpec
3
+ module InspectionTreeBuilders
4
+ class KindOf < Core::AbstractInspectionTreeBuilder
5
+ def self.applies_to?(value)
6
+ SuperDiff::RSpec.a_kind_of_something?(value) ||
7
+ SuperDiff::RSpec.kind_of_something?(value)
8
+ end
9
+
10
+ def call
11
+ Core::InspectionTree.new do |t1|
12
+ klass =
13
+ if SuperDiff::RSpec.a_kind_of_something?(object)
14
+ object.expected
15
+ else
16
+ object.instance_variable_get(:@klass)
17
+ end
18
+
19
+ t1.add_text "#<a kind of #{klass}>"
20
+ end
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -0,0 +1,34 @@
1
+ module SuperDiff
2
+ module RSpec
3
+ module InspectionTreeBuilders
4
+ class ObjectHavingAttributes < Core::AbstractInspectionTreeBuilder
5
+ def self.applies_to?(value)
6
+ SuperDiff::RSpec.an_object_having_some_attributes?(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 "#<an object having attributes ("
16
+ end
17
+
18
+ # stree-ignore
19
+ t1.nested do |t2|
20
+ t2.insert_hash_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,9 @@
1
+ module SuperDiff
2
+ module RSpec
3
+ module InspectionTreeBuilders
4
+ # TODO: Is this needed?
5
+ class Primitive < Basic::InspectionTreeBuilders::Primitive
6
+ end
7
+ end
8
+ end
9
+ end
@@ -0,0 +1,30 @@
1
+ module SuperDiff
2
+ module RSpec
3
+ module InspectionTreeBuilders
4
+ class ValueWithin < Core::AbstractInspectionTreeBuilder
5
+ def self.applies_to?(value)
6
+ SuperDiff::RSpec.a_value_within_something?(value)
7
+ end
8
+
9
+ def call
10
+ Core::InspectionTree.new do |t1|
11
+ t1.as_prelude_when_rendering_to_lines do |t2|
12
+ t2.add_text "#<a value within "
13
+
14
+ t2.add_inspection_of(
15
+ object.base_matcher.instance_variable_get("@delta"),
16
+ as_lines: false
17
+ )
18
+
19
+ t2.add_text " of "
20
+ end
21
+
22
+ t1.add_inspection_of object.expected
23
+
24
+ t1.add_text ">"
25
+ end
26
+ end
27
+ end
28
+ end
29
+ end
30
+ end
@@ -0,0 +1,40 @@
1
+ module SuperDiff
2
+ module RSpec
3
+ module InspectionTreeBuilders
4
+ autoload(
5
+ :CollectionContainingExactly,
6
+ "super_diff/rspec/inspection_tree_builders/collection_containing_exactly"
7
+ )
8
+ autoload(
9
+ :CollectionIncluding,
10
+ "super_diff/rspec/inspection_tree_builders/collection_including"
11
+ )
12
+ autoload :Double, "super_diff/rspec/inspection_tree_builders/double"
13
+ autoload(
14
+ :GenericDescribableMatcher,
15
+ "super_diff/rspec/inspection_tree_builders/generic_describable_matcher"
16
+ )
17
+ autoload(
18
+ :HashIncluding,
19
+ "super_diff/rspec/inspection_tree_builders/hash_including"
20
+ )
21
+ autoload(
22
+ :InstanceOf,
23
+ "super_diff/rspec/inspection_tree_builders/instance_of"
24
+ )
25
+ autoload :KindOf, "super_diff/rspec/inspection_tree_builders/kind_of"
26
+ autoload(
27
+ :ObjectHavingAttributes,
28
+ "super_diff/rspec/inspection_tree_builders/object_having_attributes"
29
+ )
30
+ autoload(
31
+ :Primitive,
32
+ "super_diff/rspec/inspection_tree_builders/primitive"
33
+ )
34
+ autoload(
35
+ :ValueWithin,
36
+ "super_diff/rspec/inspection_tree_builders/value_within"
37
+ )
38
+ end
39
+ end
40
+ end
@@ -1,10 +1,20 @@
1
1
  module SuperDiff
2
2
  module RSpec
3
3
  module ObjectInspection
4
- autoload(
5
- :InspectionTreeBuilders,
6
- "super_diff/rspec/object_inspection/inspection_tree_builders"
7
- )
4
+ module InspectionTreeBuilders
5
+ def self.const_missing(missing_const_name)
6
+ 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
12
+ RSpec::InspectionTreeBuilders.const_get(missing_const_name)
13
+ else
14
+ super
15
+ end
16
+ end
17
+ end
8
18
  end
9
19
  end
10
20
  end
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module RSpec
3
3
  module OperationTreeBuilders
4
- class CollectionContainingExactly < SuperDiff::OperationTreeBuilders::Base
4
+ class CollectionContainingExactly < Core::AbstractOperationTreeBuilder
5
5
  def self.applies_to?(expected, actual)
6
6
  SuperDiff::RSpec.a_collection_containing_exactly_something?(
7
7
  expected
@@ -47,7 +47,7 @@ module SuperDiff
47
47
 
48
48
  def add_noop_to(operations, index)
49
49
  value = actual[index]
50
- operations << ::SuperDiff::Operations::UnaryOperation.new(
50
+ operations << Core::UnaryOperation.new(
51
51
  name: :noop,
52
52
  collection: collection,
53
53
  key: index,
@@ -58,7 +58,7 @@ module SuperDiff
58
58
 
59
59
  def add_delete_to(operations, index)
60
60
  value = expected.expected[index]
61
- operations << ::SuperDiff::Operations::UnaryOperation.new(
61
+ operations << Core::UnaryOperation.new(
62
62
  name: :delete,
63
63
  collection: collection,
64
64
  key: index,
@@ -69,7 +69,7 @@ module SuperDiff
69
69
 
70
70
  def add_insert_to(operations, index)
71
71
  value = actual[index]
72
- operations << ::SuperDiff::Operations::UnaryOperation.new(
72
+ operations << Core::UnaryOperation.new(
73
73
  name: :insert,
74
74
  collection: collection,
75
75
  key: index,
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module RSpec
3
3
  module OperationTreeBuilders
4
- class CollectionIncluding < SuperDiff::OperationTreeBuilders::Array
4
+ class CollectionIncluding < Basic::OperationTreeBuilders::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 OperationTreeBuilders
4
- class HashIncluding < SuperDiff::OperationTreeBuilders::Hash
4
+ class HashIncluding < Basic::OperationTreeBuilders::Hash
5
5
  include ::RSpec::Matchers::Composable
6
6
 
7
7
  def self.applies_to?(expected, actual)
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module RSpec
3
3
  module OperationTreeBuilders
4
- class ObjectHavingAttributes < SuperDiff::OperationTreeBuilders::DefaultObject
4
+ class ObjectHavingAttributes < Basic::OperationTreeBuilders::DefaultObject
5
5
  def self.applies_to?(expected, _actual)
6
6
  SuperDiff::RSpec.an_object_having_some_attributes?(expected)
7
7
  end
@@ -9,7 +9,7 @@ module SuperDiff
9
9
  protected
10
10
 
11
11
  def build_operation_tree
12
- find_operation_tree_for(actual)
12
+ SuperDiff.find_operation_tree_for(actual)
13
13
  end
14
14
 
15
15
  def attribute_names
@@ -1,15 +1,17 @@
1
1
  require "super_diff"
2
2
 
3
+ require "super_diff/rspec/differs"
4
+ require "super_diff/rspec/inspection_tree_builders"
5
+ require "super_diff/rspec/operation_tree_builders"
6
+
3
7
  module SuperDiff
4
8
  module RSpec
5
9
  autoload :AugmentedMatcher, "super_diff/rspec/augmented_matcher"
6
10
  autoload :Configuration, "super_diff/rspec/configuration"
7
11
  autoload :Differ, "super_diff/rspec/differ"
8
- autoload :Differs, "super_diff/rspec/differs"
9
12
  autoload :MatcherTextBuilders, "super_diff/rspec/matcher_text_builders"
10
13
  autoload :MatcherTextTemplate, "super_diff/rspec/matcher_text_template"
11
14
  autoload :ObjectInspection, "super_diff/rspec/object_inspection"
12
- autoload :OperationTreeBuilders, "super_diff/rspec/operation_tree_builders"
13
15
 
14
16
  def self.configure(&block)
15
17
  SuperDiff.configure(&block)
@@ -84,37 +86,37 @@ module SuperDiff
84
86
  @_rspec_version ||=
85
87
  begin
86
88
  require "rspec/core/version"
87
- GemVersion.new(::RSpec::Core::Version::STRING)
89
+ Core::GemVersion.new(::RSpec::Core::Version::STRING)
88
90
  end
89
91
  end
90
92
 
91
93
  SuperDiff.configuration.tap do |config|
92
- config.add_extra_differ_classes(
94
+ config.prepend_extra_differ_classes(
93
95
  Differs::CollectionContainingExactly,
94
96
  Differs::CollectionIncluding,
95
97
  Differs::HashIncluding,
96
98
  Differs::ObjectHavingAttributes
97
99
  )
98
100
 
99
- config.add_extra_operation_tree_builder_classes(
101
+ config.prepend_extra_inspection_tree_builder_classes(
102
+ InspectionTreeBuilders::Double,
103
+ InspectionTreeBuilders::CollectionContainingExactly,
104
+ InspectionTreeBuilders::CollectionIncluding,
105
+ InspectionTreeBuilders::HashIncluding,
106
+ InspectionTreeBuilders::InstanceOf,
107
+ InspectionTreeBuilders::KindOf,
108
+ InspectionTreeBuilders::ObjectHavingAttributes,
109
+ # ObjectInspection::InspectionTreeBuilders::Primitive,
110
+ InspectionTreeBuilders::ValueWithin,
111
+ InspectionTreeBuilders::GenericDescribableMatcher
112
+ )
113
+
114
+ config.prepend_extra_operation_tree_builder_classes(
100
115
  OperationTreeBuilders::CollectionContainingExactly,
101
116
  OperationTreeBuilders::CollectionIncluding,
102
117
  OperationTreeBuilders::HashIncluding,
103
118
  OperationTreeBuilders::ObjectHavingAttributes
104
119
  )
105
-
106
- config.add_extra_inspection_tree_builder_classes(
107
- ObjectInspection::InspectionTreeBuilders::Double,
108
- ObjectInspection::InspectionTreeBuilders::CollectionContainingExactly,
109
- ObjectInspection::InspectionTreeBuilders::CollectionIncluding,
110
- ObjectInspection::InspectionTreeBuilders::HashIncluding,
111
- ObjectInspection::InspectionTreeBuilders::InstanceOf,
112
- ObjectInspection::InspectionTreeBuilders::KindOf,
113
- ObjectInspection::InspectionTreeBuilders::ObjectHavingAttributes,
114
- # ObjectInspection::InspectionTreeBuilders::Primitive,
115
- ObjectInspection::InspectionTreeBuilders::ValueWithin,
116
- ObjectInspection::InspectionTreeBuilders::GenericDescribableMatcher
117
- )
118
120
  end
119
121
  end
120
122
  end
@@ -1,3 +1,3 @@
1
1
  module SuperDiff
2
- VERSION = "0.11.0".freeze
2
+ VERSION = "0.12.1".freeze
3
3
  end
data/lib/super_diff.rb CHANGED
@@ -1,47 +1,93 @@
1
1
  require "attr_extras/explicit"
2
- require "diff-lcs"
3
- require "patience_diff"
4
2
  require "date"
5
3
 
6
4
  module SuperDiff
7
- autoload(
8
- :ColorizedDocumentExtensions,
9
- "super_diff/colorized_document_extensions"
10
- )
11
- autoload :OperationTreeFlatteners, "super_diff/operation_tree_flatteners"
12
- autoload :Configuration, "super_diff/configuration"
5
+ autoload :Core, "super_diff/core"
13
6
  autoload :Csi, "super_diff/csi"
14
- autoload :DiffFormatters, "super_diff/diff_formatters"
15
7
  autoload :Differs, "super_diff/differs"
16
8
  autoload :EqualityMatchers, "super_diff/equality_matchers"
17
9
  autoload :Errors, "super_diff/errors"
18
- autoload :GemVersion, "super_diff/gem_version"
19
- autoload :Helpers, "super_diff/helpers"
20
- autoload :ImplementationChecks, "super_diff/implementation_checks"
21
- autoload :Line, "super_diff/line"
22
- autoload :TieredLines, "super_diff/tiered_lines"
23
- autoload :TieredLinesElider, "super_diff/tiered_lines_elider"
24
- autoload :TieredLinesFormatter, "super_diff/tiered_lines_formatter"
25
10
  autoload :ObjectInspection, "super_diff/object_inspection"
26
- autoload :OperationTrees, "super_diff/operation_trees"
27
11
  autoload :OperationTreeBuilders, "super_diff/operation_tree_builders"
12
+ autoload :OperationTreeFlatteners, "super_diff/operation_tree_flatteners"
13
+ autoload :OperationTrees, "super_diff/operation_trees"
28
14
  autoload :Operations, "super_diff/operations"
29
- autoload :RecursionGuard, "super_diff/recursion_guard"
30
15
  autoload :VERSION, "super_diff/version"
31
16
 
17
+ def self.const_missing(missing_const_name)
18
+ if Core.const_defined?(missing_const_name)
19
+ warn <<~EOT
20
+ WARNING: SuperDiff::#{missing_const_name} is deprecated and will be removed in the next major release.
21
+ Please use SuperDiff::Core::#{missing_const_name} instead.
22
+ #{caller_locations.join("\n")}
23
+ EOT
24
+ Core.const_get(missing_const_name)
25
+ elsif Basic.const_defined?(missing_const_name)
26
+ warn <<~EOT
27
+ WARNING: SuperDiff::#{missing_const_name} is deprecated and will be removed in the next major release.
28
+ Please use SuperDiff::Basic::#{missing_const_name} instead.
29
+ #{caller_locations.join("\n")}
30
+ EOT
31
+ Basic.const_get(missing_const_name)
32
+ else
33
+ super
34
+ end
35
+ end
36
+
32
37
  def self.configure
33
38
  yield configuration
34
39
  configuration.updated
35
40
  end
36
41
 
37
42
  def self.configuration
38
- @_configuration ||= Configuration.new
43
+ @_configuration ||= Core::Configuration.new
44
+ end
45
+
46
+ def self.diff(
47
+ expected,
48
+ actual,
49
+ indent_level: 0,
50
+ raise_if_nothing_applies: true
51
+ )
52
+ Core::DifferDispatcher.call(
53
+ expected,
54
+ actual,
55
+ available_classes: configuration.extra_differ_classes,
56
+ indent_level: indent_level,
57
+ raise_if_nothing_applies: raise_if_nothing_applies
58
+ )
59
+ end
60
+
61
+ def self.build_operation_tree_for(
62
+ expected,
63
+ actual,
64
+ extra_operation_tree_builder_classes: [],
65
+ raise_if_nothing_applies: false
66
+ )
67
+ Core::OperationTreeBuilderDispatcher.call(
68
+ expected,
69
+ actual,
70
+ available_classes:
71
+ configuration.extra_operation_tree_builder_classes +
72
+ extra_operation_tree_builder_classes,
73
+ raise_if_nothing_applies: raise_if_nothing_applies
74
+ )
75
+ end
76
+
77
+ def self.find_operation_tree_for(value)
78
+ SuperDiff::Core::OperationTreeFinder.call(
79
+ value,
80
+ available_classes: configuration.extra_operation_tree_classes
81
+ )
39
82
  end
40
83
 
41
84
  def self.inspect_object(object, as_lines:, **rest)
42
- SuperDiff::RecursionGuard.guarding_recursion_of(object) do
85
+ Core::RecursionGuard.guarding_recursion_of(object) do
43
86
  inspection_tree =
44
- ObjectInspection::InspectionTreeBuilders::Main.call(object)
87
+ Core::InspectionTreeBuilderDispatcher.call(
88
+ object,
89
+ available_classes: configuration.extra_inspection_tree_builder_classes
90
+ )
45
91
 
46
92
  if as_lines
47
93
  inspection_tree.render_to_lines(object, **rest)
@@ -87,3 +133,5 @@ module SuperDiff
87
133
  end
88
134
  end
89
135
  end
136
+
137
+ require "super_diff/basic"