super_diff 0.2.0 → 0.5.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 (187) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +108 -74
  3. data/lib/super_diff.rb +20 -11
  4. data/lib/super_diff/active_record.rb +21 -23
  5. data/lib/super_diff/active_record/diff_formatters/active_record_relation.rb +3 -3
  6. data/lib/super_diff/active_record/differs/active_record_relation.rb +3 -5
  7. data/lib/super_diff/active_record/monkey_patches.rb +9 -0
  8. data/lib/super_diff/active_record/object_inspection/inspectors/active_record_model.rb +32 -22
  9. data/lib/super_diff/active_record/object_inspection/inspectors/active_record_relation.rb +17 -7
  10. data/lib/super_diff/active_record/operation_tree_builders.rb +14 -0
  11. data/lib/super_diff/active_record/{operational_sequencers → operation_tree_builders}/active_record_model.rb +2 -2
  12. data/lib/super_diff/active_record/{operational_sequencers → operation_tree_builders}/active_record_relation.rb +4 -4
  13. data/lib/super_diff/active_record/{operation_sequences.rb → operation_trees.rb} +2 -2
  14. data/lib/super_diff/active_record/{operation_sequences → operation_trees}/active_record_relation.rb +2 -2
  15. data/lib/super_diff/active_support.rb +16 -19
  16. data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +3 -3
  17. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +3 -5
  18. data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +17 -7
  19. data/lib/super_diff/active_support/operation_tree_builders.rb +10 -0
  20. data/lib/super_diff/active_support/{operational_sequencers → operation_tree_builders}/hash_with_indifferent_access.rb +2 -2
  21. data/lib/super_diff/active_support/{operation_sequences.rb → operation_trees.rb} +2 -2
  22. data/lib/super_diff/active_support/{operation_sequences → operation_trees}/hash_with_indifferent_access.rb +2 -2
  23. data/lib/super_diff/configuration.rb +60 -0
  24. data/lib/super_diff/csi.rb +4 -0
  25. data/lib/super_diff/diff_formatters.rb +3 -3
  26. data/lib/super_diff/diff_formatters/array.rb +3 -3
  27. data/lib/super_diff/diff_formatters/base.rb +3 -2
  28. data/lib/super_diff/diff_formatters/collection.rb +2 -2
  29. data/lib/super_diff/diff_formatters/custom_object.rb +3 -3
  30. data/lib/super_diff/diff_formatters/default_object.rb +6 -8
  31. data/lib/super_diff/diff_formatters/defaults.rb +10 -0
  32. data/lib/super_diff/diff_formatters/hash.rb +3 -3
  33. data/lib/super_diff/diff_formatters/main.rb +41 -0
  34. data/lib/super_diff/diff_formatters/multiline_string.rb +3 -3
  35. data/lib/super_diff/differs.rb +4 -9
  36. data/lib/super_diff/differs/array.rb +2 -11
  37. data/lib/super_diff/differs/base.rb +20 -3
  38. data/lib/super_diff/differs/custom_object.rb +2 -11
  39. data/lib/super_diff/differs/default_object.rb +2 -8
  40. data/lib/super_diff/differs/defaults.rb +12 -0
  41. data/lib/super_diff/differs/hash.rb +2 -11
  42. data/lib/super_diff/differs/main.rb +48 -0
  43. data/lib/super_diff/differs/multiline_string.rb +2 -14
  44. data/lib/super_diff/differs/time_like.rb +15 -0
  45. data/lib/super_diff/equality_matchers.rb +3 -9
  46. data/lib/super_diff/equality_matchers/array.rb +1 -7
  47. data/lib/super_diff/equality_matchers/base.rb +1 -1
  48. data/lib/super_diff/equality_matchers/default.rb +2 -8
  49. data/lib/super_diff/equality_matchers/defaults.rb +12 -0
  50. data/lib/super_diff/equality_matchers/hash.rb +1 -7
  51. data/lib/super_diff/equality_matchers/main.rb +21 -0
  52. data/lib/super_diff/equality_matchers/multiline_string.rb +1 -7
  53. data/lib/super_diff/errors.rb +16 -0
  54. data/lib/super_diff/errors/no_diff_formatter_available_error.rb +21 -0
  55. data/lib/super_diff/errors/no_differ_available_error.rb +24 -0
  56. data/lib/super_diff/errors/no_operational_sequencer_available_error.rb +22 -0
  57. data/lib/super_diff/implementation_checks.rb +19 -0
  58. data/lib/super_diff/object_inspection.rb +1 -10
  59. data/lib/super_diff/object_inspection/inspection_tree.rb +6 -2
  60. data/lib/super_diff/object_inspection/inspectors.rb +5 -0
  61. data/lib/super_diff/object_inspection/inspectors/array.rb +20 -10
  62. data/lib/super_diff/object_inspection/inspectors/base.rb +36 -0
  63. data/lib/super_diff/object_inspection/inspectors/custom_object.rb +24 -14
  64. data/lib/super_diff/object_inspection/inspectors/default_object.rb +44 -30
  65. data/lib/super_diff/object_inspection/inspectors/defaults.rb +15 -0
  66. data/lib/super_diff/object_inspection/inspectors/hash.rb +20 -10
  67. data/lib/super_diff/object_inspection/inspectors/main.rb +35 -0
  68. data/lib/super_diff/object_inspection/inspectors/primitive.rb +20 -5
  69. data/lib/super_diff/object_inspection/inspectors/string.rb +15 -5
  70. data/lib/super_diff/object_inspection/inspectors/time_like.rb +23 -0
  71. data/lib/super_diff/object_inspection/nodes/inspection.rb +9 -2
  72. data/lib/super_diff/operation_tree_builders.rb +18 -0
  73. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/array.rb +38 -59
  74. data/lib/super_diff/operation_tree_builders/base.rb +98 -0
  75. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/custom_object.rb +3 -3
  76. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/default_object.rb +8 -3
  77. data/lib/super_diff/operation_tree_builders/defaults.rb +5 -0
  78. data/lib/super_diff/operation_tree_builders/hash.rb +226 -0
  79. data/lib/super_diff/operation_tree_builders/main.rb +42 -0
  80. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/multiline_string.rb +3 -3
  81. data/lib/super_diff/operation_tree_builders/time_like.rb +34 -0
  82. data/lib/super_diff/operation_trees.rb +13 -0
  83. data/lib/super_diff/{operation_sequences → operation_trees}/array.rb +5 -1
  84. data/lib/super_diff/operation_trees/base.rb +31 -0
  85. data/lib/super_diff/{operation_sequences → operation_trees}/custom_object.rb +5 -1
  86. data/lib/super_diff/{operation_sequences → operation_trees}/default_object.rb +10 -8
  87. data/lib/super_diff/operation_trees/defaults.rb +5 -0
  88. data/lib/super_diff/{operation_sequences → operation_trees}/hash.rb +5 -1
  89. data/lib/super_diff/operation_trees/main.rb +35 -0
  90. data/lib/super_diff/operation_trees/multiline_string.rb +18 -0
  91. data/lib/super_diff/operations/unary_operation.rb +3 -0
  92. data/lib/super_diff/rspec.rb +54 -22
  93. data/lib/super_diff/rspec/augmented_matcher.rb +1 -1
  94. data/lib/super_diff/rspec/differ.rb +2 -17
  95. data/lib/super_diff/rspec/differs.rb +9 -3
  96. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +3 -8
  97. data/lib/super_diff/rspec/differs/collection_including.rb +18 -0
  98. data/lib/super_diff/rspec/differs/hash_including.rb +18 -0
  99. data/lib/super_diff/rspec/differs/object_having_attributes.rb +17 -0
  100. data/lib/super_diff/rspec/matcher_text_builders.rb +4 -0
  101. data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +26 -7
  102. data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +61 -0
  103. data/lib/super_diff/rspec/matcher_text_builders/match.rb +1 -1
  104. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +13 -1
  105. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +1 -1
  106. data/lib/super_diff/rspec/matcher_text_template.rb +1 -1
  107. data/lib/super_diff/rspec/monkey_patches.rb +226 -115
  108. data/lib/super_diff/rspec/object_inspection.rb +0 -1
  109. data/lib/super_diff/rspec/object_inspection/inspectors.rb +22 -6
  110. data/lib/super_diff/rspec/object_inspection/inspectors/collection_containing_exactly.rb +17 -8
  111. data/lib/super_diff/rspec/object_inspection/inspectors/collection_including.rb +28 -0
  112. data/lib/super_diff/rspec/object_inspection/inspectors/hash_including.rb +31 -0
  113. data/lib/super_diff/rspec/object_inspection/inspectors/instance_of.rb +23 -0
  114. data/lib/super_diff/rspec/object_inspection/inspectors/kind_of.rb +23 -0
  115. data/lib/super_diff/rspec/object_inspection/inspectors/object_having_attributes.rb +31 -0
  116. data/lib/super_diff/rspec/object_inspection/inspectors/primitive.rb +13 -0
  117. data/lib/super_diff/rspec/object_inspection/inspectors/value_within.rb +29 -0
  118. data/lib/super_diff/rspec/operation_tree_builders.rb +22 -0
  119. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/collection_containing_exactly.rb +6 -6
  120. data/lib/super_diff/rspec/{operational_sequencers/partial_array.rb → operation_tree_builders/collection_including.rb} +4 -3
  121. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +25 -0
  122. data/lib/super_diff/rspec/{operational_sequencers/partial_object.rb → operation_tree_builders/object_having_attributes.rb} +5 -11
  123. data/lib/super_diff/version.rb +1 -1
  124. data/spec/examples.txt +397 -328
  125. data/spec/integration/rails/active_record_spec.rb +1 -1
  126. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +1 -1
  127. data/spec/integration/rspec/be_predicate_matcher_spec.rb +111 -59
  128. data/spec/integration/rspec/eq_matcher_spec.rb +139 -3
  129. data/spec/integration/rspec/have_attributes_matcher_spec.rb +354 -227
  130. data/spec/integration/rspec/have_predicate_matcher_spec.rb +484 -0
  131. data/spec/integration/rspec/include_matcher_spec.rb +2 -2
  132. data/spec/integration/rspec/match_array_matcher_spec.rb +372 -0
  133. data/spec/integration/rspec/match_matcher_spec.rb +8 -8
  134. data/spec/integration/rspec/raise_error_matcher_spec.rb +605 -226
  135. data/spec/integration/rspec/third_party_matcher_spec.rb +241 -0
  136. data/spec/integration/rspec/unhandled_errors_spec.rb +110 -58
  137. data/spec/spec_helper.rb +18 -7
  138. data/spec/support/command_runner.rb +3 -0
  139. data/spec/support/integration/helpers.rb +14 -90
  140. data/spec/support/integration/matchers.rb +143 -0
  141. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +14 -29
  142. data/spec/support/integration/test_programs/base.rb +120 -0
  143. data/spec/support/integration/test_programs/plain.rb +13 -0
  144. data/spec/support/integration/test_programs/rspec_active_record.rb +17 -0
  145. data/spec/support/integration/test_programs/rspec_rails.rb +17 -0
  146. data/spec/support/models/active_record/person.rb +4 -11
  147. data/spec/support/models/active_record/query.rb +15 -0
  148. data/spec/support/models/active_record/shipping_address.rb +10 -14
  149. data/spec/support/object_id.rb +27 -0
  150. data/spec/support/ruby_versions.rb +4 -0
  151. data/spec/support/shared_examples/active_record.rb +71 -0
  152. data/spec/support/shared_examples/hash_with_indifferent_access.rb +724 -208
  153. data/spec/tmp/integration_spec.rb +15 -0
  154. data/spec/unit/{equality_matcher_spec.rb → equality_matchers/main_spec.rb} +165 -9
  155. data/spec/unit/object_inspection_spec.rb +94 -18
  156. data/spec/unit/rspec/matchers/have_predicate_spec.rb +21 -0
  157. data/spec/unit/rspec/matchers/match_array_spec.rb +11 -0
  158. data/spec/unit/rspec/matchers/raise_error_spec.rb +16 -0
  159. data/super_diff.gemspec +3 -6
  160. metadata +99 -91
  161. data/lib/super_diff/active_record/object_inspection/map_extension.rb +0 -18
  162. data/lib/super_diff/active_record/operational_sequencers.rb +0 -14
  163. data/lib/super_diff/active_support/object_inspection/map_extension.rb +0 -15
  164. data/lib/super_diff/active_support/operational_sequencers.rb +0 -10
  165. data/lib/super_diff/diff_formatter.rb +0 -32
  166. data/lib/super_diff/differ.rb +0 -51
  167. data/lib/super_diff/equality_matcher.rb +0 -32
  168. data/lib/super_diff/no_differ_available_error.rb +0 -22
  169. data/lib/super_diff/no_operational_sequencer_available_error.rb +0 -20
  170. data/lib/super_diff/object_inspection/inspector.rb +0 -27
  171. data/lib/super_diff/object_inspection/map.rb +0 -28
  172. data/lib/super_diff/operation_sequences.rb +0 -9
  173. data/lib/super_diff/operation_sequences/base.rb +0 -11
  174. data/lib/super_diff/operational_sequencer.rb +0 -48
  175. data/lib/super_diff/operational_sequencers.rb +0 -16
  176. data/lib/super_diff/operational_sequencers/base.rb +0 -89
  177. data/lib/super_diff/operational_sequencers/hash.rb +0 -85
  178. data/lib/super_diff/rspec/configuration.rb +0 -31
  179. data/lib/super_diff/rspec/differs/partial_array.rb +0 -22
  180. data/lib/super_diff/rspec/differs/partial_hash.rb +0 -22
  181. data/lib/super_diff/rspec/differs/partial_object.rb +0 -22
  182. data/lib/super_diff/rspec/object_inspection/inspectors/partial_array.rb +0 -22
  183. data/lib/super_diff/rspec/object_inspection/inspectors/partial_hash.rb +0 -21
  184. data/lib/super_diff/rspec/object_inspection/inspectors/partial_object.rb +0 -21
  185. data/lib/super_diff/rspec/object_inspection/map_extension.rb +0 -23
  186. data/lib/super_diff/rspec/operational_sequencers.rb +0 -22
  187. data/lib/super_diff/rspec/operational_sequencers/partial_hash.rb +0 -32
@@ -33,13 +33,7 @@ module SuperDiff
33
33
  protected
34
34
 
35
35
  def diff
36
- Differs::Hash.call(
37
- expected,
38
- actual,
39
- indent_level: 0,
40
- extra_operational_sequencer_classes: extra_operational_sequencer_classes,
41
- extra_diff_formatter_classes: extra_diff_formatter_classes,
42
- )
36
+ Differs::Hash.call(expected, actual, indent_level: 0)
43
37
  end
44
38
  end
45
39
  end
@@ -0,0 +1,21 @@
1
+ module SuperDiff
2
+ module EqualityMatchers
3
+ class Main
4
+ extend AttrExtras.mixin
5
+
6
+ method_object [:expected!, :actual!, extra_classes: []]
7
+
8
+ def call
9
+ resolved_class.call(expected: expected, actual: actual)
10
+ end
11
+
12
+ private
13
+
14
+ def resolved_class
15
+ (DEFAULTS + extra_classes).find do |klass|
16
+ klass.applies_to?(expected) && klass.applies_to?(actual)
17
+ end
18
+ end
19
+ end
20
+ end
21
+ end
@@ -34,13 +34,7 @@ module SuperDiff
34
34
  private
35
35
 
36
36
  def diff
37
- Differs::MultilineString.call(
38
- expected,
39
- actual,
40
- indent_level: 0,
41
- extra_operational_sequencer_classes: extra_operational_sequencer_classes,
42
- extra_diff_formatter_classes: extra_diff_formatter_classes,
43
- )
37
+ Differs::MultilineString.call(expected, actual, indent_level: 0)
44
38
  end
45
39
  end
46
40
  end
@@ -0,0 +1,16 @@
1
+ module SuperDiff
2
+ module Errors
3
+ autoload(
4
+ :NoDiffFormatterAvailableError,
5
+ "super_diff/errors/no_diff_formatter_available_error",
6
+ )
7
+ autoload(
8
+ :NoDifferAvailableError,
9
+ "super_diff/errors/no_differ_available_error",
10
+ )
11
+ autoload(
12
+ :NoOperationTreeBuilderAvailableError,
13
+ "super_diff/errors/no_operation_tree_builder_available_error",
14
+ )
15
+ end
16
+ end
@@ -0,0 +1,21 @@
1
+ module SuperDiff
2
+ module Errors
3
+ class NoDiffFormatterAvailableError < StandardError
4
+ def self.create(operation_tree)
5
+ allocate.tap do |error|
6
+ error.operation_tree = operation_tree
7
+ error.__send__(:initialize)
8
+ end
9
+ end
10
+
11
+ attr_accessor :operation_tree
12
+
13
+ def initialize
14
+ super(<<-MESSAGE)
15
+ There is no diff formatter available to handle an operation tree object of
16
+ #{operation_tree.class}.
17
+ MESSAGE
18
+ end
19
+ end
20
+ end
21
+ end
@@ -0,0 +1,24 @@
1
+ module SuperDiff
2
+ module Errors
3
+ class NoDifferAvailableError < StandardError
4
+ def self.create(expected, actual)
5
+ allocate.tap do |error|
6
+ error.expected = expected
7
+ error.actual = actual
8
+ error.__send__(:initialize)
9
+ end
10
+ end
11
+
12
+ attr_accessor :expected, :actual
13
+
14
+ def initialize
15
+ super(<<-MESSAGE)
16
+ There is no differ available to handle an "expected" value of type
17
+ #{expected.class}
18
+ and an "actual" value of type
19
+ #{actual.class}.
20
+ MESSAGE
21
+ end
22
+ end
23
+ end
24
+ end
@@ -0,0 +1,22 @@
1
+ module SuperDiff
2
+ module Errors
3
+ class NoOperationalSequencerAvailableError < StandardError
4
+ def self.create(expected, actual)
5
+ allocate.tap do |error|
6
+ error.expected = expected
7
+ error.actual = actual
8
+ error.__send__(:initialize)
9
+ end
10
+ end
11
+
12
+ attr_accessor :expected, :actual
13
+
14
+ def initialize
15
+ super(<<-MESSAGE)
16
+ There is no operational sequencer available to handle an "expected" value of
17
+ type #{expected.class} and an "actual" value of type #{actual.class}.
18
+ MESSAGE
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,19 @@
1
+ module SuperDiff
2
+ module ImplementationChecks
3
+ protected def unimplemented_instance_method!
4
+ raise(
5
+ NotImplementedError,
6
+ "#{self.class} must implement ##{caller_locations(1, 1).first.label}",
7
+ caller(1),
8
+ )
9
+ end
10
+
11
+ protected def unimplemented_class_method!
12
+ raise(
13
+ NotImplementedError,
14
+ "#{self} must implement .#{caller_locations(1, 1).first.label}",
15
+ caller(1),
16
+ )
17
+ end
18
+ end
19
+ end
@@ -1,24 +1,15 @@
1
1
  module SuperDiff
2
2
  module ObjectInspection
3
3
  autoload :InspectionTree, "super_diff/object_inspection/inspection_tree"
4
- autoload :Inspector, "super_diff/object_inspection/inspector"
5
4
  autoload :Inspectors, "super_diff/object_inspection/inspectors"
6
- autoload :Map, "super_diff/object_inspection/map"
7
5
  autoload :Nodes, "super_diff/object_inspection/nodes"
8
6
 
9
- class << self
10
- attr_accessor :map
11
- end
12
-
13
7
  def self.inspect(object, as_single_line:, indent_level: 0)
14
- Inspector.call(
15
- map,
8
+ Inspectors::Main.call(
16
9
  object,
17
10
  as_single_line: as_single_line,
18
11
  indent_level: indent_level,
19
12
  )
20
13
  end
21
-
22
- self.map = Map.new
23
14
  end
24
15
  end
@@ -107,8 +107,12 @@ module SuperDiff
107
107
  end
108
108
  end
109
109
 
110
- def add_inspection_of(value)
111
- add_node :inspection, value
110
+ def add_inspection_of(value = nil, &block)
111
+ if block
112
+ add_node :inspection, &block
113
+ else
114
+ add_node :inspection, value
115
+ end
112
116
  end
113
117
 
114
118
  def apply_tree(tree)
@@ -1,6 +1,7 @@
1
1
  module SuperDiff
2
2
  module ObjectInspection
3
3
  module Inspectors
4
+ autoload :Base, "super_diff/object_inspection/inspectors/base"
4
5
  autoload :Array, "super_diff/object_inspection/inspectors/array"
5
6
  autoload(
6
7
  :CustomObject,
@@ -11,8 +12,12 @@ module SuperDiff
11
12
  "super_diff/object_inspection/inspectors/default_object",
12
13
  )
13
14
  autoload :Hash, "super_diff/object_inspection/inspectors/hash"
15
+ autoload :Main, "super_diff/object_inspection/inspectors/main"
14
16
  autoload :Primitive, "super_diff/object_inspection/inspectors/primitive"
15
17
  autoload :String, "super_diff/object_inspection/inspectors/string"
18
+ autoload :TimeLike, "super_diff/object_inspection/inspectors/time_like"
16
19
  end
17
20
  end
18
21
  end
22
+
23
+ require "super_diff/object_inspection/inspectors/defaults"
@@ -1,20 +1,30 @@
1
1
  module SuperDiff
2
2
  module ObjectInspection
3
3
  module Inspectors
4
- Array = InspectionTree.new do
5
- when_empty do
6
- add_text "[]"
4
+ class Array < Base
5
+ def self.applies_to?(value)
6
+ value.is_a?(::Array)
7
7
  end
8
8
 
9
- when_non_empty do
10
- add_text "["
9
+ protected
11
10
 
12
- nested do |array|
13
- insert_array_inspection_of(array)
14
- end
11
+ def inspection_tree
12
+ InspectionTree.new do
13
+ when_empty do
14
+ add_text "[]"
15
+ end
16
+
17
+ when_non_empty do
18
+ add_text "["
15
19
 
16
- add_break
17
- add_text "]"
20
+ nested do |array|
21
+ insert_array_inspection_of(array)
22
+ end
23
+
24
+ add_break
25
+ add_text "]"
26
+ end
27
+ end
18
28
  end
19
29
  end
20
30
  end
@@ -0,0 +1,36 @@
1
+ module SuperDiff
2
+ module ObjectInspection
3
+ module Inspectors
4
+ class Base
5
+ extend AttrExtras.mixin
6
+ extend ImplementationChecks
7
+
8
+ def self.applies_to?(_value)
9
+ unimplemented_class_method!
10
+ end
11
+
12
+ method_object :object, [:as_single_line!, :indent_level]
13
+
14
+ def call
15
+ SuperDiff::RecursionGuard.substituting_recursion_of(object) do
16
+ inspection_tree.evaluate(
17
+ object,
18
+ as_single_line: as_single_line,
19
+ indent_level: indent_level,
20
+ )
21
+ end
22
+ end
23
+
24
+ protected
25
+
26
+ def inspection_tree
27
+ unimplemented_instance_method!
28
+ end
29
+
30
+ private
31
+
32
+ attr_query :as_single_line?
33
+ end
34
+ end
35
+ end
36
+ end
@@ -1,26 +1,36 @@
1
1
  module SuperDiff
2
2
  module ObjectInspection
3
3
  module Inspectors
4
- CustomObject = InspectionTree.new do
5
- add_text do |object|
6
- "#<#{object.class}"
4
+ class CustomObject < Base
5
+ def self.applies_to?(value)
6
+ value.respond_to?(:attributes_for_super_diff)
7
7
  end
8
8
 
9
- when_multiline do
10
- add_text " {"
11
- end
9
+ protected
12
10
 
13
- nested do |object|
14
- insert_hash_inspection_of(object.attributes_for_super_diff)
15
- end
11
+ def inspection_tree
12
+ InspectionTree.new do
13
+ add_text do |object|
14
+ "#<#{object.class}"
15
+ end
16
16
 
17
- add_break
17
+ when_multiline do
18
+ add_text " {"
19
+ end
18
20
 
19
- when_multiline do
20
- add_text "}"
21
- end
21
+ nested do |object|
22
+ insert_hash_inspection_of(object.attributes_for_super_diff)
23
+ end
22
24
 
23
- add_text ">"
25
+ add_break
26
+
27
+ when_multiline do
28
+ add_text "}"
29
+ end
30
+
31
+ add_text ">"
32
+ end
33
+ end
24
34
  end
25
35
  end
26
36
  end
@@ -1,45 +1,59 @@
1
1
  module SuperDiff
2
2
  module ObjectInspection
3
3
  module Inspectors
4
- DefaultObject = InspectionTree.new do
5
- when_empty do
6
- add_text do |object|
7
- object.inspect
8
- end
4
+ class DefaultObject < Base
5
+ def self.applies_to?(_value)
6
+ true
9
7
  end
10
8
 
11
- when_non_empty do
12
- when_singleline do
13
- add_text do |object|
14
- object.inspect
15
- end
16
- end
9
+ protected
17
10
 
18
- when_multiline do
19
- add_text do |object|
20
- "#<%<class>s:0x%<id>x {" % {
21
- class: object.class,
22
- id: object.object_id * 2,
23
- }
11
+ def inspection_tree
12
+ # rubocop:disable Metrics/BlockLength
13
+ InspectionTree.new do
14
+ when_empty do
15
+ # rubocop:disable Style/SymbolProc
16
+ add_text do |object|
17
+ object.inspect
18
+ end
19
+ # rubocop:enable Style/SymbolProc
24
20
  end
25
21
 
26
- nested do |object|
27
- add_break " "
28
-
29
- insert_separated_list(
30
- object.instance_variables.sort,
31
- separator: ","
32
- ) do |name|
33
- add_text name.to_s
34
- add_text "="
35
- add_inspection_of object.instance_variable_get(name)
22
+ when_non_empty do
23
+ when_singleline do
24
+ add_text do |object|
25
+ object.inspect
26
+ end
36
27
  end
37
- end
38
28
 
39
- add_break
29
+ when_multiline do
30
+ add_text do |object|
31
+ "#<%<class>s:0x%<id>x {" % {
32
+ class: object.class,
33
+ id: object.object_id * 2,
34
+ }
35
+ end
40
36
 
41
- add_text "}>"
37
+ nested do |object|
38
+ add_break " "
39
+
40
+ insert_separated_list(
41
+ object.instance_variables.sort,
42
+ separator: ","
43
+ ) do |name|
44
+ add_text name.to_s
45
+ add_text "="
46
+ add_inspection_of object.instance_variable_get(name)
47
+ end
48
+ end
49
+
50
+ add_break
51
+
52
+ add_text "}>"
53
+ end
54
+ end
42
55
  end
56
+ # rubocop:enable Metrics/BlockLength
43
57
  end
44
58
  end
45
59
  end