super_diff 0.8.0 → 0.10.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (192) 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 +11 -7
  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 +5 -9
  128. data/spec/examples.txt +493 -407
  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 +27 -20
  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 +70 -68
@@ -0,0 +1,123 @@
1
+ shared_examples_for "a matcher that supports a toggleable key" do
2
+ context "if key_enabled is set to true" do
3
+ it "produces the key" do
4
+ as_both_colored_and_uncolored do |color_enabled|
5
+ snippet = <<~TEST.strip
6
+ expected = [
7
+ "Afghanistan",
8
+ "Aland Islands",
9
+ "Albania"
10
+ ]
11
+ actual = [
12
+ "Afghanistan",
13
+ "Aland Islands",
14
+ "Australia"
15
+ ]
16
+ expect(actual).to #{matcher}(expected)
17
+ TEST
18
+ program =
19
+ make_plain_test_program(
20
+ snippet,
21
+ color_enabled: color_enabled,
22
+ configuration: {
23
+ key_enabled: true
24
+ }
25
+ )
26
+
27
+ expected_output =
28
+ build_expected_output(
29
+ color_enabled: color_enabled,
30
+ snippet: %|expect(actual).to #{matcher}(expected)|,
31
+ newline_before_expectation: true,
32
+ expectation:
33
+ proc do
34
+ line do
35
+ plain "Expected "
36
+ actual %|["Afghanistan", "Aland Islands", "Australia"]|
37
+ end
38
+
39
+ line do
40
+ plain " to eq "
41
+ expected %|["Afghanistan", "Aland Islands", "Albania"]|
42
+ end
43
+ end,
44
+ diff:
45
+ proc do
46
+ plain_line " ["
47
+ plain_line %| "Afghanistan",|
48
+ plain_line %| "Aland Islands",|
49
+ expected_line %|- "Albania"|
50
+ actual_line %|+ "Australia"|
51
+ plain_line " ]"
52
+ end,
53
+ key_enabled: true
54
+ )
55
+
56
+ expect(program).to produce_output_when_run(expected_output).in_color(
57
+ color_enabled
58
+ )
59
+ end
60
+ end
61
+ end
62
+
63
+ context "if key_enabled is set to false" do
64
+ it "does not produce the key" do
65
+ as_both_colored_and_uncolored do |color_enabled|
66
+ snippet = <<~TEST.strip
67
+ expected = [
68
+ "Afghanistan",
69
+ "Aland Islands",
70
+ "Albania"
71
+ ]
72
+ actual = [
73
+ "Afghanistan",
74
+ "Aland Islands",
75
+ "Australia"
76
+ ]
77
+ expect(actual).to #{matcher}(expected)
78
+ TEST
79
+ program =
80
+ make_plain_test_program(
81
+ snippet,
82
+ color_enabled: color_enabled,
83
+ configuration: {
84
+ key_enabled: false
85
+ }
86
+ )
87
+
88
+ expected_output =
89
+ build_expected_output(
90
+ key_enabled: false,
91
+ color_enabled: color_enabled,
92
+ snippet: %|expect(actual).to #{matcher}(expected)|,
93
+ newline_before_expectation: true,
94
+ expectation:
95
+ proc do
96
+ line do
97
+ plain "Expected "
98
+ actual %|["Afghanistan", "Aland Islands", "Australia"]|
99
+ end
100
+
101
+ line do
102
+ plain " to eq "
103
+ expected %|["Afghanistan", "Aland Islands", "Albania"]|
104
+ end
105
+ end,
106
+ diff:
107
+ proc do
108
+ plain_line " ["
109
+ plain_line %| "Afghanistan",|
110
+ plain_line %| "Aland Islands",|
111
+ expected_line %|- "Albania"|
112
+ actual_line %|+ "Australia"|
113
+ plain_line " ]"
114
+ end
115
+ )
116
+
117
+ expect(program).to produce_output_when_run(expected_output).in_color(
118
+ color_enabled
119
+ )
120
+ end
121
+ end
122
+ end
123
+ end
@@ -3,9 +3,7 @@ module SuperDiff
3
3
  def with_configuration(configuration)
4
4
  old_configuration = SuperDiff.configuration.dup
5
5
  SuperDiff.configuration.merge!(configuration)
6
- yield.tap do
7
- SuperDiff.configuration.merge!(old_configuration)
8
- end
6
+ yield.tap { SuperDiff.configuration.merge!(old_configuration) }
9
7
  end
10
8
 
11
9
  def colored(*args, **opts, &block)
@@ -18,20 +18,19 @@ module SuperDiff
18
18
  def failure_message
19
19
  message =
20
20
  "Expected colored output to be printed, but got a mismatch.\n\n" +
21
- "Expected output:\n\n" +
22
- SuperDiff::Test::OutputHelpers.bookended(expected_output) +
23
- "\n" +
24
- "Actual output:\n\n" +
25
- SuperDiff::Test::OutputHelpers.bookended(actual_output)
21
+ "Expected output:\n\n" +
22
+ SuperDiff::Test::OutputHelpers.bookended(expected_output) + "\n" +
23
+ "Actual output:\n\n" +
24
+ SuperDiff::Test::OutputHelpers.bookended(actual_output)
26
25
 
27
- if ["1", "true"].include?(ENV["SHOW_DIFF"])
28
- ::RSpec::Matchers::ExpectedsForMultipleDiffs.
29
- from(expected_output).
30
- message_with_diff(
31
- message,
32
- ::RSpec::Expectations.differ,
33
- actual_output,
34
- )
26
+ if %w[1 true].include?(ENV["SHOW_DIFF"])
27
+ ::RSpec::Matchers::ExpectedsForMultipleDiffs.from(
28
+ expected_output
29
+ ).message_with_diff(
30
+ message,
31
+ ::RSpec::Expectations.differ,
32
+ actual_output
33
+ )
35
34
  else
36
35
  message
37
36
  end
@@ -5,13 +5,14 @@ RSpec.describe SuperDiff, type: :unit do
5
5
  context "given an ActiveRecord object" do
6
6
  context "given as_lines: false" do
7
7
  it "returns an inspected version of the object" do
8
- string = described_class.inspect_object(
9
- SuperDiff::Test::Models::ActiveRecord::Person.new(
10
- name: "Elliot",
11
- age: 31,
12
- ),
13
- as_lines: false,
14
- )
8
+ string =
9
+ described_class.inspect_object(
10
+ SuperDiff::Test::Models::ActiveRecord::Person.new(
11
+ name: "Elliot",
12
+ age: 31
13
+ ),
14
+ as_lines: false
15
+ )
15
16
  expect(string).to eq(
16
17
  %(#<SuperDiff::Test::Models::ActiveRecord::Person id: nil, age: 31, name: "Elliot">)
17
18
  )
@@ -20,50 +21,53 @@ RSpec.describe SuperDiff, type: :unit do
20
21
 
21
22
  context "given as_lines: true" do
22
23
  it "returns an inspected version of the object as multiple Lines" do
23
- tiered_lines = described_class.inspect_object(
24
- SuperDiff::Test::Models::ActiveRecord::Person.new(
25
- name: "Elliot",
26
- age: 31,
27
- ),
28
- as_lines: true,
29
- type: :delete,
30
- indentation_level: 1,
31
- )
32
- expect(tiered_lines).to match([
33
- an_object_having_attributes(
34
- type: :delete,
35
- indentation_level: 1,
36
- value: %(#<SuperDiff::Test::Models::ActiveRecord::Person {),
37
- collection_bookend: :open,
38
- ),
39
- an_object_having_attributes(
40
- type: :delete,
41
- indentation_level: 2,
42
- prefix: %(id: ),
43
- value: %(nil),
44
- add_comma: true,
45
- ),
46
- an_object_having_attributes(
24
+ tiered_lines =
25
+ described_class.inspect_object(
26
+ SuperDiff::Test::Models::ActiveRecord::Person.new(
27
+ name: "Elliot",
28
+ age: 31
29
+ ),
30
+ as_lines: true,
47
31
  type: :delete,
48
- indentation_level: 2,
49
- prefix: %(age: ),
50
- value: %(31),
51
- add_comma: true,
52
- ),
53
- an_object_having_attributes(
54
- type: :delete,
55
- indentation_level: 2,
56
- prefix: %(name: ),
57
- value: %("Elliot"),
58
- add_comma: false,
59
- ),
60
- an_object_having_attributes(
61
- type: :delete,
62
- indentation_level: 1,
63
- value: %(}>),
64
- collection_bookend: :close,
65
- ),
66
- ])
32
+ indentation_level: 1
33
+ )
34
+ expect(tiered_lines).to match(
35
+ [
36
+ an_object_having_attributes(
37
+ type: :delete,
38
+ indentation_level: 1,
39
+ value: "#<SuperDiff::Test::Models::ActiveRecord::Person {",
40
+ collection_bookend: :open
41
+ ),
42
+ an_object_having_attributes(
43
+ type: :delete,
44
+ indentation_level: 2,
45
+ prefix: "id: ",
46
+ value: "nil",
47
+ add_comma: true
48
+ ),
49
+ an_object_having_attributes(
50
+ type: :delete,
51
+ indentation_level: 2,
52
+ prefix: "age: ",
53
+ value: "31",
54
+ add_comma: true
55
+ ),
56
+ an_object_having_attributes(
57
+ type: :delete,
58
+ indentation_level: 2,
59
+ prefix: "name: ",
60
+ value: %("Elliot"),
61
+ add_comma: false
62
+ ),
63
+ an_object_having_attributes(
64
+ type: :delete,
65
+ indentation_level: 1,
66
+ value: "}>",
67
+ collection_bookend: :close
68
+ )
69
+ ]
70
+ )
67
71
  end
68
72
  end
69
73
  end
@@ -73,17 +77,18 @@ RSpec.describe SuperDiff, type: :unit do
73
77
  it "returns an inspected version of the Relation" do
74
78
  SuperDiff::Test::Models::ActiveRecord::Person.create!(
75
79
  name: "Marty",
76
- age: 19,
80
+ age: 19
77
81
  )
78
82
  SuperDiff::Test::Models::ActiveRecord::Person.create!(
79
83
  name: "Jennifer",
80
- age: 17,
84
+ age: 17
81
85
  )
82
86
 
83
- string = described_class.inspect_object(
84
- SuperDiff::Test::Models::ActiveRecord::Person.all,
85
- as_lines: false,
86
- )
87
+ string =
88
+ described_class.inspect_object(
89
+ SuperDiff::Test::Models::ActiveRecord::Person.all,
90
+ as_lines: false
91
+ )
87
92
 
88
93
  expect(string).to eq(
89
94
  %(#<ActiveRecord::Relation [#<SuperDiff::Test::Models::ActiveRecord::Person id: 1, age: 19, name: "Marty">, #<SuperDiff::Test::Models::ActiveRecord::Person id: 2, age: 17, name: "Jennifer">]>)
@@ -95,100 +100,103 @@ RSpec.describe SuperDiff, type: :unit do
95
100
  it "returns an inspected version of the Relation as multiple Lines" do
96
101
  SuperDiff::Test::Models::ActiveRecord::Person.create!(
97
102
  name: "Marty",
98
- age: 19,
103
+ age: 19
99
104
  )
100
105
  SuperDiff::Test::Models::ActiveRecord::Person.create!(
101
106
  name: "Jennifer",
102
- age: 17,
107
+ age: 17
103
108
  )
104
109
 
105
- tiered_lines = described_class.inspect_object(
106
- SuperDiff::Test::Models::ActiveRecord::Person.all,
107
- as_lines: true,
108
- type: :delete,
109
- indentation_level: 1,
110
- )
111
-
112
- expect(tiered_lines).to match([
113
- an_object_having_attributes(
114
- type: :delete,
115
- indentation_level: 1,
116
- value: %(#<ActiveRecord::Relation [),
117
- collection_bookend: :open,
118
- ),
119
- an_object_having_attributes(
120
- type: :delete,
121
- indentation_level: 2,
122
- value: %(#<SuperDiff::Test::Models::ActiveRecord::Person {),
123
- collection_bookend: :open,
124
- ),
125
- an_object_having_attributes(
126
- type: :delete,
127
- indentation_level: 3,
128
- prefix: %(id: ),
129
- value: %(1),
130
- add_comma: true,
131
- ),
132
- an_object_having_attributes(
133
- type: :delete,
134
- indentation_level: 3,
135
- prefix: %(age: ),
136
- value: %(19),
137
- add_comma: true,
138
- ),
139
- an_object_having_attributes(
140
- type: :delete,
141
- indentation_level: 3,
142
- prefix: %(name: ),
143
- value: %("Marty"),
144
- add_comma: false,
145
- ),
146
- an_object_having_attributes(
147
- type: :delete,
148
- indentation_level: 2,
149
- value: %(}>),
150
- collection_bookend: :close,
151
- ),
152
- an_object_having_attributes(
110
+ tiered_lines =
111
+ described_class.inspect_object(
112
+ SuperDiff::Test::Models::ActiveRecord::Person.all,
113
+ as_lines: true,
153
114
  type: :delete,
154
- indentation_level: 2,
155
- value: %(#<SuperDiff::Test::Models::ActiveRecord::Person {),
156
- collection_bookend: :open,
157
- ),
158
- an_object_having_attributes(
159
- type: :delete,
160
- indentation_level: 3,
161
- prefix: %(id: ),
162
- value: %(2),
163
- add_comma: true,
164
- ),
165
- an_object_having_attributes(
166
- type: :delete,
167
- indentation_level: 3,
168
- prefix: %(age: ),
169
- value: %(17),
170
- add_comma: true,
171
- ),
172
- an_object_having_attributes(
173
- type: :delete,
174
- indentation_level: 3,
175
- prefix: %(name: ),
176
- value: %("Jennifer"),
177
- add_comma: false,
178
- ),
179
- an_object_having_attributes(
180
- type: :delete,
181
- indentation_level: 2,
182
- value: %(}>),
183
- collection_bookend: :close,
184
- ),
185
- an_object_having_attributes(
186
- type: :delete,
187
- indentation_level: 1,
188
- value: %(]>),
189
- collection_bookend: :close,
190
- ),
191
- ])
115
+ indentation_level: 1
116
+ )
117
+
118
+ expect(tiered_lines).to match(
119
+ [
120
+ an_object_having_attributes(
121
+ type: :delete,
122
+ indentation_level: 1,
123
+ value: "#<ActiveRecord::Relation [",
124
+ collection_bookend: :open
125
+ ),
126
+ an_object_having_attributes(
127
+ type: :delete,
128
+ indentation_level: 2,
129
+ value: "#<SuperDiff::Test::Models::ActiveRecord::Person {",
130
+ collection_bookend: :open
131
+ ),
132
+ an_object_having_attributes(
133
+ type: :delete,
134
+ indentation_level: 3,
135
+ prefix: "id: ",
136
+ value: "1",
137
+ add_comma: true
138
+ ),
139
+ an_object_having_attributes(
140
+ type: :delete,
141
+ indentation_level: 3,
142
+ prefix: "age: ",
143
+ value: "19",
144
+ add_comma: true
145
+ ),
146
+ an_object_having_attributes(
147
+ type: :delete,
148
+ indentation_level: 3,
149
+ prefix: "name: ",
150
+ value: %("Marty"),
151
+ add_comma: false
152
+ ),
153
+ an_object_having_attributes(
154
+ type: :delete,
155
+ indentation_level: 2,
156
+ value: "}>",
157
+ collection_bookend: :close
158
+ ),
159
+ an_object_having_attributes(
160
+ type: :delete,
161
+ indentation_level: 2,
162
+ value: "#<SuperDiff::Test::Models::ActiveRecord::Person {",
163
+ collection_bookend: :open
164
+ ),
165
+ an_object_having_attributes(
166
+ type: :delete,
167
+ indentation_level: 3,
168
+ prefix: "id: ",
169
+ value: "2",
170
+ add_comma: true
171
+ ),
172
+ an_object_having_attributes(
173
+ type: :delete,
174
+ indentation_level: 3,
175
+ prefix: "age: ",
176
+ value: "17",
177
+ add_comma: true
178
+ ),
179
+ an_object_having_attributes(
180
+ type: :delete,
181
+ indentation_level: 3,
182
+ prefix: "name: ",
183
+ value: %("Jennifer"),
184
+ add_comma: false
185
+ ),
186
+ an_object_having_attributes(
187
+ type: :delete,
188
+ indentation_level: 2,
189
+ value: "}>",
190
+ collection_bookend: :close
191
+ ),
192
+ an_object_having_attributes(
193
+ type: :delete,
194
+ indentation_level: 1,
195
+ value: "]>",
196
+ collection_bookend: :close
197
+ )
198
+ ]
199
+ )
192
200
  end
193
201
  end
194
202
  end
@@ -196,76 +204,84 @@ RSpec.describe SuperDiff, type: :unit do
196
204
  context "given a HashWithIndifferentAccess" do
197
205
  context "given as_lines: false" do
198
206
  it "returns an inspected version of the object" do
199
- string = described_class.inspect_object(
200
- HashWithIndifferentAccess.new({
201
- line_1: "123 Main St.",
202
- city: "Hill Valley",
203
- state: "CA",
204
- zip: "90382",
205
- }),
206
- as_lines: false,
207
- )
207
+ string =
208
+ described_class.inspect_object(
209
+ HashWithIndifferentAccess.new(
210
+ {
211
+ line_1: "123 Main St.",
212
+ city: "Hill Valley",
213
+ state: "CA",
214
+ zip: "90382"
215
+ }
216
+ ),
217
+ as_lines: false
218
+ )
208
219
  expect(string).to eq(
209
- %(#<HashWithIndifferentAccess { "line_1" => "123 Main St.", "city" => "Hill Valley", "state" => "CA", "zip" => "90382" }>),
220
+ %(#<HashWithIndifferentAccess { "line_1" => "123 Main St.", "city" => "Hill Valley", "state" => "CA", "zip" => "90382" }>)
210
221
  )
211
222
  end
212
223
  end
213
224
 
214
225
  context "given as_lines: true" do
215
226
  it "returns an inspected version of the object as multiple Lines" do
216
- tiered_lines = described_class.inspect_object(
217
- HashWithIndifferentAccess.new({
218
- line_1: "123 Main St.",
219
- city: "Hill Valley",
220
- state: "CA",
221
- zip: "90382",
222
- }),
223
- as_lines: true,
224
- type: :delete,
225
- indentation_level: 1,
226
- )
227
- expect(tiered_lines).to match([
228
- an_object_having_attributes(
229
- type: :delete,
230
- indentation_level: 1,
231
- value: %(#<HashWithIndifferentAccess {),
232
- collection_bookend: :open,
233
- ),
234
- an_object_having_attributes(
235
- type: :delete,
236
- indentation_level: 2,
237
- prefix: %("line_1" => ),
238
- value: %("123 Main St."),
239
- add_comma: true,
240
- ),
241
- an_object_having_attributes(
242
- type: :delete,
243
- indentation_level: 2,
244
- prefix: %("city" => ),
245
- value: %("Hill Valley"),
246
- add_comma: true,
247
- ),
248
- an_object_having_attributes(
227
+ tiered_lines =
228
+ described_class.inspect_object(
229
+ HashWithIndifferentAccess.new(
230
+ {
231
+ line_1: "123 Main St.",
232
+ city: "Hill Valley",
233
+ state: "CA",
234
+ zip: "90382"
235
+ }
236
+ ),
237
+ as_lines: true,
249
238
  type: :delete,
250
- indentation_level: 2,
251
- prefix: %("state" => ),
252
- value: %("CA"),
253
- add_comma: true,
254
- ),
255
- an_object_having_attributes(
256
- type: :delete,
257
- indentation_level: 2,
258
- prefix: %("zip" => ),
259
- value: %("90382"),
260
- add_comma: false,
261
- ),
262
- an_object_having_attributes(
263
- type: :delete,
264
- indentation_level: 1,
265
- value: %(}>),
266
- collection_bookend: :close,
267
- ),
268
- ])
239
+ indentation_level: 1
240
+ )
241
+ expect(tiered_lines).to match(
242
+ [
243
+ an_object_having_attributes(
244
+ type: :delete,
245
+ indentation_level: 1,
246
+ value: "#<HashWithIndifferentAccess {",
247
+ collection_bookend: :open
248
+ ),
249
+ an_object_having_attributes(
250
+ type: :delete,
251
+ indentation_level: 2,
252
+ prefix: %("line_1" => ),
253
+ value: %("123 Main St."),
254
+ add_comma: true
255
+ ),
256
+ an_object_having_attributes(
257
+ type: :delete,
258
+ indentation_level: 2,
259
+ prefix: %("city" => ),
260
+ value: %("Hill Valley"),
261
+ add_comma: true
262
+ ),
263
+ an_object_having_attributes(
264
+ type: :delete,
265
+ indentation_level: 2,
266
+ prefix: %("state" => ),
267
+ value: %("CA"),
268
+ add_comma: true
269
+ ),
270
+ an_object_having_attributes(
271
+ type: :delete,
272
+ indentation_level: 2,
273
+ prefix: %("zip" => ),
274
+ value: %("90382"),
275
+ add_comma: false
276
+ ),
277
+ an_object_having_attributes(
278
+ type: :delete,
279
+ indentation_level: 1,
280
+ value: "}>",
281
+ collection_bookend: :close
282
+ )
283
+ ]
284
+ )
269
285
  end
270
286
  end
271
287
  end