super_diff 0.12.1 → 0.15.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 +7 -19
- data/lib/super_diff/active_record/differs/active_record_relation.rb +2 -0
- data/lib/super_diff/active_record/differs.rb +3 -1
- data/lib/super_diff/active_record/inspection_tree_builders/active_record_model.rb +7 -5
- data/lib/super_diff/active_record/inspection_tree_builders/active_record_relation.rb +12 -10
- data/lib/super_diff/active_record/inspection_tree_builders.rb +4 -2
- data/lib/super_diff/active_record/monkey_patches.rb +4 -2
- data/lib/super_diff/active_record/object_inspection.rb +6 -4
- data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +3 -1
- data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +3 -1
- data/lib/super_diff/active_record/operation_tree_builders.rb +4 -2
- data/lib/super_diff/active_record/operation_tree_flatteners/active_record_relation.rb +4 -2
- data/lib/super_diff/active_record/operation_tree_flatteners.rb +3 -1
- data/lib/super_diff/active_record/operation_trees/active_record_relation.rb +2 -0
- data/lib/super_diff/active_record/operation_trees.rb +3 -1
- data/lib/super_diff/active_record.rb +10 -8
- data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +2 -0
- data/lib/super_diff/active_support/differs.rb +3 -1
- data/lib/super_diff/active_support/inspection_tree_builders/hash_with_indifferent_access.rb +16 -14
- data/lib/super_diff/active_support/inspection_tree_builders/ordered_options.rb +16 -14
- data/lib/super_diff/active_support/inspection_tree_builders.rb +4 -2
- data/lib/super_diff/active_support/object_inspection.rb +6 -4
- data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +6 -4
- data/lib/super_diff/active_support/operation_tree_builders.rb +3 -1
- data/lib/super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access.rb +4 -2
- data/lib/super_diff/active_support/operation_tree_flatteners.rb +3 -1
- data/lib/super_diff/active_support/operation_trees/hash_with_indifferent_access.rb +2 -0
- data/lib/super_diff/active_support/operation_trees.rb +3 -1
- data/lib/super_diff/active_support.rb +8 -6
- data/lib/super_diff/basic/diff_formatters/collection.rb +18 -18
- data/lib/super_diff/basic/diff_formatters/multiline_string.rb +2 -0
- data/lib/super_diff/basic/diff_formatters.rb +4 -2
- data/lib/super_diff/basic/differs/array.rb +2 -0
- data/lib/super_diff/basic/differs/custom_object.rb +3 -1
- data/lib/super_diff/basic/differs/date_like.rb +2 -0
- data/lib/super_diff/basic/differs/default_object.rb +3 -1
- data/lib/super_diff/basic/differs/hash.rb +2 -0
- data/lib/super_diff/basic/differs/multiline_string.rb +2 -0
- data/lib/super_diff/basic/differs/time_like.rb +2 -0
- data/lib/super_diff/basic/differs.rb +11 -9
- data/lib/super_diff/basic/inspection_tree_builders/array.rb +5 -3
- data/lib/super_diff/basic/inspection_tree_builders/custom_object.rb +5 -3
- data/lib/super_diff/basic/inspection_tree_builders/data_object.rb +42 -0
- data/lib/super_diff/basic/inspection_tree_builders/date_like.rb +7 -5
- data/lib/super_diff/basic/inspection_tree_builders/default_object.rb +7 -5
- data/lib/super_diff/basic/inspection_tree_builders/hash.rb +7 -5
- data/lib/super_diff/basic/inspection_tree_builders/primitive.rb +3 -1
- data/lib/super_diff/basic/inspection_tree_builders/range_object.rb +19 -0
- data/lib/super_diff/basic/inspection_tree_builders/time_like.rb +8 -8
- data/lib/super_diff/basic/inspection_tree_builders.rb +18 -8
- data/lib/super_diff/basic/operation_tree_builders/array.rb +6 -4
- data/lib/super_diff/basic/operation_tree_builders/custom_object.rb +3 -1
- data/lib/super_diff/basic/operation_tree_builders/data_object.rb +20 -0
- data/lib/super_diff/basic/operation_tree_builders/date_like.rb +2 -0
- data/lib/super_diff/basic/operation_tree_builders/default_object.rb +32 -31
- data/lib/super_diff/basic/operation_tree_builders/hash.rb +49 -46
- data/lib/super_diff/basic/operation_tree_builders/multiline_string.rb +5 -3
- data/lib/super_diff/basic/operation_tree_builders/time_like.rb +5 -3
- data/lib/super_diff/basic/operation_tree_builders.rb +15 -9
- data/lib/super_diff/basic/operation_tree_flatteners/array.rb +4 -2
- data/lib/super_diff/basic/operation_tree_flatteners/collection.rb +11 -11
- data/lib/super_diff/basic/operation_tree_flatteners/custom_object.rb +5 -3
- data/lib/super_diff/basic/operation_tree_flatteners/default_object.rb +6 -5
- data/lib/super_diff/basic/operation_tree_flatteners/hash.rb +5 -3
- data/lib/super_diff/basic/operation_tree_flatteners/multiline_string.rb +3 -1
- data/lib/super_diff/basic/operation_tree_flatteners.rb +8 -6
- data/lib/super_diff/basic/operation_trees/array.rb +2 -0
- data/lib/super_diff/basic/operation_trees/custom_object.rb +2 -0
- data/lib/super_diff/basic/operation_trees/default_object.rb +6 -4
- data/lib/super_diff/basic/operation_trees/hash.rb +2 -0
- data/lib/super_diff/basic/operation_trees/multiline_string.rb +3 -1
- data/lib/super_diff/basic/operation_trees.rb +9 -7
- data/lib/super_diff/basic.rb +12 -7
- data/lib/super_diff/core/abstract_differ.rb +2 -0
- data/lib/super_diff/core/abstract_inspection_tree_builder.rb +2 -0
- data/lib/super_diff/core/abstract_operation_tree.rb +4 -2
- data/lib/super_diff/core/abstract_operation_tree_builder.rb +15 -18
- data/lib/super_diff/core/abstract_operation_tree_flattener.rb +5 -3
- data/lib/super_diff/core/binary_operation.rb +3 -1
- data/lib/super_diff/core/colorized_document_extensions.rb +2 -0
- data/lib/super_diff/core/configuration.rb +23 -43
- data/lib/super_diff/core/differ_dispatcher.rb +4 -2
- data/lib/super_diff/core/gem_version.rb +2 -0
- data/lib/super_diff/core/helpers.rb +14 -12
- data/lib/super_diff/core/implementation_checks.rb +6 -2
- data/lib/super_diff/core/inspection_tree.rb +38 -38
- data/lib/super_diff/core/inspection_tree_builder_dispatcher.rb +5 -5
- data/lib/super_diff/core/inspection_tree_nodes/as_lines_when_rendering_to_lines.rb +3 -1
- data/lib/super_diff/core/inspection_tree_nodes/as_prefix_when_rendering_to_lines.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/as_prelude_when_rendering_to_lines.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/as_single_line.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/base.rb +9 -9
- data/lib/super_diff/core/inspection_tree_nodes/inspection.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/nesting.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/only_when.rb +5 -1
- data/lib/super_diff/core/inspection_tree_nodes/text.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes/when_empty.rb +3 -1
- data/lib/super_diff/core/inspection_tree_nodes/when_non_empty.rb +3 -1
- data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_lines.rb +3 -1
- data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_string.rb +2 -0
- data/lib/super_diff/core/inspection_tree_nodes.rb +16 -14
- data/lib/super_diff/core/line.rb +9 -7
- data/lib/super_diff/core/no_differ_available_error.rb +7 -5
- data/lib/super_diff/core/no_inspection_tree_builder_available_error.rb +5 -3
- data/lib/super_diff/core/no_operation_tree_available_error.rb +4 -2
- data/lib/super_diff/core/no_operation_tree_builder_available_error.rb +7 -5
- data/lib/super_diff/core/operation_tree_builder_dispatcher.rb +3 -3
- data/lib/super_diff/core/operation_tree_finder.rb +8 -8
- data/lib/super_diff/core/prefix_for_next_inspection_tree_node.rb +2 -0
- data/lib/super_diff/core/prelude_for_next_inspection_tree_node.rb +2 -0
- data/lib/super_diff/core/recursion_guard.rb +6 -4
- data/lib/super_diff/core/tiered_lines.rb +2 -0
- data/lib/super_diff/core/tiered_lines_elider.rb +53 -54
- data/lib/super_diff/core/tiered_lines_formatter.rb +6 -4
- data/lib/super_diff/core/unary_operation.rb +2 -0
- data/lib/super_diff/core.rb +31 -29
- data/lib/super_diff/csi/bold_sequence.rb +2 -0
- data/lib/super_diff/csi/color.rb +4 -4
- data/lib/super_diff/csi/color_sequence_block.rb +3 -1
- data/lib/super_diff/csi/colorized_document.rb +7 -9
- data/lib/super_diff/csi/document.rb +15 -18
- data/lib/super_diff/csi/eight_bit_color.rb +32 -37
- data/lib/super_diff/csi/four_bit_color.rb +12 -9
- data/lib/super_diff/csi/reset_sequence.rb +2 -0
- data/lib/super_diff/csi/twenty_four_bit_color.rb +22 -21
- data/lib/super_diff/csi/uncolorized_document.rb +2 -0
- data/lib/super_diff/csi.rb +12 -42
- data/lib/super_diff/differs.rb +6 -4
- data/lib/super_diff/equality_matchers/array.rb +18 -16
- data/lib/super_diff/equality_matchers/base.rb +6 -4
- data/lib/super_diff/equality_matchers/default.rb +5 -3
- data/lib/super_diff/equality_matchers/defaults.rb +3 -1
- data/lib/super_diff/equality_matchers/hash.rb +18 -16
- data/lib/super_diff/equality_matchers/main.rb +3 -1
- data/lib/super_diff/equality_matchers/multiline_string.rb +18 -16
- data/lib/super_diff/equality_matchers/primitive.rb +15 -13
- data/lib/super_diff/equality_matchers/singleline_string.rb +16 -14
- data/lib/super_diff/equality_matchers.rb +11 -9
- data/lib/super_diff/errors.rb +4 -2
- data/lib/super_diff/object_inspection.rb +17 -15
- data/lib/super_diff/operation_tree_builders.rb +6 -4
- data/lib/super_diff/operation_tree_flatteners.rb +6 -4
- data/lib/super_diff/operation_trees.rb +6 -4
- data/lib/super_diff/operations.rb +4 -2
- data/lib/super_diff/rails.rb +4 -2
- data/lib/super_diff/rspec/augmented_matcher.rb +3 -1
- data/lib/super_diff/rspec/differ.rb +16 -7
- data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +2 -0
- data/lib/super_diff/rspec/differs/collection_including.rb +2 -0
- data/lib/super_diff/rspec/differs/hash_including.rb +2 -0
- data/lib/super_diff/rspec/differs/object_having_attributes.rb +2 -0
- data/lib/super_diff/rspec/differs.rb +6 -4
- data/lib/super_diff/rspec/inspection_tree_builders/collection_containing_exactly.rb +12 -10
- data/lib/super_diff/rspec/inspection_tree_builders/collection_including.rb +10 -8
- data/lib/super_diff/rspec/inspection_tree_builders/double.rb +20 -18
- data/lib/super_diff/rspec/inspection_tree_builders/generic_describable_matcher.rb +2 -0
- data/lib/super_diff/rspec/inspection_tree_builders/hash_including.rb +10 -8
- data/lib/super_diff/rspec/inspection_tree_builders/instance_of.rb +2 -0
- data/lib/super_diff/rspec/inspection_tree_builders/kind_of.rb +2 -0
- data/lib/super_diff/rspec/inspection_tree_builders/object_having_attributes.rb +12 -10
- data/lib/super_diff/rspec/inspection_tree_builders/primitive.rb +2 -0
- data/lib/super_diff/rspec/inspection_tree_builders/value_within.rb +6 -4
- data/lib/super_diff/rspec/inspection_tree_builders.rb +12 -10
- data/lib/super_diff/rspec/matcher_text_builders/base.rb +12 -12
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +19 -17
- data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +3 -1
- data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +7 -5
- data/lib/super_diff/rspec/matcher_text_builders/match.rb +6 -4
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +5 -3
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +20 -18
- data/lib/super_diff/rspec/matcher_text_builders.rb +9 -7
- data/lib/super_diff/rspec/matcher_text_template.rb +34 -39
- data/lib/super_diff/rspec/monkey_patches.rb +129 -56
- data/lib/super_diff/rspec/object_inspection.rb +7 -5
- data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +4 -4
- data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +2 -0
- data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +2 -0
- data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +2 -0
- data/lib/super_diff/rspec/operation_tree_builders.rb +6 -4
- data/lib/super_diff/rspec-rails.rb +4 -2
- data/lib/super_diff/rspec.rb +27 -14
- data/lib/super_diff/version.rb +3 -1
- data/lib/super_diff.rb +24 -27
- data/super_diff.gemspec +20 -18
- metadata +15 -182
- data/spec/examples.txt +0 -704
- data/spec/integration/rails/active_record_spec.rb +0 -21
- data/spec/integration/rails/active_support_spec.rb +0 -19
- data/spec/integration/rails/engines_spec.rb +0 -25
- data/spec/integration/rails/hash_with_indifferent_access_spec.rb +0 -21
- data/spec/integration/rspec/be_falsey_matcher_spec.rb +0 -58
- data/spec/integration/rspec/be_matcher_spec.rb +0 -605
- data/spec/integration/rspec/be_nil_matcher_spec.rb +0 -57
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +0 -615
- data/spec/integration/rspec/be_truthy_matcher_spec.rb +0 -62
- data/spec/integration/rspec/contain_exactly_matcher_spec.rb +0 -377
- data/spec/integration/rspec/eq_matcher_spec.rb +0 -1066
- data/spec/integration/rspec/generic_describable_matchers_spec.rb +0 -177
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +0 -443
- data/spec/integration/rspec/have_predicate_matcher_spec.rb +0 -478
- data/spec/integration/rspec/include_matcher_spec.rb +0 -452
- data/spec/integration/rspec/magic_metadata_spec.rb +0 -51
- data/spec/integration/rspec/match_array_matcher_spec.rb +0 -424
- data/spec/integration/rspec/match_matcher_spec.rb +0 -1359
- data/spec/integration/rspec/raise_error_matcher_spec.rb +0 -1488
- data/spec/integration/rspec/respond_to_matcher_spec.rb +0 -999
- data/spec/integration/rspec/third_party_matcher_spec.rb +0 -245
- data/spec/integration/rspec/unhandled_errors_spec.rb +0 -150
- data/spec/internal/log/test.log +0 -0
- data/spec/spec_helper.rb +0 -90
- data/spec/support/colorizer.rb +0 -9
- data/spec/support/command_runner.rb +0 -253
- data/spec/support/helpers.rb +0 -21
- data/spec/support/integration/helpers.rb +0 -124
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
- data/spec/support/integration/matchers.rb +0 -177
- data/spec/support/integration/test_programs/base.rb +0 -143
- data/spec/support/integration/test_programs/plain.rb +0 -19
- data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
- data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
- data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
- data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
- data/spec/support/models/a.rb +0 -11
- data/spec/support/models/active_record/person.rb +0 -28
- data/spec/support/models/active_record/query.rb +0 -15
- data/spec/support/models/active_record/shipping_address.rb +0 -24
- data/spec/support/models/customer.rb +0 -22
- data/spec/support/models/empty_class.rb +0 -6
- data/spec/support/models/item.rb +0 -10
- data/spec/support/models/order.rb +0 -9
- data/spec/support/models/person.rb +0 -20
- data/spec/support/models/player.rb +0 -30
- data/spec/support/models/shipping_address.rb +0 -25
- data/spec/support/shared_examples/active_record.rb +0 -428
- data/spec/support/shared_examples/active_support.rb +0 -188
- data/spec/support/shared_examples/elided_diffs.rb +0 -938
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +0 -749
- data/spec/support/shared_examples/key.rb +0 -123
- data/spec/support/unit/helpers.rb +0 -24
- data/spec/support/unit/matchers/be_deprecated_in_favor_of.rb +0 -39
- data/spec/support/unit/matchers/match_output.rb +0 -40
- data/spec/unit/active_record/object_inspection_spec.rb +0 -289
- data/spec/unit/active_support/object_inspection_spec.rb +0 -170
- data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
- data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
- data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
- data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
- data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
- data/spec/unit/core/helpers_spec.rb +0 -68
- data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
- data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
- data/spec/unit/deprecations_spec.rb +0 -176
- data/spec/unit/equality_matchers/main_spec.rb +0 -1842
- data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
- data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
- data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
- data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
- data/spec/unit/rspec/matchers/be_spec.rb +0 -17
- data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
- data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
- data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
- data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
- data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
- data/spec/unit/rspec/matchers/include_spec.rb +0 -21
- data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
- data/spec/unit/rspec/matchers/match_spec.rb +0 -9
- data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
- data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
- data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
- data/spec/unit/rspec/object_inspection_spec.rb +0 -471
- data/spec/unit/super_diff_spec.rb +0 -2115
@@ -1,22 +1,24 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Basic
|
3
5
|
module OperationTrees
|
4
|
-
autoload :Array,
|
5
|
-
autoload :CustomObject,
|
6
|
-
autoload :DefaultObject,
|
7
|
-
autoload :Hash,
|
6
|
+
autoload :Array, 'super_diff/basic/operation_trees/array'
|
7
|
+
autoload :CustomObject, 'super_diff/basic/operation_trees/custom_object'
|
8
|
+
autoload :DefaultObject, 'super_diff/basic/operation_trees/default_object'
|
9
|
+
autoload :Hash, 'super_diff/basic/operation_trees/hash'
|
8
10
|
autoload(
|
9
11
|
:MultilineString,
|
10
|
-
|
12
|
+
'super_diff/basic/operation_trees/multiline_string'
|
11
13
|
)
|
12
14
|
|
13
15
|
class Main
|
14
16
|
def self.call(*args)
|
15
|
-
warn <<~
|
17
|
+
warn <<~WARNING
|
16
18
|
WARNING: SuperDiff::OperationTrees::Main.call(...) is deprecated and will be removed in the next major release.
|
17
19
|
Please use SuperDiff.find_operation_tree_for(...) instead.
|
18
20
|
#{caller_locations.join("\n")}
|
19
|
-
|
21
|
+
WARNING
|
20
22
|
SuperDiff.find_operation_tree_for(*args)
|
21
23
|
end
|
22
24
|
end
|
data/lib/super_diff/basic.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
-
|
2
|
-
|
3
|
-
require
|
4
|
-
require
|
5
|
-
require
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'super_diff/basic/differs'
|
4
|
+
require 'super_diff/basic/inspection_tree_builders'
|
5
|
+
require 'super_diff/basic/operation_tree_builders'
|
6
|
+
require 'super_diff/basic/operation_tree_flatteners'
|
7
|
+
require 'super_diff/basic/operation_trees'
|
6
8
|
|
7
9
|
module SuperDiff
|
8
10
|
module Basic
|
9
|
-
autoload :DiffFormatters,
|
11
|
+
autoload :DiffFormatters, 'super_diff/basic/diff_formatters'
|
10
12
|
|
11
13
|
SuperDiff.configuration.tap do |config|
|
12
14
|
config.add_extra_differ_classes(
|
@@ -26,6 +28,8 @@ module SuperDiff
|
|
26
28
|
InspectionTreeBuilders::Primitive,
|
27
29
|
InspectionTreeBuilders::TimeLike,
|
28
30
|
InspectionTreeBuilders::DateLike,
|
31
|
+
InspectionTreeBuilders::DataObject,
|
32
|
+
InspectionTreeBuilders::RangeObject,
|
29
33
|
InspectionTreeBuilders::DefaultObject
|
30
34
|
)
|
31
35
|
|
@@ -34,7 +38,8 @@ module SuperDiff
|
|
34
38
|
OperationTreeBuilders::Hash,
|
35
39
|
OperationTreeBuilders::TimeLike,
|
36
40
|
OperationTreeBuilders::DateLike,
|
37
|
-
OperationTreeBuilders::CustomObject
|
41
|
+
OperationTreeBuilders::CustomObject,
|
42
|
+
OperationTreeBuilders::DataObject
|
38
43
|
)
|
39
44
|
|
40
45
|
config.add_extra_operation_tree_classes(
|
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'forwardable'
|
2
4
|
|
3
5
|
module SuperDiff
|
4
6
|
module Core
|
@@ -32,7 +34,7 @@ module SuperDiff
|
|
32
34
|
end
|
33
35
|
|
34
36
|
def pretty_print(pp)
|
35
|
-
pp.group(1, "#<#{self.class.name} [",
|
37
|
+
pp.group(1, "#<#{self.class.name} [", ']>') do
|
36
38
|
pp.breakable
|
37
39
|
pp.seplist(self) { |value| pp.pp value }
|
38
40
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class AbstractOperationTreeBuilder
|
@@ -31,16 +33,15 @@ module SuperDiff
|
|
31
33
|
operation_tree = build_operation_tree
|
32
34
|
unmatched_delete_operations = []
|
33
35
|
|
34
|
-
unary_operations.each_with_index do |operation,
|
35
|
-
if
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
)
|
36
|
+
unary_operations.each_with_index do |operation, _index|
|
37
|
+
if operation.name == :insert &&
|
38
|
+
(
|
39
|
+
delete_operation =
|
40
|
+
unmatched_delete_operations.find do |op|
|
41
|
+
op.key == operation.key
|
42
|
+
end
|
43
|
+
) && (insert_operation = operation)
|
44
|
+
|
44
45
|
unmatched_delete_operations.delete(delete_operation)
|
45
46
|
|
46
47
|
if (
|
@@ -64,9 +65,7 @@ module SuperDiff
|
|
64
65
|
operation_tree << insert_operation
|
65
66
|
end
|
66
67
|
else
|
67
|
-
if operation.name == :delete
|
68
|
-
unmatched_delete_operations << operation
|
69
|
-
end
|
68
|
+
unmatched_delete_operations << operation if operation.name == :delete
|
70
69
|
|
71
70
|
operation_tree << operation
|
72
71
|
end
|
@@ -76,11 +75,9 @@ module SuperDiff
|
|
76
75
|
end
|
77
76
|
|
78
77
|
def possible_comparison_of(operation, next_operation)
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
nil
|
83
|
-
end
|
78
|
+
return unless should_compare?(operation, next_operation)
|
79
|
+
|
80
|
+
compare(operation.value, next_operation.value)
|
84
81
|
end
|
85
82
|
|
86
83
|
def should_compare?(operation, next_operation)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class AbstractOperationTreeFlattener
|
@@ -21,7 +23,7 @@ module SuperDiff
|
|
21
23
|
def beginning_lines
|
22
24
|
if tiered_lines.empty?
|
23
25
|
[]
|
24
|
-
elsif indentation_level
|
26
|
+
elsif indentation_level.positive?
|
25
27
|
[tiered_lines[0]]
|
26
28
|
else
|
27
29
|
[tiered_lines[0].with_complete_bookend(:open)]
|
@@ -35,7 +37,7 @@ module SuperDiff
|
|
35
37
|
def ending_lines
|
36
38
|
if tiered_lines.empty?
|
37
39
|
[]
|
38
|
-
elsif indentation_level
|
40
|
+
elsif indentation_level.positive?
|
39
41
|
[tiered_lines[-1]]
|
40
42
|
else
|
41
43
|
[tiered_lines[-1].with_complete_bookend(:close)]
|
@@ -43,7 +45,7 @@ module SuperDiff
|
|
43
45
|
end
|
44
46
|
|
45
47
|
def tiered_lines
|
46
|
-
@
|
48
|
+
@tiered_lines ||= build_tiered_lines
|
47
49
|
end
|
48
50
|
end
|
49
51
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class Configuration
|
@@ -23,7 +25,7 @@ module SuperDiff
|
|
23
25
|
def initialize(options = {})
|
24
26
|
@actual_color = :yellow
|
25
27
|
@border_color = :blue
|
26
|
-
@color_enabled =
|
28
|
+
@color_enabled = nil
|
27
29
|
@diff_elision_enabled = false
|
28
30
|
@diff_elision_maximum = 0
|
29
31
|
@elision_marker_color = :cyan
|
@@ -41,6 +43,8 @@ module SuperDiff
|
|
41
43
|
|
42
44
|
def initialize_dup(original)
|
43
45
|
super
|
46
|
+
@extra_diff_formatter_classes =
|
47
|
+
original.extra_diff_formatter_classes.dup.freeze
|
44
48
|
@extra_differ_classes = original.extra_differ_classes.dup.freeze
|
45
49
|
@extra_operation_tree_builder_classes =
|
46
50
|
original.extra_operation_tree_builder_classes.dup.freeze
|
@@ -51,6 +55,8 @@ module SuperDiff
|
|
51
55
|
end
|
52
56
|
|
53
57
|
def color_enabled?
|
58
|
+
return color_enabled_by_default? if @color_enabled.nil?
|
59
|
+
|
54
60
|
@color_enabled
|
55
61
|
end
|
56
62
|
|
@@ -71,101 +77,71 @@ module SuperDiff
|
|
71
77
|
end
|
72
78
|
|
73
79
|
options.each { |key, value| instance_variable_set("@#{key}", value) }
|
74
|
-
|
75
|
-
updated
|
76
|
-
end
|
77
|
-
|
78
|
-
def updated
|
79
|
-
SuperDiff::Csi.color_enabled = color_enabled?
|
80
80
|
end
|
81
81
|
|
82
82
|
def add_extra_diff_formatter_classes(*classes)
|
83
83
|
@extra_diff_formatter_classes =
|
84
84
|
(@extra_diff_formatter_classes + classes).freeze
|
85
85
|
end
|
86
|
-
|
87
|
-
:add_extra_diff_formatter_class,
|
88
|
-
:add_extra_diff_formatter_classes
|
89
|
-
)
|
86
|
+
alias add_extra_diff_formatter_class add_extra_diff_formatter_classes
|
90
87
|
|
91
88
|
def prepend_extra_diff_formatter_classes(*classes)
|
92
89
|
@extra_diff_formatter_classes =
|
93
90
|
(classes + @extra_diff_formatter_classes).freeze
|
94
91
|
end
|
95
|
-
|
96
|
-
:prepend_extra_diff_formatter_class,
|
97
|
-
:prepend_extra_diff_formatter_classes
|
98
|
-
)
|
92
|
+
alias prepend_extra_diff_formatter_class prepend_extra_diff_formatter_classes
|
99
93
|
|
100
94
|
def add_extra_differ_classes(*classes)
|
101
95
|
@extra_differ_classes = (@extra_differ_classes + classes).freeze
|
102
96
|
end
|
103
|
-
|
97
|
+
alias add_extra_differ_class add_extra_differ_classes
|
104
98
|
|
105
99
|
def prepend_extra_differ_classes(*classes)
|
106
100
|
@extra_differ_classes = (classes + @extra_differ_classes).freeze
|
107
101
|
end
|
108
|
-
|
102
|
+
alias prepend_extra_differ_class prepend_extra_differ_classes
|
109
103
|
|
110
104
|
def add_extra_inspection_tree_builder_classes(*classes)
|
111
105
|
@extra_inspection_tree_builder_classes =
|
112
106
|
(@extra_inspection_tree_builder_classes + classes).freeze
|
113
107
|
end
|
114
|
-
|
115
|
-
:add_extra_inspection_tree_builder_class,
|
116
|
-
:add_extra_inspection_tree_builder_classes
|
117
|
-
)
|
108
|
+
alias add_extra_inspection_tree_builder_class add_extra_inspection_tree_builder_classes
|
118
109
|
|
119
110
|
def prepend_extra_inspection_tree_builder_classes(*classes)
|
120
111
|
@extra_inspection_tree_builder_classes =
|
121
112
|
(classes + @extra_inspection_tree_builder_classes).freeze
|
122
113
|
end
|
123
|
-
|
124
|
-
:prepend_extra_inspection_tree_builder_class,
|
125
|
-
:prepend_extra_inspection_tree_builder_classes
|
126
|
-
)
|
114
|
+
alias prepend_extra_inspection_tree_builder_class prepend_extra_inspection_tree_builder_classes
|
127
115
|
|
128
116
|
def add_extra_operation_tree_builder_classes(*classes)
|
129
117
|
@extra_operation_tree_builder_classes =
|
130
118
|
(@extra_operation_tree_builder_classes + classes).freeze
|
131
119
|
end
|
132
|
-
|
133
|
-
:add_extra_operation_tree_builder_class,
|
134
|
-
:add_extra_operation_tree_builder_classes
|
135
|
-
)
|
120
|
+
alias add_extra_operation_tree_builder_class add_extra_operation_tree_builder_classes
|
136
121
|
|
137
122
|
def prepend_extra_operation_tree_builder_classes(*classes)
|
138
123
|
@extra_operation_tree_builder_classes =
|
139
124
|
(classes + @extra_operation_tree_builder_classes).freeze
|
140
125
|
end
|
141
|
-
|
142
|
-
:prepend_extra_operation_tree_builder_class,
|
143
|
-
:prepend_extra_operation_tree_builder_classes
|
144
|
-
)
|
126
|
+
alias prepend_extra_operation_tree_builder_class prepend_extra_operation_tree_builder_classes
|
145
127
|
|
146
128
|
def add_extra_operation_tree_classes(*classes)
|
147
129
|
@extra_operation_tree_classes =
|
148
130
|
(@extra_operation_tree_classes + classes).freeze
|
149
131
|
end
|
150
|
-
|
151
|
-
:add_extra_operation_tree_class,
|
152
|
-
:add_extra_operation_tree_classes
|
153
|
-
)
|
132
|
+
alias add_extra_operation_tree_class add_extra_operation_tree_classes
|
154
133
|
|
155
134
|
def prepend_extra_operation_tree_classes(*classes)
|
156
135
|
@extra_operation_tree_classes =
|
157
136
|
(classes + @extra_operation_tree_classes).freeze
|
158
137
|
end
|
159
|
-
|
160
|
-
:prepend_extra_operation_tree_class,
|
161
|
-
:prepend_extra_operation_tree_classes
|
162
|
-
)
|
138
|
+
alias prepend_extra_operation_tree_class prepend_extra_operation_tree_classes
|
163
139
|
|
164
140
|
def to_h
|
165
141
|
{
|
166
142
|
actual_color: actual_color,
|
167
143
|
border_color: border_color,
|
168
|
-
color_enabled: color_enabled
|
144
|
+
color_enabled: @color_enabled,
|
169
145
|
diff_elision_enabled: diff_elision_enabled?,
|
170
146
|
diff_elision_maximum: diff_elision_maximum,
|
171
147
|
elision_marker_color: elision_marker_color,
|
@@ -185,7 +161,11 @@ module SuperDiff
|
|
185
161
|
private
|
186
162
|
|
187
163
|
def color_enabled_by_default?
|
188
|
-
ENV[
|
164
|
+
return true if ENV['CI'] == 'true'
|
165
|
+
|
166
|
+
return ::RSpec.configuration.color_enabled? if defined?(::SuperDiff::RSpec)
|
167
|
+
|
168
|
+
$stdout.respond_to?(:tty?) && $stdout.tty?
|
189
169
|
end
|
190
170
|
end
|
191
171
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class DifferDispatcher
|
@@ -6,7 +8,7 @@ module SuperDiff
|
|
6
8
|
method_object(
|
7
9
|
:expected,
|
8
10
|
:actual,
|
9
|
-
[:available_classes, indent_level: 0, raise_if_nothing_applies: true]
|
11
|
+
[:available_classes, { indent_level: 0, raise_if_nothing_applies: true }]
|
10
12
|
)
|
11
13
|
|
12
14
|
def call
|
@@ -15,7 +17,7 @@ module SuperDiff
|
|
15
17
|
elsif raise_if_nothing_applies?
|
16
18
|
raise NoDifferAvailableError.create(expected, actual)
|
17
19
|
else
|
18
|
-
|
20
|
+
''
|
19
21
|
end
|
20
22
|
end
|
21
23
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
module Helpers
|
@@ -6,7 +8,7 @@ module SuperDiff
|
|
6
8
|
# TODO: Simplify this
|
7
9
|
def style(*args, color_enabled: true, **opts, &block)
|
8
10
|
klass =
|
9
|
-
if color_enabled &&
|
11
|
+
if color_enabled && SuperDiff.configuration.color_enabled?
|
10
12
|
Csi::ColorizedDocument
|
11
13
|
else
|
12
14
|
Csi::UncolorizedDocument
|
@@ -26,13 +28,13 @@ module SuperDiff
|
|
26
28
|
def plural_type_for(value)
|
27
29
|
case value
|
28
30
|
when Numeric
|
29
|
-
|
31
|
+
'numbers'
|
30
32
|
when String
|
31
|
-
|
33
|
+
'strings'
|
32
34
|
when Symbol
|
33
|
-
|
35
|
+
'symbols'
|
34
36
|
else
|
35
|
-
|
37
|
+
'objects'
|
36
38
|
end
|
37
39
|
end
|
38
40
|
|
@@ -49,26 +51,26 @@ module SuperDiff
|
|
49
51
|
if jruby?
|
50
52
|
def object_address_for(object)
|
51
53
|
# Source: <https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/RubyBasicObject.java>
|
52
|
-
|
54
|
+
'0x%x' % object.hash
|
53
55
|
end
|
54
|
-
elsif ruby_version_matches?(
|
55
|
-
require
|
56
|
-
require
|
56
|
+
elsif ruby_version_matches?('>= 2.7.0')
|
57
|
+
require 'json'
|
58
|
+
require 'objspace'
|
57
59
|
|
58
60
|
def object_address_for(object)
|
59
61
|
# Sources: <https://bugs.ruby-lang.org/issues/15408> and <https://bugs.ruby-lang.org/issues/15626#Object-ID>
|
60
62
|
json = JSON.parse(ObjectSpace.dump(object))
|
61
|
-
json.is_a?(Hash) ?
|
63
|
+
json.is_a?(Hash) ? '0x%016x' % Integer(json['address'], 16) : ''
|
62
64
|
end
|
63
65
|
else
|
64
66
|
def object_address_for(object)
|
65
|
-
|
67
|
+
format('0x%016x', (object.object_id * 2))
|
66
68
|
end
|
67
69
|
end
|
68
70
|
|
69
71
|
def with_slice_of_array_replaced(array, range, replacement)
|
70
72
|
beginning =
|
71
|
-
if range.begin
|
73
|
+
if range.begin.positive?
|
72
74
|
array[Range.new(0, range.begin - 1)]
|
73
75
|
else
|
74
76
|
[]
|
@@ -1,7 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
module ImplementationChecks
|
4
|
-
protected
|
6
|
+
protected
|
7
|
+
|
8
|
+
def unimplemented_instance_method!
|
5
9
|
raise(
|
6
10
|
NotImplementedError,
|
7
11
|
"#{self.class} must implement ##{caller_locations(1, 1).first.label}",
|
@@ -9,7 +13,7 @@ module SuperDiff
|
|
9
13
|
)
|
10
14
|
end
|
11
15
|
|
12
|
-
|
16
|
+
def unimplemented_class_method!
|
13
17
|
raise(
|
14
18
|
NotImplementedError,
|
15
19
|
"#{self} must implement .#{caller_locations(1, 1).first.label}",
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class InspectionTree
|
@@ -21,11 +23,11 @@ module SuperDiff
|
|
21
23
|
end
|
22
24
|
|
23
25
|
def before_each_callbacks
|
24
|
-
@
|
26
|
+
@before_each_callbacks ||= Hash.new { |h, k| h[k] = [] }
|
25
27
|
end
|
26
28
|
|
27
29
|
def render_to_string(object)
|
28
|
-
nodes.reduce(
|
30
|
+
nodes.reduce('') do |string, node|
|
29
31
|
string + node.render_to_string(object)
|
30
32
|
end
|
31
33
|
end
|
@@ -34,7 +36,7 @@ module SuperDiff
|
|
34
36
|
nodes
|
35
37
|
.each_with_index
|
36
38
|
.reduce(
|
37
|
-
[TieredLines.new,
|
39
|
+
[TieredLines.new, '', '']
|
38
40
|
) do |(tiered_lines, prelude, prefix), (node, index)|
|
39
41
|
UpdateTieredLines.call(
|
40
42
|
object: object,
|
@@ -59,10 +61,10 @@ module SuperDiff
|
|
59
61
|
insert_separated_list(array) do |t, value|
|
60
62
|
# Have to do these shenanigans so that if value is a hash, Ruby
|
61
63
|
# doesn't try to interpret it as keyword args
|
62
|
-
if Helpers.ruby_version_matches?(
|
64
|
+
if Helpers.ruby_version_matches?('>= 2.7.1')
|
63
65
|
t.add_inspection_of(value, **{})
|
64
66
|
else
|
65
|
-
t.add_inspection_of(
|
67
|
+
t.add_inspection_of(value, {})
|
66
68
|
end
|
67
69
|
end
|
68
70
|
end
|
@@ -80,16 +82,16 @@ module SuperDiff
|
|
80
82
|
else
|
81
83
|
t1.as_prefix_when_rendering_to_lines do |t2|
|
82
84
|
t2.add_inspection_of key, as_lines: false
|
83
|
-
t2.add_text
|
85
|
+
t2.add_text ' => '
|
84
86
|
end
|
85
87
|
end
|
86
88
|
|
87
89
|
# Have to do these shenanigans so that if hash[key] is a hash, Ruby
|
88
90
|
# doesn't try to interpret it as keyword args
|
89
|
-
if Helpers.ruby_version_matches?(
|
91
|
+
if Helpers.ruby_version_matches?('>= 2.7.1')
|
90
92
|
t1.add_inspection_of(hash[key], **{})
|
91
93
|
else
|
92
|
-
t1.add_inspection_of(
|
94
|
+
t1.add_inspection_of(hash[key], {})
|
93
95
|
end
|
94
96
|
end
|
95
97
|
end
|
@@ -99,10 +101,10 @@ module SuperDiff
|
|
99
101
|
as_lines_when_rendering_to_lines(
|
100
102
|
add_comma: index < enumerable.size - 1
|
101
103
|
) do |t1|
|
102
|
-
if index
|
104
|
+
if index.positive?
|
103
105
|
# stree-ignore
|
104
106
|
t1.when_rendering_to_string do |t2|
|
105
|
-
t2.add_text
|
107
|
+
t2.add_text ' '
|
106
108
|
end
|
107
109
|
end
|
108
110
|
t1.evaluate_block(value, &block)
|
@@ -114,36 +116,34 @@ module SuperDiff
|
|
114
116
|
|
115
117
|
attr_reader :disallowed_node_names, :nodes
|
116
118
|
|
117
|
-
def add_node(node_class,
|
118
|
-
if disallowed_node_names.include?(node_class.name)
|
119
|
-
raise DisallowedNodeError.create(node_name: node_class.name)
|
120
|
-
end
|
119
|
+
def add_node(node_class, ...)
|
120
|
+
raise DisallowedNodeError.create(node_name: node_class.name) if disallowed_node_names.include?(node_class.name)
|
121
121
|
|
122
|
-
append_node(build_node(node_class,
|
122
|
+
append_node(build_node(node_class, ...))
|
123
123
|
end
|
124
124
|
|
125
125
|
def append_node(node)
|
126
126
|
nodes.push(node)
|
127
127
|
end
|
128
128
|
|
129
|
-
def build_node(node_class,
|
130
|
-
node_class.new(self,
|
129
|
+
def build_node(node_class, ...)
|
130
|
+
node_class.new(self, ...)
|
131
131
|
end
|
132
132
|
|
133
133
|
class UpdateTieredLines
|
134
134
|
extend AttrExtras.mixin
|
135
135
|
|
136
136
|
method_object %i[
|
137
|
-
|
138
|
-
|
139
|
-
|
140
|
-
|
141
|
-
|
142
|
-
|
143
|
-
|
144
|
-
|
145
|
-
|
146
|
-
|
137
|
+
object!
|
138
|
+
type!
|
139
|
+
indentation_level!
|
140
|
+
nodes!
|
141
|
+
tiered_lines!
|
142
|
+
prelude!
|
143
|
+
prefix!
|
144
|
+
node!
|
145
|
+
index!
|
146
|
+
]
|
147
147
|
|
148
148
|
def call
|
149
149
|
if rendering.is_a?(Array)
|
@@ -165,18 +165,18 @@ module SuperDiff
|
|
165
165
|
def concat_with_lines
|
166
166
|
additional_lines =
|
167
167
|
prefix_with(prefix, prepend_with(prelude, rendering))
|
168
|
-
[tiered_lines + additional_lines,
|
168
|
+
[tiered_lines + additional_lines, '', '']
|
169
169
|
end
|
170
170
|
|
171
171
|
def prefix_with(prefix, text)
|
172
|
-
prefix.empty? ? text : [text[0].prefixed_with(prefix)] + text[1
|
172
|
+
prefix.empty? ? text : [text[0].prefixed_with(prefix)] + text[1..]
|
173
173
|
end
|
174
174
|
|
175
175
|
def prepend_with(prelude, text)
|
176
176
|
if prelude.empty?
|
177
177
|
text
|
178
178
|
else
|
179
|
-
[text[0].with_value_prepended(prelude)] + text[1
|
179
|
+
[text[0].with_value_prepended(prelude)] + text[1..]
|
180
180
|
end
|
181
181
|
end
|
182
182
|
|
@@ -187,7 +187,7 @@ module SuperDiff
|
|
187
187
|
def add_to_last_line
|
188
188
|
new_lines =
|
189
189
|
tiered_lines[0..-2] +
|
190
|
-
|
190
|
+
[tiered_lines[-1].with_value_appended(rendering)]
|
191
191
|
[new_lines, prelude, prefix]
|
192
192
|
end
|
193
193
|
|
@@ -198,13 +198,13 @@ module SuperDiff
|
|
198
198
|
def add_to_lines
|
199
199
|
new_lines =
|
200
200
|
tiered_lines +
|
201
|
-
|
202
|
-
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
|
201
|
+
[
|
202
|
+
Line.new(
|
203
|
+
type: type,
|
204
|
+
indentation_level: indentation_level,
|
205
|
+
value: rendering
|
206
|
+
)
|
207
|
+
]
|
208
208
|
[new_lines, prelude, prefix]
|
209
209
|
end
|
210
210
|
|