super_diff 0.9.0 → 0.10.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/README.md +65 -26
- data/lib/super_diff/active_record/differs/active_record_relation.rb +1 -2
- data/lib/super_diff/active_record/differs.rb +1 -1
- data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model.rb +5 -13
- data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation.rb +1 -3
- data/lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb +2 -2
- data/lib/super_diff/active_record/object_inspection.rb +1 -1
- data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +1 -2
- data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +1 -2
- data/lib/super_diff/active_record/operation_tree_builders.rb +2 -2
- data/lib/super_diff/active_record/operation_tree_flatteners.rb +1 -1
- data/lib/super_diff/active_record/operation_trees.rb +1 -1
- data/lib/super_diff/active_record.rb +7 -15
- data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +5 -6
- data/lib/super_diff/active_support/differs.rb +1 -1
- data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +3 -9
- data/lib/super_diff/active_support/object_inspection/inspection_tree_builders.rb +1 -1
- data/lib/super_diff/active_support/object_inspection.rb +1 -1
- data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +5 -6
- data/lib/super_diff/active_support/operation_tree_builders.rb +1 -1
- data/lib/super_diff/active_support/operation_tree_flatteners.rb +1 -1
- data/lib/super_diff/active_support/operation_trees.rb +1 -1
- data/lib/super_diff/active_support.rb +6 -11
- data/lib/super_diff/colorized_document_extensions.rb +2 -4
- data/lib/super_diff/configuration.rb +14 -8
- data/lib/super_diff/csi/color.rb +4 -4
- data/lib/super_diff/csi/colorized_document.rb +12 -16
- data/lib/super_diff/csi/document.rb +8 -19
- data/lib/super_diff/csi/eight_bit_color.rb +19 -19
- data/lib/super_diff/csi/four_bit_color.rb +82 -31
- data/lib/super_diff/csi/twenty_four_bit_color.rb +12 -11
- data/lib/super_diff/csi/uncolorized_document.rb +2 -6
- data/lib/super_diff/csi.rb +10 -14
- data/lib/super_diff/diff_formatters/collection.rb +35 -41
- data/lib/super_diff/differs/default_object.rb +1 -1
- data/lib/super_diff/differs/defaults.rb +1 -1
- data/lib/super_diff/differs/main.rb +2 -13
- data/lib/super_diff/equality_matchers/array.rb +10 -12
- data/lib/super_diff/equality_matchers/base.rb +1 -1
- data/lib/super_diff/equality_matchers/default.rb +2 -4
- data/lib/super_diff/equality_matchers/defaults.rb +1 -1
- data/lib/super_diff/equality_matchers/hash.rb +10 -12
- data/lib/super_diff/equality_matchers/multiline_string.rb +11 -13
- data/lib/super_diff/equality_matchers/primitive.rb +10 -12
- data/lib/super_diff/equality_matchers/singleline_string.rb +10 -12
- data/lib/super_diff/equality_matchers.rb +1 -1
- data/lib/super_diff/errors.rb +3 -3
- data/lib/super_diff/gem_version.rb +3 -3
- data/lib/super_diff/helpers.rb +10 -10
- data/lib/super_diff/implementation_checks.rb +2 -2
- data/lib/super_diff/line.rb +3 -3
- data/lib/super_diff/object_inspection/inspection_tree.rb +46 -60
- data/lib/super_diff/object_inspection/inspection_tree_builders/array.rb +2 -6
- data/lib/super_diff/object_inspection/inspection_tree_builders/custom_object.rb +3 -9
- data/lib/super_diff/object_inspection/inspection_tree_builders/default_object.rb +5 -14
- data/lib/super_diff/object_inspection/inspection_tree_builders/defaults.rb +1 -1
- data/lib/super_diff/object_inspection/inspection_tree_builders/hash.rb +4 -12
- data/lib/super_diff/object_inspection/inspection_tree_builders/time_like.rb +6 -23
- data/lib/super_diff/object_inspection/inspection_tree_builders.rb +9 -9
- data/lib/super_diff/object_inspection/nodes/as_lines_when_rendering_to_lines.rb +8 -20
- data/lib/super_diff/object_inspection/nodes/as_prefix_when_rendering_to_lines.rb +1 -5
- data/lib/super_diff/object_inspection/nodes/as_prelude_when_rendering_to_lines.rb +1 -5
- data/lib/super_diff/object_inspection/nodes/as_single_line.rb +3 -7
- data/lib/super_diff/object_inspection/nodes/base.rb +9 -14
- data/lib/super_diff/object_inspection/nodes/inspection.rb +26 -34
- data/lib/super_diff/object_inspection/nodes/nesting.rb +1 -1
- data/lib/super_diff/object_inspection/nodes/only_when.rb +2 -6
- data/lib/super_diff/object_inspection/nodes/text.rb +1 -5
- data/lib/super_diff/object_inspection/nodes/when_empty.rb +2 -6
- data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +2 -6
- data/lib/super_diff/object_inspection/nodes/when_rendering_to_lines.rb +1 -1
- data/lib/super_diff/object_inspection/nodes/when_rendering_to_string.rb +1 -5
- data/lib/super_diff/object_inspection/nodes.rb +7 -7
- data/lib/super_diff/object_inspection.rb +3 -3
- data/lib/super_diff/operation_tree_builders/array.rb +12 -11
- data/lib/super_diff/operation_tree_builders/base.rb +17 -15
- data/lib/super_diff/operation_tree_builders/custom_object.rb +8 -6
- data/lib/super_diff/operation_tree_builders/default_object.rb +29 -21
- data/lib/super_diff/operation_tree_builders/hash.rb +23 -24
- data/lib/super_diff/operation_tree_builders/main.rb +4 -11
- data/lib/super_diff/operation_tree_builders/multiline_string.rb +3 -3
- data/lib/super_diff/operation_tree_builders/time_like.rb +1 -11
- data/lib/super_diff/operation_tree_builders.rb +1 -1
- data/lib/super_diff/operation_tree_flatteners/base.rb +1 -5
- data/lib/super_diff/operation_tree_flatteners/collection.rb +13 -16
- data/lib/super_diff/operation_tree_flatteners/default_object.rb +1 -2
- data/lib/super_diff/operation_tree_flatteners/hash.rb +2 -10
- data/lib/super_diff/operation_tree_flatteners/multiline_string.rb +2 -1
- data/lib/super_diff/operation_tree_flatteners.rb +3 -3
- data/lib/super_diff/operation_trees/base.rb +3 -5
- data/lib/super_diff/operation_trees/default_object.rb +1 -3
- data/lib/super_diff/operations/binary_operation.rb +2 -2
- data/lib/super_diff/operations/unary_operation.rb +1 -1
- data/lib/super_diff/rails.rb +2 -1
- data/lib/super_diff/recursion_guard.rb +5 -4
- data/lib/super_diff/rspec/augmented_matcher.rb +4 -5
- data/lib/super_diff/rspec/differ.rb +6 -13
- data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +3 -2
- data/lib/super_diff/rspec/differs/collection_including.rb +1 -1
- data/lib/super_diff/rspec/differs/hash_including.rb +1 -1
- data/lib/super_diff/rspec/differs.rb +3 -3
- data/lib/super_diff/rspec/matcher_text_builders/base.rb +13 -15
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +5 -7
- data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +3 -5
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +1 -5
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +2 -6
- data/lib/super_diff/rspec/matcher_text_builders.rb +5 -8
- data/lib/super_diff/rspec/matcher_text_template.rb +13 -16
- data/lib/super_diff/rspec/monkey_patches.rb +122 -116
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_including.rb +8 -6
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +11 -16
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +2 -1
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/instance_of.rb +8 -6
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/kind_of.rb +8 -6
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +9 -9
- data/lib/super_diff/rspec/object_inspection.rb +1 -1
- data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +11 -10
- data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +7 -6
- data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +11 -10
- data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +22 -17
- data/lib/super_diff/rspec/operation_tree_builders.rb +4 -4
- data/lib/super_diff/rspec.rb +11 -13
- data/lib/super_diff/tiered_lines_elider.rb +87 -115
- data/lib/super_diff/tiered_lines_formatter.rb +5 -9
- data/lib/super_diff/version.rb +1 -1
- data/lib/super_diff.rb +4 -9
- data/spec/examples.txt +493 -485
- data/spec/integration/rails/active_record_spec.rb +3 -1
- data/spec/integration/rails/engines_spec.rb +20 -0
- data/spec/integration/rails/hash_with_indifferent_access_spec.rb +3 -1
- data/spec/integration/rspec/be_falsey_matcher_spec.rb +40 -35
- data/spec/integration/rspec/be_matcher_spec.rb +360 -320
- data/spec/integration/rspec/be_nil_matcher_spec.rb +38 -34
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +376 -359
- data/spec/integration/rspec/be_truthy_matcher_spec.rb +38 -33
- data/spec/integration/rspec/contain_exactly_matcher_spec.rb +242 -239
- data/spec/integration/rspec/eq_matcher_spec.rb +595 -557
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +294 -286
- data/spec/integration/rspec/have_predicate_matcher_spec.rb +291 -297
- data/spec/integration/rspec/include_matcher_spec.rb +317 -215
- data/spec/integration/rspec/match_array_matcher_spec.rb +276 -273
- data/spec/integration/rspec/match_matcher_spec.rb +847 -834
- data/spec/integration/rspec/raise_error_matcher_spec.rb +468 -453
- data/spec/integration/rspec/respond_to_matcher_spec.rb +702 -697
- data/spec/integration/rspec/third_party_matcher_spec.rb +142 -138
- data/spec/integration/rspec/unhandled_errors_spec.rb +88 -84
- data/spec/spec_helper.rb +17 -20
- data/spec/support/command_runner.rb +34 -57
- data/spec/support/integration/helpers.rb +35 -28
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +28 -23
- data/spec/support/integration/test_programs/base.rb +12 -17
- data/spec/support/integration/test_programs/plain.rb +6 -0
- data/spec/support/integration/test_programs/rspec_active_record.rb +4 -1
- data/spec/support/integration/test_programs/rspec_active_support.rb +4 -1
- data/spec/support/integration/test_programs/rspec_rails.rb +4 -1
- data/spec/support/integration/test_programs/rspec_rails_engine.rb +30 -0
- data/spec/support/models/active_record/person.rb +6 -4
- data/spec/support/models/active_record/shipping_address.rb +9 -10
- data/spec/support/models/customer.rb +2 -4
- data/spec/support/models/player.rb +3 -6
- data/spec/support/models/shipping_address.rb +4 -13
- data/spec/support/shared_examples/active_record.rb +232 -214
- data/spec/support/shared_examples/active_support.rb +53 -51
- data/spec/support/shared_examples/elided_diffs.rb +405 -381
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +424 -388
- data/spec/support/shared_examples/key.rb +123 -0
- data/spec/support/unit/helpers.rb +1 -3
- data/spec/support/unit/matchers/match_output.rb +12 -13
- data/spec/unit/active_record/object_inspection_spec.rb +222 -206
- data/spec/unit/equality_matchers/main_spec.rb +1049 -984
- data/spec/unit/helpers_spec.rb +14 -21
- data/spec/unit/operation_tree_flatteners/array_spec.rb +557 -524
- data/spec/unit/operation_tree_flatteners/custom_object_spec.rb +619 -601
- data/spec/unit/operation_tree_flatteners/default_object_spec.rb +619 -621
- data/spec/unit/operation_tree_flatteners/hash_spec.rb +595 -556
- data/spec/unit/operation_tree_flatteners/multiline_string_spec.rb +102 -92
- data/spec/unit/rspec/matchers/be_compared_to_spec.rb +3 -3
- data/spec/unit/rspec/matchers/be_predicate_spec.rb +3 -3
- data/spec/unit/rspec/matchers/contain_exactly_spec.rb +1 -1
- data/spec/unit/rspec/matchers/have_attributes_spec.rb +1 -1
- data/spec/unit/rspec/matchers/have_predicate_spec.rb +2 -2
- data/spec/unit/rspec/matchers/include_spec.rb +2 -2
- data/spec/unit/rspec/matchers/match_array_spec.rb +2 -2
- data/spec/unit/rspec/matchers/raise_error_spec.rb +5 -5
- data/spec/unit/rspec/matchers/respond_to_spec.rb +23 -16
- data/spec/unit/rspec/object_inspection_spec.rb +349 -324
- data/spec/unit/super_diff_spec.rb +1542 -1449
- data/spec/unit/tiered_lines_elider_spec.rb +3508 -3536
- data/spec/unit/tiered_lines_formatter_spec.rb +54 -116
- data/super_diff.gemspec +13 -12
- metadata +73 -73
- data/spec/tmp/warnings_logger/all_warnings.txt +0 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb5307b0f4dab85f765805443f6315ea45ec58d81f94211292326e32b98e1539
|
4
|
+
data.tar.gz: 3af49d5f9a3d7396828fdc6c1b74cd8e4103ff35fc2ebced5dbef15071fe0bab
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 9aea5c125c0dbde9f754f4d0fd72dd20142cfe4f49077d9f7ab7e47994ea09297c5f58fc3cd59f564fe9534e17ae7e2a062433c03830dc3d209ee2217d503270
|
7
|
+
data.tar.gz: f1f31c074ce8f043f7ac72127b5bd46158433a5ec6af3a0b79250f08e276fba8d1936b5ed5a09e2134e1ee3e4087b7bec36535da556f7b0b04953690edb949b9
|
data/README.md
CHANGED
@@ -2,7 +2,7 @@
|
|
2
2
|
|
3
3
|
[version-badge]: http://img.shields.io/gem/v/super_diff.svg
|
4
4
|
[rubygems]: http://rubygems.org/gems/super_diff
|
5
|
-
[gh-actions-badge]:
|
5
|
+
[gh-actions-badge]: https://img.shields.io/github/actions/workflow/status/mcmire/super_diff/super_diff.yml?branch=master
|
6
6
|
[downloads-badge]: http://img.shields.io/gem/dtv/super_diff.svg
|
7
7
|
[hound]: https://houndci.com
|
8
8
|
[issuehunt-badge]: https://img.shields.io/badge/sponsored_through-IssueHunt-2EC28C
|
@@ -36,7 +36,7 @@ the output it produces leaves much to be desired.
|
|
36
36
|
For instance,
|
37
37
|
let's say you wanted to compare these two hashes:
|
38
38
|
|
39
|
-
```
|
39
|
+
```ruby
|
40
40
|
actual = {
|
41
41
|
customer: {
|
42
42
|
person: SuperDiff::Test::Person.new(name: "Marty McFly, Jr.", age: 17),
|
@@ -48,11 +48,7 @@ actual = {
|
|
48
48
|
}
|
49
49
|
},
|
50
50
|
items: [
|
51
|
-
{
|
52
|
-
name: "Fender Stratocaster",
|
53
|
-
cost: 100_000,
|
54
|
-
options: ["red", "blue", "green"]
|
55
|
-
},
|
51
|
+
{ name: "Fender Stratocaster", cost: 100_000, options: %w[red blue green] },
|
56
52
|
{ name: "Mattel Hoverboard" }
|
57
53
|
]
|
58
54
|
}
|
@@ -68,11 +64,7 @@ expected = {
|
|
68
64
|
}
|
69
65
|
},
|
70
66
|
items: [
|
71
|
-
{
|
72
|
-
name: "Fender Stratocaster",
|
73
|
-
cost: 100_000,
|
74
|
-
options: ["red", "blue", "green"]
|
75
|
-
},
|
67
|
+
{ name: "Fender Stratocaster", cost: 100_000, options: %w[red blue green] },
|
76
68
|
{ name: "Chevy 4x4" }
|
77
69
|
]
|
78
70
|
}
|
@@ -80,7 +72,7 @@ expected = {
|
|
80
72
|
|
81
73
|
If, somewhere in a test, you were to say:
|
82
74
|
|
83
|
-
```
|
75
|
+
```ruby
|
84
76
|
expect(actual).to eq(expected)
|
85
77
|
```
|
86
78
|
|
@@ -107,7 +99,7 @@ depending on your type of project.
|
|
107
99
|
If you're developing a Rails app,
|
108
100
|
add the following to your Gemfile:
|
109
101
|
|
110
|
-
```
|
102
|
+
```ruby
|
111
103
|
group :test do
|
112
104
|
gem "super_diff"
|
113
105
|
end
|
@@ -116,7 +108,7 @@ end
|
|
116
108
|
After running `bundle install`,
|
117
109
|
add the following to your `rails_helper`:
|
118
110
|
|
119
|
-
```
|
111
|
+
```ruby
|
120
112
|
require "super_diff/rspec-rails"
|
121
113
|
```
|
122
114
|
|
@@ -126,14 +118,14 @@ If you're developing an app using Hanami or Sinatra,
|
|
126
118
|
or merely using a part of Rails such as ActiveModel,
|
127
119
|
add the following to your Gemfile where appropriate:
|
128
120
|
|
129
|
-
```
|
121
|
+
```ruby
|
130
122
|
gem "super_diff"
|
131
123
|
```
|
132
124
|
|
133
125
|
After running `bundle install`,
|
134
126
|
add the following to your `spec_helper`:
|
135
127
|
|
136
|
-
```
|
128
|
+
```ruby
|
137
129
|
require "super_diff/rspec"
|
138
130
|
require "super_diff/active_support"
|
139
131
|
```
|
@@ -143,13 +135,13 @@ require "super_diff/active_support"
|
|
143
135
|
If you're developing a gem,
|
144
136
|
add the following to your gemspec:
|
145
137
|
|
146
|
-
```
|
138
|
+
```ruby
|
147
139
|
spec.add_development_dependency "super_diff"
|
148
140
|
```
|
149
141
|
|
150
142
|
Now add the following to your `spec_helper`:
|
151
143
|
|
152
|
-
```
|
144
|
+
```ruby
|
153
145
|
require "super_diff/rspec"
|
154
146
|
```
|
155
147
|
|
@@ -161,7 +153,7 @@ to your test helper file
|
|
161
153
|
(`rails_helper` or `spec_helper`)
|
162
154
|
which looks something like this:
|
163
155
|
|
164
|
-
```
|
156
|
+
```ruby
|
165
157
|
SuperDiff.configure do |config|
|
166
158
|
# ...
|
167
159
|
end
|
@@ -172,7 +164,7 @@ end
|
|
172
164
|
If you don't like the colors that SuperDiff uses,
|
173
165
|
you can change them like this:
|
174
166
|
|
175
|
-
```
|
167
|
+
```ruby
|
176
168
|
SuperDiff.configure do |config|
|
177
169
|
config.actual_color = :green
|
178
170
|
config.expected_color = :red
|
@@ -184,6 +176,53 @@ end
|
|
184
176
|
See [eight_bit_color.rb](lib/super_diff/csi/eight_bit_color.rb)
|
185
177
|
for the list of available colors.
|
186
178
|
|
179
|
+
You can also completely disable colorized output.
|
180
|
+
|
181
|
+
<!-- prettier-ignore-start -->
|
182
|
+
```ruby
|
183
|
+
SuperDiff.configure do |config|
|
184
|
+
config.color_enabled = false
|
185
|
+
end
|
186
|
+
```
|
187
|
+
<!-- prettier-ignore-end -->
|
188
|
+
|
189
|
+
### Disabling the key
|
190
|
+
|
191
|
+
You can disable the key by changing the following config (default: true):
|
192
|
+
|
193
|
+
<!-- prettier-ignore-start -->
|
194
|
+
```ruby
|
195
|
+
SuperDiff.configure do |config|
|
196
|
+
config.key_enabled = false
|
197
|
+
end
|
198
|
+
```
|
199
|
+
<!-- prettier-ignore-end -->
|
200
|
+
|
201
|
+
### Hiding unimportant lines
|
202
|
+
|
203
|
+
When looking at a large diff for which many of the lines do not change,
|
204
|
+
it can be difficult to locate the lines which do. Text-oriented
|
205
|
+
diffs such as those you get from a conventional version control system
|
206
|
+
solve this problem by removing those unchanged lines from the diff
|
207
|
+
entirely. The same can be done in SuperDiff.
|
208
|
+
|
209
|
+
```ruby
|
210
|
+
SuperDiff.configure do |config|
|
211
|
+
config.diff_elision_enabled = false
|
212
|
+
config.diff_elision_maximum = 3
|
213
|
+
end
|
214
|
+
```
|
215
|
+
|
216
|
+
- `diff_elision_enabled` — The elision logic is disabled by default so
|
217
|
+
as not to surprise people, so setting this to `true` will turn it on.
|
218
|
+
- `diff_elision_maximum` — This number controls what happens to
|
219
|
+
unchanged lines (i.e. lines that are neither "insert" lines nor
|
220
|
+
"delete" lines) that are in between changed lines. If a section of
|
221
|
+
unchanged lines is beyond this number, the gem will elide (a fancy
|
222
|
+
word for remove) the data structures within that section as much as
|
223
|
+
possible until the limit is reached or it cannot go further. Elided
|
224
|
+
lines are replaced with a `# ...` marker.
|
225
|
+
|
187
226
|
### Diffing custom objects
|
188
227
|
|
189
228
|
If you are comparing two data structures
|
@@ -197,7 +236,7 @@ of key pieces involved in the diffing process.
|
|
197
236
|
I'll have more about how that works soon,
|
198
237
|
but here is what such a configuration would look like:
|
199
238
|
|
200
|
-
```
|
239
|
+
```ruby
|
201
240
|
SuperDiff.configure do |config|
|
202
241
|
config.add_extra_differ_class(YourDiffer)
|
203
242
|
config.add_extra_operation_tree_builder_class(YourOperationTreeBuilder)
|
@@ -231,9 +270,9 @@ I'll get notified right away!
|
|
231
270
|
## Compatibility
|
232
271
|
|
233
272
|
`super_diff` is [tested][gh-actions] to work with
|
234
|
-
Ruby >=
|
273
|
+
Ruby >= 3.x,
|
235
274
|
RSpec 3.x,
|
236
|
-
and Rails >=
|
275
|
+
and Rails >= 6.x.
|
237
276
|
|
238
277
|
[gh-actions]: https://github.com/mcmire/super_diff/actions?query=workflow%3ASuperDiff
|
239
278
|
|
@@ -242,10 +281,10 @@ and Rails >= 5.x.
|
|
242
281
|
In developing this gem
|
243
282
|
I made use of or was heavily inspired by these libraries:
|
244
283
|
|
245
|
-
|
284
|
+
- [Diff::LCS][diff-lcs],
|
246
285
|
the library I started with in the [original version of this gem][original-version]
|
247
286
|
(made in 2011!)
|
248
|
-
|
287
|
+
- The pretty-printing algorithms and API within [PrettyPrinter][pretty-printer] and [AwesomePrint][awesome-print],
|
249
288
|
from which I borrowed ideas to develop the [inspectors][inspection-tree].
|
250
289
|
|
251
290
|
Thank you to the authors of these libraries!
|
@@ -3,8 +3,7 @@ module SuperDiff
|
|
3
3
|
module Differs
|
4
4
|
class ActiveRecordRelation < SuperDiff::Differs::Base
|
5
5
|
def self.applies_to?(expected, actual)
|
6
|
-
expected.is_a?(::Array) &&
|
7
|
-
actual.is_a?(::ActiveRecord::Relation)
|
6
|
+
expected.is_a?(::Array) && actual.is_a?(::ActiveRecord::Relation)
|
8
7
|
end
|
9
8
|
|
10
9
|
protected
|
data/lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model.rb
CHANGED
@@ -10,31 +10,23 @@ module SuperDiff
|
|
10
10
|
def call
|
11
11
|
SuperDiff::ObjectInspection::InspectionTree.new do
|
12
12
|
as_lines_when_rendering_to_lines(collection_bookend: :open) do
|
13
|
-
add_text
|
14
|
-
"#<#{object.class} "
|
15
|
-
end
|
13
|
+
add_text { |object| "#<#{object.class} " }
|
16
14
|
|
17
|
-
when_rendering_to_lines
|
18
|
-
add_text "{"
|
19
|
-
end
|
15
|
+
when_rendering_to_lines { add_text "{" }
|
20
16
|
end
|
21
17
|
|
22
18
|
nested do |object|
|
23
19
|
insert_separated_list(
|
24
|
-
["id"] + (object.attributes.keys.sort - ["id"])
|
20
|
+
["id"] + (object.attributes.keys.sort - ["id"])
|
25
21
|
) do |name|
|
26
|
-
as_prefix_when_rendering_to_lines
|
27
|
-
add_text "#{name}: "
|
28
|
-
end
|
22
|
+
as_prefix_when_rendering_to_lines { add_text "#{name}: " }
|
29
23
|
|
30
24
|
add_inspection_of object.read_attribute(name)
|
31
25
|
end
|
32
26
|
end
|
33
27
|
|
34
28
|
as_lines_when_rendering_to_lines(collection_bookend: :close) do
|
35
|
-
when_rendering_to_lines
|
36
|
-
add_text "}"
|
37
|
-
end
|
29
|
+
when_rendering_to_lines { add_text "}" }
|
38
30
|
|
39
31
|
add_text ">"
|
40
32
|
end
|
@@ -13,9 +13,7 @@ module SuperDiff
|
|
13
13
|
add_text "#<ActiveRecord::Relation ["
|
14
14
|
end
|
15
15
|
|
16
|
-
nested
|
17
|
-
insert_array_inspection_of(array)
|
18
|
-
end
|
16
|
+
nested { |array| insert_array_inspection_of(array) }
|
19
17
|
|
20
18
|
as_lines_when_rendering_to_lines(collection_bookend: :close) do
|
21
19
|
add_text "]>"
|
@@ -4,11 +4,11 @@ module SuperDiff
|
|
4
4
|
module InspectionTreeBuilders
|
5
5
|
autoload(
|
6
6
|
:ActiveRecordModel,
|
7
|
-
"super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model"
|
7
|
+
"super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model"
|
8
8
|
)
|
9
9
|
autoload(
|
10
10
|
:ActiveRecordRelation,
|
11
|
-
"super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation"
|
11
|
+
"super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation"
|
12
12
|
)
|
13
13
|
end
|
14
14
|
end
|
@@ -4,8 +4,7 @@ module SuperDiff
|
|
4
4
|
class ActiveRecordModel < SuperDiff::OperationTreeBuilders::CustomObject
|
5
5
|
def self.applies_to?(expected, actual)
|
6
6
|
expected.is_a?(::ActiveRecord::Base) &&
|
7
|
-
actual.is_a?(::ActiveRecord::Base) &&
|
8
|
-
expected.class == actual.class
|
7
|
+
actual.is_a?(::ActiveRecord::Base) && expected.class == actual.class
|
9
8
|
end
|
10
9
|
|
11
10
|
protected
|
@@ -3,8 +3,7 @@ module SuperDiff
|
|
3
3
|
module OperationTreeBuilders
|
4
4
|
class ActiveRecordRelation < SuperDiff::OperationTreeBuilders::Array
|
5
5
|
def self.applies_to?(expected, actual)
|
6
|
-
expected.is_a?(::Array) &&
|
7
|
-
actual.is_a?(::ActiveRecord::Relation)
|
6
|
+
expected.is_a?(::Array) && actual.is_a?(::ActiveRecord::Relation)
|
8
7
|
end
|
9
8
|
|
10
9
|
def initialize(actual:, **rest)
|
@@ -3,11 +3,11 @@ module SuperDiff
|
|
3
3
|
module OperationTreeBuilders
|
4
4
|
autoload(
|
5
5
|
:ActiveRecordModel,
|
6
|
-
"super_diff/active_record/operation_tree_builders/active_record_model"
|
6
|
+
"super_diff/active_record/operation_tree_builders/active_record_model"
|
7
7
|
)
|
8
8
|
autoload(
|
9
9
|
:ActiveRecordRelation,
|
10
|
-
"super_diff/active_record/operation_tree_builders/active_record_relation"
|
10
|
+
"super_diff/active_record/operation_tree_builders/active_record_relation"
|
11
11
|
)
|
12
12
|
end
|
13
13
|
end
|
@@ -3,34 +3,26 @@ require "super_diff/active_support"
|
|
3
3
|
module SuperDiff
|
4
4
|
module ActiveRecord
|
5
5
|
autoload :Differs, "super_diff/active_record/differs"
|
6
|
-
autoload(
|
7
|
-
|
8
|
-
"super_diff/active_record/object_inspection",
|
9
|
-
)
|
10
|
-
autoload(
|
11
|
-
:OperationTrees,
|
12
|
-
"super_diff/active_record/operation_trees",
|
13
|
-
)
|
6
|
+
autoload(:ObjectInspection, "super_diff/active_record/object_inspection")
|
7
|
+
autoload(:OperationTrees, "super_diff/active_record/operation_trees")
|
14
8
|
autoload(
|
15
9
|
:OperationTreeBuilders,
|
16
|
-
"super_diff/active_record/operation_tree_builders"
|
10
|
+
"super_diff/active_record/operation_tree_builders"
|
17
11
|
)
|
18
12
|
autoload(
|
19
13
|
:OperationTreeFlatteners,
|
20
|
-
"super_diff/active_record/operation_tree_flatteners"
|
14
|
+
"super_diff/active_record/operation_tree_flatteners"
|
21
15
|
)
|
22
16
|
|
23
17
|
SuperDiff.configure do |config|
|
24
|
-
config.add_extra_differ_classes(
|
25
|
-
Differs::ActiveRecordRelation,
|
26
|
-
)
|
18
|
+
config.add_extra_differ_classes(Differs::ActiveRecordRelation)
|
27
19
|
config.add_extra_operation_tree_builder_classes(
|
28
20
|
OperationTreeBuilders::ActiveRecordModel,
|
29
|
-
OperationTreeBuilders::ActiveRecordRelation
|
21
|
+
OperationTreeBuilders::ActiveRecordRelation
|
30
22
|
)
|
31
23
|
config.add_extra_inspection_tree_builder_classes(
|
32
24
|
ObjectInspection::InspectionTreeBuilders::ActiveRecordModel,
|
33
|
-
ObjectInspection::InspectionTreeBuilders::ActiveRecordRelation
|
25
|
+
ObjectInspection::InspectionTreeBuilders::ActiveRecordRelation
|
34
26
|
)
|
35
27
|
end
|
36
28
|
end
|
@@ -4,13 +4,12 @@ module SuperDiff
|
|
4
4
|
class HashWithIndifferentAccess < SuperDiff::Differs::Hash
|
5
5
|
def self.applies_to?(expected, actual)
|
6
6
|
(
|
7
|
-
expected.is_a?(::HashWithIndifferentAccess) &&
|
8
|
-
actual.is_a?(::Hash)
|
7
|
+
expected.is_a?(::HashWithIndifferentAccess) && actual.is_a?(::Hash)
|
9
8
|
) ||
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
(
|
10
|
+
expected.is_a?(::Hash) &&
|
11
|
+
actual.is_a?(::HashWithIndifferentAccess)
|
12
|
+
)
|
14
13
|
end
|
15
14
|
|
16
15
|
protected
|
@@ -13,17 +13,11 @@ module SuperDiff
|
|
13
13
|
add_text "#<HashWithIndifferentAccess {"
|
14
14
|
end
|
15
15
|
|
16
|
-
when_rendering_to_string
|
17
|
-
add_text " "
|
18
|
-
end
|
16
|
+
when_rendering_to_string { add_text " " }
|
19
17
|
|
20
|
-
nested
|
21
|
-
insert_hash_inspection_of(hash)
|
22
|
-
end
|
18
|
+
nested { |hash| insert_hash_inspection_of(hash) }
|
23
19
|
|
24
|
-
when_rendering_to_string
|
25
|
-
add_text " "
|
26
|
-
end
|
20
|
+
when_rendering_to_string { add_text " " }
|
27
21
|
|
28
22
|
as_lines_when_rendering_to_lines(collection_bookend: :close) do
|
29
23
|
add_text "}>"
|
@@ -4,7 +4,7 @@ module SuperDiff
|
|
4
4
|
module InspectionTreeBuilders
|
5
5
|
autoload(
|
6
6
|
:HashWithIndifferentAccess,
|
7
|
-
"super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access"
|
7
|
+
"super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access"
|
8
8
|
)
|
9
9
|
end
|
10
10
|
end
|
@@ -4,13 +4,12 @@ module SuperDiff
|
|
4
4
|
class HashWithIndifferentAccess < SuperDiff::OperationTreeBuilders::Hash
|
5
5
|
def self.applies_to?(expected, actual)
|
6
6
|
(
|
7
|
-
expected.is_a?(::HashWithIndifferentAccess) &&
|
8
|
-
actual.is_a?(::Hash)
|
7
|
+
expected.is_a?(::HashWithIndifferentAccess) && actual.is_a?(::Hash)
|
9
8
|
) ||
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
9
|
+
(
|
10
|
+
expected.is_a?(::Hash) &&
|
11
|
+
actual.is_a?(::HashWithIndifferentAccess)
|
12
|
+
)
|
14
13
|
end
|
15
14
|
|
16
15
|
def initialize(expected:, actual:, **rest)
|
@@ -3,7 +3,7 @@ module SuperDiff
|
|
3
3
|
module OperationTreeBuilders
|
4
4
|
autoload(
|
5
5
|
:HashWithIndifferentAccess,
|
6
|
-
"super_diff/active_support/operation_tree_builders/hash_with_indifferent_access"
|
6
|
+
"super_diff/active_support/operation_tree_builders/hash_with_indifferent_access"
|
7
7
|
)
|
8
8
|
end
|
9
9
|
end
|
@@ -3,7 +3,7 @@ module SuperDiff
|
|
3
3
|
module OperationTreeFlatteners
|
4
4
|
autoload(
|
5
5
|
:HashWithIndifferentAccess,
|
6
|
-
"super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access"
|
6
|
+
"super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access"
|
7
7
|
)
|
8
8
|
end
|
9
9
|
end
|
@@ -2,28 +2,23 @@ module SuperDiff
|
|
2
2
|
module ActiveSupport
|
3
3
|
autoload :Differs, "super_diff/active_support/differs"
|
4
4
|
autoload :ObjectInspection, "super_diff/active_support/object_inspection"
|
5
|
-
autoload(
|
6
|
-
:OperationTrees,
|
7
|
-
"super_diff/active_support/operation_trees",
|
8
|
-
)
|
5
|
+
autoload(:OperationTrees, "super_diff/active_support/operation_trees")
|
9
6
|
autoload(
|
10
7
|
:OperationTreeBuilders,
|
11
|
-
"super_diff/active_support/operation_tree_builders"
|
8
|
+
"super_diff/active_support/operation_tree_builders"
|
12
9
|
)
|
13
10
|
autoload(
|
14
11
|
:OperationTreeFlatteners,
|
15
|
-
"super_diff/active_support/operation_tree_flatteners"
|
12
|
+
"super_diff/active_support/operation_tree_flatteners"
|
16
13
|
)
|
17
14
|
|
18
15
|
SuperDiff.configure do |config|
|
19
|
-
config.add_extra_differ_classes(
|
20
|
-
Differs::HashWithIndifferentAccess,
|
21
|
-
)
|
16
|
+
config.add_extra_differ_classes(Differs::HashWithIndifferentAccess)
|
22
17
|
config.add_extra_operation_tree_builder_classes(
|
23
|
-
OperationTreeBuilders::HashWithIndifferentAccess
|
18
|
+
OperationTreeBuilders::HashWithIndifferentAccess
|
24
19
|
)
|
25
20
|
config.add_extra_inspection_tree_builder_classes(
|
26
|
-
ObjectInspection::InspectionTreeBuilders::HashWithIndifferentAccess
|
21
|
+
ObjectInspection::InspectionTreeBuilders::HashWithIndifferentAccess
|
27
22
|
)
|
28
23
|
end
|
29
24
|
end
|
@@ -1,12 +1,10 @@
|
|
1
1
|
module SuperDiff
|
2
2
|
module ColorizedDocumentExtensions
|
3
3
|
def self.extended(extendee)
|
4
|
-
extendee.singleton_class.class_eval
|
5
|
-
alias_method :normal, :text
|
6
|
-
end
|
4
|
+
extendee.singleton_class.class_eval { alias_method :normal, :text }
|
7
5
|
end
|
8
6
|
|
9
|
-
[
|
7
|
+
%i[actual border elision_marker expected header].each do |method_name|
|
10
8
|
define_method(method_name) do |*args, **opts, &block|
|
11
9
|
colorize(
|
12
10
|
*args,
|