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,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Csi
|
3
5
|
class EightBitColor < Color
|
4
|
-
VALID_COMPONENT_RANGE = (0..6)
|
5
|
-
VALID_CODE_RANGE = (0..255)
|
6
|
+
VALID_COMPONENT_RANGE = (0..6)
|
7
|
+
VALID_CODE_RANGE = (0..255)
|
6
8
|
VALID_CODES_BY_NAME = {
|
7
9
|
black: 0,
|
8
10
|
red: 1,
|
@@ -35,7 +37,7 @@ module SuperDiff
|
|
35
37
|
LEADING_CODES_BY_LAYER = { foreground: 38, background: 48 }.freeze
|
36
38
|
LAYERS_BY_LEADING_CODE = LEADING_CODES_BY_LAYER.invert.freeze
|
37
39
|
SERIAL_CODE = 5
|
38
|
-
OPENING_REGEX = /\e\[(\d+);#{SERIAL_CODE};(\d+)m
|
40
|
+
OPENING_REGEX = /\e\[(\d+);#{SERIAL_CODE};(\d+)m/
|
39
41
|
|
40
42
|
def self.opening_regex
|
41
43
|
OPENING_REGEX
|
@@ -50,6 +52,7 @@ module SuperDiff
|
|
50
52
|
type: nil,
|
51
53
|
index: nil
|
52
54
|
)
|
55
|
+
super()
|
53
56
|
if value
|
54
57
|
case value
|
55
58
|
when Symbol
|
@@ -92,14 +95,12 @@ module SuperDiff
|
|
92
95
|
|
93
96
|
def interpret_triplet!(red:, green:, blue:)
|
94
97
|
if invalid_triplet?(red, green, blue)
|
95
|
-
raise ArgumentError
|
96
|
-
|
97
|
-
|
98
|
-
"#{VALID_COMPONENT_RANGE.begin} and #{VALID_COMPONENT_RANGE.end}."
|
99
|
-
)
|
98
|
+
raise ArgumentError, "(#{red},#{green},#{blue}) is not a valid color " \
|
99
|
+
'specification. All components must be between ' \
|
100
|
+
"#{VALID_COMPONENT_RANGE.begin} and #{VALID_COMPONENT_RANGE.end}."
|
100
101
|
end
|
101
102
|
|
102
|
-
16 + 36 * red + 6 * green + blue
|
103
|
+
16 + (36 * red) + (6 * green) + blue
|
103
104
|
end
|
104
105
|
|
105
106
|
def invalid_triplet?(*values)
|
@@ -107,37 +108,33 @@ module SuperDiff
|
|
107
108
|
end
|
108
109
|
|
109
110
|
def interpret_color_name!(name)
|
110
|
-
|
111
|
+
unless VALID_CODES_BY_NAME.include?(name)
|
111
112
|
message =
|
112
|
-
"#{name.inspect} is not a valid color name.\n"
|
113
|
-
|
113
|
+
"#{name.inspect} is not a valid color name.\n" \
|
114
|
+
"Valid names are:\n"
|
114
115
|
|
115
|
-
VALID_CODES_BY_NAME.
|
116
|
+
VALID_CODES_BY_NAME.each_key do |valid_name|
|
116
117
|
message << "- #{valid_name}\n"
|
117
118
|
end
|
118
119
|
|
119
|
-
raise ArgumentError
|
120
|
+
raise ArgumentError, message
|
120
121
|
end
|
121
122
|
|
122
123
|
VALID_CODES_BY_NAME[name]
|
123
124
|
end
|
124
125
|
|
125
126
|
def interpret_pair!(type:, index:)
|
126
|
-
|
127
|
-
raise ArgumentError.
|
128
|
-
|
129
|
-
"Type must be one of: #{VALID_PAIR_TYPES}"
|
130
|
-
)
|
127
|
+
unless VALID_PAIR_TYPES.include?(type)
|
128
|
+
raise ArgumentError, 'Given pair did not have a valid type. ' \
|
129
|
+
"Type must be one of: #{VALID_PAIR_TYPES}"
|
131
130
|
end
|
132
131
|
|
133
132
|
valid_range = VALID_PAIR_INDEX_RANGES[type]
|
134
133
|
|
135
|
-
|
136
|
-
raise ArgumentError.
|
137
|
-
|
138
|
-
|
139
|
-
"#{valid_range.end}."
|
140
|
-
)
|
134
|
+
unless valid_range.cover?(index)
|
135
|
+
raise ArgumentError, 'Given pair did not have a valid index. ' \
|
136
|
+
"For #{type}, index must be between #{valid_range.begin} and " \
|
137
|
+
"#{valid_range.end}."
|
141
138
|
end
|
142
139
|
|
143
140
|
STARTING_INDICES[type] + index
|
@@ -146,16 +143,16 @@ module SuperDiff
|
|
146
143
|
def interpret_sequence!(sequence)
|
147
144
|
match = sequence.match(OPENING_REGEX)
|
148
145
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
|
154
|
-
|
146
|
+
return unless match
|
147
|
+
|
148
|
+
{
|
149
|
+
layer: interpret_layer!(match[1]),
|
150
|
+
code: interpret_code!(match[2].to_i)
|
151
|
+
}
|
155
152
|
end
|
156
153
|
|
157
154
|
def interpret_layer!(value)
|
158
|
-
if value.to_s.to_i
|
155
|
+
if value.to_s.to_i.positive?
|
159
156
|
LAYERS_BY_LEADING_CODE.fetch(value.to_s.to_i)
|
160
157
|
else
|
161
158
|
super
|
@@ -163,11 +160,9 @@ module SuperDiff
|
|
163
160
|
end
|
164
161
|
|
165
162
|
def interpret_code!(code)
|
166
|
-
|
167
|
-
raise ArgumentError.
|
168
|
-
|
169
|
-
"(must be between 0 and 255)."
|
170
|
-
)
|
163
|
+
unless VALID_CODE_RANGE.cover?(code)
|
164
|
+
raise ArgumentError, "#{code.inspect} is not a valid color code " \
|
165
|
+
'(must be between 0 and 255).'
|
171
166
|
end
|
172
167
|
|
173
168
|
code
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Csi
|
3
5
|
class FourBitColor < Color
|
@@ -83,10 +85,10 @@ module SuperDiff
|
|
83
85
|
end
|
84
86
|
VALID_NAMES = VALID_CODES_BY_NAME.keys
|
85
87
|
VALID_CODE_RANGES = [30..37, 40..47, 90..97, 100..107].freeze
|
86
|
-
OPENING_REGEX = /\e\[(\d+)m
|
88
|
+
OPENING_REGEX = /\e\[(\d+)m/
|
87
89
|
|
88
90
|
def self.exists?(name)
|
89
|
-
VALID_CODES_BY_NAME.
|
91
|
+
VALID_CODES_BY_NAME.key?(name)
|
90
92
|
end
|
91
93
|
|
92
94
|
def self.opening_regex
|
@@ -94,6 +96,7 @@ module SuperDiff
|
|
94
96
|
end
|
95
97
|
|
96
98
|
def initialize(value, layer: nil)
|
99
|
+
super()
|
97
100
|
if value.is_a?(Symbol)
|
98
101
|
@name = interpret_name!(value)
|
99
102
|
@layer = interpret_layer!(layer)
|
@@ -124,14 +127,14 @@ module SuperDiff
|
|
124
127
|
attr_reader :name
|
125
128
|
|
126
129
|
def interpret_name!(name)
|
127
|
-
|
130
|
+
unless VALID_NAMES.include?(name)
|
128
131
|
message =
|
129
|
-
"#{name.inspect} is not a valid color name.\n"
|
130
|
-
|
132
|
+
"#{name.inspect} is not a valid color name.\n" \
|
133
|
+
"Valid names are:\n"
|
131
134
|
|
132
135
|
VALID_NAMES.each { |valid_name| message << "- #{valid_name}" }
|
133
136
|
|
134
|
-
raise ArgumentError
|
137
|
+
raise ArgumentError, message
|
135
138
|
end
|
136
139
|
|
137
140
|
name
|
@@ -146,14 +149,14 @@ module SuperDiff
|
|
146
149
|
def interpret_code!(code)
|
147
150
|
if VALID_CODE_RANGES.none? { |range| range.cover?(code) }
|
148
151
|
message =
|
149
|
-
"#{code.inspect} is not a valid color code.\n"
|
150
|
-
|
152
|
+
"#{code.inspect} is not a valid color code.\n" \
|
153
|
+
"Valid codes are:\n"
|
151
154
|
|
152
155
|
VALID_CODE_RANGES.each do |range|
|
153
156
|
message << "- #{range.begin} through #{range.end}\n"
|
154
157
|
end
|
155
158
|
|
156
|
-
raise ArgumentError
|
159
|
+
raise ArgumentError, message
|
157
160
|
end
|
158
161
|
|
159
162
|
COLORS_BY_CODE.fetch(code)
|
@@ -1,17 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Csi
|
3
5
|
class TwentyFourBitColor < Color
|
4
|
-
VALID_COMPONENT_RANGE = (0..255)
|
6
|
+
VALID_COMPONENT_RANGE = (0..255)
|
5
7
|
LEADING_CODES_BY_LAYER = { foreground: 38, background: 48 }.freeze
|
6
8
|
LAYERS_BY_LEADING_CODE = LEADING_CODES_BY_LAYER.invert.freeze
|
7
9
|
SERIAL_CODE = 2
|
8
|
-
OPENING_REGEX = /\e\[(\d+);#{SERIAL_CODE};(\d+);(\d+);(\d+)m
|
10
|
+
OPENING_REGEX = /\e\[(\d+);#{SERIAL_CODE};(\d+);(\d+);(\d+)m/
|
9
11
|
|
10
12
|
def self.opening_regex
|
11
13
|
OPENING_REGEX
|
12
14
|
end
|
13
15
|
|
14
16
|
def initialize(value = nil, layer: nil, red: nil, green: nil, blue: nil)
|
17
|
+
super()
|
15
18
|
if value
|
16
19
|
pair = interpret_sequence!(value)
|
17
20
|
@triplet = pair.fetch(:triplet)
|
@@ -23,13 +26,13 @@ module SuperDiff
|
|
23
26
|
end
|
24
27
|
|
25
28
|
def to_s
|
26
|
-
[
|
29
|
+
[ # rubocop:disable Style/StringConcatenation
|
27
30
|
"\e[#{leading_code}",
|
28
31
|
SERIAL_CODE,
|
29
32
|
triplet.red,
|
30
33
|
triplet.blue,
|
31
34
|
triplet.green
|
32
|
-
].join(
|
35
|
+
].join(';') + 'm'
|
33
36
|
end
|
34
37
|
|
35
38
|
def to_foreground
|
@@ -52,26 +55,24 @@ module SuperDiff
|
|
52
55
|
def interpret_sequence!(sequence)
|
53
56
|
match = sequence.match(OPENING_REGEX)
|
54
57
|
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
58
|
+
return unless match
|
59
|
+
|
60
|
+
{
|
61
|
+
layer: interpret_layer!(match[1]),
|
62
|
+
triplet:
|
63
|
+
interpret_triplet!(
|
64
|
+
red: match[2].to_i,
|
65
|
+
green: match[3].to_i,
|
66
|
+
blue: match[4].to_i
|
67
|
+
)
|
68
|
+
}
|
66
69
|
end
|
67
70
|
|
68
71
|
def interpret_triplet!(red:, green:, blue:)
|
69
72
|
if invalid_triplet?(red, green, blue)
|
70
|
-
raise ArgumentError
|
71
|
-
|
72
|
-
|
73
|
-
"#{VALID_COMPONENT_RANGE.begin} and #{VALID_COMPONENT_RANGE.end}."
|
74
|
-
)
|
73
|
+
raise ArgumentError, "(#{red},#{green},#{blue}) is not a valid color " \
|
74
|
+
'specification. All components must be between ' \
|
75
|
+
"#{VALID_COMPONENT_RANGE.begin} and #{VALID_COMPONENT_RANGE.end}."
|
75
76
|
end
|
76
77
|
|
77
78
|
Triplet.new(red: red, green: green, blue: blue)
|
@@ -82,7 +83,7 @@ module SuperDiff
|
|
82
83
|
end
|
83
84
|
|
84
85
|
def interpret_layer!(value)
|
85
|
-
if value.to_s.to_i
|
86
|
+
if value.to_s.to_i.positive?
|
86
87
|
LAYERS_BY_LEADING_CODE.fetch(value.to_s.to_i)
|
87
88
|
else
|
88
89
|
super
|
data/lib/super_diff/csi.rb
CHANGED
@@ -1,37 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
# Source: <https://en.wikipedia.org/wiki/ANSI_escape_code>
|
2
4
|
module SuperDiff
|
3
5
|
module Csi
|
4
|
-
autoload :BoldSequence,
|
5
|
-
autoload :Color,
|
6
|
-
autoload :ColorSequenceBlock,
|
7
|
-
autoload :ColorizedDocument,
|
8
|
-
autoload :Document,
|
9
|
-
autoload :EightBitColor,
|
10
|
-
autoload :FourBitColor,
|
11
|
-
autoload :ResetSequence,
|
12
|
-
autoload :TwentyFourBitColor,
|
13
|
-
autoload :UncolorizedDocument,
|
14
|
-
|
15
|
-
class << self
|
16
|
-
attr_writer :color_enabled
|
17
|
-
end
|
6
|
+
autoload :BoldSequence, 'super_diff/csi/bold_sequence'
|
7
|
+
autoload :Color, 'super_diff/csi/color'
|
8
|
+
autoload :ColorSequenceBlock, 'super_diff/csi/color_sequence_block'
|
9
|
+
autoload :ColorizedDocument, 'super_diff/csi/colorized_document'
|
10
|
+
autoload :Document, 'super_diff/csi/document'
|
11
|
+
autoload :EightBitColor, 'super_diff/csi/eight_bit_color'
|
12
|
+
autoload :FourBitColor, 'super_diff/csi/four_bit_color'
|
13
|
+
autoload :ResetSequence, 'super_diff/csi/reset_sequence'
|
14
|
+
autoload :TwentyFourBitColor, 'super_diff/csi/twenty_four_bit_color'
|
15
|
+
autoload :UncolorizedDocument, 'super_diff/csi/uncolorized_document'
|
18
16
|
|
19
17
|
def self.reset_sequence
|
20
18
|
ResetSequence.new
|
21
19
|
end
|
22
20
|
|
23
|
-
def self.color_enabled?
|
24
|
-
@color_enabled
|
25
|
-
end
|
26
|
-
|
27
|
-
def self.colorize(*args, **opts, &block)
|
28
|
-
if color_enabled?
|
29
|
-
ColorizedDocument.new(*args, **opts, &block)
|
30
|
-
else
|
31
|
-
UncolorizedDocument.new(*args, **opts, &block)
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
21
|
def self.decolorize(text)
|
36
22
|
text.gsub(/\e\[\d+(?:;\d+)*m(.+?)\e\[0m/, '\1')
|
37
23
|
end
|
@@ -39,21 +25,5 @@ module SuperDiff
|
|
39
25
|
def self.already_colorized?(text)
|
40
26
|
text.match?(/\e\[\d+m/)
|
41
27
|
end
|
42
|
-
|
43
|
-
def self.inspect_colors_in(text)
|
44
|
-
[FourBitColor, EightBitColor, TwentyFourBitColor].reduce(
|
45
|
-
text
|
46
|
-
) do |str, klass|
|
47
|
-
klass.sub_colorized_areas_in(str) do |area, color|
|
48
|
-
color_block = colorize("◼︎", color.to_foreground)
|
49
|
-
|
50
|
-
layer_indicator = (color.foreground? ? "(fg)" : "(bg)")
|
51
|
-
|
52
|
-
"#{color_block} #{layer_indicator} ❮#{area}❯"
|
53
|
-
end
|
54
|
-
end
|
55
|
-
end
|
56
|
-
|
57
|
-
self.color_enabled = false
|
58
28
|
end
|
59
29
|
end
|
data/lib/super_diff/differs.rb
CHANGED
@@ -1,19 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Differs
|
3
5
|
def self.const_missing(missing_const_name)
|
4
6
|
if missing_const_name == :Base
|
5
|
-
warn <<~
|
7
|
+
warn <<~WARNING
|
6
8
|
WARNING: SuperDiff::Differs::#{missing_const_name} is deprecated and will be removed in the next major release.
|
7
9
|
Please use SuperDiff::Core::AbstractDiffer instead.
|
8
10
|
#{caller_locations.join("\n")}
|
9
|
-
|
11
|
+
WARNING
|
10
12
|
Core::AbstractDiffer
|
11
13
|
elsif Basic::Differs.const_defined?(missing_const_name)
|
12
|
-
warn <<~
|
14
|
+
warn <<~WARNING
|
13
15
|
WARNING: SuperDiff::Differs::#{missing_const_name} is deprecated and will be removed in the next major release.
|
14
16
|
Please use SuperDiff::Basic::Differs::#{missing_const_name} instead.
|
15
17
|
#{caller_locations.join("\n")}
|
16
|
-
|
18
|
+
WARNING
|
17
19
|
Basic::Differs.const_get(missing_const_name)
|
18
20
|
else
|
19
21
|
super
|
@@ -1,30 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module EqualityMatchers
|
3
5
|
class Array < Base
|
4
6
|
def self.applies_to?(value)
|
5
|
-
value.
|
7
|
+
value.instance_of?(::Array)
|
6
8
|
end
|
7
9
|
|
8
10
|
def fail
|
9
11
|
<<~OUTPUT.strip
|
10
|
-
|
12
|
+
Differing arrays.
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
14
|
+
#{
|
15
|
+
Core::Helpers.style(
|
16
|
+
:expected,
|
17
|
+
"Expected: #{SuperDiff.inspect_object(expected, as_lines: false)}"
|
18
|
+
)
|
19
|
+
}
|
20
|
+
#{
|
21
|
+
Core::Helpers.style(
|
22
|
+
:actual,
|
23
|
+
" Actual: #{SuperDiff.inspect_object(actual, as_lines: false)}"
|
24
|
+
)
|
25
|
+
}
|
24
26
|
|
25
|
-
|
27
|
+
Diff:
|
26
28
|
|
27
|
-
|
29
|
+
#{diff}
|
28
30
|
OUTPUT
|
29
31
|
end
|
30
32
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module EqualityMatchers
|
3
5
|
class Base
|
@@ -11,14 +13,14 @@ module SuperDiff
|
|
11
13
|
[
|
12
14
|
:expected!,
|
13
15
|
:actual!,
|
14
|
-
extra_operation_tree_builder_classes: [],
|
15
|
-
|
16
|
+
{ extra_operation_tree_builder_classes: [],
|
17
|
+
extra_diff_formatter_classes: [] }
|
16
18
|
]
|
17
19
|
)
|
18
20
|
|
19
21
|
def call
|
20
|
-
if expected == actual
|
21
|
-
|
22
|
+
if expected == actual # rubocop:disable Style/GuardClause `fail` is not Kernel#fail
|
23
|
+
''
|
22
24
|
else
|
23
25
|
fail
|
24
26
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module EqualityMatchers
|
3
5
|
class Default < Base
|
@@ -20,20 +22,20 @@ module SuperDiff
|
|
20
22
|
def expected_line
|
21
23
|
Core::Helpers.style(
|
22
24
|
:expected,
|
23
|
-
"Expected:
|
25
|
+
"Expected: #{SuperDiff.inspect_object(expected, as_lines: false)}"
|
24
26
|
)
|
25
27
|
end
|
26
28
|
|
27
29
|
def actual_line
|
28
30
|
Core::Helpers.style(
|
29
31
|
:actual,
|
30
|
-
" Actual:
|
32
|
+
" Actual: #{SuperDiff.inspect_object(actual, as_lines: false)}"
|
31
33
|
)
|
32
34
|
end
|
33
35
|
|
34
36
|
def diff_section
|
35
37
|
if diff.empty?
|
36
|
-
|
38
|
+
''
|
37
39
|
else
|
38
40
|
<<~SECTION
|
39
41
|
|
@@ -1,30 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module EqualityMatchers
|
3
5
|
class Hash < Base
|
4
6
|
def self.applies_to?(value)
|
5
|
-
value.
|
7
|
+
value.instance_of?(::Hash)
|
6
8
|
end
|
7
9
|
|
8
10
|
def fail
|
9
11
|
<<~OUTPUT.strip
|
10
|
-
|
12
|
+
Differing hashes.
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
14
|
+
#{
|
15
|
+
Core::Helpers.style(
|
16
|
+
:expected,
|
17
|
+
"Expected: #{SuperDiff.inspect_object(expected, as_lines: false)}"
|
18
|
+
)
|
19
|
+
}
|
20
|
+
#{
|
21
|
+
Core::Helpers.style(
|
22
|
+
:actual,
|
23
|
+
" Actual: #{SuperDiff.inspect_object(actual, as_lines: false)}"
|
24
|
+
)
|
25
|
+
}
|
24
26
|
|
25
|
-
|
27
|
+
Diff:
|
26
28
|
|
27
|
-
|
29
|
+
#{diff}
|
28
30
|
OUTPUT
|
29
31
|
end
|
30
32
|
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module EqualityMatchers
|
3
5
|
class Main
|
4
6
|
extend AttrExtras.mixin
|
5
7
|
|
6
|
-
method_object [:expected!, :actual!, extra_classes: []]
|
8
|
+
method_object [:expected!, :actual!, { extra_classes: [] }]
|
7
9
|
|
8
10
|
def call
|
9
11
|
resolved_class.call(expected: expected, actual: actual)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module EqualityMatchers
|
3
5
|
class MultilineString < Base
|
@@ -7,25 +9,25 @@ module SuperDiff
|
|
7
9
|
|
8
10
|
def fail
|
9
11
|
<<~OUTPUT.strip
|
10
|
-
|
12
|
+
Differing strings.
|
11
13
|
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
14
|
+
#{
|
15
|
+
# TODO: This whole thing should not be red or green, just the values
|
16
|
+
Core::Helpers.style(
|
17
|
+
:expected,
|
18
|
+
"Expected: #{SuperDiff.inspect_object(expected, as_lines: false)}"
|
19
|
+
)
|
20
|
+
}
|
21
|
+
#{
|
22
|
+
Core::Helpers.style(
|
23
|
+
:actual,
|
24
|
+
" Actual: #{SuperDiff.inspect_object(actual, as_lines: false)}"
|
25
|
+
)
|
26
|
+
}
|
25
27
|
|
26
|
-
|
28
|
+
Diff:
|
27
29
|
|
28
|
-
|
30
|
+
#{diff}
|
29
31
|
OUTPUT
|
30
32
|
end
|
31
33
|
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module EqualityMatchers
|
3
5
|
class Primitive < Base
|
@@ -8,20 +10,20 @@ module SuperDiff
|
|
8
10
|
|
9
11
|
def fail
|
10
12
|
<<~OUTPUT.strip
|
11
|
-
|
13
|
+
Differing #{Core::Helpers.plural_type_for(actual)}.
|
12
14
|
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
15
|
+
#{
|
16
|
+
Core::Helpers.style(
|
17
|
+
:expected,
|
18
|
+
"Expected: #{SuperDiff.inspect_object(expected, as_lines: false)}"
|
19
|
+
)
|
20
|
+
}
|
21
|
+
#{
|
22
|
+
Core::Helpers.style(
|
23
|
+
:actual,
|
24
|
+
" Actual: #{SuperDiff.inspect_object(actual, as_lines: false)}"
|
25
|
+
)
|
26
|
+
}
|
25
27
|
OUTPUT
|
26
28
|
end
|
27
29
|
end
|