super_diff 0.5.3 → 0.8.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 +46 -20
- data/lib/super_diff.rb +46 -7
- data/lib/super_diff/active_record.rb +7 -7
- data/lib/super_diff/active_record/differs/active_record_relation.rb +3 -13
- data/lib/super_diff/active_record/object_inspection.rb +2 -6
- data/lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb +16 -0
- data/lib/super_diff/active_record/object_inspection/{inspectors → inspection_tree_builders}/active_record_model.rb +19 -20
- data/lib/super_diff/active_record/object_inspection/{inspectors → inspection_tree_builders}/active_record_relation.rb +9 -8
- data/lib/super_diff/active_record/operation_tree_flatteners.rb +10 -0
- data/lib/super_diff/active_record/operation_tree_flatteners/active_record_relation.rb +17 -0
- data/lib/super_diff/active_record/operation_trees/active_record_relation.rb +8 -7
- data/lib/super_diff/active_support.rb +8 -8
- data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +3 -13
- data/lib/super_diff/active_support/object_inspection.rb +2 -6
- data/lib/super_diff/active_support/object_inspection/{inspectors.rb → inspection_tree_builders.rb} +2 -2
- data/lib/super_diff/active_support/object_inspection/inspection_tree_builders/hash_with_indifferent_access.rb +37 -0
- data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +17 -0
- data/lib/super_diff/active_support/operation_tree_flatteners.rb +10 -0
- data/lib/super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access.rb +17 -0
- data/lib/super_diff/active_support/operation_trees/hash_with_indifferent_access.rb +4 -7
- data/lib/super_diff/colorized_document_extensions.rb +9 -6
- data/lib/super_diff/configuration.rb +102 -19
- data/lib/super_diff/csi.rb +1 -1
- data/lib/super_diff/csi/four_bit_color.rb +0 -2
- data/lib/super_diff/diff_formatters/collection.rb +2 -2
- data/lib/super_diff/diff_formatters/multiline_string.rb +4 -4
- data/lib/super_diff/differs/array.rb +1 -1
- data/lib/super_diff/differs/base.rb +3 -21
- data/lib/super_diff/differs/custom_object.rb +1 -1
- data/lib/super_diff/differs/default_object.rb +1 -1
- data/lib/super_diff/differs/hash.rb +1 -1
- data/lib/super_diff/differs/main.rb +1 -7
- data/lib/super_diff/differs/multiline_string.rb +1 -1
- data/lib/super_diff/differs/time_like.rb +1 -1
- data/lib/super_diff/equality_matchers/array.rb +4 -4
- data/lib/super_diff/equality_matchers/default.rb +4 -4
- data/lib/super_diff/equality_matchers/hash.rb +4 -4
- data/lib/super_diff/equality_matchers/multiline_string.rb +4 -4
- data/lib/super_diff/equality_matchers/primitive.rb +6 -9
- data/lib/super_diff/equality_matchers/singleline_string.rb +4 -4
- data/lib/super_diff/gem_version.rb +45 -0
- data/lib/super_diff/helpers.rb +52 -2
- data/lib/super_diff/line.rb +83 -0
- data/lib/super_diff/object_inspection.rb +12 -9
- data/lib/super_diff/object_inspection/inspection_tree.rb +183 -81
- data/lib/super_diff/object_inspection/inspection_tree_builders.rb +44 -0
- data/lib/super_diff/object_inspection/inspection_tree_builders/array.rb +38 -0
- data/lib/super_diff/object_inspection/inspection_tree_builders/base.rb +27 -0
- data/lib/super_diff/object_inspection/inspection_tree_builders/custom_object.rb +37 -0
- data/lib/super_diff/object_inspection/inspection_tree_builders/default_object.rb +63 -0
- data/lib/super_diff/object_inspection/{inspectors → inspection_tree_builders}/defaults.rb +1 -2
- data/lib/super_diff/object_inspection/inspection_tree_builders/hash.rb +46 -0
- data/lib/super_diff/object_inspection/{inspectors → inspection_tree_builders}/main.rb +5 -10
- data/lib/super_diff/object_inspection/inspection_tree_builders/primitive.rb +21 -0
- data/lib/super_diff/object_inspection/inspection_tree_builders/time_like.rb +64 -0
- data/lib/super_diff/object_inspection/nodes.rb +33 -32
- data/lib/super_diff/object_inspection/nodes/as_lines_when_rendering_to_lines.rb +97 -0
- data/lib/super_diff/object_inspection/nodes/as_prefix_when_rendering_to_lines.rb +27 -0
- data/lib/super_diff/object_inspection/nodes/as_prelude_when_rendering_to_lines.rb +27 -0
- data/lib/super_diff/object_inspection/nodes/as_single_line.rb +33 -0
- data/lib/super_diff/object_inspection/nodes/base.rb +55 -20
- data/lib/super_diff/object_inspection/nodes/inspection.rb +47 -7
- data/lib/super_diff/object_inspection/nodes/nesting.rb +16 -5
- data/lib/super_diff/object_inspection/nodes/only_when.rb +54 -0
- data/lib/super_diff/object_inspection/nodes/text.rb +16 -2
- data/lib/super_diff/object_inspection/nodes/when_empty.rb +21 -6
- data/lib/super_diff/object_inspection/nodes/when_non_empty.rb +20 -5
- data/lib/super_diff/object_inspection/nodes/when_rendering_to_lines.rb +27 -0
- data/lib/super_diff/object_inspection/nodes/when_rendering_to_string.rb +27 -0
- data/lib/super_diff/object_inspection/prefix_for_next_node.rb +6 -0
- data/lib/super_diff/object_inspection/prelude_for_next_node.rb +6 -0
- data/lib/super_diff/operation_tree_builders/array.rb +7 -10
- data/lib/super_diff/operation_tree_builders/base.rb +6 -6
- data/lib/super_diff/operation_tree_builders/custom_object.rb +5 -2
- data/lib/super_diff/operation_tree_builders/default_object.rb +1 -1
- data/lib/super_diff/operation_tree_builders/defaults.rb +1 -1
- data/lib/super_diff/operation_tree_builders/hash.rb +1 -8
- data/lib/super_diff/operation_tree_builders/multiline_string.rb +2 -6
- data/lib/super_diff/operation_tree_builders/time_like.rb +2 -2
- data/lib/super_diff/operation_tree_flatteners.rb +20 -0
- data/lib/super_diff/operation_tree_flatteners/array.rb +15 -0
- data/lib/super_diff/operation_tree_flatteners/base.rb +54 -0
- data/lib/super_diff/operation_tree_flatteners/collection.rb +139 -0
- data/lib/super_diff/operation_tree_flatteners/custom_object.rb +28 -0
- data/lib/super_diff/operation_tree_flatteners/default_object.rb +32 -0
- data/lib/super_diff/operation_tree_flatteners/hash.rb +41 -0
- data/lib/super_diff/operation_tree_flatteners/multiline_string.rb +17 -0
- data/lib/super_diff/operation_trees/array.rb +4 -7
- data/lib/super_diff/operation_trees/base.rb +39 -16
- data/lib/super_diff/operation_trees/custom_object.rb +4 -8
- data/lib/super_diff/operation_trees/default_object.rb +28 -13
- data/lib/super_diff/operation_trees/hash.rb +4 -7
- data/lib/super_diff/operation_trees/main.rb +1 -1
- data/lib/super_diff/operation_trees/multiline_string.rb +4 -7
- data/lib/super_diff/operations/binary_operation.rb +1 -6
- data/lib/super_diff/operations/unary_operation.rb +2 -30
- data/lib/super_diff/recursion_guard.rb +3 -3
- data/lib/super_diff/rspec.rb +41 -13
- data/lib/super_diff/rspec/differs/collection_including.rb +4 -2
- data/lib/super_diff/rspec/differs/hash_including.rb +4 -2
- data/lib/super_diff/rspec/matcher_text_builders/base.rb +7 -7
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +6 -6
- data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +4 -4
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +5 -5
- data/lib/super_diff/rspec/monkey_patches.rb +353 -306
- data/lib/super_diff/rspec/object_inspection.rb +4 -1
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders.rb +44 -0
- data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/collection_containing_exactly.rb +9 -8
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/collection_including.rb +34 -0
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/double.rb +103 -0
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/hash_including.rb +36 -0
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/instance_of.rb +26 -0
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/kind_of.rb +26 -0
- data/lib/super_diff/rspec/object_inspection/{inspectors → inspection_tree_builders}/object_having_attributes.rb +10 -12
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/primitive.rb +10 -0
- data/lib/super_diff/rspec/object_inspection/inspection_tree_builders/value_within.rb +33 -0
- data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +12 -4
- data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +10 -3
- data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +10 -3
- data/lib/super_diff/tiered_lines.rb +4 -0
- data/lib/super_diff/tiered_lines_elider.rb +490 -0
- data/lib/super_diff/tiered_lines_formatter.rb +79 -0
- data/lib/super_diff/version.rb +1 -1
- data/spec/examples.txt +407 -5
- data/spec/integration/rails/active_support_spec.rb +19 -0
- data/spec/integration/rspec/be_falsey_matcher_spec.rb +10 -10
- data/spec/integration/rspec/be_matcher_spec.rb +100 -100
- data/spec/integration/rspec/be_nil_matcher_spec.rb +10 -10
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +103 -103
- data/spec/integration/rspec/be_truthy_matcher_spec.rb +10 -10
- data/spec/integration/rspec/contain_exactly_matcher_spec.rb +113 -107
- data/spec/integration/rspec/eq_matcher_spec.rb +223 -277
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +138 -129
- data/spec/integration/rspec/have_predicate_matcher_spec.rb +65 -65
- data/spec/integration/rspec/include_matcher_spec.rb +73 -73
- data/spec/integration/rspec/match_array_matcher_spec.rb +126 -119
- data/spec/integration/rspec/match_matcher_spec.rb +362 -274
- data/spec/integration/rspec/raise_error_matcher_spec.rb +86 -86
- data/spec/integration/rspec/respond_to_matcher_spec.rb +240 -240
- data/spec/integration/rspec/third_party_matcher_spec.rb +8 -8
- data/spec/integration/rspec/unhandled_errors_spec.rb +5 -5
- data/spec/spec_helper.rb +33 -13
- data/spec/support/command_runner.rb +15 -25
- data/spec/support/helpers.rb +21 -0
- data/spec/support/integration/helpers.rb +8 -2
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +4 -4
- data/spec/support/integration/test_programs/base.rb +38 -10
- data/spec/support/integration/test_programs/rspec_active_record.rb +1 -1
- data/spec/support/integration/test_programs/rspec_active_support.rb +17 -0
- data/spec/support/integration/test_programs/rspec_rails.rb +1 -1
- data/spec/support/shared_examples/active_record.rb +109 -108
- data/spec/support/shared_examples/active_support.rb +65 -0
- data/spec/support/shared_examples/elided_diffs.rb +914 -0
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +196 -232
- data/spec/support/unit/helpers.rb +15 -0
- data/spec/support/unit/matchers/match_output.rb +41 -0
- data/spec/unit/active_record/object_inspection_spec.rb +273 -0
- data/spec/unit/equality_matchers/main_spec.rb +445 -465
- data/spec/unit/helpers_spec.rb +61 -0
- data/spec/unit/operation_tree_flatteners/array_spec.rb +604 -0
- data/spec/unit/operation_tree_flatteners/custom_object_spec.rb +667 -0
- data/spec/unit/operation_tree_flatteners/default_object_spec.rb +687 -0
- data/spec/unit/operation_tree_flatteners/hash_spec.rb +632 -0
- data/spec/unit/operation_tree_flatteners/multiline_string_spec.rb +121 -0
- data/spec/unit/rspec/object_inspection_spec.rb +446 -0
- data/spec/unit/super_diff_spec.rb +1958 -0
- data/spec/unit/tiered_lines_elider_spec.rb +6356 -0
- data/spec/unit/tiered_lines_formatter_spec.rb +193 -0
- data/super_diff.gemspec +1 -1
- metadata +95 -50
- data/lib/super_diff/active_record/diff_formatters.rb +0 -10
- data/lib/super_diff/active_record/diff_formatters/active_record_relation.rb +0 -23
- data/lib/super_diff/active_record/object_inspection/inspectors.rb +0 -16
- data/lib/super_diff/active_support/diff_formatters.rb +0 -10
- data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +0 -36
- data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +0 -28
- data/lib/super_diff/diff_formatters.rb +0 -14
- data/lib/super_diff/diff_formatters/array.rb +0 -21
- data/lib/super_diff/diff_formatters/base.rb +0 -33
- data/lib/super_diff/diff_formatters/custom_object.rb +0 -30
- data/lib/super_diff/diff_formatters/default_object.rb +0 -46
- data/lib/super_diff/diff_formatters/defaults.rb +0 -10
- data/lib/super_diff/diff_formatters/hash.rb +0 -34
- data/lib/super_diff/diff_formatters/main.rb +0 -41
- data/lib/super_diff/object_inspection/inspectors.rb +0 -23
- data/lib/super_diff/object_inspection/inspectors/array.rb +0 -32
- data/lib/super_diff/object_inspection/inspectors/base.rb +0 -36
- data/lib/super_diff/object_inspection/inspectors/custom_object.rb +0 -37
- data/lib/super_diff/object_inspection/inspectors/default_object.rb +0 -61
- data/lib/super_diff/object_inspection/inspectors/hash.rb +0 -32
- data/lib/super_diff/object_inspection/inspectors/primitive.rb +0 -28
- data/lib/super_diff/object_inspection/inspectors/string.rb +0 -23
- data/lib/super_diff/object_inspection/inspectors/time_like.rb +0 -23
- data/lib/super_diff/object_inspection/nodes/break.rb +0 -15
- data/lib/super_diff/object_inspection/nodes/when_multiline.rb +0 -22
- data/lib/super_diff/object_inspection/nodes/when_singleline.rb +0 -24
- data/lib/super_diff/rspec/object_inspection/inspectors.rb +0 -40
- data/lib/super_diff/rspec/object_inspection/inspectors/collection_including.rb +0 -28
- data/lib/super_diff/rspec/object_inspection/inspectors/hash_including.rb +0 -31
- data/lib/super_diff/rspec/object_inspection/inspectors/instance_of.rb +0 -23
- data/lib/super_diff/rspec/object_inspection/inspectors/kind_of.rb +0 -23
- data/lib/super_diff/rspec/object_inspection/inspectors/primitive.rb +0 -13
- data/lib/super_diff/rspec/object_inspection/inspectors/value_within.rb +0 -29
- data/spec/support/object_id.rb +0 -27
- data/spec/support/ruby_versions.rb +0 -11
- data/spec/unit/object_inspection_spec.rb +0 -1168
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 7d1ad189acadc1bcdf4ad4e63ca6b9d946b7a66f8d1544887389d7f093153b31
|
4
|
+
data.tar.gz: f96fb6488cf55e679b3ce8953c26eea0a5c5c6113c35dc30c7d19eb5e3b65ae2
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 5eaeee5249d8cc865ff1fbef12b0c306607bba7f0224ac906c8bbfac0ad4cc196660fed461a3efcbdd69a557cb8dc7aca925351bd9acae5761d4af25d7bac19e
|
7
|
+
data.tar.gz: 0bdd31dada209126940d0e55c1a3b0970b1c17b8c22eecb685aa59ea518bb28456b902bd81256a4b13132d3c9ad88cd115dabe1a1796edd90afeee65568a0c74
|
data/README.md
CHANGED
@@ -1,8 +1,8 @@
|
|
1
|
-
# SuperDiff [![Gem Version][version-badge]][rubygems] [![Build Status][
|
1
|
+
# SuperDiff [![Gem Version][version-badge]][rubygems] [![Build Status][gh-actions-badge]][gh-actions] ![Downloads][downloads-badge] [![IssueHunt][issuehunt-badge]][issuehunt]
|
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
|
-
[
|
5
|
+
[gh-actions-badge]: http://img.shields.io/github/workflow/status/mcmire/super_diff/SuperDiff/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
|
@@ -155,30 +155,56 @@ require "super_diff/rspec"
|
|
155
155
|
|
156
156
|
## Configuration
|
157
157
|
|
158
|
-
|
159
|
-
|
160
|
-
|
161
|
-
|
162
|
-
|
163
|
-
|
164
|
-
|
165
|
-
|
158
|
+
You can customize the behavior of the gem
|
159
|
+
by adding a configuration block
|
160
|
+
to your test helper file
|
161
|
+
(`rails_helper` or `spec_helper`)
|
162
|
+
which looks something like this:
|
163
|
+
|
164
|
+
``` ruby
|
165
|
+
SuperDiff.configure do |config|
|
166
|
+
# ...
|
167
|
+
end
|
168
|
+
```
|
169
|
+
|
170
|
+
### Customizing colors
|
171
|
+
|
172
|
+
If you don't like the colors that SuperDiff uses,
|
173
|
+
you can change them like this:
|
174
|
+
|
175
|
+
``` ruby
|
176
|
+
SuperDiff.configure do |config|
|
177
|
+
config.actual_color = :green
|
178
|
+
config.expected_color = :red
|
179
|
+
config.border_color = :yellow
|
180
|
+
config.header_color = :yellow
|
181
|
+
end
|
182
|
+
```
|
183
|
+
|
184
|
+
See [eight_bit_color.rb](lib/super_diff/csi/eight_bit_color.rb)
|
185
|
+
for the list of available colors.
|
186
|
+
|
187
|
+
### Diffing custom objects
|
188
|
+
|
189
|
+
If you are comparing two data structures
|
190
|
+
that involve a class that is specific to your project,
|
191
|
+
the resulting diff may not look as good as diffs involving native or primitive objects.
|
192
|
+
This happens because if SuperDiff doesn't recognize a class,
|
193
|
+
it will fall back to a generic representation when diffing instances of that class.
|
194
|
+
Fortunately, the gem has a pluggable interface
|
195
|
+
that allows you to insert your own implementations
|
196
|
+
of key pieces involved in the diffing process.
|
197
|
+
I'll have more about how that works soon,
|
198
|
+
but here is what such a configuration would look like:
|
166
199
|
|
167
200
|
``` ruby
|
168
201
|
SuperDiff.configure do |config|
|
169
202
|
config.add_extra_differ_class(YourDiffer)
|
170
203
|
config.add_extra_operation_tree_builder_class(YourOperationTreeBuilder)
|
171
204
|
config.add_extra_operation_tree_class(YourOperationTree)
|
172
|
-
config.add_extra_diff_formatter_class(YourDiffFormatter)
|
173
205
|
end
|
174
206
|
```
|
175
207
|
|
176
|
-
*(More info here in the future on adding a custom differ,
|
177
|
-
operation tree builder,
|
178
|
-
operation tree,
|
179
|
-
and diff formatter.
|
180
|
-
Also explanations on what these are.)*
|
181
|
-
|
182
208
|
## Support
|
183
209
|
|
184
210
|
My goal for this library is to improve your development experience.
|
@@ -204,12 +230,12 @@ I'll get notified right away!
|
|
204
230
|
|
205
231
|
## Compatibility
|
206
232
|
|
207
|
-
`super_diff` is [tested][
|
233
|
+
`super_diff` is [tested][gh-actions] to work with
|
208
234
|
Ruby >= 2.5.x,
|
209
235
|
RSpec 3.x,
|
210
236
|
and Rails >= 5.x.
|
211
237
|
|
212
|
-
[
|
238
|
+
[gh-actions]: https://github.com/mcmire/super_diff/actions?query=workflow%3ASuperDiff
|
213
239
|
|
214
240
|
## Inspiration/Thanks
|
215
241
|
|
@@ -232,5 +258,5 @@ Thank you to the authors of these libraries!
|
|
232
258
|
|
233
259
|
## Author/License
|
234
260
|
|
235
|
-
|
261
|
+
SuperDiff was created and is maintained by Elliot Winkler.
|
236
262
|
It is released under the [MIT license](LICENSE).
|
data/lib/super_diff.rb
CHANGED
@@ -7,39 +7,78 @@ module SuperDiff
|
|
7
7
|
:ColorizedDocumentExtensions,
|
8
8
|
"super_diff/colorized_document_extensions",
|
9
9
|
)
|
10
|
+
autoload :OperationTreeFlatteners, "super_diff/operation_tree_flatteners"
|
10
11
|
autoload :Configuration, "super_diff/configuration"
|
11
12
|
autoload :Csi, "super_diff/csi"
|
12
13
|
autoload :DiffFormatters, "super_diff/diff_formatters"
|
13
14
|
autoload :Differs, "super_diff/differs"
|
14
15
|
autoload :EqualityMatchers, "super_diff/equality_matchers"
|
15
16
|
autoload :Errors, "super_diff/errors"
|
17
|
+
autoload :GemVersion, "super_diff/gem_version"
|
16
18
|
autoload :Helpers, "super_diff/helpers"
|
17
19
|
autoload :ImplementationChecks, "super_diff/implementation_checks"
|
20
|
+
autoload :Line, "super_diff/line"
|
21
|
+
autoload :TieredLines, "super_diff/tiered_lines"
|
22
|
+
autoload :TieredLinesElider, "super_diff/tiered_lines_elider"
|
23
|
+
autoload :TieredLinesFormatter, "super_diff/tiered_lines_formatter"
|
18
24
|
autoload :ObjectInspection, "super_diff/object_inspection"
|
19
25
|
autoload :OperationTrees, "super_diff/operation_trees"
|
20
26
|
autoload :OperationTreeBuilders, "super_diff/operation_tree_builders"
|
21
27
|
autoload :Operations, "super_diff/operations"
|
22
28
|
autoload :RecursionGuard, "super_diff/recursion_guard"
|
23
29
|
|
24
|
-
COLORS = {
|
25
|
-
alpha: :magenta,
|
26
|
-
beta: :yellow,
|
27
|
-
border: :blue,
|
28
|
-
header: :white,
|
29
|
-
}.freeze
|
30
|
-
|
31
30
|
def self.configure
|
32
31
|
yield configuration
|
32
|
+
configuration.updated
|
33
33
|
end
|
34
34
|
|
35
35
|
def self.configuration
|
36
36
|
@_configuration ||= Configuration.new
|
37
37
|
end
|
38
38
|
|
39
|
+
def self.inspect_object(object, as_lines:, **rest)
|
40
|
+
SuperDiff::RecursionGuard.guarding_recursion_of(object) do
|
41
|
+
inspection_tree = ObjectInspection::InspectionTreeBuilders::Main.call(
|
42
|
+
object
|
43
|
+
)
|
44
|
+
|
45
|
+
if as_lines
|
46
|
+
inspection_tree.render_to_lines(object, **rest)
|
47
|
+
else
|
48
|
+
inspection_tree.render_to_string(object)
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
52
|
+
|
39
53
|
def self.time_like?(value)
|
40
54
|
# Check for ActiveSupport's #acts_like_time? for their time-like objects
|
41
55
|
# (like ActiveSupport::TimeWithZone).
|
42
56
|
(value.respond_to?(:acts_like_time?) && value.acts_like_time?) ||
|
43
57
|
value.is_a?(Time)
|
44
58
|
end
|
59
|
+
|
60
|
+
def self.primitive?(value)
|
61
|
+
case value
|
62
|
+
when true, false, nil, Symbol, Numeric, Regexp, Class
|
63
|
+
true
|
64
|
+
else
|
65
|
+
false
|
66
|
+
end
|
67
|
+
end
|
68
|
+
|
69
|
+
def self.insert_overrides(target_module, mod = nil, &block)
|
70
|
+
if mod
|
71
|
+
target_module.prepend(mod)
|
72
|
+
else
|
73
|
+
target_module.prepend(Module.new(&block))
|
74
|
+
end
|
75
|
+
end
|
76
|
+
|
77
|
+
def self.insert_singleton_overrides(target_module, mod = nil, &block)
|
78
|
+
if mod
|
79
|
+
target_module.singleton_class.prepend(mod)
|
80
|
+
else
|
81
|
+
target_module.singleton_class.prepend(Module.new(&block))
|
82
|
+
end
|
83
|
+
end
|
45
84
|
end
|
@@ -2,7 +2,6 @@ require "super_diff/active_support"
|
|
2
2
|
|
3
3
|
module SuperDiff
|
4
4
|
module ActiveRecord
|
5
|
-
autoload :DiffFormatters, "super_diff/active_record/diff_formatters"
|
6
5
|
autoload :Differs, "super_diff/active_record/differs"
|
7
6
|
autoload(
|
8
7
|
:ObjectInspection,
|
@@ -16,6 +15,10 @@ module SuperDiff
|
|
16
15
|
:OperationTreeBuilders,
|
17
16
|
"super_diff/active_record/operation_tree_builders",
|
18
17
|
)
|
18
|
+
autoload(
|
19
|
+
:OperationTreeFlatteners,
|
20
|
+
"super_diff/active_record/operation_tree_flatteners",
|
21
|
+
)
|
19
22
|
|
20
23
|
SuperDiff.configure do |config|
|
21
24
|
config.add_extra_differ_classes(
|
@@ -25,12 +28,9 @@ module SuperDiff
|
|
25
28
|
OperationTreeBuilders::ActiveRecordModel,
|
26
29
|
OperationTreeBuilders::ActiveRecordRelation,
|
27
30
|
)
|
28
|
-
config.
|
29
|
-
|
30
|
-
|
31
|
-
config.add_extra_inspector_classes(
|
32
|
-
ObjectInspection::Inspectors::ActiveRecordModel,
|
33
|
-
ObjectInspection::Inspectors::ActiveRecordRelation,
|
31
|
+
config.add_extra_inspection_tree_builder_classes(
|
32
|
+
ObjectInspection::InspectionTreeBuilders::ActiveRecordModel,
|
33
|
+
ObjectInspection::InspectionTreeBuilders::ActiveRecordRelation,
|
34
34
|
)
|
35
35
|
end
|
36
36
|
end
|
@@ -7,20 +7,10 @@ module SuperDiff
|
|
7
7
|
actual.is_a?(::ActiveRecord::Relation)
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
DiffFormatters::ActiveRecordRelation.call(
|
12
|
-
operation_tree,
|
13
|
-
indent_level: indent_level,
|
14
|
-
)
|
15
|
-
end
|
16
|
-
|
17
|
-
private
|
10
|
+
protected
|
18
11
|
|
19
|
-
def
|
20
|
-
OperationTreeBuilders::ActiveRecordRelation
|
21
|
-
expected: expected,
|
22
|
-
actual: actual,
|
23
|
-
)
|
12
|
+
def operation_tree_builder_class
|
13
|
+
OperationTreeBuilders::ActiveRecordRelation
|
24
14
|
end
|
25
15
|
end
|
26
16
|
end
|
@@ -2,12 +2,8 @@ module SuperDiff
|
|
2
2
|
module ActiveRecord
|
3
3
|
module ObjectInspection
|
4
4
|
autoload(
|
5
|
-
:
|
6
|
-
"super_diff/active_record/object_inspection/
|
7
|
-
)
|
8
|
-
autoload(
|
9
|
-
:MapExtension,
|
10
|
-
"super_diff/active_record/object_inspection/map_extension",
|
5
|
+
:InspectionTreeBuilders,
|
6
|
+
"super_diff/active_record/object_inspection/inspection_tree_builders",
|
11
7
|
)
|
12
8
|
end
|
13
9
|
end
|
@@ -0,0 +1,16 @@
|
|
1
|
+
module SuperDiff
|
2
|
+
module ActiveRecord
|
3
|
+
module ObjectInspection
|
4
|
+
module InspectionTreeBuilders
|
5
|
+
autoload(
|
6
|
+
:ActiveRecordModel,
|
7
|
+
"super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model",
|
8
|
+
)
|
9
|
+
autoload(
|
10
|
+
:ActiveRecordRelation,
|
11
|
+
"super_diff/active_record/object_inspection/inspection_tree_builders/active_record_relation",
|
12
|
+
)
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
@@ -1,44 +1,43 @@
|
|
1
1
|
module SuperDiff
|
2
2
|
module ActiveRecord
|
3
3
|
module ObjectInspection
|
4
|
-
module
|
5
|
-
class ActiveRecordModel < SuperDiff::ObjectInspection::
|
4
|
+
module InspectionTreeBuilders
|
5
|
+
class ActiveRecordModel < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
|
6
6
|
def self.applies_to?(value)
|
7
7
|
value.is_a?(::ActiveRecord::Base)
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
def inspection_tree
|
10
|
+
def call
|
13
11
|
SuperDiff::ObjectInspection::InspectionTree.new do
|
14
|
-
|
15
|
-
|
16
|
-
|
12
|
+
as_lines_when_rendering_to_lines(collection_bookend: :open) do
|
13
|
+
add_text do |object|
|
14
|
+
"#<#{object.class} "
|
15
|
+
end
|
17
16
|
|
18
|
-
|
19
|
-
|
17
|
+
when_rendering_to_lines do
|
18
|
+
add_text "{"
|
19
|
+
end
|
20
20
|
end
|
21
21
|
|
22
22
|
nested do |object|
|
23
|
-
add_break
|
24
|
-
|
25
23
|
insert_separated_list(
|
26
24
|
["id"] + (object.attributes.keys.sort - ["id"]),
|
27
|
-
separator: ",",
|
28
25
|
) do |name|
|
29
|
-
|
30
|
-
|
26
|
+
as_prefix_when_rendering_to_lines do
|
27
|
+
add_text "#{name}: "
|
28
|
+
end
|
29
|
+
|
31
30
|
add_inspection_of object.read_attribute(name)
|
32
31
|
end
|
33
32
|
end
|
34
33
|
|
35
|
-
|
34
|
+
as_lines_when_rendering_to_lines(collection_bookend: :close) do
|
35
|
+
when_rendering_to_lines do
|
36
|
+
add_text "}"
|
37
|
+
end
|
36
38
|
|
37
|
-
|
38
|
-
add_text "}"
|
39
|
+
add_text ">"
|
39
40
|
end
|
40
|
-
|
41
|
-
add_text ">"
|
42
41
|
end
|
43
42
|
end
|
44
43
|
end
|
@@ -1,24 +1,25 @@
|
|
1
1
|
module SuperDiff
|
2
2
|
module ActiveRecord
|
3
3
|
module ObjectInspection
|
4
|
-
module
|
5
|
-
class ActiveRecordRelation < SuperDiff::ObjectInspection::
|
4
|
+
module InspectionTreeBuilders
|
5
|
+
class ActiveRecordRelation < SuperDiff::ObjectInspection::InspectionTreeBuilders::Base
|
6
6
|
def self.applies_to?(value)
|
7
7
|
value.is_a?(::ActiveRecord::Relation)
|
8
8
|
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
def inspection_tree
|
10
|
+
def call
|
13
11
|
SuperDiff::ObjectInspection::InspectionTree.new do
|
14
|
-
|
12
|
+
as_lines_when_rendering_to_lines(collection_bookend: :open) do
|
13
|
+
add_text "#<ActiveRecord::Relation ["
|
14
|
+
end
|
15
15
|
|
16
16
|
nested do |array|
|
17
17
|
insert_array_inspection_of(array)
|
18
18
|
end
|
19
19
|
|
20
|
-
|
21
|
-
|
20
|
+
as_lines_when_rendering_to_lines(collection_bookend: :close) do
|
21
|
+
add_text "]>"
|
22
|
+
end
|
22
23
|
end
|
23
24
|
end
|
24
25
|
end
|
@@ -0,0 +1,17 @@
|
|
1
|
+
module SuperDiff
|
2
|
+
module ActiveRecord
|
3
|
+
module OperationTreeFlatteners
|
4
|
+
class ActiveRecordRelation < SuperDiff::OperationTreeFlatteners::Collection
|
5
|
+
protected
|
6
|
+
|
7
|
+
def open_token
|
8
|
+
"#<ActiveRecord::Relation ["
|
9
|
+
end
|
10
|
+
|
11
|
+
def close_token
|
12
|
+
"]>"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
@@ -2,13 +2,14 @@ module SuperDiff
|
|
2
2
|
module ActiveRecord
|
3
3
|
module OperationTrees
|
4
4
|
class ActiveRecordRelation < SuperDiff::OperationTrees::Array
|
5
|
-
def
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
5
|
+
def self.applies_to?(value)
|
6
|
+
value.is_a?(ActiveRecord::Relation)
|
7
|
+
end
|
8
|
+
|
9
|
+
protected
|
10
|
+
|
11
|
+
def operation_tree_flattener_class
|
12
|
+
OperationTreeFlatteners::ActiveRecordRelation
|
12
13
|
end
|
13
14
|
end
|
14
15
|
end
|