super_diff 0.7.0 → 0.8.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 (174) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +0 -1
  3. data/lib/super_diff.rb +27 -6
  4. data/lib/super_diff/active_record.rb +7 -7
  5. data/lib/super_diff/active_record/differs/active_record_relation.rb +3 -13
  6. data/lib/super_diff/active_record/object_inspection.rb +2 -6
  7. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb +16 -0
  8. data/lib/super_diff/active_record/object_inspection/{inspectors → inspection_tree_builders}/active_record_model.rb +19 -20
  9. data/lib/super_diff/active_record/object_inspection/{inspectors → inspection_tree_builders}/active_record_relation.rb +9 -8
  10. data/lib/super_diff/active_record/operation_tree_flatteners.rb +10 -0
  11. data/lib/super_diff/active_record/operation_tree_flatteners/active_record_relation.rb +17 -0
  12. data/lib/super_diff/active_record/operation_trees/active_record_relation.rb +8 -7
  13. data/lib/super_diff/active_support.rb +8 -8
  14. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +3 -13
  15. data/lib/super_diff/active_support/object_inspection.rb +2 -6
  16. data/lib/super_diff/active_support/object_inspection/{inspectors.rb → inspection_tree_builders.rb} +2 -2
  17. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +37 -0
  18. data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +17 -0
  19. data/lib/super_diff/active_support/operation_tree_flatteners.rb +10 -0
  20. data/lib/super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access.rb +17 -0
  21. data/lib/super_diff/active_support/operation_trees/hash_with_indifferent_access.rb +4 -7
  22. data/lib/super_diff/colorized_document_extensions.rb +9 -6
  23. data/lib/super_diff/configuration.rb +81 -8
  24. data/lib/super_diff/csi.rb +1 -2
  25. data/lib/super_diff/csi/four_bit_color.rb +0 -2
  26. data/lib/super_diff/differs/array.rb +1 -1
  27. data/lib/super_diff/differs/base.rb +3 -21
  28. data/lib/super_diff/differs/custom_object.rb +1 -1
  29. data/lib/super_diff/differs/default_object.rb +1 -1
  30. data/lib/super_diff/differs/hash.rb +1 -1
  31. data/lib/super_diff/differs/main.rb +1 -7
  32. data/lib/super_diff/differs/multiline_string.rb +1 -1
  33. data/lib/super_diff/differs/time_like.rb +1 -1
  34. data/lib/super_diff/equality_matchers/array.rb +2 -2
  35. data/lib/super_diff/equality_matchers/default.rb +2 -2
  36. data/lib/super_diff/equality_matchers/hash.rb +2 -2
  37. data/lib/super_diff/equality_matchers/multiline_string.rb +2 -2
  38. data/lib/super_diff/equality_matchers/primitive.rb +4 -7
  39. data/lib/super_diff/equality_matchers/singleline_string.rb +2 -2
  40. data/lib/super_diff/helpers.rb +52 -2
  41. data/lib/super_diff/line.rb +83 -0
  42. data/lib/super_diff/object_inspection.rb +12 -1
  43. data/lib/super_diff/object_inspection/inspection_tree.rb +183 -81
  44. data/lib/super_diff/object_inspection/inspection_tree_builders.rb +44 -0
  45. data/lib/super_diff/object_inspection/inspection_tree_builders/array.rb +38 -0
  46. data/lib/super_diff/object_inspection/inspection_tree_builders/base.rb +27 -0
  47. data/lib/super_diff/object_inspection/inspection_tree_builders/custom_object.rb +37 -0
  48. data/lib/super_diff/object_inspection/inspection_tree_builders/default_object.rb +63 -0
  49. data/lib/super_diff/object_inspection/{inspectors → inspection_tree_builders}/defaults.rb +1 -2
  50. data/lib/super_diff/object_inspection/inspection_tree_builders/hash.rb +46 -0
  51. data/lib/super_diff/object_inspection/{inspectors → inspection_tree_builders}/main.rb +5 -10
  52. data/lib/super_diff/object_inspection/inspection_tree_builders/primitive.rb +21 -0
  53. data/lib/super_diff/object_inspection/{inspectors → inspection_tree_builders}/time_like.rb +19 -18
  54. data/lib/super_diff/object_inspection/nodes.rb +33 -32
  55. data/lib/super_diff/object_inspection/nodes/as_lines_when_rendering_to_lines.rb +97 -0
  56. data/lib/super_diff/object_inspection/nodes/as_prefix_when_rendering_to_lines.rb +27 -0
  57. data/lib/super_diff/object_inspection/nodes/as_prelude_when_rendering_to_lines.rb +27 -0
  58. data/lib/super_diff/object_inspection/nodes/as_single_line.rb +33 -0
  59. data/lib/super_diff/object_inspection/nodes/base.rb +55 -20
  60. data/lib/super_diff/object_inspection/nodes/inspection.rb +47 -7
  61. data/lib/super_diff/object_inspection/nodes/nesting.rb +16 -5
  62. data/lib/super_diff/object_inspection/nodes/only_when.rb +54 -0
  63. data/lib/super_diff/object_inspection/nodes/text.rb +16 -2
  64. data/lib/super_diff/object_inspection/nodes/when_empty.rb +21 -6
  65. data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +20 -5
  66. data/lib/super_diff/object_inspection/nodes/when_rendering_to_lines.rb +27 -0
  67. data/lib/super_diff/object_inspection/nodes/when_rendering_to_string.rb +27 -0
  68. data/lib/super_diff/object_inspection/prefix_for_next_node.rb +6 -0
  69. data/lib/super_diff/object_inspection/prelude_for_next_node.rb +6 -0
  70. data/lib/super_diff/operation_tree_builders/array.rb +7 -10
  71. data/lib/super_diff/operation_tree_builders/base.rb +6 -6
  72. data/lib/super_diff/operation_tree_builders/custom_object.rb +5 -2
  73. data/lib/super_diff/operation_tree_builders/default_object.rb +1 -1
  74. data/lib/super_diff/operation_tree_builders/hash.rb +0 -7
  75. data/lib/super_diff/operation_tree_builders/multiline_string.rb +2 -6
  76. data/lib/super_diff/operation_tree_flatteners.rb +20 -0
  77. data/lib/super_diff/operation_tree_flatteners/array.rb +15 -0
  78. data/lib/super_diff/operation_tree_flatteners/base.rb +54 -0
  79. data/lib/super_diff/operation_tree_flatteners/collection.rb +139 -0
  80. data/lib/super_diff/operation_tree_flatteners/custom_object.rb +28 -0
  81. data/lib/super_diff/operation_tree_flatteners/default_object.rb +32 -0
  82. data/lib/super_diff/operation_tree_flatteners/hash.rb +41 -0
  83. data/lib/super_diff/operation_tree_flatteners/multiline_string.rb +17 -0
  84. data/lib/super_diff/operation_trees/array.rb +4 -7
  85. data/lib/super_diff/operation_trees/base.rb +39 -16
  86. data/lib/super_diff/operation_trees/custom_object.rb +4 -8
  87. data/lib/super_diff/operation_trees/default_object.rb +28 -13
  88. data/lib/super_diff/operation_trees/hash.rb +4 -7
  89. data/lib/super_diff/operation_trees/main.rb +1 -1
  90. data/lib/super_diff/operation_trees/multiline_string.rb +4 -7
  91. data/lib/super_diff/operations/binary_operation.rb +1 -6
  92. data/lib/super_diff/operations/unary_operation.rb +2 -30
  93. data/lib/super_diff/recursion_guard.rb +3 -3
  94. data/lib/super_diff/rspec.rb +12 -13
  95. data/lib/super_diff/rspec/monkey_patches.rb +2 -2
  96. data/lib/super_diff/rspec/object_inspection.rb +4 -1
  97. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +44 -0
  98. data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/collection_containing_exactly.rb +9 -8
  99. data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/collection_including.rb +9 -8
  100. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +103 -0
  101. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +36 -0
  102. data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/instance_of.rb +3 -5
  103. data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/kind_of.rb +3 -5
  104. data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/object_having_attributes.rb +10 -12
  105. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/primitive.rb +10 -0
  106. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/value_within.rb +33 -0
  107. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +0 -3
  108. data/lib/super_diff/tiered_lines.rb +4 -0
  109. data/lib/super_diff/tiered_lines_elider.rb +490 -0
  110. data/lib/super_diff/tiered_lines_formatter.rb +79 -0
  111. data/lib/super_diff/version.rb +1 -1
  112. data/spec/examples.txt +407 -410
  113. data/spec/integration/rails/active_support_spec.rb +19 -0
  114. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +12 -6
  115. data/spec/integration/rspec/eq_matcher_spec.rb +22 -88
  116. data/spec/integration/rspec/have_attributes_matcher_spec.rb +6 -7
  117. data/spec/integration/rspec/match_array_matcher_spec.rb +14 -7
  118. data/spec/integration/rspec/match_matcher_spec.rb +10 -5
  119. data/spec/spec_helper.rb +1 -0
  120. data/spec/support/command_runner.rb +15 -25
  121. data/spec/support/helpers.rb +21 -0
  122. data/spec/support/integration/helpers.rb +2 -0
  123. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +3 -3
  124. data/spec/support/integration/test_programs/base.rb +36 -10
  125. data/spec/support/shared_examples/active_record.rb +3 -2
  126. data/spec/support/shared_examples/active_support.rb +65 -0
  127. data/spec/support/shared_examples/elided_diffs.rb +914 -0
  128. data/spec/support/shared_examples/hash_with_indifferent_access.rb +16 -16
  129. data/spec/support/unit/helpers.rb +15 -0
  130. data/spec/support/unit/matchers/match_output.rb +41 -0
  131. data/spec/unit/active_record/object_inspection_spec.rb +273 -0
  132. data/spec/unit/equality_matchers/main_spec.rb +51 -71
  133. data/spec/unit/helpers_spec.rb +61 -0
  134. data/spec/unit/operation_tree_flatteners/array_spec.rb +604 -0
  135. data/spec/unit/operation_tree_flatteners/custom_object_spec.rb +667 -0
  136. data/spec/unit/operation_tree_flatteners/default_object_spec.rb +687 -0
  137. data/spec/unit/operation_tree_flatteners/hash_spec.rb +632 -0
  138. data/spec/unit/operation_tree_flatteners/multiline_string_spec.rb +121 -0
  139. data/spec/unit/rspec/object_inspection_spec.rb +446 -0
  140. data/spec/unit/super_diff_spec.rb +1488 -846
  141. data/spec/unit/tiered_lines_elider_spec.rb +6356 -0
  142. data/spec/unit/tiered_lines_formatter_spec.rb +193 -0
  143. metadata +88 -50
  144. data/lib/super_diff/active_record/diff_formatters.rb +0 -10
  145. data/lib/super_diff/active_record/diff_formatters/active_record_relation.rb +0 -23
  146. data/lib/super_diff/active_record/object_inspection/inspectors.rb +0 -16
  147. data/lib/super_diff/active_support/diff_formatters.rb +0 -10
  148. data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +0 -36
  149. data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +0 -28
  150. data/lib/super_diff/diff_formatters.rb +0 -14
  151. data/lib/super_diff/diff_formatters/array.rb +0 -21
  152. data/lib/super_diff/diff_formatters/base.rb +0 -33
  153. data/lib/super_diff/diff_formatters/custom_object.rb +0 -30
  154. data/lib/super_diff/diff_formatters/default_object.rb +0 -46
  155. data/lib/super_diff/diff_formatters/defaults.rb +0 -10
  156. data/lib/super_diff/diff_formatters/hash.rb +0 -34
  157. data/lib/super_diff/diff_formatters/main.rb +0 -41
  158. data/lib/super_diff/object_inspection/inspectors.rb +0 -23
  159. data/lib/super_diff/object_inspection/inspectors/array.rb +0 -32
  160. data/lib/super_diff/object_inspection/inspectors/base.rb +0 -36
  161. data/lib/super_diff/object_inspection/inspectors/custom_object.rb +0 -37
  162. data/lib/super_diff/object_inspection/inspectors/default_object.rb +0 -61
  163. data/lib/super_diff/object_inspection/inspectors/hash.rb +0 -32
  164. data/lib/super_diff/object_inspection/inspectors/primitive.rb +0 -28
  165. data/lib/super_diff/object_inspection/inspectors/string.rb +0 -23
  166. data/lib/super_diff/object_inspection/nodes/break.rb +0 -15
  167. data/lib/super_diff/object_inspection/nodes/when_multiline.rb +0 -22
  168. data/lib/super_diff/object_inspection/nodes/when_singleline.rb +0 -24
  169. data/lib/super_diff/rspec/object_inspection/inspectors.rb +0 -40
  170. data/lib/super_diff/rspec/object_inspection/inspectors/hash_including.rb +0 -36
  171. data/lib/super_diff/rspec/object_inspection/inspectors/primitive.rb +0 -13
  172. data/lib/super_diff/rspec/object_inspection/inspectors/value_within.rb +0 -29
  173. data/spec/support/object_id.rb +0 -27
  174. data/spec/support/ruby_versions.rb +0 -11
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb09d995aa3a004c723b22f71fc27b9d5a9d3239751b54b7fb14e11c24df1bb1
4
- data.tar.gz: 2330655f1192952c82c36b70f3acf89e103290532f4ac3093768ba4371316fc0
3
+ metadata.gz: 7d1ad189acadc1bcdf4ad4e63ca6b9d946b7a66f8d1544887389d7f093153b31
4
+ data.tar.gz: f96fb6488cf55e679b3ce8953c26eea0a5c5c6113c35dc30c7d19eb5e3b65ae2
5
5
  SHA512:
6
- metadata.gz: 7ca49e3d7fd65588e1821133cbdf5f9ec41a23ac8e8bbcdb0650ce39387e73c0919d742868bafa26bdeb6edda1cb6049457e1f454a6b17bbc6f0d90fe53d83d0
7
- data.tar.gz: 0bfa520cb843bb293a78f6c40f337881d98871454dde777ea4163b8f3092648b40019adc4fffdc8b405b36bc951a3d37fb6f3ac0a77a37cf05f7d7e852189aa7
6
+ metadata.gz: 5eaeee5249d8cc865ff1fbef12b0c306607bba7f0224ac906c8bbfac0ad4cc196660fed461a3efcbdd69a557cb8dc7aca925351bd9acae5761d4af25d7bac19e
7
+ data.tar.gz: 0bdd31dada209126940d0e55c1a3b0970b1c17b8c22eecb685aa59ea518bb28456b902bd81256a4b13132d3c9ad88cd115dabe1a1796edd90afeee65568a0c74
data/README.md CHANGED
@@ -202,7 +202,6 @@ SuperDiff.configure do |config|
202
202
  config.add_extra_differ_class(YourDiffer)
203
203
  config.add_extra_operation_tree_builder_class(YourOperationTreeBuilder)
204
204
  config.add_extra_operation_tree_class(YourOperationTree)
205
- config.add_extra_diff_formatter_class(YourDiffFormatter)
206
205
  end
207
206
  ```
208
207
 
data/lib/super_diff.rb CHANGED
@@ -7,6 +7,7 @@ module SuperDiff
7
7
  :ColorizedDocumentExtensions,
8
8
  "super_diff/colorized_document_extensions",
9
9
  )
10
+ autoload :OperationTreeFlatteners, "super_diff/operation_tree_flatteners"
10
11
  autoload :Configuration, "super_diff/configuration"
11
12
  autoload :Csi, "super_diff/csi"
12
13
  autoload :DiffFormatters, "super_diff/diff_formatters"
@@ -16,6 +17,10 @@ module SuperDiff
16
17
  autoload :GemVersion, "super_diff/gem_version"
17
18
  autoload :Helpers, "super_diff/helpers"
18
19
  autoload :ImplementationChecks, "super_diff/implementation_checks"
20
+ autoload :Line, "super_diff/line"
21
+ autoload :TieredLines, "super_diff/tiered_lines"
22
+ autoload :TieredLinesElider, "super_diff/tiered_lines_elider"
23
+ autoload :TieredLinesFormatter, "super_diff/tiered_lines_formatter"
19
24
  autoload :ObjectInspection, "super_diff/object_inspection"
20
25
  autoload :OperationTrees, "super_diff/operation_trees"
21
26
  autoload :OperationTreeBuilders, "super_diff/operation_tree_builders"
@@ -24,18 +29,25 @@ module SuperDiff
24
29
 
25
30
  def self.configure
26
31
  yield configuration
32
+ configuration.updated
27
33
  end
28
34
 
29
35
  def self.configuration
30
36
  @_configuration ||= Configuration.new
31
37
  end
32
38
 
33
- def self.inspect_object(object, as_single_line:, indent_level: 0)
34
- ObjectInspection::Inspectors::Main.call(
35
- object,
36
- as_single_line: as_single_line,
37
- indent_level: indent_level,
38
- )
39
+ def self.inspect_object(object, as_lines:, **rest)
40
+ SuperDiff::RecursionGuard.guarding_recursion_of(object) do
41
+ inspection_tree = ObjectInspection::InspectionTreeBuilders::Main.call(
42
+ object
43
+ )
44
+
45
+ if as_lines
46
+ inspection_tree.render_to_lines(object, **rest)
47
+ else
48
+ inspection_tree.render_to_string(object)
49
+ end
50
+ end
39
51
  end
40
52
 
41
53
  def self.time_like?(value)
@@ -45,6 +57,15 @@ module SuperDiff
45
57
  value.is_a?(Time)
46
58
  end
47
59
 
60
+ def self.primitive?(value)
61
+ case value
62
+ when true, false, nil, Symbol, Numeric, Regexp, Class
63
+ true
64
+ else
65
+ false
66
+ end
67
+ end
68
+
48
69
  def self.insert_overrides(target_module, mod = nil, &block)
49
70
  if mod
50
71
  target_module.prepend(mod)
@@ -2,7 +2,6 @@ require "super_diff/active_support"
2
2
 
3
3
  module SuperDiff
4
4
  module ActiveRecord
5
- autoload :DiffFormatters, "super_diff/active_record/diff_formatters"
6
5
  autoload :Differs, "super_diff/active_record/differs"
7
6
  autoload(
8
7
  :ObjectInspection,
@@ -16,6 +15,10 @@ module SuperDiff
16
15
  :OperationTreeBuilders,
17
16
  "super_diff/active_record/operation_tree_builders",
18
17
  )
18
+ autoload(
19
+ :OperationTreeFlatteners,
20
+ "super_diff/active_record/operation_tree_flatteners",
21
+ )
19
22
 
20
23
  SuperDiff.configure do |config|
21
24
  config.add_extra_differ_classes(
@@ -25,12 +28,9 @@ module SuperDiff
25
28
  OperationTreeBuilders::ActiveRecordModel,
26
29
  OperationTreeBuilders::ActiveRecordRelation,
27
30
  )
28
- config.add_extra_diff_formatter_classes(
29
- DiffFormatters::ActiveRecordRelation,
30
- )
31
- config.add_extra_inspector_classes(
32
- ObjectInspection::Inspectors::ActiveRecordModel,
33
- ObjectInspection::Inspectors::ActiveRecordRelation,
31
+ config.add_extra_inspection_tree_builder_classes(
32
+ ObjectInspection::InspectionTreeBuilders::ActiveRecordModel,
33
+ ObjectInspection::InspectionTreeBuilders::ActiveRecordRelation,
34
34
  )
35
35
  end
36
36
  end
@@ -7,20 +7,10 @@ module SuperDiff
7
7
  actual.is_a?(::ActiveRecord::Relation)
8
8
  end
9
9
 
10
- def call
11
- DiffFormatters::ActiveRecordRelation.call(
12
- operation_tree,
13
- indent_level: indent_level,
14
- )
15
- end
16
-
17
- private
10
+ protected
18
11
 
19
- def operation_tree
20
- OperationTreeBuilders::ActiveRecordRelation.call(
21
- expected: expected,
22
- actual: actual,
23
- )
12
+ def operation_tree_builder_class
13
+ OperationTreeBuilders::ActiveRecordRelation
24
14
  end
25
15
  end
26
16
  end
@@ -2,12 +2,8 @@ module SuperDiff
2
2
  module ActiveRecord
3
3
  module ObjectInspection
4
4
  autoload(
5
- :Inspectors,
6
- "super_diff/active_record/object_inspection/inspectors",
7
- )
8
- autoload(
9
- :MapExtension,
10
- "super_diff/active_record/object_inspection/map_extension",
5
+ :InspectionTreeBuilders,
6
+ "super_diff/active_record/object_inspection/inspection_tree_builders",
11
7
  )
12
8
  end
13
9
  end
@@ -0,0 +1,16 @@
1
+ module SuperDiff
2
+ module ActiveRecord
3
+ module ObjectInspection
4
+ module InspectionTreeBuilders
5
+ autoload(
6
+ :ActiveRecordModel,
7
+ "super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model",
8
+ )
9
+ autoload(
10
+ :ActiveRecordRelation,
11
+ "super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation",
12
+ )
13
+ end
14
+ end
15
+ end
16
+ end
@@ -1,44 +1,43 @@
1
1
  module SuperDiff
2
2
  module ActiveRecord
3
3
  module ObjectInspection
4
- module Inspectors
5
- class ActiveRecordModel < SuperDiff::ObjectInspection::Inspectors::Base
4
+ module InspectionTreeBuilders
5
+ class ActiveRecordModel < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
6
  def self.applies_to?(value)
7
7
  value.is_a?(::ActiveRecord::Base)
8
8
  end
9
9
 
10
- protected
11
-
12
- def inspection_tree
10
+ def call
13
11
  SuperDiff::ObjectInspection::InspectionTree.new do
14
- add_text do |object|
15
- "#<#{object.class} "
16
- end
12
+ as_lines_when_rendering_to_lines(collection_bookend: :open) do
13
+ add_text do |object|
14
+ "#<#{object.class} "
15
+ end
17
16
 
18
- when_multiline do
19
- add_text "{"
17
+ when_rendering_to_lines do
18
+ add_text "{"
19
+ end
20
20
  end
21
21
 
22
22
  nested do |object|
23
- add_break
24
-
25
23
  insert_separated_list(
26
24
  ["id"] + (object.attributes.keys.sort - ["id"]),
27
- separator: ",",
28
25
  ) do |name|
29
- add_text name
30
- add_text ": "
26
+ as_prefix_when_rendering_to_lines do
27
+ add_text "#{name}: "
28
+ end
29
+
31
30
  add_inspection_of object.read_attribute(name)
32
31
  end
33
32
  end
34
33
 
35
- add_break
34
+ as_lines_when_rendering_to_lines(collection_bookend: :close) do
35
+ when_rendering_to_lines do
36
+ add_text "}"
37
+ end
36
38
 
37
- when_multiline do
38
- add_text "}"
39
+ add_text ">"
39
40
  end
40
-
41
- add_text ">"
42
41
  end
43
42
  end
44
43
  end
@@ -1,24 +1,25 @@
1
1
  module SuperDiff
2
2
  module ActiveRecord
3
3
  module ObjectInspection
4
- module Inspectors
5
- class ActiveRecordRelation < SuperDiff::ObjectInspection::Inspectors::Base
4
+ module InspectionTreeBuilders
5
+ class ActiveRecordRelation < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
6
  def self.applies_to?(value)
7
7
  value.is_a?(::ActiveRecord::Relation)
8
8
  end
9
9
 
10
- protected
11
-
12
- def inspection_tree
10
+ def call
13
11
  SuperDiff::ObjectInspection::InspectionTree.new do
14
- add_text "#<ActiveRecord::Relation ["
12
+ as_lines_when_rendering_to_lines(collection_bookend: :open) do
13
+ add_text "#<ActiveRecord::Relation ["
14
+ end
15
15
 
16
16
  nested do |array|
17
17
  insert_array_inspection_of(array)
18
18
  end
19
19
 
20
- add_break
21
- add_text "]>"
20
+ as_lines_when_rendering_to_lines(collection_bookend: :close) do
21
+ add_text "]>"
22
+ end
22
23
  end
23
24
  end
24
25
  end
@@ -0,0 +1,10 @@
1
+ module SuperDiff
2
+ module ActiveRecord
3
+ module OperationTreeFlatteners
4
+ autoload(
5
+ :ActiveRecordRelation,
6
+ "super_diff/active_record/operation_tree_flatteners/active_record_relation",
7
+ )
8
+ end
9
+ end
10
+ end
@@ -0,0 +1,17 @@
1
+ module SuperDiff
2
+ module ActiveRecord
3
+ module OperationTreeFlatteners
4
+ class ActiveRecordRelation < SuperDiff::OperationTreeFlatteners::Collection
5
+ protected
6
+
7
+ def open_token
8
+ "#<ActiveRecord::Relation ["
9
+ end
10
+
11
+ def close_token
12
+ "]>"
13
+ end
14
+ end
15
+ end
16
+ end
17
+ end
@@ -2,13 +2,14 @@ module SuperDiff
2
2
  module ActiveRecord
3
3
  module OperationTrees
4
4
  class ActiveRecordRelation < SuperDiff::OperationTrees::Array
5
- def to_diff(indent_level:, collection_prefix:, add_comma:)
6
- DiffFormatters::ActiveRecordRelation.call(
7
- self,
8
- indent_level: indent_level,
9
- collection_prefix: collection_prefix,
10
- add_comma: add_comma,
11
- )
5
+ def self.applies_to?(value)
6
+ value.is_a?(ActiveRecord::Relation)
7
+ end
8
+
9
+ protected
10
+
11
+ def operation_tree_flattener_class
12
+ OperationTreeFlatteners::ActiveRecordRelation
12
13
  end
13
14
  end
14
15
  end
@@ -1,15 +1,18 @@
1
1
  module SuperDiff
2
2
  module ActiveSupport
3
- autoload :DiffFormatters, "super_diff/active_support/diff_formatters"
4
3
  autoload :Differs, "super_diff/active_support/differs"
5
4
  autoload :ObjectInspection, "super_diff/active_support/object_inspection"
5
+ autoload(
6
+ :OperationTrees,
7
+ "super_diff/active_support/operation_trees",
8
+ )
6
9
  autoload(
7
10
  :OperationTreeBuilders,
8
11
  "super_diff/active_support/operation_tree_builders",
9
12
  )
10
13
  autoload(
11
- :OperationalSequences,
12
- "super_diff/active_support/operational_sequences",
14
+ :OperationTreeFlatteners,
15
+ "super_diff/active_support/operation_tree_flatteners",
13
16
  )
14
17
 
15
18
  SuperDiff.configure do |config|
@@ -19,11 +22,8 @@ module SuperDiff
19
22
  config.add_extra_operation_tree_builder_classes(
20
23
  OperationTreeBuilders::HashWithIndifferentAccess,
21
24
  )
22
- config.add_extra_diff_formatter_classes(
23
- DiffFormatters::HashWithIndifferentAccess,
24
- )
25
- config.add_extra_inspector_classes(
26
- ObjectInspection::Inspectors::HashWithIndifferentAccess,
25
+ config.add_extra_inspection_tree_builder_classes(
26
+ ObjectInspection::InspectionTreeBuilders::HashWithIndifferentAccess,
27
27
  )
28
28
  end
29
29
  end
@@ -13,20 +13,10 @@ module SuperDiff
13
13
  )
14
14
  end
15
15
 
16
- def call
17
- DiffFormatters::HashWithIndifferentAccess.call(
18
- operation_tree,
19
- indent_level: indent_level,
20
- )
21
- end
16
+ protected
22
17
 
23
- private
24
-
25
- def operation_tree
26
- OperationTreeBuilders::HashWithIndifferentAccess.call(
27
- expected: expected,
28
- actual: actual,
29
- )
18
+ def operation_tree_builder_class
19
+ OperationTreeBuilders::HashWithIndifferentAccess
30
20
  end
31
21
  end
32
22
  end
@@ -2,12 +2,8 @@ module SuperDiff
2
2
  module ActiveSupport
3
3
  module ObjectInspection
4
4
  autoload(
5
- :Inspectors,
6
- "super_diff/active_support/object_inspection/inspectors",
7
- )
8
- autoload(
9
- :MapExtension,
10
- "super_diff/active_support/object_inspection/map_extension",
5
+ :InspectionTreeBuilders,
6
+ "super_diff/active_support/object_inspection/inspection_tree_builders",
11
7
  )
12
8
  end
13
9
  end
@@ -1,10 +1,10 @@
1
1
  module SuperDiff
2
2
  module ActiveSupport
3
3
  module ObjectInspection
4
- module Inspectors
4
+ module InspectionTreeBuilders
5
5
  autoload(
6
6
  :HashWithIndifferentAccess,
7
- "super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access",
7
+ "super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access",
8
8
  )
9
9
  end
10
10
  end
@@ -0,0 +1,37 @@
1
+ module SuperDiff
2
+ module ActiveSupport
3
+ module ObjectInspection
4
+ module InspectionTreeBuilders
5
+ class HashWithIndifferentAccess < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
6
+ def self.applies_to?(value)
7
+ value.is_a?(::HashWithIndifferentAccess)
8
+ end
9
+
10
+ def call
11
+ SuperDiff::ObjectInspection::InspectionTree.new do
12
+ as_lines_when_rendering_to_lines(collection_bookend: :open) do
13
+ add_text "#<HashWithIndifferentAccess {"
14
+ end
15
+
16
+ when_rendering_to_string do
17
+ add_text " "
18
+ end
19
+
20
+ nested do |hash|
21
+ insert_hash_inspection_of(hash)
22
+ end
23
+
24
+ when_rendering_to_string do
25
+ add_text " "
26
+ end
27
+
28
+ as_lines_when_rendering_to_lines(collection_bookend: :close) do
29
+ add_text "}>"
30
+ end
31
+ end
32
+ end
33
+ end
34
+ end
35
+ end
36
+ end
37
+ end