super_diff 0.10.0 → 0.11.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 (70) hide show
  1. checksums.yaml +4 -4
  2. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model.rb +24 -12
  3. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation.rb +15 -6
  4. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +23 -8
  5. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/ordered_options.rb +46 -0
  6. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders.rb +4 -0
  7. data/lib/super_diff/active_support.rb +2 -1
  8. data/lib/super_diff/differs/date_like.rb +15 -0
  9. data/lib/super_diff/differs/defaults.rb +1 -0
  10. data/lib/super_diff/differs.rb +1 -0
  11. data/lib/super_diff/errors.rb +0 -4
  12. data/lib/super_diff/object_inspection/inspection_tree.rb +25 -20
  13. data/lib/super_diff/object_inspection/inspection_tree_builders/array.rb +31 -12
  14. data/lib/super_diff/object_inspection/inspection_tree_builders/custom_object.rb +19 -9
  15. data/lib/super_diff/object_inspection/inspection_tree_builders/date_like.rb +51 -0
  16. data/lib/super_diff/object_inspection/inspection_tree_builders/default_object.rb +46 -21
  17. data/lib/super_diff/object_inspection/inspection_tree_builders/defaults.rb +1 -0
  18. data/lib/super_diff/object_inspection/inspection_tree_builders/hash.rb +39 -14
  19. data/lib/super_diff/object_inspection/inspection_tree_builders/primitive.rb +3 -5
  20. data/lib/super_diff/object_inspection/inspection_tree_builders/time_like.rb +31 -20
  21. data/lib/super_diff/object_inspection/inspection_tree_builders.rb +4 -0
  22. data/lib/super_diff/object_inspection/nodes/as_lines_when_rendering_to_lines.rb +3 -2
  23. data/lib/super_diff/operation_tree_builders/date_like.rb +15 -0
  24. data/lib/super_diff/operation_tree_builders/defaults.rb +1 -1
  25. data/lib/super_diff/operation_tree_builders.rb +1 -0
  26. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +3 -7
  27. data/lib/super_diff/rspec/monkey_patches.rb +59 -8
  28. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_containing_exactly.rb +14 -7
  29. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_including.rb +19 -13
  30. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +30 -26
  31. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/generic_describable_matcher.rb +19 -0
  32. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +19 -14
  33. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/instance_of.rb +9 -10
  34. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/kind_of.rb +9 -10
  35. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/object_having_attributes.rb +14 -7
  36. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/value_within.rb +10 -11
  37. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +4 -0
  38. data/lib/super_diff/rspec.rb +10 -9
  39. data/lib/super_diff/version.rb +1 -1
  40. data/lib/super_diff.rb +9 -0
  41. data/spec/examples.txt +543 -493
  42. data/spec/integration/rails/engines_spec.rb +8 -3
  43. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +19 -19
  44. data/spec/integration/rspec/eq_matcher_spec.rb +111 -39
  45. data/spec/integration/rspec/generic_describable_matchers_spec.rb +177 -0
  46. data/spec/integration/rspec/have_attributes_matcher_spec.rb +25 -25
  47. data/spec/integration/rspec/include_matcher_spec.rb +23 -23
  48. data/spec/integration/rspec/magic_metadata_spec.rb +51 -0
  49. data/spec/integration/rspec/match_array_matcher_spec.rb +30 -30
  50. data/spec/integration/rspec/match_matcher_spec.rb +93 -93
  51. data/spec/integration/rspec/raise_error_matcher_spec.rb +813 -69
  52. data/spec/internal/log/test.log +0 -0
  53. data/spec/spec_helper.rb +3 -0
  54. data/spec/support/integration/helpers.rb +15 -10
  55. data/spec/support/integration/matchers.rb +34 -0
  56. data/spec/support/integration/test_programs/base.rb +6 -6
  57. data/spec/support/integration/test_programs/rspec_rails_engine.rb +3 -13
  58. data/spec/support/shared_examples/active_record.rb +33 -33
  59. data/spec/support/shared_examples/active_support.rb +125 -4
  60. data/spec/support/shared_examples/elided_diffs.rb +48 -48
  61. data/spec/support/shared_examples/hash_with_indifferent_access.rb +88 -88
  62. data/spec/support/shared_examples/key.rb +10 -10
  63. data/spec/unit/active_support/object_inspection_spec.rb +170 -0
  64. data/spec/unit/rspec/matchers/raise_error_spec.rb +43 -11
  65. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +91 -0
  66. data/spec/unit/rspec/object_inspection_spec.rb +2 -2
  67. data/spec/unit/super_diff_spec.rb +64 -0
  68. metadata +17 -4
  69. data/lib/super_diff/errors/no_diff_formatter_available_error.rb +0 -21
  70. data/lib/super_diff/errors/no_operational_sequencer_available_error.rb +0 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: bb5307b0f4dab85f765805443f6315ea45ec58d81f94211292326e32b98e1539
4
- data.tar.gz: 3af49d5f9a3d7396828fdc6c1b74cd8e4103ff35fc2ebced5dbef15071fe0bab
3
+ metadata.gz: '08f4b984e0530c5c4ca5e1ba34b98b380a76712009a1b552a5e21106975293aa'
4
+ data.tar.gz: 12b49818665c952553c0b052e3fe8166de0c45a5eac7f9862c317560e0a06763
5
5
  SHA512:
6
- metadata.gz: 9aea5c125c0dbde9f754f4d0fd72dd20142cfe4f49077d9f7ab7e47994ea09297c5f58fc3cd59f564fe9534e17ae7e2a062433c03830dc3d209ee2217d503270
7
- data.tar.gz: f1f31c074ce8f043f7ac72127b5bd46158433a5ec6af3a0b79250f08e276fba8d1936b5ed5a09e2134e1ee3e4087b7bec36535da556f7b0b04953690edb949b9
6
+ metadata.gz: c6df90629d86a0c50680b10803cd1839ba0c94828627775fa840e1726fc70b57c6b13be7614ff35c00af960f3ea05530af6ba2d7dc7a3b9f9670fa8d17f75c72
7
+ data.tar.gz: 56015f9b40eb6f8b03be2c7b02dc641ea7493db0d7d4a8dae929753f7bf94d9a925f0678b8f68c1c2bf7eb705e2c019b3b38f7bfafb805379d8b37b9016f453d
@@ -8,27 +8,39 @@ module SuperDiff
8
8
  end
9
9
 
10
10
  def call
11
- SuperDiff::ObjectInspection::InspectionTree.new do
12
- as_lines_when_rendering_to_lines(collection_bookend: :open) do
13
- add_text { |object| "#<#{object.class} " }
11
+ SuperDiff::ObjectInspection::InspectionTree.new do |t1|
12
+ t1.as_lines_when_rendering_to_lines(
13
+ collection_bookend: :open
14
+ ) do |t2|
15
+ t2.add_text "#<#{object.class} "
14
16
 
15
- when_rendering_to_lines { add_text "{" }
17
+ # stree-ignore
18
+ t2.when_rendering_to_lines do |t3|
19
+ t3.add_text "{"
20
+ end
16
21
  end
17
22
 
18
- nested do |object|
19
- insert_separated_list(
23
+ t1.nested do |t2|
24
+ t2.insert_separated_list(
20
25
  ["id"] + (object.attributes.keys.sort - ["id"])
21
- ) do |name|
22
- as_prefix_when_rendering_to_lines { add_text "#{name}: " }
26
+ ) do |t3, name|
27
+ t3.as_prefix_when_rendering_to_lines do |t4|
28
+ t4.add_text "#{name}: "
29
+ end
23
30
 
24
- add_inspection_of object.read_attribute(name)
31
+ t3.add_inspection_of object.read_attribute(name)
25
32
  end
26
33
  end
27
34
 
28
- as_lines_when_rendering_to_lines(collection_bookend: :close) do
29
- when_rendering_to_lines { add_text "}" }
35
+ t1.as_lines_when_rendering_to_lines(
36
+ collection_bookend: :close
37
+ ) do |t2|
38
+ # stree-ignore
39
+ t2.when_rendering_to_lines do |t3|
40
+ t3.add_text "}"
41
+ end
30
42
 
31
- add_text ">"
43
+ t2.add_text ">"
32
44
  end
33
45
  end
34
46
  end
@@ -8,15 +8,24 @@ module SuperDiff
8
8
  end
9
9
 
10
10
  def call
11
- SuperDiff::ObjectInspection::InspectionTree.new do
12
- as_lines_when_rendering_to_lines(collection_bookend: :open) do
13
- add_text "#<ActiveRecord::Relation ["
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 "#<ActiveRecord::Relation ["
14
17
  end
15
18
 
16
- nested { |array| insert_array_inspection_of(array) }
19
+ # stree-ignore
20
+ t1.nested do |t2|
21
+ t2.insert_array_inspection_of(object)
22
+ end
17
23
 
18
- as_lines_when_rendering_to_lines(collection_bookend: :close) do
19
- add_text "]>"
24
+ # stree-ignore
25
+ t1.as_lines_when_rendering_to_lines(
26
+ collection_bookend: :close
27
+ ) do |t2|
28
+ t2.add_text "]>"
20
29
  end
21
30
  end
22
31
  end
@@ -8,19 +8,34 @@ module SuperDiff
8
8
  end
9
9
 
10
10
  def call
11
- SuperDiff::ObjectInspection::InspectionTree.new do
12
- as_lines_when_rendering_to_lines(collection_bookend: :open) do
13
- add_text "#<HashWithIndifferentAccess {"
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 "#<HashWithIndifferentAccess {"
14
17
  end
15
18
 
16
- when_rendering_to_string { add_text " " }
19
+ # stree-ignore
20
+ t1.when_rendering_to_string do |t2|
21
+ t2.add_text " "
22
+ end
17
23
 
18
- nested { |hash| insert_hash_inspection_of(hash) }
24
+ # stree-ignore
25
+ t1.nested do |t2|
26
+ t2.insert_hash_inspection_of(object)
27
+ end
19
28
 
20
- when_rendering_to_string { add_text " " }
29
+ # stree-ignore
30
+ t1.when_rendering_to_string do |t2|
31
+ t2.add_text " "
32
+ end
21
33
 
22
- as_lines_when_rendering_to_lines(collection_bookend: :close) do
23
- add_text "}>"
34
+ # stree-ignore
35
+ t1.as_lines_when_rendering_to_lines(
36
+ collection_bookend: :close
37
+ ) do |t2|
38
+ t2.add_text "}>"
24
39
  end
25
40
  end
26
41
  end
@@ -0,0 +1,46 @@
1
+ module SuperDiff
2
+ module ActiveSupport
3
+ module ObjectInspection
4
+ module InspectionTreeBuilders
5
+ class OrderedOptions < SuperDiff::ObjectInspection::InspectionTreeBuilders::Hash
6
+ def self.applies_to?(value)
7
+ value.is_a?(::ActiveSupport::OrderedOptions)
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 "#<OrderedOptions {"
17
+ end
18
+
19
+ # stree-ignore
20
+ t1.when_rendering_to_string do |t2|
21
+ t2.add_text " "
22
+ end
23
+
24
+ # stree-ignore
25
+ t1.nested do |t2|
26
+ t2.insert_hash_inspection_of(object.to_hash)
27
+ end
28
+
29
+ # stree-ignore
30
+ t1.when_rendering_to_string do |t2|
31
+ t2.add_text " "
32
+ end
33
+
34
+ # stree-ignore
35
+ t1.as_lines_when_rendering_to_lines(
36
+ collection_bookend: :close
37
+ ) do |t2|
38
+ t2.add_text "}>"
39
+ end
40
+ end
41
+ end
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -6,6 +6,10 @@ module SuperDiff
6
6
  :HashWithIndifferentAccess,
7
7
  "super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access"
8
8
  )
9
+ autoload(
10
+ :OrderedOptions,
11
+ "super_diff/active_support/object_inspection/inspection_tree_builders/ordered_options"
12
+ )
9
13
  end
10
14
  end
11
15
  end
@@ -18,7 +18,8 @@ module SuperDiff
18
18
  OperationTreeBuilders::HashWithIndifferentAccess
19
19
  )
20
20
  config.add_extra_inspection_tree_builder_classes(
21
- ObjectInspection::InspectionTreeBuilders::HashWithIndifferentAccess
21
+ ObjectInspection::InspectionTreeBuilders::HashWithIndifferentAccess,
22
+ ObjectInspection::InspectionTreeBuilders::OrderedOptions
22
23
  )
23
24
  end
24
25
  end
@@ -0,0 +1,15 @@
1
+ module SuperDiff
2
+ module Differs
3
+ class DateLike < Base
4
+ def self.applies_to?(expected, actual)
5
+ SuperDiff.date_like?(expected) && SuperDiff.date_like?(actual)
6
+ end
7
+
8
+ protected
9
+
10
+ def operation_tree_builder_class
11
+ OperationTreeBuilders::DateLike
12
+ end
13
+ end
14
+ end
15
+ end
@@ -4,6 +4,7 @@ module SuperDiff
4
4
  Array,
5
5
  Hash,
6
6
  TimeLike,
7
+ DateLike,
7
8
  MultilineString,
8
9
  CustomObject,
9
10
  DefaultObject
@@ -9,6 +9,7 @@ module SuperDiff
9
9
  autoload :Main, "super_diff/differs/main"
10
10
  autoload :MultilineString, "super_diff/differs/multiline_string"
11
11
  autoload :TimeLike, "super_diff/differs/time_like"
12
+ autoload :DateLike, "super_diff/differs/date_like"
12
13
  end
13
14
  end
14
15
 
@@ -1,9 +1,5 @@
1
1
  module SuperDiff
2
2
  module Errors
3
- autoload(
4
- :NoDiffFormatterAvailableError,
5
- "super_diff/errors/no_diff_formatter_available_error"
6
- )
7
3
  autoload(
8
4
  :NoDifferAvailableError,
9
5
  "super_diff/errors/no_differ_available_error"
@@ -7,7 +7,7 @@ module SuperDiff
7
7
  @disallowed_node_names = disallowed_node_names
8
8
  @nodes = []
9
9
 
10
- instance_eval(&block) if block
10
+ evaluate_block(&block) if block
11
11
  end
12
12
 
13
13
  Nodes.registry.each do |node_class|
@@ -26,8 +26,7 @@ module SuperDiff
26
26
 
27
27
  def render_to_string(object)
28
28
  nodes.reduce("") do |string, node|
29
- result = node.render_to_string(object)
30
- string + result
29
+ string + node.render_to_string(object)
31
30
  end
32
31
  end
33
32
 
@@ -52,43 +51,45 @@ module SuperDiff
52
51
  .first
53
52
  end
54
53
 
55
- def evaluate_block(object, &block)
56
- instance_exec(object, &block)
54
+ def evaluate_block(*args, &block)
55
+ block.call(self, *args)
57
56
  end
58
57
 
59
58
  def insert_array_inspection_of(array)
60
- insert_separated_list(array) do |value|
59
+ insert_separated_list(array) do |t, value|
61
60
  # Have to do these shenanigans so that if value is a hash, Ruby
62
61
  # doesn't try to interpret it as keyword args
63
62
  if SuperDiff::Helpers.ruby_version_matches?(">= 2.7.1")
64
- add_inspection_of(value, **{})
63
+ t.add_inspection_of(value, **{})
65
64
  else
66
- add_inspection_of(*[value, {}])
65
+ t.add_inspection_of(*[value, {}])
67
66
  end
68
67
  end
69
68
  end
70
69
 
71
70
  def insert_hash_inspection_of(hash)
72
71
  keys = hash.keys
73
-
74
72
  format_keys_as_kwargs = keys.all? { |key| key.is_a?(Symbol) }
75
73
 
76
- insert_separated_list(keys) do |key|
74
+ insert_separated_list(keys) do |t1, key|
77
75
  if format_keys_as_kwargs
78
- as_prefix_when_rendering_to_lines { add_text "#{key}: " }
76
+ # stree-ignore
77
+ t1.as_prefix_when_rendering_to_lines do |t2|
78
+ t2.add_text "#{key}: "
79
+ end
79
80
  else
80
- as_prefix_when_rendering_to_lines do
81
- add_inspection_of key, as_lines: false
82
- add_text " => "
81
+ t1.as_prefix_when_rendering_to_lines do |t2|
82
+ t2.add_inspection_of key, as_lines: false
83
+ t2.add_text " => "
83
84
  end
84
85
  end
85
86
 
86
87
  # Have to do these shenanigans so that if hash[key] is a hash, Ruby
87
88
  # doesn't try to interpret it as keyword args
88
89
  if SuperDiff::Helpers.ruby_version_matches?(">= 2.7.1")
89
- add_inspection_of(hash[key], **{})
90
+ t1.add_inspection_of(hash[key], **{})
90
91
  else
91
- add_inspection_of(*[hash[key], {}])
92
+ t1.add_inspection_of(*[hash[key], {}])
92
93
  end
93
94
  end
94
95
  end
@@ -97,10 +98,14 @@ module SuperDiff
97
98
  enumerable.each_with_index do |value, index|
98
99
  as_lines_when_rendering_to_lines(
99
100
  add_comma: index < enumerable.size - 1
100
- ) do
101
- when_rendering_to_string { add_text " " } if index > 0
102
-
103
- evaluate_block(value, &block)
101
+ ) do |t1|
102
+ if index > 0
103
+ # stree-ignore
104
+ t1.when_rendering_to_string do |t2|
105
+ t2.add_text " "
106
+ end
107
+ end
108
+ t1.evaluate_block(value, &block)
104
109
  end
105
110
  end
106
111
  end
@@ -7,27 +7,46 @@ module SuperDiff
7
7
  end
8
8
 
9
9
  def call
10
- empty = -> { object.empty? }
11
- nonempty = -> { !object.empty? }
12
-
13
- InspectionTree.new do
14
- only_when empty do
15
- as_lines_when_rendering_to_lines { add_text "[]" }
10
+ InspectionTree.new do |t1|
11
+ t1.only_when empty do |t2|
12
+ # stree-ignore
13
+ t2.as_lines_when_rendering_to_lines do |t3|
14
+ t3.add_text "[]"
15
+ end
16
16
  end
17
17
 
18
- only_when nonempty do
19
- as_lines_when_rendering_to_lines(collection_bookend: :open) do
20
- add_text "["
18
+ t1.only_when nonempty do |t2|
19
+ # stree-ignore
20
+ t2.as_lines_when_rendering_to_lines(
21
+ collection_bookend: :open
22
+ ) do |t3|
23
+ t3.add_text "["
21
24
  end
22
25
 
23
- nested { |array| insert_array_inspection_of(array) }
26
+ # stree-ignore
27
+ t2.nested do |t3|
28
+ t3.insert_array_inspection_of(object)
29
+ end
24
30
 
25
- as_lines_when_rendering_to_lines(collection_bookend: :close) do
26
- add_text "]"
31
+ # stree-ignore
32
+ t2.as_lines_when_rendering_to_lines(
33
+ collection_bookend: :close
34
+ ) do |t3|
35
+ t3.add_text "]"
27
36
  end
28
37
  end
29
38
  end
30
39
  end
40
+
41
+ private
42
+
43
+ def empty
44
+ -> { object.empty? }
45
+ end
46
+
47
+ def nonempty
48
+ -> { !object.empty? }
49
+ end
31
50
  end
32
51
  end
33
52
  end
@@ -7,21 +7,31 @@ module SuperDiff
7
7
  end
8
8
 
9
9
  def call
10
- InspectionTree.new do
11
- as_lines_when_rendering_to_lines(collection_bookend: :open) do
12
- add_text { |object| "#<#{object.class} " }
10
+ InspectionTree.new do |t1|
11
+ t1.as_lines_when_rendering_to_lines(
12
+ collection_bookend: :open
13
+ ) do |t2|
14
+ t2.add_text "#<#{object.class} "
13
15
 
14
- when_rendering_to_lines { add_text "{" }
16
+ # stree-ignore
17
+ t2.when_rendering_to_lines do |t3|
18
+ t3.add_text "{"
19
+ end
15
20
  end
16
21
 
17
- nested do |object|
18
- insert_hash_inspection_of(object.attributes_for_super_diff)
22
+ t1.nested do |t2|
23
+ t2.insert_hash_inspection_of(object.attributes_for_super_diff)
19
24
  end
20
25
 
21
- as_lines_when_rendering_to_lines(collection_bookend: :close) do
22
- when_rendering_to_lines { add_text "}" }
26
+ t1.as_lines_when_rendering_to_lines(
27
+ collection_bookend: :close
28
+ ) do |t2|
29
+ # stree-ignore
30
+ t2.when_rendering_to_lines do |t3|
31
+ t3.add_text "}"
32
+ end
23
33
 
24
- add_text ">"
34
+ t2.add_text ">"
25
35
  end
26
36
  end
27
37
  end
@@ -0,0 +1,51 @@
1
+ module SuperDiff
2
+ module ObjectInspection
3
+ module InspectionTreeBuilders
4
+ class DateLike < Base
5
+ def self.applies_to?(value)
6
+ SuperDiff.date_like?(value)
7
+ end
8
+
9
+ def call
10
+ InspectionTree.new do |t1|
11
+ t1.as_lines_when_rendering_to_lines(
12
+ collection_bookend: :open
13
+ ) do |t2|
14
+ t2.add_text "#<#{object.class} "
15
+
16
+ # stree-ignore
17
+ t2.when_rendering_to_lines do |t3|
18
+ t3.add_text "{"
19
+ end
20
+ end
21
+
22
+ t1.when_rendering_to_string do |t2|
23
+ t2.add_text object.strftime("%Y-%m-%d")
24
+ end
25
+
26
+ t1.when_rendering_to_lines do |t2|
27
+ t2.nested do |t3|
28
+ t3.insert_separated_list(%i[year month day]) do |t4, name|
29
+ t4.add_text name.to_s
30
+ t4.add_text ": "
31
+ t4.add_inspection_of object.public_send(name)
32
+ end
33
+ end
34
+ end
35
+
36
+ t1.as_lines_when_rendering_to_lines(
37
+ collection_bookend: :close
38
+ ) do |t2|
39
+ # stree-ignore
40
+ t2.when_rendering_to_lines do |t3|
41
+ t3.add_text "}"
42
+ end
43
+
44
+ t2.add_text ">"
45
+ end
46
+ end
47
+ end
48
+ end
49
+ end
50
+ end
51
+ end
@@ -7,47 +7,72 @@ module SuperDiff
7
7
  end
8
8
 
9
9
  def call
10
- empty = -> { object.instance_variables.empty? }
11
- nonempty = -> { !object.instance_variables.empty? }
12
-
13
- InspectionTree.new do
14
- only_when empty do
15
- as_lines_when_rendering_to_lines do
16
- add_text do |object|
10
+ InspectionTree.new do |t1|
11
+ t1.only_when empty do |t2|
12
+ t2.as_lines_when_rendering_to_lines do |t3|
13
+ t3.add_text(
17
14
  "#<#{object.class.name}:" +
18
15
  SuperDiff::Helpers.object_address_for(object) + ">"
19
- end
16
+ )
20
17
  end
21
18
  end
22
19
 
23
- only_when nonempty do
24
- as_lines_when_rendering_to_lines(collection_bookend: :open) do
25
- add_text do |object|
20
+ t1.only_when nonempty do |t2|
21
+ t2.as_lines_when_rendering_to_lines(
22
+ collection_bookend: :open
23
+ ) do |t3|
24
+ t3.add_text(
26
25
  "#<#{object.class.name}:" +
27
26
  SuperDiff::Helpers.object_address_for(object)
28
- end
27
+ )
29
28
 
30
- when_rendering_to_lines { add_text " {" }
29
+ # stree-ignore
30
+ t3.when_rendering_to_lines do |t4|
31
+ t4.add_text " {"
32
+ end
31
33
  end
32
34
 
33
- when_rendering_to_string { add_text " " }
35
+ # stree-ignore
36
+ t2.when_rendering_to_string do |t3|
37
+ t3.add_text " "
38
+ end
34
39
 
35
- nested do |object|
36
- insert_separated_list(object.instance_variables.sort) do |name|
37
- as_prefix_when_rendering_to_lines { add_text "#{name}=" }
40
+ t2.nested do |t3|
41
+ t3.insert_separated_list(
42
+ object.instance_variables.sort
43
+ ) do |t4, name|
44
+ # stree-ignore
45
+ t4.as_prefix_when_rendering_to_lines do |t5|
46
+ t5.add_text "#{name}="
47
+ end
38
48
 
39
- add_inspection_of object.instance_variable_get(name)
49
+ t4.add_inspection_of object.instance_variable_get(name)
40
50
  end
41
51
  end
42
52
 
43
- as_lines_when_rendering_to_lines(collection_bookend: :close) do
44
- when_rendering_to_lines { add_text "}" }
53
+ t2.as_lines_when_rendering_to_lines(
54
+ collection_bookend: :close
55
+ ) do |t3|
56
+ # stree-ignore
57
+ t3.when_rendering_to_lines do |t4|
58
+ t4.add_text "}"
59
+ end
45
60
 
46
- add_text ">"
61
+ t3.add_text ">"
47
62
  end
48
63
  end
49
64
  end
50
65
  end
66
+
67
+ private
68
+
69
+ def empty
70
+ -> { object.instance_variables.empty? }
71
+ end
72
+
73
+ def nonempty
74
+ -> { !object.instance_variables.empty? }
75
+ end
51
76
  end
52
77
  end
53
78
  end
@@ -7,6 +7,7 @@ module SuperDiff
7
7
  Hash,
8
8
  Primitive,
9
9
  TimeLike,
10
+ DateLike,
10
11
  DefaultObject
11
12
  ].freeze
12
13
  end