super_diff 0.9.0 → 0.11.0

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