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
|
class TieredLinesFormatter
|
@@ -29,8 +31,8 @@ module SuperDiff
|
|
29
31
|
class FormattableLine
|
30
32
|
extend AttrExtras.mixin
|
31
33
|
|
32
|
-
INDENTATION_UNIT =
|
33
|
-
ICONS = { delete:
|
34
|
+
INDENTATION_UNIT = ' '
|
35
|
+
ICONS = { delete: '-', insert: '+', elision: ' ', noop: ' ' }.freeze
|
34
36
|
COLORS = {
|
35
37
|
delete: :expected,
|
36
38
|
insert: :actual,
|
@@ -41,7 +43,7 @@ module SuperDiff
|
|
41
43
|
pattr_initialize :line
|
42
44
|
|
43
45
|
def content
|
44
|
-
icon
|
46
|
+
"#{icon} #{indentation}#{line.prefix}#{line.value}#{possible_comma}"
|
45
47
|
end
|
46
48
|
|
47
49
|
def color
|
@@ -69,7 +71,7 @@ module SuperDiff
|
|
69
71
|
end
|
70
72
|
|
71
73
|
def possible_comma
|
72
|
-
line.add_comma? ?
|
74
|
+
line.add_comma? ? ',' : ''
|
73
75
|
end
|
74
76
|
end
|
75
77
|
end
|
data/lib/super_diff/core.rb
CHANGED
@@ -1,69 +1,71 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Core
|
3
|
-
autoload :AbstractDiffer,
|
5
|
+
autoload :AbstractDiffer, 'super_diff/core/abstract_differ'
|
4
6
|
autoload(
|
5
7
|
:AbstractInspectionTreeBuilder,
|
6
|
-
|
8
|
+
'super_diff/core/abstract_inspection_tree_builder'
|
7
9
|
)
|
8
|
-
autoload :AbstractOperationTree,
|
10
|
+
autoload :AbstractOperationTree, 'super_diff/core/abstract_operation_tree'
|
9
11
|
autoload(
|
10
12
|
:AbstractOperationTreeBuilder,
|
11
|
-
|
13
|
+
'super_diff/core/abstract_operation_tree_builder'
|
12
14
|
)
|
13
15
|
autoload(
|
14
16
|
:AbstractOperationTreeFlattener,
|
15
|
-
|
17
|
+
'super_diff/core/abstract_operation_tree_flattener'
|
16
18
|
)
|
17
|
-
autoload :BinaryOperation,
|
19
|
+
autoload :BinaryOperation, 'super_diff/core/binary_operation'
|
18
20
|
autoload(
|
19
21
|
:ColorizedDocumentExtensions,
|
20
|
-
|
22
|
+
'super_diff/core/colorized_document_extensions'
|
21
23
|
)
|
22
|
-
autoload :Configuration,
|
23
|
-
autoload :DifferDispatcher,
|
24
|
-
autoload :GemVersion,
|
25
|
-
autoload :Helpers,
|
26
|
-
autoload :ImplementationChecks,
|
27
|
-
autoload :InspectionTree,
|
24
|
+
autoload :Configuration, 'super_diff/core/configuration'
|
25
|
+
autoload :DifferDispatcher, 'super_diff/core/differ_dispatcher'
|
26
|
+
autoload :GemVersion, 'super_diff/core/gem_version'
|
27
|
+
autoload :Helpers, 'super_diff/core/helpers'
|
28
|
+
autoload :ImplementationChecks, 'super_diff/core/implementation_checks'
|
29
|
+
autoload :InspectionTree, 'super_diff/core/inspection_tree'
|
28
30
|
autoload(
|
29
31
|
:InspectionTreeBuilderDispatcher,
|
30
|
-
|
32
|
+
'super_diff/core/inspection_tree_builder_dispatcher'
|
31
33
|
)
|
32
|
-
autoload :InspectionTreeNodes,
|
33
|
-
autoload :Line,
|
34
|
+
autoload :InspectionTreeNodes, 'super_diff/core/inspection_tree_nodes'
|
35
|
+
autoload :Line, 'super_diff/core/line'
|
34
36
|
autoload(
|
35
37
|
:OperationTreeBuilderDispatcher,
|
36
|
-
|
38
|
+
'super_diff/core/operation_tree_builder_dispatcher'
|
37
39
|
)
|
38
40
|
autoload(
|
39
41
|
:NoDifferAvailableError,
|
40
|
-
|
42
|
+
'super_diff/core/no_differ_available_error'
|
41
43
|
)
|
42
44
|
autoload(
|
43
45
|
:NoInspectionTreeAvailableError,
|
44
|
-
|
46
|
+
'super_diff/core/no_inspection_tree_builder_available_error'
|
45
47
|
)
|
46
48
|
autoload(
|
47
49
|
:NoOperationTreeBuilderAvailableError,
|
48
|
-
|
50
|
+
'super_diff/core/no_operation_tree_builder_available_error'
|
49
51
|
)
|
50
52
|
autoload(
|
51
53
|
:NoOperationTreeAvailableError,
|
52
|
-
|
54
|
+
'super_diff/core/no_operation_tree_available_error'
|
53
55
|
)
|
54
|
-
autoload :OperationTreeFinder,
|
56
|
+
autoload :OperationTreeFinder, 'super_diff/core/operation_tree_finder'
|
55
57
|
autoload(
|
56
58
|
:PrefixForNextInspectionTreeNode,
|
57
|
-
|
59
|
+
'super_diff/core/prefix_for_next_inspection_tree_node'
|
58
60
|
)
|
59
61
|
autoload(
|
60
62
|
:PreludeForNextInspectionTreeNode,
|
61
|
-
|
63
|
+
'super_diff/core/prelude_for_next_inspection_tree_node'
|
62
64
|
)
|
63
|
-
autoload :RecursionGuard,
|
64
|
-
autoload :TieredLines,
|
65
|
-
autoload :TieredLinesElider,
|
66
|
-
autoload :TieredLinesFormatter,
|
67
|
-
autoload :UnaryOperation,
|
65
|
+
autoload :RecursionGuard, 'super_diff/core/recursion_guard'
|
66
|
+
autoload :TieredLines, 'super_diff/core/tiered_lines'
|
67
|
+
autoload :TieredLinesElider, 'super_diff/core/tiered_lines_elider'
|
68
|
+
autoload :TieredLinesFormatter, 'super_diff/core/tiered_lines_formatter'
|
69
|
+
autoload :UnaryOperation, 'super_diff/core/unary_operation'
|
68
70
|
end
|
69
71
|
end
|
data/lib/super_diff/csi/color.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Csi
|
3
5
|
class Color
|
@@ -51,10 +53,8 @@ module SuperDiff
|
|
51
53
|
if %i[foreground background].include?(layer)
|
52
54
|
layer
|
53
55
|
else
|
54
|
-
raise ArgumentError.
|
55
|
-
|
56
|
-
"Layer must be :foreground or :background."
|
57
|
-
)
|
56
|
+
raise ArgumentError, "Invalid layer #{layer.inspect}. " \
|
57
|
+
'Layer must be :foreground or :background.'
|
58
58
|
end
|
59
59
|
end
|
60
60
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Csi
|
3
5
|
class ColorSequenceBlock
|
@@ -14,7 +16,7 @@ module SuperDiff
|
|
14
16
|
def push(color)
|
15
17
|
colors.push(color)
|
16
18
|
end
|
17
|
-
|
19
|
+
alias << push
|
18
20
|
|
19
21
|
def to_s
|
20
22
|
colors.map(&:to_s).join
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Csi
|
3
5
|
class ColorizedDocument < Document
|
@@ -19,9 +21,9 @@ module SuperDiff
|
|
19
21
|
add_part(Csi.reset_sequence)
|
20
22
|
|
21
23
|
color_sequence_to_reopen = color_sequences_open_in_parent.pop
|
22
|
-
|
23
|
-
|
24
|
-
|
24
|
+
return unless color_sequences_open_in_parent.any?
|
25
|
+
|
26
|
+
add_part(color_sequence_to_reopen)
|
25
27
|
end
|
26
28
|
|
27
29
|
def colorize_inline(contents, colors, opts)
|
@@ -54,13 +56,9 @@ module SuperDiff
|
|
54
56
|
ColorSequenceBlock
|
55
57
|
.new(colors)
|
56
58
|
.tap do |sequence|
|
57
|
-
if opts[:fg]
|
58
|
-
sequence << Color.resolve(opts[:fg], layer: :foreground)
|
59
|
-
end
|
59
|
+
sequence << Color.resolve(opts[:fg], layer: :foreground) if opts[:fg]
|
60
60
|
|
61
|
-
if opts[:bg]
|
62
|
-
sequence << Color.resolve(opts[:bg], layer: :background)
|
63
|
-
end
|
61
|
+
sequence << Color.resolve(opts[:bg], layer: :background) if opts[:bg]
|
64
62
|
end
|
65
63
|
end
|
66
64
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SuperDiff
|
2
4
|
module Csi
|
3
5
|
class Document
|
@@ -14,8 +16,8 @@ module SuperDiff
|
|
14
16
|
parts.each(&block)
|
15
17
|
end
|
16
18
|
|
17
|
-
def bold(
|
18
|
-
colorize(BoldSequence.new,
|
19
|
+
def bold(...)
|
20
|
+
colorize(BoldSequence.new, ...)
|
19
21
|
end
|
20
22
|
|
21
23
|
def colorize(*args, **opts, &block)
|
@@ -23,11 +25,10 @@ module SuperDiff
|
|
23
25
|
args.partition { |arg| arg.is_a?(String) || arg.is_a?(self.class) }
|
24
26
|
|
25
27
|
if colors[0].is_a?(Symbol)
|
26
|
-
if colors[0] == :colorize
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
end
|
28
|
+
raise ArgumentError, "#colorize can't call itself!" if colors[0] == :colorize
|
29
|
+
|
30
|
+
public_send(colors[0], *contents, *colors[1..], **opts, &block)
|
31
|
+
|
31
32
|
elsif !block && colors.empty? && opts.empty?
|
32
33
|
text(*contents)
|
33
34
|
elsif block
|
@@ -35,10 +36,10 @@ module SuperDiff
|
|
35
36
|
elsif contents.any?
|
36
37
|
colorize_inline(contents, colors, opts)
|
37
38
|
else
|
38
|
-
raise ArgumentError,
|
39
|
+
raise ArgumentError, 'Must have something to colorize!'
|
39
40
|
end
|
40
41
|
end
|
41
|
-
|
42
|
+
alias colored colorize
|
42
43
|
|
43
44
|
def text(*contents, **, &block)
|
44
45
|
if block
|
@@ -46,10 +47,10 @@ module SuperDiff
|
|
46
47
|
elsif contents.any?
|
47
48
|
contents.each { |part| add_part(part) }
|
48
49
|
else
|
49
|
-
raise ArgumentError
|
50
|
+
raise ArgumentError, 'Must have something to add to the document!'
|
50
51
|
end
|
51
52
|
end
|
52
|
-
|
53
|
+
alias plain text
|
53
54
|
|
54
55
|
def line(*contents, indent_by: 0, &block)
|
55
56
|
indent(by: indent_by) do
|
@@ -60,9 +61,7 @@ module SuperDiff
|
|
60
61
|
elsif contents.any?
|
61
62
|
text(*contents)
|
62
63
|
else
|
63
|
-
raise ArgumentError
|
64
|
-
"Must have something to add to the document!"
|
65
|
-
)
|
64
|
+
raise ArgumentError, 'Must have something to add to the document!'
|
66
65
|
end
|
67
66
|
end
|
68
67
|
|
@@ -75,7 +74,7 @@ module SuperDiff
|
|
75
74
|
|
76
75
|
def indent(by:, &block)
|
77
76
|
# TODO: This won't work if using `text` manually to add lines
|
78
|
-
indentation_stack << (by.is_a?(String) ? by :
|
77
|
+
indentation_stack << (by.is_a?(String) ? by : ' ' * by)
|
79
78
|
evaluate_block(&block)
|
80
79
|
indentation_stack.pop
|
81
80
|
end
|
@@ -116,13 +115,11 @@ module SuperDiff
|
|
116
115
|
end
|
117
116
|
elsif Csi::Color.exists?(name.to_sym)
|
118
117
|
ColorRequest.new(name: name.to_sym, line: false)
|
119
|
-
else
|
120
|
-
nil
|
121
118
|
end
|
122
119
|
end
|
123
120
|
|
124
121
|
def evaluate_block(&block)
|
125
|
-
if block.arity
|
122
|
+
if block.arity.positive?
|
126
123
|
block.call(self)
|
127
124
|
else
|
128
125
|
instance_eval(&block)
|
@@ -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,16 +1,18 @@
|
|
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,
|
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'
|
14
16
|
|
15
17
|
def self.reset_sequence
|
16
18
|
ResetSequence.new
|