super_diff 0.11.0 → 0.13.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 (242) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +23 -182
  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/basic/inspection_tree_builders/data_object.rb +40 -0
  37. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/date_like.rb +3 -3
  38. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/default_object.rb +5 -7
  39. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/hash.rb +3 -3
  40. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/primitive.rb +4 -4
  41. data/lib/super_diff/{object_inspection → basic}/inspection_tree_builders/time_like.rb +3 -3
  42. data/lib/super_diff/basic/inspection_tree_builders.rb +24 -0
  43. data/lib/super_diff/basic/operation_tree_builders/array.rb +111 -0
  44. data/lib/super_diff/basic/operation_tree_builders/custom_object.rb +42 -0
  45. data/lib/super_diff/basic/operation_tree_builders/data_object.rb +18 -0
  46. data/lib/super_diff/basic/operation_tree_builders/date_like.rb +17 -0
  47. data/lib/super_diff/basic/operation_tree_builders/default_object.rb +117 -0
  48. data/lib/super_diff/basic/operation_tree_builders/hash.rb +222 -0
  49. data/lib/super_diff/basic/operation_tree_builders/multiline_string.rb +90 -0
  50. data/lib/super_diff/basic/operation_tree_builders/time_like.rb +26 -0
  51. data/lib/super_diff/basic/operation_tree_builders.rb +38 -0
  52. data/lib/super_diff/basic/operation_tree_flatteners/array.rb +17 -0
  53. data/lib/super_diff/basic/operation_tree_flatteners/collection.rb +140 -0
  54. data/lib/super_diff/basic/operation_tree_flatteners/custom_object.rb +30 -0
  55. data/lib/super_diff/basic/operation_tree_flatteners/default_object.rb +32 -0
  56. data/lib/super_diff/basic/operation_tree_flatteners/hash.rb +35 -0
  57. data/lib/super_diff/basic/operation_tree_flatteners/multiline_string.rb +20 -0
  58. data/lib/super_diff/basic/operation_tree_flatteners.rb +24 -0
  59. data/lib/super_diff/basic/operation_trees/array.rb +17 -0
  60. data/lib/super_diff/basic/operation_trees/custom_object.rb +17 -0
  61. data/lib/super_diff/basic/operation_trees/default_object.rb +42 -0
  62. data/lib/super_diff/basic/operation_trees/hash.rb +17 -0
  63. data/lib/super_diff/basic/operation_trees/multiline_string.rb +17 -0
  64. data/lib/super_diff/basic/operation_trees.rb +25 -0
  65. data/lib/super_diff/basic.rb +50 -0
  66. data/lib/super_diff/{differs/base.rb → core/abstract_differ.rb} +2 -2
  67. data/lib/super_diff/core/abstract_inspection_tree_builder.rb +26 -0
  68. data/lib/super_diff/{operation_trees/base.rb → core/abstract_operation_tree.rb} +6 -2
  69. data/lib/super_diff/{operation_tree_builders/base.rb → core/abstract_operation_tree_builder.rb} +4 -8
  70. data/lib/super_diff/{operation_tree_flatteners/base.rb → core/abstract_operation_tree_flattener.rb} +2 -2
  71. data/lib/super_diff/{operations → core}/binary_operation.rb +1 -1
  72. data/lib/super_diff/core/colorized_document_extensions.rb +20 -0
  73. data/lib/super_diff/core/configuration.rb +196 -0
  74. data/lib/super_diff/core/differ_dispatcher.rb +31 -0
  75. data/lib/super_diff/core/gem_version.rb +47 -0
  76. data/lib/super_diff/core/helpers.rb +88 -0
  77. data/lib/super_diff/core/implementation_checks.rb +21 -0
  78. data/lib/super_diff/{object_inspection → core}/inspection_tree.rb +7 -6
  79. data/lib/super_diff/core/inspection_tree_builder_dispatcher.rb +23 -0
  80. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/as_lines_when_rendering_to_lines.rb +9 -3
  81. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/as_prefix_when_rendering_to_lines.rb +3 -3
  82. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/as_prelude_when_rendering_to_lines.rb +3 -3
  83. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/as_single_line.rb +3 -3
  84. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/base.rb +2 -2
  85. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/inspection.rb +7 -11
  86. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/nesting.rb +2 -2
  87. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/only_when.rb +2 -2
  88. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/text.rb +2 -2
  89. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/when_empty.rb +2 -2
  90. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/when_non_empty.rb +2 -2
  91. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/when_rendering_to_lines.rb +2 -2
  92. data/lib/super_diff/{object_inspection/nodes → core/inspection_tree_nodes}/when_rendering_to_string.rb +2 -2
  93. data/lib/super_diff/core/inspection_tree_nodes.rb +55 -0
  94. data/lib/super_diff/core/line.rb +85 -0
  95. data/lib/super_diff/{errors → core}/no_differ_available_error.rb +1 -1
  96. data/lib/super_diff/core/no_inspection_tree_builder_available_error.rb +21 -0
  97. data/lib/super_diff/core/no_operation_tree_available_error.rb +20 -0
  98. data/lib/super_diff/core/no_operation_tree_builder_available_error.rb +24 -0
  99. data/lib/super_diff/{operation_tree_builders/main.rb → core/operation_tree_builder_dispatcher.rb} +9 -13
  100. data/lib/super_diff/core/operation_tree_finder.rb +27 -0
  101. data/lib/super_diff/core/prefix_for_next_inspection_tree_node.rb +6 -0
  102. data/lib/super_diff/core/prelude_for_next_inspection_tree_node.rb +6 -0
  103. data/lib/super_diff/core/recursion_guard.rb +52 -0
  104. data/lib/super_diff/core/tiered_lines.rb +6 -0
  105. data/lib/super_diff/core/tiered_lines_elider.rb +472 -0
  106. data/lib/super_diff/core/tiered_lines_formatter.rb +77 -0
  107. data/lib/super_diff/{operations → core}/unary_operation.rb +1 -1
  108. data/lib/super_diff/core.rb +69 -0
  109. data/lib/super_diff/csi.rb +0 -32
  110. data/lib/super_diff/differs.rb +19 -12
  111. data/lib/super_diff/equality_matchers/array.rb +3 -3
  112. data/lib/super_diff/equality_matchers/default.rb +8 -3
  113. data/lib/super_diff/equality_matchers/defaults.rb +1 -1
  114. data/lib/super_diff/equality_matchers/hash.rb +3 -3
  115. data/lib/super_diff/equality_matchers/multiline_string.rb +3 -3
  116. data/lib/super_diff/equality_matchers/primitive.rb +3 -3
  117. data/lib/super_diff/equality_matchers/singleline_string.rb +2 -2
  118. data/lib/super_diff/errors.rb +12 -8
  119. data/lib/super_diff/object_inspection.rb +63 -14
  120. data/lib/super_diff/operation_tree_builders.rb +19 -15
  121. data/lib/super_diff/operation_tree_flatteners.rb +19 -16
  122. data/lib/super_diff/operation_trees.rb +19 -9
  123. data/lib/super_diff/operations.rb +12 -2
  124. data/lib/super_diff/rspec/augmented_matcher.rb +1 -1
  125. data/lib/super_diff/rspec/differ.rb +4 -5
  126. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +1 -1
  127. data/lib/super_diff/rspec/differs/collection_including.rb +1 -1
  128. data/lib/super_diff/rspec/differs/hash_including.rb +1 -1
  129. data/lib/super_diff/rspec/differs/object_having_attributes.rb +1 -1
  130. data/lib/super_diff/rspec/inspection_tree_builders/collection_containing_exactly.rb +34 -0
  131. data/lib/super_diff/rspec/inspection_tree_builders/collection_including.rb +40 -0
  132. data/lib/super_diff/rspec/inspection_tree_builders/double.rb +100 -0
  133. data/lib/super_diff/rspec/inspection_tree_builders/generic_describable_matcher.rb +17 -0
  134. data/lib/super_diff/rspec/inspection_tree_builders/hash_including.rb +40 -0
  135. data/lib/super_diff/rspec/inspection_tree_builders/instance_of.rb +25 -0
  136. data/lib/super_diff/rspec/inspection_tree_builders/kind_of.rb +25 -0
  137. data/lib/super_diff/rspec/inspection_tree_builders/object_having_attributes.rb +34 -0
  138. data/lib/super_diff/rspec/inspection_tree_builders/primitive.rb +9 -0
  139. data/lib/super_diff/rspec/inspection_tree_builders/value_within.rb +30 -0
  140. data/lib/super_diff/rspec/inspection_tree_builders.rb +40 -0
  141. data/lib/super_diff/rspec/object_inspection.rb +14 -4
  142. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +4 -4
  143. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +1 -1
  144. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +1 -1
  145. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +2 -2
  146. data/lib/super_diff/rspec.rb +20 -18
  147. data/lib/super_diff/version.rb +1 -1
  148. data/lib/super_diff.rb +70 -23
  149. data/spec/examples.txt +450 -543
  150. data/spec/spec_helper.rb +1 -0
  151. data/spec/support/integration/helpers.rb +4 -1
  152. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +1 -1
  153. data/spec/support/models/active_record/person.rb +8 -1
  154. data/spec/support/models/point.rb +7 -0
  155. data/spec/support/shared_examples/active_record.rb +5 -5
  156. data/spec/support/unit/helpers.rb +12 -1
  157. data/spec/support/unit/matchers/be_deprecated_in_favor_of.rb +39 -0
  158. data/spec/unit/active_record/object_inspection_spec.rb +5 -5
  159. data/spec/unit/basic/inspection_tree_builders/data_object_spec.rb +146 -0
  160. data/spec/unit/basic/operation_tree_builders/data_object_spec.rb +82 -0
  161. data/spec/unit/{operation_tree_flatteners → basic/operation_tree_flatteners}/array_spec.rb +8 -8
  162. data/spec/unit/{operation_tree_flatteners → basic/operation_tree_flatteners}/custom_object_spec.rb +9 -9
  163. data/spec/unit/{operation_tree_flatteners → basic/operation_tree_flatteners}/default_object_spec.rb +9 -9
  164. data/spec/unit/{operation_tree_flatteners → basic/operation_tree_flatteners}/hash_spec.rb +8 -8
  165. data/spec/unit/{operation_tree_flatteners → basic/operation_tree_flatteners}/multiline_string_spec.rb +4 -4
  166. data/spec/unit/core/configuration_no_rspec_spec.rb +58 -0
  167. data/spec/unit/core/configuration_spec.rb +176 -0
  168. data/spec/unit/{helpers_spec.rb → core/helpers_spec.rb} +2 -2
  169. data/spec/unit/{tiered_lines_elider_spec.rb → core/tiered_lines_elider_spec.rb} +2 -2
  170. data/spec/unit/{tiered_lines_formatter_spec.rb → core/tiered_lines_formatter_spec.rb} +1 -1
  171. data/spec/unit/deprecations_spec.rb +176 -0
  172. data/spec/unit/equality_matchers/main_spec.rb +5 -5
  173. data/super_diff.gemspec +10 -3
  174. metadata +144 -120
  175. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model.rb +0 -51
  176. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation.rb +0 -36
  177. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb +0 -16
  178. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +0 -46
  179. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/ordered_options.rb +0 -46
  180. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders.rb +0 -16
  181. data/lib/super_diff/colorized_document_extensions.rb +0 -18
  182. data/lib/super_diff/configuration.rb +0 -149
  183. data/lib/super_diff/diff_formatters/collection.rb +0 -132
  184. data/lib/super_diff/diff_formatters/multiline_string.rb +0 -31
  185. data/lib/super_diff/differs/array.rb +0 -15
  186. data/lib/super_diff/differs/custom_object.rb +0 -17
  187. data/lib/super_diff/differs/date_like.rb +0 -15
  188. data/lib/super_diff/differs/default_object.rb +0 -19
  189. data/lib/super_diff/differs/defaults.rb +0 -13
  190. data/lib/super_diff/differs/empty.rb +0 -13
  191. data/lib/super_diff/differs/hash.rb +0 -15
  192. data/lib/super_diff/differs/main.rb +0 -31
  193. data/lib/super_diff/differs/multiline_string.rb +0 -16
  194. data/lib/super_diff/differs/time_like.rb +0 -15
  195. data/lib/super_diff/gem_version.rb +0 -45
  196. data/lib/super_diff/helpers.rb +0 -86
  197. data/lib/super_diff/implementation_checks.rb +0 -19
  198. data/lib/super_diff/line.rb +0 -83
  199. data/lib/super_diff/object_inspection/inspection_tree_builders/base.rb +0 -27
  200. data/lib/super_diff/object_inspection/inspection_tree_builders/defaults.rb +0 -15
  201. data/lib/super_diff/object_inspection/inspection_tree_builders/main.rb +0 -30
  202. data/lib/super_diff/object_inspection/inspection_tree_builders.rb +0 -48
  203. data/lib/super_diff/object_inspection/nodes.rb +0 -50
  204. data/lib/super_diff/object_inspection/prefix_for_next_node.rb +0 -6
  205. data/lib/super_diff/object_inspection/prelude_for_next_node.rb +0 -6
  206. data/lib/super_diff/operation_tree_builders/array.rb +0 -107
  207. data/lib/super_diff/operation_tree_builders/custom_object.rb +0 -40
  208. data/lib/super_diff/operation_tree_builders/date_like.rb +0 -15
  209. data/lib/super_diff/operation_tree_builders/default_object.rb +0 -119
  210. data/lib/super_diff/operation_tree_builders/defaults.rb +0 -5
  211. data/lib/super_diff/operation_tree_builders/hash.rb +0 -218
  212. data/lib/super_diff/operation_tree_builders/multiline_string.rb +0 -86
  213. data/lib/super_diff/operation_tree_builders/time_like.rb +0 -24
  214. data/lib/super_diff/operation_tree_flatteners/array.rb +0 -15
  215. data/lib/super_diff/operation_tree_flatteners/collection.rb +0 -136
  216. data/lib/super_diff/operation_tree_flatteners/custom_object.rb +0 -28
  217. data/lib/super_diff/operation_tree_flatteners/default_object.rb +0 -31
  218. data/lib/super_diff/operation_tree_flatteners/hash.rb +0 -33
  219. data/lib/super_diff/operation_tree_flatteners/multiline_string.rb +0 -18
  220. data/lib/super_diff/operation_trees/array.rb +0 -15
  221. data/lib/super_diff/operation_trees/custom_object.rb +0 -15
  222. data/lib/super_diff/operation_trees/default_object.rb +0 -40
  223. data/lib/super_diff/operation_trees/defaults.rb +0 -5
  224. data/lib/super_diff/operation_trees/hash.rb +0 -15
  225. data/lib/super_diff/operation_trees/main.rb +0 -35
  226. data/lib/super_diff/operation_trees/multiline_string.rb +0 -15
  227. data/lib/super_diff/recursion_guard.rb +0 -50
  228. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_containing_exactly.rb +0 -36
  229. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_including.rb +0 -42
  230. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +0 -102
  231. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/generic_describable_matcher.rb +0 -19
  232. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +0 -42
  233. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/instance_of.rb +0 -27
  234. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/kind_of.rb +0 -27
  235. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/object_having_attributes.rb +0 -36
  236. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/primitive.rb +0 -10
  237. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/value_within.rb +0 -32
  238. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +0 -48
  239. data/lib/super_diff/tiered_lines.rb +0 -4
  240. data/lib/super_diff/tiered_lines_elider.rb +0 -462
  241. data/lib/super_diff/tiered_lines_formatter.rb +0 -75
  242. data/spec/internal/log/test.log +0 -0
@@ -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
@@ -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.13.0".freeze
3
3
  end
data/lib/super_diff.rb CHANGED
@@ -1,47 +1,92 @@
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
- configuration.updated
35
39
  end
36
40
 
37
41
  def self.configuration
38
- @_configuration ||= Configuration.new
42
+ @_configuration ||= Core::Configuration.new
43
+ end
44
+
45
+ def self.diff(
46
+ expected,
47
+ actual,
48
+ indent_level: 0,
49
+ raise_if_nothing_applies: true
50
+ )
51
+ Core::DifferDispatcher.call(
52
+ expected,
53
+ actual,
54
+ available_classes: configuration.extra_differ_classes,
55
+ indent_level: indent_level,
56
+ raise_if_nothing_applies: raise_if_nothing_applies
57
+ )
58
+ end
59
+
60
+ def self.build_operation_tree_for(
61
+ expected,
62
+ actual,
63
+ extra_operation_tree_builder_classes: [],
64
+ raise_if_nothing_applies: false
65
+ )
66
+ Core::OperationTreeBuilderDispatcher.call(
67
+ expected,
68
+ actual,
69
+ available_classes:
70
+ configuration.extra_operation_tree_builder_classes +
71
+ extra_operation_tree_builder_classes,
72
+ raise_if_nothing_applies: raise_if_nothing_applies
73
+ )
74
+ end
75
+
76
+ def self.find_operation_tree_for(value)
77
+ SuperDiff::Core::OperationTreeFinder.call(
78
+ value,
79
+ available_classes: configuration.extra_operation_tree_classes
80
+ )
39
81
  end
40
82
 
41
83
  def self.inspect_object(object, as_lines:, **rest)
42
- SuperDiff::RecursionGuard.guarding_recursion_of(object) do
84
+ Core::RecursionGuard.guarding_recursion_of(object) do
43
85
  inspection_tree =
44
- ObjectInspection::InspectionTreeBuilders::Main.call(object)
86
+ Core::InspectionTreeBuilderDispatcher.call(
87
+ object,
88
+ available_classes: configuration.extra_inspection_tree_builder_classes
89
+ )
45
90
 
46
91
  if as_lines
47
92
  inspection_tree.render_to_lines(object, **rest)
@@ -68,7 +113,7 @@ module SuperDiff
68
113
 
69
114
  def self.primitive?(value)
70
115
  case value
71
- when true, false, nil, Symbol, Numeric, Regexp, Class
116
+ when true, false, nil, Symbol, Numeric, Regexp, Class, String
72
117
  true
73
118
  else
74
119
  false
@@ -87,3 +132,5 @@ module SuperDiff
87
132
  end
88
133
  end
89
134
  end
135
+
136
+ require "super_diff/basic"