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
@@ -1,18 +0,0 @@
1
- module SuperDiff
2
- module OperationTreeFlatteners
3
- class MultilineString < Base
4
- def build_tiered_lines
5
- operation_tree.map do |operation|
6
- Line.new(
7
- type: operation.name,
8
- indentation_level: indentation_level,
9
- # TODO: Test that quotes and things don't get escaped but escape
10
- # characters do
11
- value:
12
- operation.value.inspect[1..-2].gsub(/\\"/, '"').gsub(/\\'/, "'")
13
- )
14
- end
15
- end
16
- end
17
- end
18
- end
@@ -1,15 +0,0 @@
1
- module SuperDiff
2
- module OperationTrees
3
- class Array < Base
4
- def self.applies_to?(value)
5
- value.is_a?(::Array)
6
- end
7
-
8
- protected
9
-
10
- def operation_tree_flattener_class
11
- OperationTreeFlatteners::Array
12
- end
13
- end
14
- end
15
- end
@@ -1,15 +0,0 @@
1
- module SuperDiff
2
- module OperationTrees
3
- class CustomObject < DefaultObject
4
- def self.applies_to?(value)
5
- value.respond_to?(:attributes_for_super_diff)
6
- end
7
-
8
- protected
9
-
10
- def operation_tree_flattener_class
11
- OperationTreeFlatteners::CustomObject
12
- end
13
- end
14
- end
15
- end
@@ -1,40 +0,0 @@
1
- module SuperDiff
2
- module OperationTrees
3
- class DefaultObject < Base
4
- def self.applies_to?(*)
5
- true
6
- end
7
-
8
- attr_reader :underlying_object
9
-
10
- def initialize(operations, underlying_object:)
11
- super(operations)
12
- @underlying_object = underlying_object
13
- end
14
-
15
- def pretty_print(pp)
16
- pp.text "#<#{self.class.name} "
17
- pp.nest(1) do
18
- pp.breakable
19
- pp.text ":operations=>"
20
- pp.group(1, "[", "]") do
21
- pp.breakable
22
- pp.seplist(self) { |value| pp.pp value }
23
- end
24
- pp.comma_breakable
25
- pp.text ":underlying_object=>"
26
- pp.object_address_group underlying_object do
27
- # do nothing
28
- end
29
- end
30
- pp.text ">"
31
- end
32
-
33
- protected
34
-
35
- def operation_tree_flattener_class
36
- OperationTreeFlatteners::DefaultObject
37
- end
38
- end
39
- end
40
- end
@@ -1,5 +0,0 @@
1
- module SuperDiff
2
- module OperationTrees
3
- DEFAULTS = [Array, Hash, CustomObject, DefaultObject].freeze
4
- end
5
- end
@@ -1,15 +0,0 @@
1
- module SuperDiff
2
- module OperationTrees
3
- class Hash < Base
4
- def self.applies_to?(value)
5
- value.is_a?(::Hash)
6
- end
7
-
8
- protected
9
-
10
- def operation_tree_flattener_class
11
- OperationTreeFlatteners::Hash
12
- end
13
- end
14
- end
15
- end
@@ -1,35 +0,0 @@
1
- module SuperDiff
2
- module OperationTrees
3
- class Main
4
- extend AttrExtras.mixin
5
-
6
- method_object :value
7
-
8
- def call
9
- if resolved_class
10
- begin
11
- resolved_class.new([], underlying_object: value)
12
- rescue ArgumentError
13
- resolved_class.new([])
14
- end
15
- else
16
- raise Errors::NoOperationalSequenceAvailableError.create(value)
17
- end
18
- end
19
-
20
- private
21
-
22
- def resolved_class
23
- if value.respond_to?(:attributes_for_super_diff)
24
- CustomObject
25
- else
26
- available_classes.find { |klass| klass.applies_to?(value) }
27
- end
28
- end
29
-
30
- def available_classes
31
- SuperDiff.configuration.extra_operation_tree_classes + DEFAULTS
32
- end
33
- end
34
- end
35
- end
@@ -1,15 +0,0 @@
1
- module SuperDiff
2
- module OperationTrees
3
- class MultilineString < Base
4
- def self.applies_to?(value)
5
- value.is_a?(::String) && value.is_a?(::String)
6
- end
7
-
8
- protected
9
-
10
- def operation_tree_flattener_class
11
- OperationTreeFlatteners::MultilineString
12
- end
13
- end
14
- end
15
- end
@@ -1,50 +0,0 @@
1
- require "set"
2
-
3
- module SuperDiff
4
- module RecursionGuard
5
- RECURSION_GUARD_KEY = "super_diff_recursion_guard_key".freeze
6
- PLACEHOLDER = "∙∙∙".freeze
7
-
8
- def self.guarding_recursion_of(*objects, &block)
9
- already_seen_objects, first_seen_objects =
10
- objects.partition do |object|
11
- !SuperDiff.primitive?(object) && already_seen?(object)
12
- end
13
-
14
- first_seen_objects.each do |object|
15
- already_seen_object_ids.add(object.object_id)
16
- end
17
-
18
- result =
19
- if block.arity > 0
20
- block.call(already_seen_objects.any?)
21
- else
22
- block.call
23
- end
24
-
25
- first_seen_objects.each do |object|
26
- already_seen_object_ids.delete(object.object_id)
27
- end
28
-
29
- result
30
- end
31
-
32
- def self.substituting_recursion_of(*objects)
33
- guarding_recursion_of(*objects) do |already_seen|
34
- if already_seen
35
- PLACEHOLDER
36
- else
37
- yield
38
- end
39
- end
40
- end
41
-
42
- def self.already_seen?(object)
43
- already_seen_object_ids.include?(object.object_id)
44
- end
45
-
46
- def self.already_seen_object_ids
47
- Thread.current[RECURSION_GUARD_KEY] ||= Set.new
48
- end
49
- end
50
- end
@@ -1,36 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module InspectionTreeBuilders
5
- class CollectionContainingExactly < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
- def self.applies_to?(value)
7
- SuperDiff::RSpec.a_collection_containing_exactly_something?(value)
8
- end
9
-
10
- def call
11
- SuperDiff::ObjectInspection::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 containing exactly ("
17
- end
18
-
19
- # stree-ignore
20
- t1.nested do |t2|
21
- t2.insert_array_inspection_of(object.expected)
22
- end
23
-
24
- # stree-ignore
25
- t1.as_lines_when_rendering_to_lines(
26
- collection_bookend: :close
27
- ) do |t2|
28
- t2.add_text ")>"
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,42 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module InspectionTreeBuilders
5
- class CollectionIncluding < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
- def self.applies_to?(value)
7
- SuperDiff::RSpec.a_collection_including_something?(value) ||
8
- SuperDiff::RSpec.array_including_something?(value)
9
- end
10
-
11
- def call
12
- SuperDiff::ObjectInspection::InspectionTree.new do |t1|
13
- # stree-ignore
14
- t1.as_lines_when_rendering_to_lines(
15
- collection_bookend: :open
16
- ) do |t2|
17
- t2.add_text "#<a collection including ("
18
- end
19
-
20
- t1.nested do |t2|
21
- if SuperDiff::RSpec.a_collection_including_something?(object)
22
- t2.insert_array_inspection_of(object.expecteds)
23
- else
24
- t2.insert_array_inspection_of(
25
- object.instance_variable_get(:@expected)
26
- )
27
- end
28
- end
29
-
30
- # stree-ignore
31
- t1.as_lines_when_rendering_to_lines(
32
- collection_bookend: :close
33
- ) do |t2|
34
- t2.add_text ")>"
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,102 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module InspectionTreeBuilders
5
- class Double < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
- def self.applies_to?(value)
7
- value.is_a?(::RSpec::Mocks::Double)
8
- end
9
-
10
- def call
11
- SuperDiff::ObjectInspection::InspectionTree.new do |t1|
12
- t1.only_when method(:empty?) do |t2|
13
- t2.as_lines_when_rendering_to_lines do |t3|
14
- t3.add_text("#<#{inspected_class} #{inspected_name}>")
15
- end
16
- end
17
-
18
- t1.only_when method(:nonempty?) do |t2|
19
- t2.as_lines_when_rendering_to_lines(
20
- collection_bookend: :open
21
- ) do |t3|
22
- t3.add_text("#<#{inspected_class} #{inspected_name}")
23
-
24
- # stree-ignore
25
- t3.when_rendering_to_lines do |t4|
26
- t4.add_text " {"
27
- end
28
- end
29
-
30
- # stree-ignore
31
- t2.when_rendering_to_string do |t3|
32
- t3.add_text " "
33
- end
34
-
35
- # stree-ignore
36
- t2.nested do |t3|
37
- t3.insert_hash_inspection_of doubled_methods
38
- end
39
-
40
- t2.as_lines_when_rendering_to_lines(
41
- collection_bookend: :close
42
- ) do |t3|
43
- # stree-ignore
44
- t3.when_rendering_to_lines do |t4|
45
- t4.add_text "}"
46
- end
47
-
48
- t3.add_text ">"
49
- end
50
- end
51
- end
52
- end
53
-
54
- private
55
-
56
- def empty?
57
- doubled_methods.empty?
58
- end
59
-
60
- def nonempty?
61
- !empty?
62
- end
63
-
64
- def inspected_class
65
- case object
66
- when ::RSpec::Mocks::InstanceVerifyingDouble
67
- "InstanceDouble"
68
- when ::RSpec::Mocks::ClassVerifyingDouble
69
- "ClassDouble"
70
- when ::RSpec::Mocks::ObjectVerifyingDouble
71
- "ObjectDouble"
72
- else
73
- "Double"
74
- end
75
- end
76
-
77
- def inspected_name
78
- if object.instance_variable_get("@name")
79
- object.instance_variable_get("@name").inspect
80
- else
81
- "(anonymous)"
82
- end
83
- end
84
-
85
- def doubled_methods
86
- @_doubled_methods ||=
87
- doubled_method_names.reduce({}) do |hash, key|
88
- hash.merge(key => object.public_send(key))
89
- end
90
- end
91
-
92
- def doubled_method_names
93
- object
94
- .__send__(:__mock_proxy)
95
- .instance_variable_get("@method_doubles")
96
- .keys
97
- end
98
- end
99
- end
100
- end
101
- end
102
- end
@@ -1,19 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module InspectionTreeBuilders
5
- class GenericDescribableMatcher < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
- def self.applies_to?(value)
7
- ::RSpec::Matchers.is_a_describable_matcher?(value)
8
- end
9
-
10
- def call
11
- SuperDiff::ObjectInspection::InspectionTree.new do |t1|
12
- t1.add_text "#<#{object.description}>"
13
- end
14
- end
15
- end
16
- end
17
- end
18
- end
19
- end
@@ -1,42 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module InspectionTreeBuilders
5
- class HashIncluding < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
- def self.applies_to?(value)
7
- SuperDiff::RSpec.a_hash_including_something?(value) ||
8
- SuperDiff::RSpec.hash_including_something?(value)
9
- end
10
-
11
- def call
12
- SuperDiff::ObjectInspection::InspectionTree.new do |t1|
13
- # stree-ignore
14
- t1.as_lines_when_rendering_to_lines(
15
- collection_bookend: :open
16
- ) do |t2|
17
- t2.add_text "#<a hash including ("
18
- end
19
-
20
- t1.nested do |t2|
21
- if SuperDiff::RSpec.a_hash_including_something?(object)
22
- t2.insert_hash_inspection_of(object.expecteds.first)
23
- else
24
- t2.insert_hash_inspection_of(
25
- object.instance_variable_get(:@expected)
26
- )
27
- end
28
- end
29
-
30
- # stree-ignore
31
- t1.as_lines_when_rendering_to_lines(
32
- collection_bookend: :close
33
- ) do |t2|
34
- t2.add_text ")>"
35
- end
36
- end
37
- end
38
- end
39
- end
40
- end
41
- end
42
- end
@@ -1,27 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module InspectionTreeBuilders
5
- class InstanceOf < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
- def self.applies_to?(value)
7
- SuperDiff::RSpec.an_instance_of_something?(value) ||
8
- SuperDiff::RSpec.instance_of_something?(value)
9
- end
10
-
11
- def call
12
- SuperDiff::ObjectInspection::InspectionTree.new do |t1|
13
- klass =
14
- if SuperDiff::RSpec.an_instance_of_something?(object)
15
- object.expected
16
- else
17
- object.instance_variable_get(:@klass)
18
- end
19
-
20
- t1.add_text "#<an instance of #{klass}>"
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,27 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module InspectionTreeBuilders
5
- class KindOf < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
- def self.applies_to?(value)
7
- SuperDiff::RSpec.a_kind_of_something?(value) ||
8
- SuperDiff::RSpec.kind_of_something?(value)
9
- end
10
-
11
- def call
12
- SuperDiff::ObjectInspection::InspectionTree.new do |t1|
13
- klass =
14
- if SuperDiff::RSpec.a_kind_of_something?(object)
15
- object.expected
16
- else
17
- object.instance_variable_get(:@klass)
18
- end
19
-
20
- t1.add_text "#<a kind of #{klass}>"
21
- end
22
- end
23
- end
24
- end
25
- end
26
- end
27
- end
@@ -1,36 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module InspectionTreeBuilders
5
- class ObjectHavingAttributes < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
- def self.applies_to?(value)
7
- SuperDiff::RSpec.an_object_having_some_attributes?(value)
8
- end
9
-
10
- def call
11
- SuperDiff::ObjectInspection::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 "#<an object having attributes ("
17
- end
18
-
19
- # stree-ignore
20
- t1.nested do |t2|
21
- t2.insert_hash_inspection_of(object.expected)
22
- end
23
-
24
- # stree-ignore
25
- t1.as_lines_when_rendering_to_lines(
26
- collection_bookend: :close
27
- ) do |t2|
28
- t2.add_text ")>"
29
- end
30
- end
31
- end
32
- end
33
- end
34
- end
35
- end
36
- end
@@ -1,10 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module InspectionTreeBuilders
5
- class Primitive < SuperDiff::ObjectInspection::InspectionTreeBuilders::Primitive
6
- end
7
- end
8
- end
9
- end
10
- end
@@ -1,32 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module InspectionTreeBuilders
5
- class ValueWithin < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
- def self.applies_to?(value)
7
- SuperDiff::RSpec.a_value_within_something?(value)
8
- end
9
-
10
- def call
11
- SuperDiff::ObjectInspection::InspectionTree.new do |t1|
12
- t1.as_prelude_when_rendering_to_lines do |t2|
13
- t2.add_text "#<a value within "
14
-
15
- t2.add_inspection_of(
16
- object.base_matcher.instance_variable_get("@delta"),
17
- as_lines: false
18
- )
19
-
20
- t2.add_text " of "
21
- end
22
-
23
- t1.add_inspection_of object.expected
24
-
25
- t1.add_text ">"
26
- end
27
- end
28
- end
29
- end
30
- end
31
- end
32
- end
@@ -1,48 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module InspectionTreeBuilders
5
- autoload(
6
- :CollectionContainingExactly,
7
- "super_diff/rspec/object_inspection/inspection_tree_builders/collection_containing_exactly"
8
- )
9
- autoload(
10
- :CollectionIncluding,
11
- "super_diff/rspec/object_inspection/inspection_tree_builders/collection_including"
12
- )
13
- autoload(
14
- :Double,
15
- "super_diff/rspec/object_inspection/inspection_tree_builders/double"
16
- )
17
- autoload(
18
- :GenericDescribableMatcher,
19
- "super_diff/rspec/object_inspection/inspection_tree_builders/generic_describable_matcher"
20
- )
21
- autoload(
22
- :HashIncluding,
23
- "super_diff/rspec/object_inspection/inspection_tree_builders/hash_including"
24
- )
25
- autoload(
26
- :InstanceOf,
27
- "super_diff/rspec/object_inspection/inspection_tree_builders/instance_of"
28
- )
29
- autoload(
30
- :KindOf,
31
- "super_diff/rspec/object_inspection/inspection_tree_builders/kind_of"
32
- )
33
- autoload(
34
- :ObjectHavingAttributes,
35
- "super_diff/rspec/object_inspection/inspection_tree_builders/object_having_attributes"
36
- )
37
- autoload(
38
- :Primitive,
39
- "super_diff/rspec/object_inspection/inspection_tree_builders/primitive"
40
- )
41
- autoload(
42
- :ValueWithin,
43
- "super_diff/rspec/object_inspection/inspection_tree_builders/value_within"
44
- )
45
- end
46
- end
47
- end
48
- end
@@ -1,4 +0,0 @@
1
- module SuperDiff
2
- class TieredLines < Array
3
- end
4
- end