super_diff 0.13.0 → 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 +1 -1
- 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 +6 -4
- 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 +2 -0
- 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 +15 -9
- 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 +4 -2
- 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 +12 -10
- 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 +9 -6
- 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 +14 -38
- 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 +13 -11
- 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 -10
- 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 +2 -0
- 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 -26
- data/super_diff.gemspec +20 -19
- metadata +6 -185
- data/spec/examples.txt +0 -450
- 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/spec_helper.rb +0 -91
- 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/point.rb +0 -7
- 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/inspection_tree_builders/data_object_spec.rb +0 -146
- data/spec/unit/basic/operation_tree_builders/data_object_spec.rb +0 -82
- 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/configuration_no_rspec_spec.rb +0 -58
- data/spec/unit/core/configuration_spec.rb +0 -176
- 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,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
module InspectionTreeNodes
|
@@ -15,10 +17,8 @@ module SuperDiff
|
|
15
17
|
|
16
18
|
def initialize(tree, *args, **options, &block)
|
17
19
|
if !args.empty? && block
|
18
|
-
raise ArgumentError.
|
19
|
-
|
20
|
-
"Either pass a block or a positional argument."
|
21
|
-
)
|
20
|
+
raise ArgumentError, 'You cannot provide both an immediate value and a lazy value. ' \
|
21
|
+
'Either pass a block or a positional argument.'
|
22
22
|
end
|
23
23
|
|
24
24
|
@tree = tree
|
@@ -62,12 +62,12 @@ module SuperDiff
|
|
62
62
|
|
63
63
|
def pretty_print(pp)
|
64
64
|
pp.object_address_group(self) do
|
65
|
-
pp.seplist(pretty_print_variables, proc { pp.text
|
65
|
+
pp.seplist(pretty_print_variables, proc { pp.text ',' }) do |name|
|
66
66
|
value = instance_variable_get(name)
|
67
|
-
pp.breakable
|
67
|
+
pp.breakable ' '
|
68
68
|
pp.group(1) do
|
69
|
-
pp.text name[1
|
70
|
-
pp.text
|
69
|
+
pp.text name[1..].to_s
|
70
|
+
pp.text ':'
|
71
71
|
pp.breakable
|
72
72
|
pp.pp value
|
73
73
|
end
|
@@ -80,7 +80,7 @@ module SuperDiff
|
|
80
80
|
attr_reader :tree, :immediate_value, :block, :options
|
81
81
|
|
82
82
|
def pretty_print_variables
|
83
|
-
block ? [
|
83
|
+
block ? [:@block] : [:@immediate_value]
|
84
84
|
end
|
85
85
|
|
86
86
|
def evaluate_block(object)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
module InspectionTreeNodes
|
@@ -11,6 +13,8 @@ module SuperDiff
|
|
11
13
|
end
|
12
14
|
|
13
15
|
def initialize(tree, test, **options, &block)
|
16
|
+
super(tree, **options, &block)
|
17
|
+
|
14
18
|
@tree = tree
|
15
19
|
@test = test
|
16
20
|
@block = block
|
@@ -18,7 +22,7 @@ module SuperDiff
|
|
18
22
|
end
|
19
23
|
|
20
24
|
def render_to_string(object)
|
21
|
-
test_passes? ? render_to_string_in_subtree(object) :
|
25
|
+
test_passes? ? render_to_string_in_subtree(object) : ''
|
22
26
|
end
|
23
27
|
|
24
28
|
def render_to_lines(object, type:, indentation_level:)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
module InspectionTreeNodes
|
@@ -11,7 +13,7 @@ module SuperDiff
|
|
11
13
|
end
|
12
14
|
|
13
15
|
def render_to_string(object)
|
14
|
-
empty?(object) ? render_to_string_in_subtree(object) :
|
16
|
+
empty?(object) ? render_to_string_in_subtree(object) : ''
|
15
17
|
end
|
16
18
|
|
17
19
|
def render_to_lines(object, type:, indentation_level:)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
module InspectionTreeNodes
|
@@ -11,7 +13,7 @@ module SuperDiff
|
|
11
13
|
end
|
12
14
|
|
13
15
|
def render_to_string(object)
|
14
|
-
empty?(object) ?
|
16
|
+
empty?(object) ? '' : render_to_string_in_subtree(object)
|
15
17
|
end
|
16
18
|
|
17
19
|
def render_to_lines(object, type:, indentation_level:)
|
@@ -1,43 +1,45 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
module InspectionTreeNodes
|
4
6
|
autoload(
|
5
7
|
:AsLinesWhenRenderingToLines,
|
6
|
-
|
8
|
+
'super_diff/core/inspection_tree_nodes/as_lines_when_rendering_to_lines'
|
7
9
|
)
|
8
10
|
autoload(
|
9
11
|
:AsPrefixWhenRenderingToLines,
|
10
|
-
|
12
|
+
'super_diff/core/inspection_tree_nodes/as_prefix_when_rendering_to_lines'
|
11
13
|
)
|
12
14
|
autoload(
|
13
15
|
:AsPreludeWhenRenderingToLines,
|
14
|
-
|
16
|
+
'super_diff/core/inspection_tree_nodes/as_prelude_when_rendering_to_lines'
|
15
17
|
)
|
16
18
|
autoload(
|
17
19
|
:AsSingleLine,
|
18
|
-
|
20
|
+
'super_diff/core/inspection_tree_nodes/as_single_line'
|
19
21
|
)
|
20
|
-
autoload :Base,
|
21
|
-
autoload :Inspection,
|
22
|
-
autoload :Nesting,
|
23
|
-
autoload :OnlyWhen,
|
24
|
-
autoload :Text,
|
25
|
-
autoload :WhenEmpty,
|
22
|
+
autoload :Base, 'super_diff/core/inspection_tree_nodes/base'
|
23
|
+
autoload :Inspection, 'super_diff/core/inspection_tree_nodes/inspection'
|
24
|
+
autoload :Nesting, 'super_diff/core/inspection_tree_nodes/nesting'
|
25
|
+
autoload :OnlyWhen, 'super_diff/core/inspection_tree_nodes/only_when'
|
26
|
+
autoload :Text, 'super_diff/core/inspection_tree_nodes/text'
|
27
|
+
autoload :WhenEmpty, 'super_diff/core/inspection_tree_nodes/when_empty'
|
26
28
|
autoload(
|
27
29
|
:WhenNonEmpty,
|
28
|
-
|
30
|
+
'super_diff/core/inspection_tree_nodes/when_non_empty'
|
29
31
|
)
|
30
32
|
autoload(
|
31
33
|
:WhenRenderingToLines,
|
32
|
-
|
34
|
+
'super_diff/core/inspection_tree_nodes/when_rendering_to_lines'
|
33
35
|
)
|
34
36
|
autoload(
|
35
37
|
:WhenRenderingToString,
|
36
|
-
|
38
|
+
'super_diff/core/inspection_tree_nodes/when_rendering_to_string'
|
37
39
|
)
|
38
40
|
|
39
41
|
def self.registry
|
40
|
-
@
|
42
|
+
@registry ||= [
|
41
43
|
AsLinesWhenRenderingToLines,
|
42
44
|
AsPrefixWhenRenderingToLines,
|
43
45
|
AsPreludeWhenRenderingToLines,
|
data/lib/super_diff/core/line.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class Line
|
4
6
|
extend AttrExtras.mixin
|
5
7
|
|
6
|
-
ICONS = { delete:
|
8
|
+
ICONS = { delete: '-', insert: '+', noop: ' ' }.freeze
|
7
9
|
COLORS = { insert: :actual, delete: :expected, noop: :plain }.freeze
|
8
10
|
|
9
11
|
rattr_initialize(
|
@@ -11,12 +13,12 @@ module SuperDiff
|
|
11
13
|
:type!,
|
12
14
|
:indentation_level!,
|
13
15
|
:value!,
|
14
|
-
prefix:
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
16
|
+
{ prefix: '',
|
17
|
+
add_comma: false,
|
18
|
+
children: [],
|
19
|
+
elided: false,
|
20
|
+
collection_bookend: nil,
|
21
|
+
complete_bookend: nil }
|
20
22
|
]
|
21
23
|
)
|
22
24
|
attr_query :add_comma?
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class NoDifferAvailableError < StandardError
|
@@ -12,11 +14,11 @@ module SuperDiff
|
|
12
14
|
attr_accessor :expected, :actual
|
13
15
|
|
14
16
|
def initialize
|
15
|
-
super(
|
16
|
-
There is no differ available to handle an "expected" value of type
|
17
|
-
#{expected.class}
|
18
|
-
and an "actual" value of type
|
19
|
-
#{actual.class}.
|
17
|
+
super(<<~MESSAGE)
|
18
|
+
There is no differ available to handle an "expected" value of type
|
19
|
+
#{expected.class}
|
20
|
+
and an "actual" value of type
|
21
|
+
#{actual.class}.
|
20
22
|
MESSAGE
|
21
23
|
end
|
22
24
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class NoInspectionTreeBuilderAvailableError < StandardError
|
@@ -11,9 +13,9 @@ module SuperDiff
|
|
11
13
|
attr_accessor :object
|
12
14
|
|
13
15
|
def initialize
|
14
|
-
super(
|
15
|
-
There is no inspection tree builder available to handle a "value" of type
|
16
|
-
#{object.class}.
|
16
|
+
super(<<~MESSAGE)
|
17
|
+
There is no inspection tree builder available to handle a "value" of type
|
18
|
+
#{object.class}.
|
17
19
|
MESSAGE
|
18
20
|
end
|
19
21
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class NoOperationTreeAvailableError < StandardError
|
@@ -11,8 +13,8 @@ module SuperDiff
|
|
11
13
|
attr_accessor :value
|
12
14
|
|
13
15
|
def initialize
|
14
|
-
super(
|
15
|
-
There is no operation tree available to handle a "value" of type #{value.class}.
|
16
|
+
super(<<~MESSAGE)
|
17
|
+
There is no operation tree available to handle a "value" of type #{value.class}.
|
16
18
|
MESSAGE
|
17
19
|
end
|
18
20
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class NoOperationTreeBuilderAvailableError < StandardError
|
@@ -12,11 +14,11 @@ module SuperDiff
|
|
12
14
|
attr_accessor :expected, :actual
|
13
15
|
|
14
16
|
def initialize
|
15
|
-
super(
|
16
|
-
There is no operation tree builder available to handle an "expected" value of type
|
17
|
-
#{expected.class}
|
18
|
-
and an "actual" value of type
|
19
|
-
#{actual.class}.
|
17
|
+
super(<<~MESSAGE)
|
18
|
+
There is no operation tree builder available to handle an "expected" value of type
|
19
|
+
#{expected.class}
|
20
|
+
and an "actual" value of type
|
21
|
+
#{actual.class}.
|
20
22
|
MESSAGE
|
21
23
|
end
|
22
24
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class OperationTreeBuilderDispatcher
|
@@ -6,7 +8,7 @@ module SuperDiff
|
|
6
8
|
method_object(
|
7
9
|
:expected,
|
8
10
|
:actual,
|
9
|
-
[:available_classes, raise_if_nothing_applies: true]
|
11
|
+
[:available_classes, { raise_if_nothing_applies: true }]
|
10
12
|
)
|
11
13
|
|
12
14
|
def call
|
@@ -14,8 +16,6 @@ module SuperDiff
|
|
14
16
|
resolved_class.call(expected: expected, actual: actual)
|
15
17
|
elsif raise_if_nothing_applies?
|
16
18
|
raise NoOperationTreeBuilderAvailableError.create(expected, actual)
|
17
|
-
else
|
18
|
-
nil
|
19
19
|
end
|
20
20
|
end
|
21
21
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class OperationTreeFinder
|
@@ -6,14 +8,12 @@ module SuperDiff
|
|
6
8
|
method_object :value, [:available_classes]
|
7
9
|
|
8
10
|
def call
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
else
|
16
|
-
raise NoOperationTreeAvailableError.create(value)
|
11
|
+
raise NoOperationTreeAvailableError.create(value) unless resolved_class
|
12
|
+
|
13
|
+
begin
|
14
|
+
resolved_class.new([], underlying_object: value)
|
15
|
+
rescue ArgumentError
|
16
|
+
resolved_class.new([])
|
17
17
|
end
|
18
18
|
end
|
19
19
|
|
@@ -1,10 +1,12 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'set'
|
2
4
|
|
3
5
|
module SuperDiff
|
4
6
|
module Core
|
5
7
|
module RecursionGuard
|
6
|
-
RECURSION_GUARD_KEY =
|
7
|
-
PLACEHOLDER =
|
8
|
+
RECURSION_GUARD_KEY = 'super_diff_recursion_guard_key'
|
9
|
+
PLACEHOLDER = '∙∙∙'
|
8
10
|
|
9
11
|
def self.guarding_recursion_of(*objects, &block)
|
10
12
|
already_seen_objects, first_seen_objects =
|
@@ -17,7 +19,7 @@ module SuperDiff
|
|
17
19
|
end
|
18
20
|
|
19
21
|
result =
|
20
|
-
if block.arity
|
22
|
+
if block.arity.positive?
|
21
23
|
block.call(already_seen_objects.any?)
|
22
24
|
else
|
23
25
|
block.call
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
5
|
class TieredLinesElider
|
@@ -27,7 +29,7 @@ module SuperDiff
|
|
27
29
|
end
|
28
30
|
|
29
31
|
def boxes_to_elide
|
30
|
-
@
|
32
|
+
@boxes_to_elide ||=
|
31
33
|
panes_to_consider_for_eliding.reduce([]) do |array, pane|
|
32
34
|
array + (find_boxes_to_elide_within(pane) || [])
|
33
35
|
end
|
@@ -38,12 +40,12 @@ module SuperDiff
|
|
38
40
|
end
|
39
41
|
|
40
42
|
def panes
|
41
|
-
@
|
43
|
+
@panes ||=
|
42
44
|
BuildPanes.call(dirty_panes: padded_dirty_panes, lines: lines)
|
43
45
|
end
|
44
46
|
|
45
47
|
def padded_dirty_panes
|
46
|
-
@
|
48
|
+
@padded_dirty_panes ||=
|
47
49
|
combine_congruent_panes(
|
48
50
|
dirty_panes
|
49
51
|
.map(&:padded)
|
@@ -52,33 +54,33 @@ module SuperDiff
|
|
52
54
|
end
|
53
55
|
|
54
56
|
def dirty_panes
|
55
|
-
@
|
57
|
+
@dirty_panes ||=
|
56
58
|
lines
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
end
|
59
|
+
.each_with_index
|
60
|
+
.reject { |line, _index| line.type == :noop }
|
61
|
+
.reduce([]) do |panes, (_, index)|
|
62
|
+
if !panes.empty? && panes.last.range.end == index - 1
|
63
|
+
panes[0..-2] + [panes[-1].extended_to(index)]
|
64
|
+
else
|
65
|
+
panes + [Pane.new(type: :dirty, range: index..index)]
|
65
66
|
end
|
67
|
+
end
|
66
68
|
end
|
67
69
|
|
68
70
|
def with_box_elided(box, lines)
|
69
71
|
box_at_start_of_lines =
|
70
|
-
if lines.first.complete_bookend?
|
71
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
72
|
+
box.range.begin == if lines.first.complete_bookend?
|
73
|
+
1
|
74
|
+
else
|
75
|
+
0
|
76
|
+
end
|
75
77
|
|
76
78
|
box_at_end_of_lines =
|
77
|
-
if lines.last.complete_bookend?
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
79
|
+
box.range.end == if lines.last.complete_bookend?
|
80
|
+
lines.size - 2
|
81
|
+
else
|
82
|
+
lines.size - 1
|
83
|
+
end
|
82
84
|
|
83
85
|
if one_dimensional_line_tree? && outermost_box?(box)
|
84
86
|
if box_at_start_of_lines
|
@@ -108,7 +110,7 @@ module SuperDiff
|
|
108
110
|
def all_indentation_levels
|
109
111
|
lines
|
110
112
|
.map(&:indentation_level)
|
111
|
-
.select
|
113
|
+
.select(&:positive?)
|
112
114
|
.uniq
|
113
115
|
end
|
114
116
|
|
@@ -120,11 +122,11 @@ module SuperDiff
|
|
120
122
|
lines[pane.range].reject(&:complete_bookend?).size
|
121
123
|
|
122
124
|
if total_size_before_eliding > maximum
|
123
|
-
if maximum
|
125
|
+
if maximum.positive?
|
124
126
|
set_of_boxes.find do |boxes|
|
125
127
|
total_size_after_eliding =
|
126
128
|
total_size_before_eliding -
|
127
|
-
|
129
|
+
boxes.sum { |box| box.range.size - SIZE_OF_ELISION }
|
128
130
|
total_size_after_eliding <= maximum
|
129
131
|
end
|
130
132
|
else
|
@@ -146,11 +148,11 @@ module SuperDiff
|
|
146
148
|
|
147
149
|
possible_indentation_levels =
|
148
150
|
boxes_within_pane
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
151
|
+
.map(&:indentation_level)
|
152
|
+
.select(&:positive?)
|
153
|
+
.uniq
|
154
|
+
.sort
|
155
|
+
.reverse
|
154
156
|
|
155
157
|
possible_indentation_levels.map do |indentation_level|
|
156
158
|
boxes_within_pane.select do |box|
|
@@ -183,13 +185,12 @@ module SuperDiff
|
|
183
185
|
def combine(spannables, on:)
|
184
186
|
criterion = on
|
185
187
|
spannables.reduce([]) do |combined_spannables, spannable|
|
186
|
-
if
|
187
|
-
|
188
|
-
|
189
|
-
|
190
|
-
|
191
|
-
|
192
|
-
)
|
188
|
+
if !combined_spannables.empty? &&
|
189
|
+
spannable.range.begin <=
|
190
|
+
combined_spannables.last.range.end + 1 &&
|
191
|
+
spannable.public_send(criterion) ==
|
192
|
+
combined_spannables.last.public_send(criterion)
|
193
|
+
|
193
194
|
combined_spannables[0..-2] +
|
194
195
|
[combined_spannables[-1].extended_to(spannable.range.end)]
|
195
196
|
else
|
@@ -199,12 +200,12 @@ module SuperDiff
|
|
199
200
|
end
|
200
201
|
|
201
202
|
def boxes
|
202
|
-
@
|
203
|
+
@boxes ||= BuildBoxes.call(lines)
|
203
204
|
end
|
204
205
|
|
205
206
|
def with_start_of_box_elided(box, lines)
|
206
207
|
amount_to_elide =
|
207
|
-
if maximum
|
208
|
+
if maximum.positive?
|
208
209
|
box.range.size - maximum + SIZE_OF_ELISION
|
209
210
|
else
|
210
211
|
box.range.size
|
@@ -220,14 +221,14 @@ module SuperDiff
|
|
220
221
|
|
221
222
|
def with_end_of_box_elided(box, lines)
|
222
223
|
amount_to_elide =
|
223
|
-
if maximum
|
224
|
+
if maximum.positive?
|
224
225
|
box.range.size - maximum + SIZE_OF_ELISION
|
225
226
|
else
|
226
227
|
box.range.size
|
227
228
|
end
|
228
229
|
|
229
230
|
range =
|
230
|
-
if amount_to_elide
|
231
|
+
if amount_to_elide.positive?
|
231
232
|
Range.new(box.range.end - amount_to_elide + 1, box.range.end)
|
232
233
|
else
|
233
234
|
box.range
|
@@ -242,15 +243,14 @@ module SuperDiff
|
|
242
243
|
|
243
244
|
def with_middle_of_box_elided(box, lines)
|
244
245
|
half_of_maximum, remainder =
|
245
|
-
if maximum
|
246
|
+
if maximum.positive?
|
246
247
|
(maximum - SIZE_OF_ELISION).divmod(2)
|
247
248
|
else
|
248
249
|
[0, 0]
|
249
250
|
end
|
250
251
|
|
251
|
-
opening_length
|
252
|
-
|
253
|
-
half_of_maximum + remainder
|
252
|
+
opening_length = half_of_maximum
|
253
|
+
closing_length = half_of_maximum + remainder
|
254
254
|
|
255
255
|
with_subset_of_lines_elided(
|
256
256
|
lines,
|
@@ -290,7 +290,7 @@ module SuperDiff
|
|
290
290
|
private
|
291
291
|
|
292
292
|
def beginning
|
293
|
-
if
|
293
|
+
if dirty_panes.empty? || dirty_panes.first.range.begin.zero?
|
294
294
|
[]
|
295
295
|
else
|
296
296
|
[
|
@@ -324,10 +324,9 @@ module SuperDiff
|
|
324
324
|
end
|
325
325
|
|
326
326
|
def ending
|
327
|
-
if
|
328
|
-
|
329
|
-
|
330
|
-
)
|
327
|
+
if dirty_panes.empty? ||
|
328
|
+
dirty_panes.last.range.end >= lines.size - 1
|
329
|
+
|
331
330
|
[]
|
332
331
|
else
|
333
332
|
[
|
@@ -354,8 +353,8 @@ module SuperDiff
|
|
354
353
|
end
|
355
354
|
|
356
355
|
def capped_to(beginning, ending)
|
357
|
-
new_beginning = range.begin
|
358
|
-
new_ending = range.end
|
356
|
+
new_beginning = [range.begin, beginning].max
|
357
|
+
new_ending = [range.end, ending].min
|
359
358
|
self.class.new(
|
360
359
|
type: type,
|
361
360
|
range: Range.new(new_beginning, new_ending)
|
@@ -452,11 +451,11 @@ module SuperDiff
|
|
452
451
|
end
|
453
452
|
|
454
453
|
def prefix
|
455
|
-
|
454
|
+
''
|
456
455
|
end
|
457
456
|
|
458
457
|
def value
|
459
|
-
|
458
|
+
'# ...'
|
460
459
|
end
|
461
460
|
|
462
461
|
def elided?
|