super_diff 0.13.0 → 0.14.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/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 +15 -13
- 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 RSpec
|
3
5
|
module MatcherTextBuilders
|
@@ -19,7 +21,7 @@ module SuperDiff
|
|
19
21
|
protected
|
20
22
|
|
21
23
|
def add_expected_value_to(template, expected)
|
22
|
-
template.add_text
|
24
|
+
template.add_text ' '
|
23
25
|
template.add_list_in_color(expected_color, expected)
|
24
26
|
end
|
25
27
|
|
@@ -28,7 +30,7 @@ module SuperDiff
|
|
28
30
|
|
29
31
|
if arbitrary_keywords?
|
30
32
|
add_arbitrary_keywords_clause_to(template)
|
31
|
-
elsif
|
33
|
+
elsif expected_keywords?
|
32
34
|
add_keywords_clause_to(template)
|
33
35
|
end
|
34
36
|
|
@@ -43,8 +45,8 @@ module SuperDiff
|
|
43
45
|
@arbitrary_keywords
|
44
46
|
end
|
45
47
|
|
46
|
-
def
|
47
|
-
expected_keywords
|
48
|
+
def expected_keywords?
|
49
|
+
expected_keywords&.count&.positive?
|
48
50
|
end
|
49
51
|
|
50
52
|
def unlimited_arguments?
|
@@ -52,34 +54,34 @@ module SuperDiff
|
|
52
54
|
end
|
53
55
|
|
54
56
|
def add_arity_clause_to(template)
|
55
|
-
template.add_text
|
57
|
+
template.add_text ' with '
|
56
58
|
template.add_text_in_color expected_color, expected_arity
|
57
|
-
template.add_text
|
58
|
-
template.add_text pluralize(
|
59
|
+
template.add_text ' '
|
60
|
+
template.add_text pluralize('argument', expected_arity)
|
59
61
|
end
|
60
62
|
|
61
63
|
def add_arbitrary_keywords_clause_to(template)
|
62
|
-
template.add_text
|
63
|
-
template.add_text_in_color expected_color,
|
64
|
-
template.add_text
|
64
|
+
template.add_text ' with '
|
65
|
+
template.add_text_in_color expected_color, 'any'
|
66
|
+
template.add_text ' keywords'
|
65
67
|
end
|
66
68
|
|
67
69
|
def add_keywords_clause_to(template)
|
68
|
-
template.add_text
|
69
|
-
template.add_text pluralize(
|
70
|
-
template.add_text
|
70
|
+
template.add_text ' with '
|
71
|
+
template.add_text pluralize('keyword', expected_keywords.length)
|
72
|
+
template.add_text ' '
|
71
73
|
template.add_list_in_color expected_color, expected_keywords
|
72
74
|
end
|
73
75
|
|
74
76
|
def add_unlimited_arguments_clause_to(template)
|
75
|
-
if arbitrary_keywords? ||
|
76
|
-
template.add_text
|
77
|
+
if arbitrary_keywords? || expected_keywords?
|
78
|
+
template.add_text ' and '
|
77
79
|
else
|
78
|
-
template.add_text
|
80
|
+
template.add_text ' with '
|
79
81
|
end
|
80
82
|
|
81
|
-
template.add_text_in_color expected_color,
|
82
|
-
template.add_text
|
83
|
+
template.add_text_in_color expected_color, 'unlimited'
|
84
|
+
template.add_text ' arguments'
|
83
85
|
end
|
84
86
|
|
85
87
|
def pluralize(word, count)
|
@@ -1,25 +1,27 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module RSpec
|
3
5
|
module MatcherTextBuilders
|
4
|
-
autoload :Base,
|
6
|
+
autoload :Base, 'super_diff/rspec/matcher_text_builders/base'
|
5
7
|
autoload(
|
6
8
|
:BePredicate,
|
7
|
-
|
9
|
+
'super_diff/rspec/matcher_text_builders/be_predicate'
|
8
10
|
)
|
9
11
|
autoload(
|
10
12
|
:ContainExactly,
|
11
|
-
|
13
|
+
'super_diff/rspec/matcher_text_builders/contain_exactly'
|
12
14
|
)
|
13
15
|
autoload(
|
14
16
|
:HavePredicate,
|
15
|
-
|
17
|
+
'super_diff/rspec/matcher_text_builders/have_predicate'
|
16
18
|
)
|
17
|
-
autoload :Match,
|
19
|
+
autoload :Match, 'super_diff/rspec/matcher_text_builders/match'
|
18
20
|
autoload(
|
19
21
|
:RaiseError,
|
20
|
-
|
22
|
+
'super_diff/rspec/matcher_text_builders/raise_error'
|
21
23
|
)
|
22
|
-
autoload(:RespondTo,
|
24
|
+
autoload(:RespondTo, 'super_diff/rspec/matcher_text_builders/respond_to')
|
23
25
|
end
|
24
26
|
end
|
25
27
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module RSpec
|
3
5
|
class MatcherTextTemplate
|
@@ -13,41 +15,41 @@ module SuperDiff
|
|
13
15
|
yield self if block_given?
|
14
16
|
end
|
15
17
|
|
16
|
-
def add_text(
|
17
|
-
add_token(PlainText,
|
18
|
+
def add_text(...)
|
19
|
+
add_token(PlainText, ...)
|
18
20
|
end
|
19
21
|
|
20
|
-
def add_text_in_color(
|
21
|
-
add_token(ColorizedText,
|
22
|
+
def add_text_in_color(...)
|
23
|
+
add_token(ColorizedText, ...)
|
22
24
|
end
|
23
25
|
|
24
|
-
def add_text_in_singleline_mode(
|
25
|
-
add_token(PlainTextInSinglelineMode,
|
26
|
+
def add_text_in_singleline_mode(...)
|
27
|
+
add_token(PlainTextInSinglelineMode, ...)
|
26
28
|
end
|
27
29
|
|
28
|
-
def add_text_in_multiline_mode(
|
29
|
-
add_token(PlainTextInMultilineMode,
|
30
|
+
def add_text_in_multiline_mode(...)
|
31
|
+
add_token(PlainTextInMultilineMode, ...)
|
30
32
|
end
|
31
33
|
|
32
|
-
def add_list_in_color(
|
33
|
-
add_token(ColorizedList,
|
34
|
+
def add_list_in_color(...)
|
35
|
+
add_token(ColorizedList, ...)
|
34
36
|
end
|
35
37
|
|
36
|
-
def add_break(
|
37
|
-
add_token(Break,
|
38
|
+
def add_break(...)
|
39
|
+
add_token(Break, ...)
|
38
40
|
end
|
39
41
|
|
40
|
-
def insert(
|
41
|
-
add_token(Insertion,
|
42
|
+
def insert(...)
|
43
|
+
add_token(Insertion, ...)
|
42
44
|
end
|
43
45
|
|
44
46
|
def length_of_first_paragraph
|
45
|
-
Csi.decolorize(to_string_in_singleline_mode).split(
|
47
|
+
Csi.decolorize(to_string_in_singleline_mode).split("\n\n").first.length
|
46
48
|
end
|
47
49
|
|
48
50
|
def to_s(as_single_line: nil)
|
49
51
|
if length_of_first_paragraph > MAX_LINE_LENGTH ||
|
50
|
-
|
52
|
+
as_single_line == false
|
51
53
|
to_string_in_multiline_mode
|
52
54
|
elsif length_of_first_paragraph <= MAX_LINE_LENGTH ||
|
53
55
|
as_single_line == true
|
@@ -67,21 +69,17 @@ module SuperDiff
|
|
67
69
|
|
68
70
|
attr_reader :tokens
|
69
71
|
|
70
|
-
def add_token(klass,
|
71
|
-
tokens << klass.new(
|
72
|
+
def add_token(klass, ...)
|
73
|
+
tokens << klass.new(...)
|
72
74
|
end
|
73
75
|
|
74
76
|
class Base
|
75
77
|
def to_string_in_singleline_mode
|
76
|
-
raise NotImplementedError.
|
77
|
-
"#{self.class} must support #to_string_in_singleline_mode"
|
78
|
-
)
|
78
|
+
raise NotImplementedError, "#{self.class} must support #to_string_in_singleline_mode"
|
79
79
|
end
|
80
80
|
|
81
81
|
def to_string_in_multiline_mode
|
82
|
-
raise NotImplementedError.
|
83
|
-
"#{self.class} must support #to_string_in_multiline_mode"
|
84
|
-
)
|
82
|
+
raise NotImplementedError, "#{self.class} must support #to_string_in_multiline_mode"
|
85
83
|
end
|
86
84
|
|
87
85
|
def length
|
@@ -91,6 +89,7 @@ module SuperDiff
|
|
91
89
|
|
92
90
|
class Text < Base
|
93
91
|
def initialize(immediate_value = nil, &block)
|
92
|
+
super()
|
94
93
|
@immediate_value = immediate_value
|
95
94
|
@block = block
|
96
95
|
end
|
@@ -104,7 +103,7 @@ module SuperDiff
|
|
104
103
|
end
|
105
104
|
|
106
105
|
def to_s
|
107
|
-
raise NotImplementedError
|
106
|
+
raise NotImplementedError, "#{self.class} must support #to_s"
|
108
107
|
end
|
109
108
|
|
110
109
|
protected
|
@@ -112,11 +111,7 @@ module SuperDiff
|
|
112
111
|
attr_reader :immediate_value, :block
|
113
112
|
|
114
113
|
def evaluate
|
115
|
-
if immediate_value && block
|
116
|
-
raise ArgumentError.new(
|
117
|
-
"Cannot provide both immediate value and block"
|
118
|
-
)
|
119
|
-
end
|
114
|
+
raise ArgumentError, 'Cannot provide both immediate value and block' if immediate_value && block
|
120
115
|
|
121
116
|
immediate_value || block.call
|
122
117
|
end
|
@@ -124,12 +119,12 @@ module SuperDiff
|
|
124
119
|
def to_sentence(values)
|
125
120
|
case values.length
|
126
121
|
when 0
|
127
|
-
|
122
|
+
''
|
128
123
|
when 1
|
129
124
|
values[0]
|
130
125
|
else
|
131
126
|
# TODO: Use Oxford comma
|
132
|
-
values[0..-2].join(
|
127
|
+
values[0..-2].join(', ') + " and #{values[-1]}"
|
133
128
|
end
|
134
129
|
end
|
135
130
|
end
|
@@ -141,8 +136,8 @@ module SuperDiff
|
|
141
136
|
end
|
142
137
|
|
143
138
|
class ColorizedText < Text
|
144
|
-
def initialize(color,
|
145
|
-
super(
|
139
|
+
def initialize(color, ...)
|
140
|
+
super(...)
|
146
141
|
|
147
142
|
@color = color
|
148
143
|
end
|
@@ -165,8 +160,8 @@ module SuperDiff
|
|
165
160
|
end
|
166
161
|
|
167
162
|
class ColorizedList < Text
|
168
|
-
def initialize(color,
|
169
|
-
super(
|
163
|
+
def initialize(color, ...)
|
164
|
+
super(...)
|
170
165
|
|
171
166
|
@color = color
|
172
167
|
end
|
@@ -199,13 +194,13 @@ module SuperDiff
|
|
199
194
|
end
|
200
195
|
|
201
196
|
def to_string_in_multiline_mode
|
202
|
-
|
197
|
+
''
|
203
198
|
end
|
204
199
|
end
|
205
200
|
|
206
201
|
class PlainTextInMultilineMode < Text
|
207
202
|
def to_string_in_singleline_mode
|
208
|
-
|
203
|
+
''
|
209
204
|
end
|
210
205
|
|
211
206
|
def to_string_in_multiline_mode
|
@@ -215,7 +210,7 @@ module SuperDiff
|
|
215
210
|
|
216
211
|
class Break < Base
|
217
212
|
def to_string_in_singleline_mode
|
218
|
-
|
213
|
+
' '
|
219
214
|
end
|
220
215
|
|
221
216
|
def to_string_in_multiline_mode
|
@@ -1,14 +1,16 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module RSpec
|
3
5
|
module ObjectInspection
|
4
6
|
module InspectionTreeBuilders
|
5
7
|
def self.const_missing(missing_const_name)
|
6
8
|
if RSpec::InspectionTreeBuilders.const_defined?(missing_const_name)
|
7
|
-
warn <<~
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
warn <<~WARNING
|
10
|
+
WARNING: SuperDiff::RSpec::ObjectInspection::InspectionTreeBuilders::#{missing_const_name} is deprecated and will be removed in the next major release.
|
11
|
+
Please use SuperDiff::RSpec::InspectionTreeBuilders::#{missing_const_name} instead.
|
12
|
+
#{caller_locations.join("\n")}
|
13
|
+
WARNING
|
12
14
|
RSpec::InspectionTreeBuilders.const_get(missing_const_name)
|
13
15
|
else
|
14
16
|
super
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module RSpec
|
3
5
|
module OperationTreeBuilders
|
@@ -19,9 +21,7 @@ module SuperDiff
|
|
19
21
|
operations = []
|
20
22
|
|
21
23
|
(0...actual.length)
|
22
|
-
.reject
|
23
|
-
indexes_in_actual_but_not_in_expected.include?(index)
|
24
|
-
end
|
24
|
+
.reject { |index| indexes_in_actual_but_not_in_expected.include?(index) }
|
25
25
|
.each { |index| add_noop_to(operations, index) }
|
26
26
|
|
27
27
|
indexes_in_actual_but_not_in_expected.each do |index|
|
@@ -36,7 +36,7 @@ module SuperDiff
|
|
36
36
|
end
|
37
37
|
|
38
38
|
def build_operation_tree
|
39
|
-
OperationTrees::Array.new([])
|
39
|
+
Basic::OperationTrees::Array.new([])
|
40
40
|
end
|
41
41
|
|
42
42
|
private
|
@@ -1,21 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module RSpec
|
3
5
|
module OperationTreeBuilders
|
4
6
|
autoload(
|
5
7
|
:CollectionContainingExactly,
|
6
|
-
|
8
|
+
'super_diff/rspec/operation_tree_builders/collection_containing_exactly'
|
7
9
|
)
|
8
10
|
autoload(
|
9
11
|
:CollectionIncluding,
|
10
|
-
|
12
|
+
'super_diff/rspec/operation_tree_builders/collection_including'
|
11
13
|
)
|
12
14
|
autoload(
|
13
15
|
:HashIncluding,
|
14
|
-
|
16
|
+
'super_diff/rspec/operation_tree_builders/hash_including'
|
15
17
|
)
|
16
18
|
autoload(
|
17
19
|
:ObjectHavingAttributes,
|
18
|
-
|
20
|
+
'super_diff/rspec/operation_tree_builders/object_having_attributes'
|
19
21
|
)
|
20
22
|
end
|
21
23
|
end
|
data/lib/super_diff/rspec.rb
CHANGED
@@ -1,17 +1,19 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
require
|
4
|
-
|
5
|
-
require
|
3
|
+
require 'super_diff'
|
4
|
+
|
5
|
+
require 'super_diff/rspec/differs'
|
6
|
+
require 'super_diff/rspec/inspection_tree_builders'
|
7
|
+
require 'super_diff/rspec/operation_tree_builders'
|
6
8
|
|
7
9
|
module SuperDiff
|
8
10
|
module RSpec
|
9
|
-
autoload :AugmentedMatcher,
|
10
|
-
autoload :Configuration,
|
11
|
-
autoload :Differ,
|
12
|
-
autoload :MatcherTextBuilders,
|
13
|
-
autoload :MatcherTextTemplate,
|
14
|
-
autoload :ObjectInspection,
|
11
|
+
autoload :AugmentedMatcher, 'super_diff/rspec/augmented_matcher'
|
12
|
+
autoload :Configuration, 'super_diff/rspec/configuration'
|
13
|
+
autoload :Differ, 'super_diff/rspec/differ'
|
14
|
+
autoload :MatcherTextBuilders, 'super_diff/rspec/matcher_text_builders'
|
15
|
+
autoload :MatcherTextTemplate, 'super_diff/rspec/matcher_text_template'
|
16
|
+
autoload :ObjectInspection, 'super_diff/rspec/object_inspection'
|
15
17
|
|
16
18
|
def self.configure(&block)
|
17
19
|
SuperDiff.configure(&block)
|
@@ -83,9 +85,9 @@ module SuperDiff
|
|
83
85
|
end
|
84
86
|
|
85
87
|
def self.rspec_version
|
86
|
-
@
|
88
|
+
@rspec_version ||=
|
87
89
|
begin
|
88
|
-
require
|
90
|
+
require 'rspec/core/version'
|
89
91
|
Core::GemVersion.new(::RSpec::Core::Version::STRING)
|
90
92
|
end
|
91
93
|
end
|
@@ -121,4 +123,4 @@ module SuperDiff
|
|
121
123
|
end
|
122
124
|
end
|
123
125
|
|
124
|
-
require_relative
|
126
|
+
require_relative 'rspec/monkey_patches'
|
data/lib/super_diff/version.rb
CHANGED
data/lib/super_diff.rb
CHANGED
@@ -1,33 +1,35 @@
|
|
1
|
-
|
2
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'attr_extras/explicit'
|
4
|
+
require 'date'
|
3
5
|
|
4
6
|
module SuperDiff
|
5
|
-
autoload :Core,
|
6
|
-
autoload :Csi,
|
7
|
-
autoload :Differs,
|
8
|
-
autoload :EqualityMatchers,
|
9
|
-
autoload :Errors,
|
10
|
-
autoload :ObjectInspection,
|
11
|
-
autoload :OperationTreeBuilders,
|
12
|
-
autoload :OperationTreeFlatteners,
|
13
|
-
autoload :OperationTrees,
|
14
|
-
autoload :Operations,
|
15
|
-
autoload :VERSION,
|
7
|
+
autoload :Core, 'super_diff/core'
|
8
|
+
autoload :Csi, 'super_diff/csi'
|
9
|
+
autoload :Differs, 'super_diff/differs'
|
10
|
+
autoload :EqualityMatchers, 'super_diff/equality_matchers'
|
11
|
+
autoload :Errors, 'super_diff/errors'
|
12
|
+
autoload :ObjectInspection, 'super_diff/object_inspection'
|
13
|
+
autoload :OperationTreeBuilders, 'super_diff/operation_tree_builders'
|
14
|
+
autoload :OperationTreeFlatteners, 'super_diff/operation_tree_flatteners'
|
15
|
+
autoload :OperationTrees, 'super_diff/operation_trees'
|
16
|
+
autoload :Operations, 'super_diff/operations'
|
17
|
+
autoload :VERSION, 'super_diff/version'
|
16
18
|
|
17
19
|
def self.const_missing(missing_const_name)
|
18
20
|
if Core.const_defined?(missing_const_name)
|
19
|
-
warn <<~
|
21
|
+
warn <<~WARNING
|
20
22
|
WARNING: SuperDiff::#{missing_const_name} is deprecated and will be removed in the next major release.
|
21
23
|
Please use SuperDiff::Core::#{missing_const_name} instead.
|
22
24
|
#{caller_locations.join("\n")}
|
23
|
-
|
25
|
+
WARNING
|
24
26
|
Core.const_get(missing_const_name)
|
25
27
|
elsif Basic.const_defined?(missing_const_name)
|
26
|
-
warn <<~
|
28
|
+
warn <<~WARNING
|
27
29
|
WARNING: SuperDiff::#{missing_const_name} is deprecated and will be removed in the next major release.
|
28
30
|
Please use SuperDiff::Basic::#{missing_const_name} instead.
|
29
31
|
#{caller_locations.join("\n")}
|
30
|
-
|
32
|
+
WARNING
|
31
33
|
Basic.const_get(missing_const_name)
|
32
34
|
else
|
33
35
|
super
|
@@ -39,7 +41,7 @@ module SuperDiff
|
|
39
41
|
end
|
40
42
|
|
41
43
|
def self.configuration
|
42
|
-
@
|
44
|
+
@configuration ||= Core::Configuration.new
|
43
45
|
end
|
44
46
|
|
45
47
|
def self.diff(
|
@@ -113,7 +115,7 @@ module SuperDiff
|
|
113
115
|
|
114
116
|
def self.primitive?(value)
|
115
117
|
case value
|
116
|
-
when true, false, nil, Symbol, Numeric, Regexp, Class, String
|
118
|
+
when true, false, nil, Symbol, Numeric, Regexp, Class, Module, String
|
117
119
|
true
|
118
120
|
else
|
119
121
|
false
|
@@ -121,16 +123,12 @@ module SuperDiff
|
|
121
123
|
end
|
122
124
|
|
123
125
|
def self.insert_overrides(target_module, mod = nil, &block)
|
124
|
-
|
126
|
+
target_module.prepend(mod || Module.new(&block))
|
125
127
|
end
|
126
128
|
|
127
129
|
def self.insert_singleton_overrides(target_module, mod = nil, &block)
|
128
|
-
|
129
|
-
target_module.singleton_class.prepend(mod)
|
130
|
-
else
|
131
|
-
target_module.singleton_class.prepend(Module.new(&block))
|
132
|
-
end
|
130
|
+
target_module.singleton_class.prepend(mod || Module.new(&block))
|
133
131
|
end
|
134
132
|
end
|
135
133
|
|
136
|
-
require
|
134
|
+
require 'super_diff/basic'
|
data/super_diff.gemspec
CHANGED
@@ -1,32 +1,33 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require File.expand_path('lib/super_diff/version', __dir__)
|
2
4
|
|
3
5
|
Gem::Specification.new do |s|
|
4
|
-
s.name =
|
6
|
+
s.name = 'super_diff'
|
5
7
|
s.version = SuperDiff::VERSION
|
6
|
-
s.authors = [
|
7
|
-
s.email = [
|
8
|
-
s.homepage =
|
8
|
+
s.authors = ['Elliot Winkler', 'Splitwise, Inc.']
|
9
|
+
s.email = ['oss-community@splitwise.com']
|
10
|
+
s.homepage = 'https://github.com/splitwise/super_diff'
|
9
11
|
s.summary =
|
10
|
-
|
11
|
-
s.license =
|
12
|
+
'A better way to view differences between complex data structures in RSpec.'
|
13
|
+
s.license = 'MIT'
|
12
14
|
s.description = <<~DESC
|
13
15
|
SuperDiff is a gem that hooks into RSpec to intelligently display the
|
14
16
|
differences between two data structures of any type.
|
15
17
|
DESC
|
16
18
|
s.metadata = {
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
'bug_tracker_uri' => 'https://github.com/splitwise/super_diff/issues',
|
20
|
+
'changelog_uri' =>
|
21
|
+
'https://github.com/splitwise/super_diff/blob/main/CHANGELOG.md',
|
22
|
+
'rubygems_mfa_required' => 'true',
|
23
|
+
'source_code_uri' => 'https://github.com/splitwise/super_diff'
|
22
24
|
}
|
23
|
-
s.required_ruby_version =
|
25
|
+
s.required_ruby_version = '>= 3.0'
|
24
26
|
|
25
|
-
s.files = %w[README.md super_diff.gemspec] + Dir[
|
26
|
-
s.
|
27
|
-
s.executables = Dir["exe/**/*"].map { |f| File.basename(f) }
|
27
|
+
s.files = %w[README.md super_diff.gemspec] + Dir['lib/**/*']
|
28
|
+
s.executables = Dir['exe/**/*'].map { |f| File.basename(f) }
|
28
29
|
|
29
|
-
s.add_dependency
|
30
|
-
s.add_dependency
|
31
|
-
s.add_dependency
|
30
|
+
s.add_dependency 'attr_extras', '>= 6.2.4'
|
31
|
+
s.add_dependency 'diff-lcs'
|
32
|
+
s.add_dependency 'patience_diff'
|
32
33
|
end
|