super_diff 0.9.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (193) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +65 -26
  3. data/lib/super_diff/active_record/differs/active_record_relation.rb +1 -2
  4. data/lib/super_diff/active_record/differs.rb +1 -1
  5. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model.rb +5 -13
  6. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation.rb +1 -3
  7. data/lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb +2 -2
  8. data/lib/super_diff/active_record/object_inspection.rb +1 -1
  9. data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +1 -2
  10. data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +1 -2
  11. data/lib/super_diff/active_record/operation_tree_builders.rb +2 -2
  12. data/lib/super_diff/active_record/operation_tree_flatteners.rb +1 -1
  13. data/lib/super_diff/active_record/operation_trees.rb +1 -1
  14. data/lib/super_diff/active_record.rb +7 -15
  15. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +5 -6
  16. data/lib/super_diff/active_support/differs.rb +1 -1
  17. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +3 -9
  18. data/lib/super_diff/active_support/object_inspection/inspection_tree_builders.rb +1 -1
  19. data/lib/super_diff/active_support/object_inspection.rb +1 -1
  20. data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +5 -6
  21. data/lib/super_diff/active_support/operation_tree_builders.rb +1 -1
  22. data/lib/super_diff/active_support/operation_tree_flatteners.rb +1 -1
  23. data/lib/super_diff/active_support/operation_trees.rb +1 -1
  24. data/lib/super_diff/active_support.rb +6 -11
  25. data/lib/super_diff/colorized_document_extensions.rb +2 -4
  26. data/lib/super_diff/configuration.rb +14 -8
  27. data/lib/super_diff/csi/color.rb +4 -4
  28. data/lib/super_diff/csi/colorized_document.rb +12 -16
  29. data/lib/super_diff/csi/document.rb +8 -19
  30. data/lib/super_diff/csi/eight_bit_color.rb +19 -19
  31. data/lib/super_diff/csi/four_bit_color.rb +82 -31
  32. data/lib/super_diff/csi/twenty_four_bit_color.rb +12 -11
  33. data/lib/super_diff/csi/uncolorized_document.rb +2 -6
  34. data/lib/super_diff/csi.rb +10 -14
  35. data/lib/super_diff/diff_formatters/collection.rb +35 -41
  36. data/lib/super_diff/differs/default_object.rb +1 -1
  37. data/lib/super_diff/differs/defaults.rb +1 -1
  38. data/lib/super_diff/differs/main.rb +2 -13
  39. data/lib/super_diff/equality_matchers/array.rb +10 -12
  40. data/lib/super_diff/equality_matchers/base.rb +1 -1
  41. data/lib/super_diff/equality_matchers/default.rb +2 -4
  42. data/lib/super_diff/equality_matchers/defaults.rb +1 -1
  43. data/lib/super_diff/equality_matchers/hash.rb +10 -12
  44. data/lib/super_diff/equality_matchers/multiline_string.rb +11 -13
  45. data/lib/super_diff/equality_matchers/primitive.rb +10 -12
  46. data/lib/super_diff/equality_matchers/singleline_string.rb +10 -12
  47. data/lib/super_diff/equality_matchers.rb +1 -1
  48. data/lib/super_diff/errors.rb +3 -3
  49. data/lib/super_diff/gem_version.rb +3 -3
  50. data/lib/super_diff/helpers.rb +10 -10
  51. data/lib/super_diff/implementation_checks.rb +2 -2
  52. data/lib/super_diff/line.rb +3 -3
  53. data/lib/super_diff/object_inspection/inspection_tree.rb +46 -60
  54. data/lib/super_diff/object_inspection/inspection_tree_builders/array.rb +2 -6
  55. data/lib/super_diff/object_inspection/inspection_tree_builders/custom_object.rb +3 -9
  56. data/lib/super_diff/object_inspection/inspection_tree_builders/default_object.rb +5 -14
  57. data/lib/super_diff/object_inspection/inspection_tree_builders/defaults.rb +1 -1
  58. data/lib/super_diff/object_inspection/inspection_tree_builders/hash.rb +4 -12
  59. data/lib/super_diff/object_inspection/inspection_tree_builders/time_like.rb +6 -23
  60. data/lib/super_diff/object_inspection/inspection_tree_builders.rb +9 -9
  61. data/lib/super_diff/object_inspection/nodes/as_lines_when_rendering_to_lines.rb +8 -20
  62. data/lib/super_diff/object_inspection/nodes/as_prefix_when_rendering_to_lines.rb +1 -5
  63. data/lib/super_diff/object_inspection/nodes/as_prelude_when_rendering_to_lines.rb +1 -5
  64. data/lib/super_diff/object_inspection/nodes/as_single_line.rb +3 -7
  65. data/lib/super_diff/object_inspection/nodes/base.rb +9 -14
  66. data/lib/super_diff/object_inspection/nodes/inspection.rb +26 -34
  67. data/lib/super_diff/object_inspection/nodes/nesting.rb +1 -1
  68. data/lib/super_diff/object_inspection/nodes/only_when.rb +2 -6
  69. data/lib/super_diff/object_inspection/nodes/text.rb +1 -5
  70. data/lib/super_diff/object_inspection/nodes/when_empty.rb +2 -6
  71. data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +2 -6
  72. data/lib/super_diff/object_inspection/nodes/when_rendering_to_lines.rb +1 -1
  73. data/lib/super_diff/object_inspection/nodes/when_rendering_to_string.rb +1 -5
  74. data/lib/super_diff/object_inspection/nodes.rb +7 -7
  75. data/lib/super_diff/object_inspection.rb +3 -3
  76. data/lib/super_diff/operation_tree_builders/array.rb +12 -11
  77. data/lib/super_diff/operation_tree_builders/base.rb +17 -15
  78. data/lib/super_diff/operation_tree_builders/custom_object.rb +8 -6
  79. data/lib/super_diff/operation_tree_builders/default_object.rb +29 -21
  80. data/lib/super_diff/operation_tree_builders/hash.rb +23 -24
  81. data/lib/super_diff/operation_tree_builders/main.rb +4 -11
  82. data/lib/super_diff/operation_tree_builders/multiline_string.rb +3 -3
  83. data/lib/super_diff/operation_tree_builders/time_like.rb +1 -11
  84. data/lib/super_diff/operation_tree_builders.rb +1 -1
  85. data/lib/super_diff/operation_tree_flatteners/base.rb +1 -5
  86. data/lib/super_diff/operation_tree_flatteners/collection.rb +13 -16
  87. data/lib/super_diff/operation_tree_flatteners/default_object.rb +1 -2
  88. data/lib/super_diff/operation_tree_flatteners/hash.rb +2 -10
  89. data/lib/super_diff/operation_tree_flatteners/multiline_string.rb +2 -1
  90. data/lib/super_diff/operation_tree_flatteners.rb +3 -3
  91. data/lib/super_diff/operation_trees/base.rb +3 -5
  92. data/lib/super_diff/operation_trees/default_object.rb +1 -3
  93. data/lib/super_diff/operations/binary_operation.rb +2 -2
  94. data/lib/super_diff/operations/unary_operation.rb +1 -1
  95. data/lib/super_diff/rails.rb +2 -1
  96. data/lib/super_diff/recursion_guard.rb +5 -4
  97. data/lib/super_diff/rspec/augmented_matcher.rb +4 -5
  98. data/lib/super_diff/rspec/differ.rb +6 -13
  99. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +3 -2
  100. data/lib/super_diff/rspec/differs/collection_including.rb +1 -1
  101. data/lib/super_diff/rspec/differs/hash_including.rb +1 -1
  102. data/lib/super_diff/rspec/differs.rb +3 -3
  103. data/lib/super_diff/rspec/matcher_text_builders/base.rb +13 -15
  104. data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +5 -7
  105. data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +3 -5
  106. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +1 -5
  107. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +2 -6
  108. data/lib/super_diff/rspec/matcher_text_builders.rb +5 -8
  109. data/lib/super_diff/rspec/matcher_text_template.rb +13 -16
  110. data/lib/super_diff/rspec/monkey_patches.rb +122 -116
  111. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_including.rb +8 -6
  112. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +11 -16
  113. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +2 -1
  114. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/instance_of.rb +8 -6
  115. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/kind_of.rb +8 -6
  116. data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +9 -9
  117. data/lib/super_diff/rspec/object_inspection.rb +1 -1
  118. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +11 -10
  119. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +7 -6
  120. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +11 -10
  121. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +22 -17
  122. data/lib/super_diff/rspec/operation_tree_builders.rb +4 -4
  123. data/lib/super_diff/rspec.rb +11 -13
  124. data/lib/super_diff/tiered_lines_elider.rb +87 -115
  125. data/lib/super_diff/tiered_lines_formatter.rb +5 -9
  126. data/lib/super_diff/version.rb +1 -1
  127. data/lib/super_diff.rb +4 -9
  128. data/spec/examples.txt +493 -485
  129. data/spec/integration/rails/active_record_spec.rb +3 -1
  130. data/spec/integration/rails/engines_spec.rb +20 -0
  131. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +3 -1
  132. data/spec/integration/rspec/be_falsey_matcher_spec.rb +40 -35
  133. data/spec/integration/rspec/be_matcher_spec.rb +360 -320
  134. data/spec/integration/rspec/be_nil_matcher_spec.rb +38 -34
  135. data/spec/integration/rspec/be_predicate_matcher_spec.rb +376 -359
  136. data/spec/integration/rspec/be_truthy_matcher_spec.rb +38 -33
  137. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +242 -239
  138. data/spec/integration/rspec/eq_matcher_spec.rb +595 -557
  139. data/spec/integration/rspec/have_attributes_matcher_spec.rb +294 -286
  140. data/spec/integration/rspec/have_predicate_matcher_spec.rb +291 -297
  141. data/spec/integration/rspec/include_matcher_spec.rb +317 -215
  142. data/spec/integration/rspec/match_array_matcher_spec.rb +276 -273
  143. data/spec/integration/rspec/match_matcher_spec.rb +847 -834
  144. data/spec/integration/rspec/raise_error_matcher_spec.rb +468 -453
  145. data/spec/integration/rspec/respond_to_matcher_spec.rb +702 -697
  146. data/spec/integration/rspec/third_party_matcher_spec.rb +142 -138
  147. data/spec/integration/rspec/unhandled_errors_spec.rb +88 -84
  148. data/spec/spec_helper.rb +17 -20
  149. data/spec/support/command_runner.rb +34 -57
  150. data/spec/support/integration/helpers.rb +35 -28
  151. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +28 -23
  152. data/spec/support/integration/test_programs/base.rb +12 -17
  153. data/spec/support/integration/test_programs/plain.rb +6 -0
  154. data/spec/support/integration/test_programs/rspec_active_record.rb +4 -1
  155. data/spec/support/integration/test_programs/rspec_active_support.rb +4 -1
  156. data/spec/support/integration/test_programs/rspec_rails.rb +4 -1
  157. data/spec/support/integration/test_programs/rspec_rails_engine.rb +30 -0
  158. data/spec/support/models/active_record/person.rb +6 -4
  159. data/spec/support/models/active_record/shipping_address.rb +9 -10
  160. data/spec/support/models/customer.rb +2 -4
  161. data/spec/support/models/player.rb +3 -6
  162. data/spec/support/models/shipping_address.rb +4 -13
  163. data/spec/support/shared_examples/active_record.rb +232 -214
  164. data/spec/support/shared_examples/active_support.rb +53 -51
  165. data/spec/support/shared_examples/elided_diffs.rb +405 -381
  166. data/spec/support/shared_examples/hash_with_indifferent_access.rb +424 -388
  167. data/spec/support/shared_examples/key.rb +123 -0
  168. data/spec/support/unit/helpers.rb +1 -3
  169. data/spec/support/unit/matchers/match_output.rb +12 -13
  170. data/spec/unit/active_record/object_inspection_spec.rb +222 -206
  171. data/spec/unit/equality_matchers/main_spec.rb +1049 -984
  172. data/spec/unit/helpers_spec.rb +14 -21
  173. data/spec/unit/operation_tree_flatteners/array_spec.rb +557 -524
  174. data/spec/unit/operation_tree_flatteners/custom_object_spec.rb +619 -601
  175. data/spec/unit/operation_tree_flatteners/default_object_spec.rb +619 -621
  176. data/spec/unit/operation_tree_flatteners/hash_spec.rb +595 -556
  177. data/spec/unit/operation_tree_flatteners/multiline_string_spec.rb +102 -92
  178. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +3 -3
  179. data/spec/unit/rspec/matchers/be_predicate_spec.rb +3 -3
  180. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +1 -1
  181. data/spec/unit/rspec/matchers/have_attributes_spec.rb +1 -1
  182. data/spec/unit/rspec/matchers/have_predicate_spec.rb +2 -2
  183. data/spec/unit/rspec/matchers/include_spec.rb +2 -2
  184. data/spec/unit/rspec/matchers/match_array_spec.rb +2 -2
  185. data/spec/unit/rspec/matchers/raise_error_spec.rb +5 -5
  186. data/spec/unit/rspec/matchers/respond_to_spec.rb +23 -16
  187. data/spec/unit/rspec/object_inspection_spec.rb +349 -324
  188. data/spec/unit/super_diff_spec.rb +1542 -1449
  189. data/spec/unit/tiered_lines_elider_spec.rb +3508 -3536
  190. data/spec/unit/tiered_lines_formatter_spec.rb +54 -116
  191. data/super_diff.gemspec +13 -12
  192. metadata +73 -73
  193. data/spec/tmp/warnings_logger/all_warnings.txt +0 -2
@@ -3,141 +3,141 @@ require "spec_helper"
3
3
  RSpec.describe SuperDiff::OperationTreeFlatteners::DefaultObject do
4
4
  context "given an empty tree" do
5
5
  it "returns a set of lines which are simply the open token and close token" do
6
- operation_tree = SuperDiff::OperationTrees::DefaultObject.new(
7
- [],
8
- underlying_object: underlying_object,
9
- )
6
+ operation_tree =
7
+ SuperDiff::OperationTrees::DefaultObject.new(
8
+ [],
9
+ underlying_object: underlying_object
10
+ )
10
11
 
11
12
  flattened_operation_tree = described_class.call(operation_tree)
12
13
 
13
- expect(flattened_operation_tree).to match([
14
- an_object_having_attributes(
15
- type: :noop,
16
- indentation_level: 0,
17
- prefix: "",
18
- value: a_string_matching(
19
- %r(#<SuperDiff::Test::Item:0x[0-9a-f]+ \{),
20
- ),
21
- collection_bookend: :open,
22
- complete_bookend: :open,
23
- ),
24
- an_object_having_attributes(
25
- type: :noop,
26
- indentation_level: 0,
27
- prefix: "",
28
- value: %(}>),
29
- collection_bookend: :close,
30
- complete_bookend: :close,
31
- ),
32
- ])
14
+ expect(flattened_operation_tree).to match(
15
+ [
16
+ an_object_having_attributes(
17
+ type: :noop,
18
+ indentation_level: 0,
19
+ prefix: "",
20
+ value: a_string_matching(/#<SuperDiff::Test::Item:0x[0-9a-f]+ \{/),
21
+ collection_bookend: :open,
22
+ complete_bookend: :open
23
+ ),
24
+ an_object_having_attributes(
25
+ type: :noop,
26
+ indentation_level: 0,
27
+ prefix: "",
28
+ value: "}>",
29
+ collection_bookend: :close,
30
+ complete_bookend: :close
31
+ )
32
+ ]
33
+ )
33
34
  end
34
35
  end
35
36
 
36
37
  context "given a tree of only noops" do
37
38
  it "returns a series of lines from inspecting each value, creating multiple lines upon encountering inner data structures" do
38
39
  collection = Array.new(3) { :some_value }
39
- operation_tree = SuperDiff::OperationTrees::DefaultObject.new(
40
- [
41
- double(
42
- :operation,
43
- name: :noop,
44
- collection: collection,
45
- key: :foo,
46
- value: "bar",
47
- index: 0,
48
- ),
49
- double(
50
- :operation,
51
- name: :noop,
52
- collection: collection,
53
- key: :baz,
54
- value: SuperDiff::Test::Item.new(name: 'spatula', quantity: 3),
55
- index: 1,
56
- ),
57
- double(
58
- :operation,
59
- name: :noop,
60
- collection: collection,
61
- key: :qux,
62
- value: "blargh",
63
- index: 2,
64
- ),
65
- ],
66
- underlying_object: underlying_object
67
- )
40
+ operation_tree =
41
+ SuperDiff::OperationTrees::DefaultObject.new(
42
+ [
43
+ double(
44
+ :operation,
45
+ name: :noop,
46
+ collection: collection,
47
+ key: :foo,
48
+ value: "bar",
49
+ index: 0
50
+ ),
51
+ double(
52
+ :operation,
53
+ name: :noop,
54
+ collection: collection,
55
+ key: :baz,
56
+ value: SuperDiff::Test::Item.new(name: "spatula", quantity: 3),
57
+ index: 1
58
+ ),
59
+ double(
60
+ :operation,
61
+ name: :noop,
62
+ collection: collection,
63
+ key: :qux,
64
+ value: "blargh",
65
+ index: 2
66
+ )
67
+ ],
68
+ underlying_object: underlying_object
69
+ )
68
70
 
69
71
  flattened_operation_tree = described_class.call(operation_tree)
70
72
 
71
- expect(flattened_operation_tree).to match([
72
- an_object_having_attributes(
73
- type: :noop,
74
- indentation_level: 0,
75
- prefix: "",
76
- value: a_string_matching(
77
- %r(#<SuperDiff::Test::Item:0x[0-9a-f]+ \{),
78
- ),
79
- collection_bookend: :open,
80
- complete_bookend: :open,
81
- add_comma: false,
82
- ),
83
- an_object_having_attributes(
84
- type: :noop,
85
- indentation_level: 1,
86
- prefix: %(@foo=),
87
- value: %("bar"),
88
- add_comma: true,
89
- ),
90
- an_object_having_attributes(
91
- type: :noop,
92
- indentation_level: 1,
93
- prefix: %(@baz=),
94
- value: a_string_matching(
95
- %r(#<SuperDiff::Test::Item:0x[0-9a-f]+ \{),
96
- ),
97
- collection_bookend: :open,
98
- complete_bookend: nil,
99
- add_comma: false,
100
- ),
101
- an_object_having_attributes(
102
- type: :noop,
103
- indentation_level: 2,
104
- prefix: %(@name=),
105
- value: %("spatula"),
106
- add_comma: true,
107
- ),
108
- an_object_having_attributes(
109
- type: :noop,
110
- indentation_level: 2,
111
- prefix: %(@quantity=),
112
- value: %(3),
113
- add_comma: false,
114
- ),
115
- an_object_having_attributes(
116
- type: :noop,
117
- indentation_level: 1,
118
- prefix: "",
119
- value: %(}>),
120
- collection_bookend: :close,
121
- complete_bookend: nil,
122
- add_comma: true,
123
- ),
124
- an_object_having_attributes(
125
- type: :noop,
126
- indentation_level: 1,
127
- prefix: %(@qux=),
128
- value: %("blargh"),
129
- add_comma: false,
130
- ),
131
- an_object_having_attributes(
132
- type: :noop,
133
- indentation_level: 0,
134
- prefix: "",
135
- value: %(}>),
136
- collection_bookend: :close,
137
- complete_bookend: :close,
138
- add_comma: false,
139
- ),
140
- ])
73
+ expect(flattened_operation_tree).to match(
74
+ [
75
+ an_object_having_attributes(
76
+ type: :noop,
77
+ indentation_level: 0,
78
+ prefix: "",
79
+ value: a_string_matching(/#<SuperDiff::Test::Item:0x[0-9a-f]+ \{/),
80
+ collection_bookend: :open,
81
+ complete_bookend: :open,
82
+ add_comma: false
83
+ ),
84
+ an_object_having_attributes(
85
+ type: :noop,
86
+ indentation_level: 1,
87
+ prefix: "@foo=",
88
+ value: %("bar"),
89
+ add_comma: true
90
+ ),
91
+ an_object_having_attributes(
92
+ type: :noop,
93
+ indentation_level: 1,
94
+ prefix: "@baz=",
95
+ value: a_string_matching(/#<SuperDiff::Test::Item:0x[0-9a-f]+ \{/),
96
+ collection_bookend: :open,
97
+ complete_bookend: nil,
98
+ add_comma: false
99
+ ),
100
+ an_object_having_attributes(
101
+ type: :noop,
102
+ indentation_level: 2,
103
+ prefix: "@name=",
104
+ value: %("spatula"),
105
+ add_comma: true
106
+ ),
107
+ an_object_having_attributes(
108
+ type: :noop,
109
+ indentation_level: 2,
110
+ prefix: "@quantity=",
111
+ value: "3",
112
+ add_comma: false
113
+ ),
114
+ an_object_having_attributes(
115
+ type: :noop,
116
+ indentation_level: 1,
117
+ prefix: "",
118
+ value: "}>",
119
+ collection_bookend: :close,
120
+ complete_bookend: nil,
121
+ add_comma: true
122
+ ),
123
+ an_object_having_attributes(
124
+ type: :noop,
125
+ indentation_level: 1,
126
+ prefix: "@qux=",
127
+ value: %("blargh"),
128
+ add_comma: false
129
+ ),
130
+ an_object_having_attributes(
131
+ type: :noop,
132
+ indentation_level: 0,
133
+ prefix: "",
134
+ value: "}>",
135
+ collection_bookend: :close,
136
+ complete_bookend: :close,
137
+ add_comma: false
138
+ )
139
+ ]
140
+ )
141
141
  end
142
142
  end
143
143
 
@@ -145,138 +145,137 @@ RSpec.describe SuperDiff::OperationTreeFlatteners::DefaultObject do
145
145
  it "returns a series of lines from inspecting each value, creating multiple lines upon encountering inner data structures" do
146
146
  expected = Array.new(3) { :some_value }
147
147
  actual = Array.new(4) { :some_value }
148
- operation_tree = SuperDiff::OperationTrees::DefaultObject.new(
149
- [
150
- double(
151
- :operation,
152
- name: :delete,
153
- collection: expected,
154
- key: :foo,
155
- value: "bar",
156
- index: 0,
157
- ),
158
- double(
159
- :operation,
160
- name: :insert,
161
- collection: actual,
162
- key: :foo,
163
- value: "czar",
164
- index: 0,
165
- ),
166
- double(
167
- :operation,
168
- name: :noop,
169
- collection: actual,
170
- key: :baz,
171
- value: SuperDiff::Test::Item.new(name: 'spatula', quantity: 3),
172
- index: 1,
173
- ),
174
- double(
175
- :operation,
176
- name: :noop,
177
- collection: actual,
178
- key: :qux,
179
- value: "blargh",
180
- index: 2,
181
- ),
182
- double(
183
- :operation,
184
- name: :insert,
185
- collection: actual,
186
- key: :sing,
187
- value: "song",
188
- index: 3,
189
- ),
190
- ],
191
- underlying_object: underlying_object
192
- )
148
+ operation_tree =
149
+ SuperDiff::OperationTrees::DefaultObject.new(
150
+ [
151
+ double(
152
+ :operation,
153
+ name: :delete,
154
+ collection: expected,
155
+ key: :foo,
156
+ value: "bar",
157
+ index: 0
158
+ ),
159
+ double(
160
+ :operation,
161
+ name: :insert,
162
+ collection: actual,
163
+ key: :foo,
164
+ value: "czar",
165
+ index: 0
166
+ ),
167
+ double(
168
+ :operation,
169
+ name: :noop,
170
+ collection: actual,
171
+ key: :baz,
172
+ value: SuperDiff::Test::Item.new(name: "spatula", quantity: 3),
173
+ index: 1
174
+ ),
175
+ double(
176
+ :operation,
177
+ name: :noop,
178
+ collection: actual,
179
+ key: :qux,
180
+ value: "blargh",
181
+ index: 2
182
+ ),
183
+ double(
184
+ :operation,
185
+ name: :insert,
186
+ collection: actual,
187
+ key: :sing,
188
+ value: "song",
189
+ index: 3
190
+ )
191
+ ],
192
+ underlying_object: underlying_object
193
+ )
193
194
 
194
195
  flattened_operation_tree = described_class.call(operation_tree)
195
196
 
196
- expect(flattened_operation_tree).to match([
197
- an_object_having_attributes(
198
- type: :noop,
199
- indentation_level: 0,
200
- prefix: "",
201
- value: a_string_matching(
202
- %r(#<SuperDiff::Test::Item:0x[0-9a-f]+ \{),
203
- ),
204
- collection_bookend: :open,
205
- complete_bookend: :open,
206
- add_comma: false,
207
- ),
208
- an_object_having_attributes(
209
- type: :delete,
210
- indentation_level: 1,
211
- prefix: %(@foo=),
212
- value: %("bar"),
213
- add_comma: true,
214
- ),
215
- an_object_having_attributes(
216
- type: :insert,
217
- indentation_level: 1,
218
- prefix: %(@foo=),
219
- value: %("czar"),
220
- add_comma: true,
221
- ),
222
- an_object_having_attributes(
223
- type: :noop,
224
- indentation_level: 1,
225
- prefix: %(@baz=),
226
- value: a_string_matching(
227
- %r(#<SuperDiff::Test::Item:0x[0-9a-f]+ \{),
228
- ),
229
- collection_bookend: :open,
230
- complete_bookend: nil,
231
- add_comma: false,
232
- ),
233
- an_object_having_attributes(
234
- type: :noop,
235
- indentation_level: 2,
236
- prefix: %(@name=),
237
- value: %("spatula"),
238
- add_comma: true,
239
- ),
240
- an_object_having_attributes(
241
- type: :noop,
242
- indentation_level: 2,
243
- prefix: %(@quantity=),
244
- value: %(3),
245
- add_comma: false,
246
- ),
247
- an_object_having_attributes(
248
- type: :noop,
249
- indentation_level: 1,
250
- prefix: "",
251
- value: %(}>),
252
- collection_bookend: :close,
253
- complete_bookend: nil,
254
- add_comma: true,
255
- ),
256
- an_object_having_attributes(
257
- type: :noop,
258
- indentation_level: 1,
259
- prefix: %(@qux=),
260
- value: %("blargh"),
261
- add_comma: true,
262
- ),
263
- an_object_having_attributes(
264
- type: :insert,
265
- indentation_level: 1,
266
- prefix: %(@sing=),
267
- value: %("song"),
268
- add_comma: false,
269
- ),
270
- an_object_having_attributes(
271
- type: :noop,
272
- indentation_level: 0,
273
- prefix: "",
274
- value: %(}>),
275
- collection_bookend: :close,
276
- complete_bookend: :close,
277
- add_comma: false,
278
- ),
279
- ])
197
+ expect(flattened_operation_tree).to match(
198
+ [
199
+ an_object_having_attributes(
200
+ type: :noop,
201
+ indentation_level: 0,
202
+ prefix: "",
203
+ value: a_string_matching(/#<SuperDiff::Test::Item:0x[0-9a-f]+ \{/),
204
+ collection_bookend: :open,
205
+ complete_bookend: :open,
206
+ add_comma: false
207
+ ),
208
+ an_object_having_attributes(
209
+ type: :delete,
210
+ indentation_level: 1,
211
+ prefix: "@foo=",
212
+ value: %("bar"),
213
+ add_comma: true
214
+ ),
215
+ an_object_having_attributes(
216
+ type: :insert,
217
+ indentation_level: 1,
218
+ prefix: "@foo=",
219
+ value: %("czar"),
220
+ add_comma: true
221
+ ),
222
+ an_object_having_attributes(
223
+ type: :noop,
224
+ indentation_level: 1,
225
+ prefix: "@baz=",
226
+ value: a_string_matching(/#<SuperDiff::Test::Item:0x[0-9a-f]+ \{/),
227
+ collection_bookend: :open,
228
+ complete_bookend: nil,
229
+ add_comma: false
230
+ ),
231
+ an_object_having_attributes(
232
+ type: :noop,
233
+ indentation_level: 2,
234
+ prefix: "@name=",
235
+ value: %("spatula"),
236
+ add_comma: true
237
+ ),
238
+ an_object_having_attributes(
239
+ type: :noop,
240
+ indentation_level: 2,
241
+ prefix: "@quantity=",
242
+ value: "3",
243
+ add_comma: false
244
+ ),
245
+ an_object_having_attributes(
246
+ type: :noop,
247
+ indentation_level: 1,
248
+ prefix: "",
249
+ value: "}>",
250
+ collection_bookend: :close,
251
+ complete_bookend: nil,
252
+ add_comma: true
253
+ ),
254
+ an_object_having_attributes(
255
+ type: :noop,
256
+ indentation_level: 1,
257
+ prefix: "@qux=",
258
+ value: %("blargh"),
259
+ add_comma: true
260
+ ),
261
+ an_object_having_attributes(
262
+ type: :insert,
263
+ indentation_level: 1,
264
+ prefix: "@sing=",
265
+ value: %("song"),
266
+ add_comma: false
267
+ ),
268
+ an_object_having_attributes(
269
+ type: :noop,
270
+ indentation_level: 0,
271
+ prefix: "",
272
+ value: "}>",
273
+ collection_bookend: :close,
274
+ complete_bookend: :close,
275
+ add_comma: false
276
+ )
277
+ ]
278
+ )
280
279
  end
281
280
  end
282
281
 
@@ -284,246 +283,248 @@ RSpec.describe SuperDiff::OperationTreeFlatteners::DefaultObject do
284
283
  it "splits change operations into multiple lines" do
285
284
  collection = Array.new(3) { :some_value }
286
285
  subcollection = Array.new(2) { :some_value }
287
- operation_tree = SuperDiff::OperationTrees::DefaultObject.new(
288
- [
289
- double(
290
- :operation,
291
- name: :noop,
292
- collection: collection,
293
- key: :foo,
294
- value: "bar",
295
- index: 0,
296
- ),
297
- double(
298
- :operation,
299
- name: :change,
300
- left_collection: collection,
301
- left_key: :baz,
302
- left_index: 1,
303
- right_collection: collection,
304
- right_key: :baz,
305
- right_index: 1,
306
- children: SuperDiff::OperationTrees::DefaultObject.new(
307
- [
308
- double(
309
- :operation,
310
- name: :noop,
311
- collection: subcollection,
312
- key: :one,
313
- value: "fish",
314
- index: 0,
315
- ),
316
- double(
317
- :operation,
318
- name: :delete,
319
- collection: subcollection,
320
- key: :two,
321
- value: "fish",
322
- index: 1,
323
- ),
324
- double(
325
- :operation,
326
- name: :insert,
327
- collection: subcollection,
328
- key: :blue,
329
- value: "fish",
330
- index: 1,
331
- ),
332
- ],
333
- underlying_object: underlying_object,
286
+ operation_tree =
287
+ SuperDiff::OperationTrees::DefaultObject.new(
288
+ [
289
+ double(
290
+ :operation,
291
+ name: :noop,
292
+ collection: collection,
293
+ key: :foo,
294
+ value: "bar",
295
+ index: 0
334
296
  ),
335
- ),
336
- double(
337
- :operation,
338
- name: :noop,
339
- collection: collection,
340
- key: :qux,
341
- value: "blargh",
342
- index: 2,
343
- ),
344
- ],
345
- underlying_object: underlying_object
346
- )
297
+ double(
298
+ :operation,
299
+ name: :change,
300
+ left_collection: collection,
301
+ left_key: :baz,
302
+ left_index: 1,
303
+ right_collection: collection,
304
+ right_key: :baz,
305
+ right_index: 1,
306
+ children:
307
+ SuperDiff::OperationTrees::DefaultObject.new(
308
+ [
309
+ double(
310
+ :operation,
311
+ name: :noop,
312
+ collection: subcollection,
313
+ key: :one,
314
+ value: "fish",
315
+ index: 0
316
+ ),
317
+ double(
318
+ :operation,
319
+ name: :delete,
320
+ collection: subcollection,
321
+ key: :two,
322
+ value: "fish",
323
+ index: 1
324
+ ),
325
+ double(
326
+ :operation,
327
+ name: :insert,
328
+ collection: subcollection,
329
+ key: :blue,
330
+ value: "fish",
331
+ index: 1
332
+ )
333
+ ],
334
+ underlying_object: underlying_object
335
+ )
336
+ ),
337
+ double(
338
+ :operation,
339
+ name: :noop,
340
+ collection: collection,
341
+ key: :qux,
342
+ value: "blargh",
343
+ index: 2
344
+ )
345
+ ],
346
+ underlying_object: underlying_object
347
+ )
347
348
 
348
349
  flattened_operation_tree = described_class.call(operation_tree)
349
350
 
350
- expect(flattened_operation_tree).to match([
351
- an_object_having_attributes(
352
- type: :noop,
353
- indentation_level: 0,
354
- prefix: "",
355
- value: a_string_matching(
356
- %r(#<SuperDiff::Test::Item:0x[0-9a-f]+ \{),
357
- ),
358
- collection_bookend: :open,
359
- complete_bookend: :open,
360
- add_comma: false,
361
- ),
362
- an_object_having_attributes(
363
- type: :noop,
364
- indentation_level: 1,
365
- prefix: %(@foo=),
366
- value: %("bar"),
367
- add_comma: true,
368
- ),
369
- an_object_having_attributes(
370
- type: :noop,
371
- indentation_level: 1,
372
- prefix: %(@baz=),
373
- value: a_string_matching(
374
- %r(#<SuperDiff::Test::Item:0x[0-9a-f]+ \{),
375
- ),
376
- collection_bookend: :open,
377
- complete_bookend: nil,
378
- add_comma: false,
379
- ),
380
- an_object_having_attributes(
381
- type: :noop,
382
- indentation_level: 2,
383
- prefix: %(@one=),
384
- value: %("fish"),
385
- add_comma: true,
386
- ),
387
- an_object_having_attributes(
388
- type: :delete,
389
- indentation_level: 2,
390
- prefix: %(@two=),
391
- value: %("fish"),
392
- add_comma: false,
393
- ),
394
- an_object_having_attributes(
395
- type: :insert,
396
- indentation_level: 2,
397
- prefix: %(@blue=),
398
- value: %("fish"),
399
- add_comma: false,
400
- ),
401
- an_object_having_attributes(
402
- type: :noop,
403
- indentation_level: 1,
404
- prefix: "",
405
- value: %(}>),
406
- collection_bookend: :close,
407
- complete_bookend: nil,
408
- add_comma: true,
409
- ),
410
- an_object_having_attributes(
411
- type: :noop,
412
- indentation_level: 1,
413
- prefix: %(@qux=),
414
- value: %("blargh"),
415
- add_comma: false,
416
- ),
417
- an_object_having_attributes(
418
- type: :noop,
419
- indentation_level: 0,
420
- prefix: "",
421
- value: %(}>),
422
- collection_bookend: :close,
423
- complete_bookend: :close,
424
- add_comma: false,
425
- ),
426
- ])
351
+ expect(flattened_operation_tree).to match(
352
+ [
353
+ an_object_having_attributes(
354
+ type: :noop,
355
+ indentation_level: 0,
356
+ prefix: "",
357
+ value: a_string_matching(/#<SuperDiff::Test::Item:0x[0-9a-f]+ \{/),
358
+ collection_bookend: :open,
359
+ complete_bookend: :open,
360
+ add_comma: false
361
+ ),
362
+ an_object_having_attributes(
363
+ type: :noop,
364
+ indentation_level: 1,
365
+ prefix: "@foo=",
366
+ value: %("bar"),
367
+ add_comma: true
368
+ ),
369
+ an_object_having_attributes(
370
+ type: :noop,
371
+ indentation_level: 1,
372
+ prefix: "@baz=",
373
+ value: a_string_matching(/#<SuperDiff::Test::Item:0x[0-9a-f]+ \{/),
374
+ collection_bookend: :open,
375
+ complete_bookend: nil,
376
+ add_comma: false
377
+ ),
378
+ an_object_having_attributes(
379
+ type: :noop,
380
+ indentation_level: 2,
381
+ prefix: "@one=",
382
+ value: %("fish"),
383
+ add_comma: true
384
+ ),
385
+ an_object_having_attributes(
386
+ type: :delete,
387
+ indentation_level: 2,
388
+ prefix: "@two=",
389
+ value: %("fish"),
390
+ add_comma: false
391
+ ),
392
+ an_object_having_attributes(
393
+ type: :insert,
394
+ indentation_level: 2,
395
+ prefix: "@blue=",
396
+ value: %("fish"),
397
+ add_comma: false
398
+ ),
399
+ an_object_having_attributes(
400
+ type: :noop,
401
+ indentation_level: 1,
402
+ prefix: "",
403
+ value: "}>",
404
+ collection_bookend: :close,
405
+ complete_bookend: nil,
406
+ add_comma: true
407
+ ),
408
+ an_object_having_attributes(
409
+ type: :noop,
410
+ indentation_level: 1,
411
+ prefix: "@qux=",
412
+ value: %("blargh"),
413
+ add_comma: false
414
+ ),
415
+ an_object_having_attributes(
416
+ type: :noop,
417
+ indentation_level: 0,
418
+ prefix: "",
419
+ value: "}>",
420
+ collection_bookend: :close,
421
+ complete_bookend: :close,
422
+ add_comma: false
423
+ )
424
+ ]
425
+ )
427
426
  end
428
427
  end
429
428
 
430
429
  context "given a single-dimensional tree that contains a reference to itself" do
431
430
  it "replaces the reference with a static placeholder" do
432
431
  left_collection = Array.new(3) { :some_value }
433
- right_collection = Array.new(2) { :some_value }.tap do |collection|
434
- collection << right_collection
435
- end
432
+ right_collection =
433
+ Array
434
+ .new(2) { :some_value }
435
+ .tap { |collection| collection << right_collection }
436
436
 
437
- operation_tree = SuperDiff::OperationTrees::DefaultObject.new(
438
- [
439
- double(
440
- :operation,
441
- name: :noop,
442
- collection: right_collection,
443
- key: :foo,
444
- value: "bar",
445
- index: 0,
446
- ),
447
- double(
448
- :operation,
449
- name: :noop,
450
- collection: right_collection,
451
- key: :baz,
452
- value: "qux",
453
- index: 1,
454
- ),
455
- double(
456
- :operation,
457
- name: :delete,
458
- collection: left_collection,
459
- key: :blargh,
460
- value: "zig",
461
- index: 2,
462
- ),
463
- double(
464
- :operation,
465
- name: :insert,
466
- collection: right_collection,
467
- key: :blargh,
468
- value: right_collection,
469
- index: 2,
470
- ),
471
- ],
472
- underlying_object: underlying_object,
473
- )
437
+ operation_tree =
438
+ SuperDiff::OperationTrees::DefaultObject.new(
439
+ [
440
+ double(
441
+ :operation,
442
+ name: :noop,
443
+ collection: right_collection,
444
+ key: :foo,
445
+ value: "bar",
446
+ index: 0
447
+ ),
448
+ double(
449
+ :operation,
450
+ name: :noop,
451
+ collection: right_collection,
452
+ key: :baz,
453
+ value: "qux",
454
+ index: 1
455
+ ),
456
+ double(
457
+ :operation,
458
+ name: :delete,
459
+ collection: left_collection,
460
+ key: :blargh,
461
+ value: "zig",
462
+ index: 2
463
+ ),
464
+ double(
465
+ :operation,
466
+ name: :insert,
467
+ collection: right_collection,
468
+ key: :blargh,
469
+ value: right_collection,
470
+ index: 2
471
+ )
472
+ ],
473
+ underlying_object: underlying_object
474
+ )
474
475
 
475
476
  flattened_operation_tree = described_class.call(operation_tree)
476
477
 
477
- expect(flattened_operation_tree).to match([
478
- an_object_having_attributes(
479
- type: :noop,
480
- indentation_level: 0,
481
- prefix: "",
482
- value: a_string_matching(
483
- %r(#<SuperDiff::Test::Item:0x[0-9a-f]+ \{),
484
- ),
485
- collection_bookend: :open,
486
- complete_bookend: :open,
487
- add_comma: false,
488
- ),
489
- an_object_having_attributes(
490
- type: :noop,
491
- indentation_level: 1,
492
- prefix: %(@foo=),
493
- value: %("bar"),
494
- add_comma: true,
495
- ),
496
- an_object_having_attributes(
497
- type: :noop,
498
- indentation_level: 1,
499
- prefix: %(@baz=),
500
- value: %("qux"),
501
- add_comma: true,
502
- ),
503
- an_object_having_attributes(
504
- type: :delete,
505
- indentation_level: 1,
506
- prefix: %(@blargh=),
507
- value: %("zig"),
508
- add_comma: false,
509
- ),
510
- an_object_having_attributes(
511
- type: :insert,
512
- indentation_level: 1,
513
- prefix: %(@blargh=),
514
- value: %(∙∙∙),
515
- add_comma: false,
516
- ),
517
- an_object_having_attributes(
518
- type: :noop,
519
- indentation_level: 0,
520
- prefix: "",
521
- value: %(}>),
522
- collection_bookend: :close,
523
- complete_bookend: :close,
524
- add_comma: false,
525
- ),
526
- ])
478
+ expect(flattened_operation_tree).to match(
479
+ [
480
+ an_object_having_attributes(
481
+ type: :noop,
482
+ indentation_level: 0,
483
+ prefix: "",
484
+ value: a_string_matching(/#<SuperDiff::Test::Item:0x[0-9a-f]+ \{/),
485
+ collection_bookend: :open,
486
+ complete_bookend: :open,
487
+ add_comma: false
488
+ ),
489
+ an_object_having_attributes(
490
+ type: :noop,
491
+ indentation_level: 1,
492
+ prefix: "@foo=",
493
+ value: %("bar"),
494
+ add_comma: true
495
+ ),
496
+ an_object_having_attributes(
497
+ type: :noop,
498
+ indentation_level: 1,
499
+ prefix: "@baz=",
500
+ value: %("qux"),
501
+ add_comma: true
502
+ ),
503
+ an_object_having_attributes(
504
+ type: :delete,
505
+ indentation_level: 1,
506
+ prefix: "@blargh=",
507
+ value: %("zig"),
508
+ add_comma: false
509
+ ),
510
+ an_object_having_attributes(
511
+ type: :insert,
512
+ indentation_level: 1,
513
+ prefix: "@blargh=",
514
+ value: "∙∙∙",
515
+ add_comma: false
516
+ ),
517
+ an_object_having_attributes(
518
+ type: :noop,
519
+ indentation_level: 0,
520
+ prefix: "",
521
+ value: "}>",
522
+ collection_bookend: :close,
523
+ complete_bookend: :close,
524
+ add_comma: false
525
+ )
526
+ ]
527
+ )
527
528
  end
528
529
  end
529
530
 
@@ -531,157 +532,154 @@ RSpec.describe SuperDiff::OperationTreeFlatteners::DefaultObject do
531
532
  it "replaces the reference with a static placeholder" do
532
533
  collection = Array.new(3) { :some_value }
533
534
  left_subcollection = Array.new(2) { :some_value }
534
- right_subcollection = Array.new(1) { :some_value }.tap do |coll|
535
- coll << right_subcollection
536
- end
535
+ right_subcollection =
536
+ Array.new(1) { :some_value }.tap { |coll| coll << right_subcollection }
537
537
 
538
- operation_tree = SuperDiff::OperationTrees::DefaultObject.new(
539
- [
540
- double(
541
- :operation,
542
- name: :noop,
543
- collection: collection,
544
- key: :foo,
545
- value: "bar",
546
- index: 0,
547
- ),
548
- double(
549
- :operation,
550
- name: :change,
551
- left_collection: collection,
552
- left_key: :baz,
553
- left_index: 1,
554
- right_collection: collection,
555
- right_key: :baz,
556
- right_index: 1,
557
- children: SuperDiff::OperationTrees::DefaultObject.new(
558
- [
559
- double(
560
- :operation,
561
- name: :noop,
562
- collection: right_subcollection,
563
- key: :one,
564
- value: "fish",
565
- index: 0,
566
- ),
567
- double(
568
- :operation,
569
- name: :delete,
570
- collection: left_subcollection,
571
- key: :two,
572
- value: "fish",
573
- index: 1,
574
- ),
575
- double(
576
- :operation,
577
- name: :insert,
578
- collection: right_subcollection,
579
- key: :two,
580
- value: right_subcollection,
581
- index: 1,
582
- ),
583
- ],
584
- underlying_object: underlying_object,
538
+ operation_tree =
539
+ SuperDiff::OperationTrees::DefaultObject.new(
540
+ [
541
+ double(
542
+ :operation,
543
+ name: :noop,
544
+ collection: collection,
545
+ key: :foo,
546
+ value: "bar",
547
+ index: 0
585
548
  ),
586
- ),
587
- double(
588
- :operation,
589
- name: :noop,
590
- collection: collection,
591
- key: :qux,
592
- value: "blargh",
593
- index: 2,
594
- ),
595
- ],
596
- underlying_object: underlying_object,
597
- )
549
+ double(
550
+ :operation,
551
+ name: :change,
552
+ left_collection: collection,
553
+ left_key: :baz,
554
+ left_index: 1,
555
+ right_collection: collection,
556
+ right_key: :baz,
557
+ right_index: 1,
558
+ children:
559
+ SuperDiff::OperationTrees::DefaultObject.new(
560
+ [
561
+ double(
562
+ :operation,
563
+ name: :noop,
564
+ collection: right_subcollection,
565
+ key: :one,
566
+ value: "fish",
567
+ index: 0
568
+ ),
569
+ double(
570
+ :operation,
571
+ name: :delete,
572
+ collection: left_subcollection,
573
+ key: :two,
574
+ value: "fish",
575
+ index: 1
576
+ ),
577
+ double(
578
+ :operation,
579
+ name: :insert,
580
+ collection: right_subcollection,
581
+ key: :two,
582
+ value: right_subcollection,
583
+ index: 1
584
+ )
585
+ ],
586
+ underlying_object: underlying_object
587
+ )
588
+ ),
589
+ double(
590
+ :operation,
591
+ name: :noop,
592
+ collection: collection,
593
+ key: :qux,
594
+ value: "blargh",
595
+ index: 2
596
+ )
597
+ ],
598
+ underlying_object: underlying_object
599
+ )
598
600
 
599
601
  flattened_operation_tree = described_class.call(operation_tree)
600
602
 
601
- expect(flattened_operation_tree).to match([
602
- an_object_having_attributes(
603
- type: :noop,
604
- indentation_level: 0,
605
- prefix: "",
606
- value: a_string_matching(
607
- %r(#<SuperDiff::Test::Item:0x[0-9a-f]+ \{),
608
- ),
609
- collection_bookend: :open,
610
- complete_bookend: :open,
611
- add_comma: false,
612
- ),
613
- an_object_having_attributes(
614
- type: :noop,
615
- indentation_level: 1,
616
- prefix: %(@foo=),
617
- value: %("bar"),
618
- add_comma: true,
619
- ),
620
- an_object_having_attributes(
621
- type: :noop,
622
- indentation_level: 1,
623
- prefix: %(@baz=),
624
- value: a_string_matching(
625
- %r(#<SuperDiff::Test::Item:0x[0-9a-f]+ \{),
626
- ),
627
- collection_bookend: :open,
628
- complete_bookend: nil,
629
- add_comma: false,
630
- ),
631
- an_object_having_attributes(
632
- type: :noop,
633
- indentation_level: 2,
634
- prefix: %(@one=),
635
- value: %("fish"),
636
- add_comma: true,
637
- ),
638
- an_object_having_attributes(
639
- type: :delete,
640
- indentation_level: 2,
641
- prefix: %(@two=),
642
- value: %("fish"),
643
- add_comma: false,
644
- ),
645
- an_object_having_attributes(
646
- type: :insert,
647
- indentation_level: 2,
648
- prefix: %(@two=),
649
- value: %(∙∙∙),
650
- add_comma: false,
651
- ),
652
- an_object_having_attributes(
653
- type: :noop,
654
- indentation_level: 1,
655
- prefix: "",
656
- value: %(}>),
657
- collection_bookend: :close,
658
- complete_bookend: nil,
659
- add_comma: true,
660
- ),
661
- an_object_having_attributes(
662
- type: :noop,
663
- indentation_level: 1,
664
- prefix: %(@qux=),
665
- value: %("blargh"),
666
- add_comma: false,
667
- ),
668
- an_object_having_attributes(
669
- type: :noop,
670
- indentation_level: 0,
671
- prefix: "",
672
- value: %(}>),
673
- collection_bookend: :close,
674
- complete_bookend: :close,
675
- add_comma: false,
676
- ),
677
- ])
603
+ expect(flattened_operation_tree).to match(
604
+ [
605
+ an_object_having_attributes(
606
+ type: :noop,
607
+ indentation_level: 0,
608
+ prefix: "",
609
+ value: a_string_matching(/#<SuperDiff::Test::Item:0x[0-9a-f]+ \{/),
610
+ collection_bookend: :open,
611
+ complete_bookend: :open,
612
+ add_comma: false
613
+ ),
614
+ an_object_having_attributes(
615
+ type: :noop,
616
+ indentation_level: 1,
617
+ prefix: "@foo=",
618
+ value: %("bar"),
619
+ add_comma: true
620
+ ),
621
+ an_object_having_attributes(
622
+ type: :noop,
623
+ indentation_level: 1,
624
+ prefix: "@baz=",
625
+ value: a_string_matching(/#<SuperDiff::Test::Item:0x[0-9a-f]+ \{/),
626
+ collection_bookend: :open,
627
+ complete_bookend: nil,
628
+ add_comma: false
629
+ ),
630
+ an_object_having_attributes(
631
+ type: :noop,
632
+ indentation_level: 2,
633
+ prefix: "@one=",
634
+ value: %("fish"),
635
+ add_comma: true
636
+ ),
637
+ an_object_having_attributes(
638
+ type: :delete,
639
+ indentation_level: 2,
640
+ prefix: "@two=",
641
+ value: %("fish"),
642
+ add_comma: false
643
+ ),
644
+ an_object_having_attributes(
645
+ type: :insert,
646
+ indentation_level: 2,
647
+ prefix: "@two=",
648
+ value: "∙∙∙",
649
+ add_comma: false
650
+ ),
651
+ an_object_having_attributes(
652
+ type: :noop,
653
+ indentation_level: 1,
654
+ prefix: "",
655
+ value: "}>",
656
+ collection_bookend: :close,
657
+ complete_bookend: nil,
658
+ add_comma: true
659
+ ),
660
+ an_object_having_attributes(
661
+ type: :noop,
662
+ indentation_level: 1,
663
+ prefix: "@qux=",
664
+ value: %("blargh"),
665
+ add_comma: false
666
+ ),
667
+ an_object_having_attributes(
668
+ type: :noop,
669
+ indentation_level: 0,
670
+ prefix: "",
671
+ value: "}>",
672
+ collection_bookend: :close,
673
+ complete_bookend: :close,
674
+ add_comma: false
675
+ )
676
+ ]
677
+ )
678
678
  end
679
679
  end
680
680
 
681
681
  def underlying_object
682
- @_underlying_object ||= SuperDiff::Test::Item.new(
683
- name: 'whatever',
684
- quantity: 999,
685
- )
682
+ @_underlying_object ||=
683
+ SuperDiff::Test::Item.new(name: "whatever", quantity: 999)
686
684
  end
687
685
  end