super_diff 0.3.0 → 0.5.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +104 -73
- data/lib/super_diff.rb +20 -11
- data/lib/super_diff/active_record.rb +21 -23
- data/lib/super_diff/active_record/diff_formatters/active_record_relation.rb +3 -3
- data/lib/super_diff/active_record/differs/active_record_relation.rb +3 -5
- data/lib/super_diff/active_record/monkey_patches.rb +9 -0
- data/lib/super_diff/active_record/object_inspection/inspectors/active_record_model.rb +32 -22
- data/lib/super_diff/active_record/object_inspection/inspectors/active_record_relation.rb +17 -7
- data/lib/super_diff/active_record/operation_tree_builders.rb +14 -0
- data/lib/super_diff/active_record/{operational_sequencers → operation_tree_builders}/active_record_model.rb +2 -2
- data/lib/super_diff/active_record/{operational_sequencers → operation_tree_builders}/active_record_relation.rb +4 -4
- data/lib/super_diff/active_record/{operation_sequences.rb → operation_trees.rb} +2 -2
- data/lib/super_diff/active_record/{operation_sequences → operation_trees}/active_record_relation.rb +2 -2
- data/lib/super_diff/active_support.rb +16 -19
- data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +3 -3
- data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +3 -5
- data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +17 -7
- data/lib/super_diff/active_support/operation_tree_builders.rb +10 -0
- data/lib/super_diff/active_support/{operational_sequencers → operation_tree_builders}/hash_with_indifferent_access.rb +2 -2
- data/lib/super_diff/active_support/{operation_sequences.rb → operation_trees.rb} +2 -2
- data/lib/super_diff/active_support/{operation_sequences → operation_trees}/hash_with_indifferent_access.rb +2 -2
- data/lib/super_diff/configuration.rb +60 -0
- data/lib/super_diff/csi.rb +4 -0
- data/lib/super_diff/diff_formatters.rb +3 -3
- data/lib/super_diff/diff_formatters/array.rb +3 -3
- data/lib/super_diff/diff_formatters/base.rb +3 -2
- data/lib/super_diff/diff_formatters/collection.rb +2 -2
- data/lib/super_diff/diff_formatters/custom_object.rb +3 -3
- data/lib/super_diff/diff_formatters/default_object.rb +6 -8
- data/lib/super_diff/diff_formatters/defaults.rb +10 -0
- data/lib/super_diff/diff_formatters/hash.rb +3 -3
- data/lib/super_diff/diff_formatters/main.rb +41 -0
- data/lib/super_diff/diff_formatters/multiline_string.rb +3 -3
- data/lib/super_diff/differs.rb +4 -11
- data/lib/super_diff/differs/array.rb +2 -11
- data/lib/super_diff/differs/base.rb +20 -3
- data/lib/super_diff/differs/custom_object.rb +2 -11
- data/lib/super_diff/differs/default_object.rb +2 -8
- data/lib/super_diff/differs/defaults.rb +12 -0
- data/lib/super_diff/differs/hash.rb +2 -11
- data/lib/super_diff/differs/main.rb +48 -0
- data/lib/super_diff/differs/multiline_string.rb +2 -14
- data/lib/super_diff/differs/time_like.rb +15 -0
- data/lib/super_diff/equality_matchers.rb +3 -9
- data/lib/super_diff/equality_matchers/array.rb +1 -7
- data/lib/super_diff/equality_matchers/base.rb +1 -1
- data/lib/super_diff/equality_matchers/default.rb +2 -8
- data/lib/super_diff/equality_matchers/defaults.rb +12 -0
- data/lib/super_diff/equality_matchers/hash.rb +1 -7
- data/lib/super_diff/equality_matchers/main.rb +21 -0
- data/lib/super_diff/equality_matchers/multiline_string.rb +1 -7
- data/lib/super_diff/errors.rb +16 -0
- data/lib/super_diff/errors/no_diff_formatter_available_error.rb +21 -0
- data/lib/super_diff/errors/no_differ_available_error.rb +24 -0
- data/lib/super_diff/errors/no_operational_sequencer_available_error.rb +22 -0
- data/lib/super_diff/implementation_checks.rb +19 -0
- data/lib/super_diff/object_inspection.rb +1 -10
- data/lib/super_diff/object_inspection/inspection_tree.rb +6 -2
- data/lib/super_diff/object_inspection/inspectors.rb +5 -1
- data/lib/super_diff/object_inspection/inspectors/array.rb +20 -10
- data/lib/super_diff/object_inspection/inspectors/base.rb +36 -0
- data/lib/super_diff/object_inspection/inspectors/custom_object.rb +24 -14
- data/lib/super_diff/object_inspection/inspectors/default_object.rb +44 -30
- data/lib/super_diff/object_inspection/inspectors/defaults.rb +15 -0
- data/lib/super_diff/object_inspection/inspectors/hash.rb +20 -10
- data/lib/super_diff/object_inspection/inspectors/main.rb +35 -0
- data/lib/super_diff/object_inspection/inspectors/primitive.rb +20 -5
- data/lib/super_diff/object_inspection/inspectors/string.rb +15 -5
- data/lib/super_diff/object_inspection/inspectors/time_like.rb +23 -0
- data/lib/super_diff/object_inspection/nodes/inspection.rb +9 -2
- data/lib/super_diff/operation_tree_builders.rb +18 -0
- data/lib/super_diff/{operational_sequencers → operation_tree_builders}/array.rb +38 -59
- data/lib/super_diff/operation_tree_builders/base.rb +98 -0
- data/lib/super_diff/{operational_sequencers → operation_tree_builders}/custom_object.rb +3 -3
- data/lib/super_diff/{operational_sequencers → operation_tree_builders}/default_object.rb +8 -3
- data/lib/super_diff/operation_tree_builders/defaults.rb +5 -0
- data/lib/super_diff/operation_tree_builders/hash.rb +226 -0
- data/lib/super_diff/operation_tree_builders/main.rb +42 -0
- data/lib/super_diff/{operational_sequencers → operation_tree_builders}/multiline_string.rb +3 -3
- data/lib/super_diff/operation_tree_builders/time_like.rb +34 -0
- data/lib/super_diff/operation_trees.rb +13 -0
- data/lib/super_diff/{operation_sequences → operation_trees}/array.rb +5 -1
- data/lib/super_diff/operation_trees/base.rb +31 -0
- data/lib/super_diff/{operation_sequences → operation_trees}/custom_object.rb +5 -1
- data/lib/super_diff/{operation_sequences → operation_trees}/default_object.rb +10 -8
- data/lib/super_diff/operation_trees/defaults.rb +5 -0
- data/lib/super_diff/{operation_sequences → operation_trees}/hash.rb +5 -1
- data/lib/super_diff/operation_trees/main.rb +35 -0
- data/lib/super_diff/operation_trees/multiline_string.rb +18 -0
- data/lib/super_diff/operations/unary_operation.rb +3 -0
- data/lib/super_diff/rspec.rb +54 -22
- data/lib/super_diff/rspec/augmented_matcher.rb +1 -1
- data/lib/super_diff/rspec/differ.rb +2 -17
- data/lib/super_diff/rspec/differs.rb +9 -3
- data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +3 -8
- data/lib/super_diff/rspec/differs/collection_including.rb +18 -0
- data/lib/super_diff/rspec/differs/hash_including.rb +18 -0
- data/lib/super_diff/rspec/differs/object_having_attributes.rb +17 -0
- data/lib/super_diff/rspec/matcher_text_builders.rb +4 -0
- data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +26 -7
- data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +61 -0
- data/lib/super_diff/rspec/matcher_text_builders/match.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +13 -1
- data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +1 -1
- data/lib/super_diff/rspec/matcher_text_template.rb +1 -1
- data/lib/super_diff/rspec/monkey_patches.rb +226 -115
- data/lib/super_diff/rspec/object_inspection.rb +0 -1
- data/lib/super_diff/rspec/object_inspection/inspectors.rb +22 -6
- data/lib/super_diff/rspec/object_inspection/inspectors/collection_containing_exactly.rb +17 -8
- data/lib/super_diff/rspec/object_inspection/inspectors/collection_including.rb +28 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/hash_including.rb +31 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/instance_of.rb +23 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/kind_of.rb +23 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/object_having_attributes.rb +31 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/primitive.rb +13 -0
- data/lib/super_diff/rspec/object_inspection/inspectors/value_within.rb +29 -0
- data/lib/super_diff/rspec/operation_tree_builders.rb +22 -0
- data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/collection_containing_exactly.rb +6 -6
- data/lib/super_diff/rspec/{operational_sequencers/partial_array.rb → operation_tree_builders/collection_including.rb} +4 -3
- data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +25 -0
- data/lib/super_diff/rspec/{operational_sequencers/partial_object.rb → operation_tree_builders/object_having_attributes.rb} +5 -11
- data/lib/super_diff/version.rb +1 -1
- data/spec/examples.txt +5 -350
- data/spec/integration/rails/active_record_spec.rb +1 -1
- data/spec/integration/rails/hash_with_indifferent_access_spec.rb +1 -1
- data/spec/integration/rspec/be_predicate_matcher_spec.rb +111 -59
- data/spec/integration/rspec/eq_matcher_spec.rb +1 -1
- data/spec/integration/rspec/have_attributes_matcher_spec.rb +354 -227
- data/spec/integration/rspec/have_predicate_matcher_spec.rb +484 -0
- data/spec/integration/rspec/include_matcher_spec.rb +2 -2
- data/spec/integration/rspec/match_array_matcher_spec.rb +372 -0
- data/spec/integration/rspec/match_matcher_spec.rb +8 -8
- data/spec/integration/rspec/raise_error_matcher_spec.rb +605 -226
- data/spec/integration/rspec/third_party_matcher_spec.rb +241 -0
- data/spec/integration/rspec/unhandled_errors_spec.rb +110 -58
- data/spec/spec_helper.rb +18 -7
- data/spec/support/command_runner.rb +3 -0
- data/spec/support/integration/helpers.rb +14 -90
- data/spec/support/integration/matchers.rb +143 -0
- data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +14 -29
- data/spec/support/integration/test_programs/base.rb +120 -0
- data/spec/support/integration/test_programs/plain.rb +13 -0
- data/spec/support/integration/test_programs/rspec_active_record.rb +17 -0
- data/spec/support/integration/test_programs/rspec_rails.rb +17 -0
- data/spec/support/models/active_record/person.rb +4 -11
- data/spec/support/models/active_record/query.rb +15 -0
- data/spec/support/models/active_record/shipping_address.rb +10 -14
- data/spec/support/object_id.rb +27 -0
- data/spec/support/ruby_versions.rb +4 -0
- data/spec/support/shared_examples/active_record.rb +71 -0
- data/spec/support/shared_examples/hash_with_indifferent_access.rb +724 -208
- data/spec/unit/{equality_matcher_spec.rb → equality_matchers/main_spec.rb} +165 -9
- data/spec/unit/object_inspection_spec.rb +94 -18
- data/spec/unit/rspec/matchers/have_predicate_spec.rb +21 -0
- data/spec/unit/rspec/matchers/match_array_spec.rb +11 -0
- data/spec/unit/rspec/matchers/raise_error_spec.rb +16 -0
- data/super_diff.gemspec +4 -6
- metadata +99 -82
- data/lib/super_diff/active_record/object_inspection/map_extension.rb +0 -18
- data/lib/super_diff/active_record/operational_sequencers.rb +0 -14
- data/lib/super_diff/active_support/object_inspection/map_extension.rb +0 -15
- data/lib/super_diff/active_support/operational_sequencers.rb +0 -10
- data/lib/super_diff/diff_formatter.rb +0 -32
- data/lib/super_diff/differ.rb +0 -51
- data/lib/super_diff/differs/time.rb +0 -24
- data/lib/super_diff/equality_matcher.rb +0 -32
- data/lib/super_diff/no_differ_available_error.rb +0 -22
- data/lib/super_diff/no_operational_sequencer_available_error.rb +0 -20
- data/lib/super_diff/object_inspection/inspector.rb +0 -27
- data/lib/super_diff/object_inspection/inspectors/time.rb +0 -13
- data/lib/super_diff/object_inspection/map.rb +0 -30
- data/lib/super_diff/operation_sequences.rb +0 -9
- data/lib/super_diff/operation_sequences/base.rb +0 -11
- data/lib/super_diff/operational_sequencer.rb +0 -48
- data/lib/super_diff/operational_sequencers.rb +0 -17
- data/lib/super_diff/operational_sequencers/base.rb +0 -89
- data/lib/super_diff/operational_sequencers/hash.rb +0 -85
- data/lib/super_diff/operational_sequencers/time_like.rb +0 -30
- data/lib/super_diff/rspec/configuration.rb +0 -31
- data/lib/super_diff/rspec/differs/partial_array.rb +0 -22
- data/lib/super_diff/rspec/differs/partial_hash.rb +0 -22
- data/lib/super_diff/rspec/differs/partial_object.rb +0 -22
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_array.rb +0 -22
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_hash.rb +0 -21
- data/lib/super_diff/rspec/object_inspection/inspectors/partial_object.rb +0 -21
- data/lib/super_diff/rspec/object_inspection/map_extension.rb +0 -23
- data/lib/super_diff/rspec/operational_sequencers.rb +0 -22
- data/lib/super_diff/rspec/operational_sequencers/partial_hash.rb +0 -32
@@ -1,8 +1,8 @@
|
|
1
1
|
module SuperDiff
|
2
2
|
module DiffFormatters
|
3
3
|
class Hash < Base
|
4
|
-
def self.applies_to?(
|
5
|
-
|
4
|
+
def self.applies_to?(operation_tree)
|
5
|
+
operation_tree.is_a?(OperationTrees::Hash)
|
6
6
|
end
|
7
7
|
|
8
8
|
def call
|
@@ -24,7 +24,7 @@ module SuperDiff
|
|
24
24
|
"#{key.inspect} => "
|
25
25
|
end
|
26
26
|
},
|
27
|
-
|
27
|
+
operation_tree: operation_tree,
|
28
28
|
indent_level: indent_level,
|
29
29
|
add_comma: add_comma?,
|
30
30
|
)
|
@@ -0,0 +1,41 @@
|
|
1
|
+
module SuperDiff
|
2
|
+
module DiffFormatters
|
3
|
+
class Main
|
4
|
+
extend AttrExtras.mixin
|
5
|
+
|
6
|
+
method_object(
|
7
|
+
:operation_tree,
|
8
|
+
[
|
9
|
+
:indent_level!,
|
10
|
+
add_comma: false,
|
11
|
+
value_class: nil,
|
12
|
+
],
|
13
|
+
)
|
14
|
+
|
15
|
+
def call
|
16
|
+
if resolved_class
|
17
|
+
resolved_class.call(
|
18
|
+
operation_tree,
|
19
|
+
indent_level: indent_level,
|
20
|
+
add_comma: add_comma?,
|
21
|
+
value_class: value_class,
|
22
|
+
)
|
23
|
+
else
|
24
|
+
raise NoDiffFormatterAvailableError.create(operation_tree)
|
25
|
+
end
|
26
|
+
end
|
27
|
+
|
28
|
+
private
|
29
|
+
|
30
|
+
attr_query :add_comma?
|
31
|
+
|
32
|
+
def resolved_class
|
33
|
+
available_classes.find { |klass| klass.applies_to?(operation_tree) }
|
34
|
+
end
|
35
|
+
|
36
|
+
def available_classes
|
37
|
+
DEFAULTS + SuperDiff.configuration.extra_diff_formatter_classes
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
@@ -1,8 +1,8 @@
|
|
1
1
|
module SuperDiff
|
2
2
|
module DiffFormatters
|
3
3
|
class MultilineString < Base
|
4
|
-
def self.applies_to?(
|
5
|
-
|
4
|
+
def self.applies_to?(operation_tree)
|
5
|
+
operation_tree.is_a?(OperationTrees::MultilineString)
|
6
6
|
end
|
7
7
|
|
8
8
|
def call
|
@@ -12,7 +12,7 @@ module SuperDiff
|
|
12
12
|
private
|
13
13
|
|
14
14
|
def lines
|
15
|
-
|
15
|
+
operation_tree.reduce([]) do |array, operation|
|
16
16
|
case operation.name
|
17
17
|
when :change
|
18
18
|
array << Helpers.style(:alpha, "- #{operation.left_value}")
|
data/lib/super_diff/differs.rb
CHANGED
@@ -6,17 +6,10 @@ module SuperDiff
|
|
6
6
|
autoload :DefaultObject, "super_diff/differs/default_object"
|
7
7
|
autoload :Empty, "super_diff/differs/empty"
|
8
8
|
autoload :Hash, "super_diff/differs/hash"
|
9
|
+
autoload :Main, "super_diff/differs/main"
|
9
10
|
autoload :MultilineString, "super_diff/differs/multiline_string"
|
10
|
-
autoload :
|
11
|
-
|
12
|
-
DEFAULTS = [
|
13
|
-
Array,
|
14
|
-
Hash,
|
15
|
-
Time,
|
16
|
-
MultilineString,
|
17
|
-
CustomObject,
|
18
|
-
DefaultObject,
|
19
|
-
Empty,
|
20
|
-
].freeze
|
11
|
+
autoload :TimeLike, "super_diff/differs/time_like"
|
21
12
|
end
|
22
13
|
end
|
14
|
+
|
15
|
+
require "super_diff/differs/defaults"
|
@@ -5,19 +5,10 @@ module SuperDiff
|
|
5
5
|
expected.is_a?(::Array) && actual.is_a?(::Array)
|
6
6
|
end
|
7
7
|
|
8
|
-
def call
|
9
|
-
DiffFormatters::Array.call(operations, indent_level: indent_level)
|
10
|
-
end
|
11
|
-
|
12
8
|
private
|
13
9
|
|
14
|
-
def
|
15
|
-
|
16
|
-
expected: expected,
|
17
|
-
actual: actual,
|
18
|
-
extra_operational_sequencer_classes: extra_operational_sequencer_classes,
|
19
|
-
extra_diff_formatter_classes: extra_diff_formatter_classes,
|
20
|
-
)
|
10
|
+
def operation_tree_builder_class
|
11
|
+
OperationTreeBuilders::Array
|
21
12
|
end
|
22
13
|
end
|
23
14
|
end
|
@@ -5,7 +5,9 @@ module SuperDiff
|
|
5
5
|
raise NotImplementedError
|
6
6
|
end
|
7
7
|
|
8
|
+
extend ImplementationChecks
|
8
9
|
extend AttrExtras.mixin
|
10
|
+
include ImplementationChecks
|
9
11
|
|
10
12
|
method_object(
|
11
13
|
:expected,
|
@@ -13,13 +15,15 @@ module SuperDiff
|
|
13
15
|
[
|
14
16
|
:indent_level!,
|
15
17
|
index_in_collection: nil,
|
16
|
-
extra_operational_sequencer_classes: [],
|
17
|
-
extra_diff_formatter_classes: [],
|
18
18
|
],
|
19
19
|
)
|
20
20
|
|
21
21
|
def call
|
22
|
-
|
22
|
+
operation_tree.to_diff(
|
23
|
+
indent_level: indent_level,
|
24
|
+
collection_prefix: nil,
|
25
|
+
add_comma: false,
|
26
|
+
)
|
23
27
|
end
|
24
28
|
|
25
29
|
protected
|
@@ -27,6 +31,19 @@ module SuperDiff
|
|
27
31
|
def indentation
|
28
32
|
" " * (indent_level * 2)
|
29
33
|
end
|
34
|
+
|
35
|
+
def operation_tree_builder_class
|
36
|
+
unimplemented_instance_method!
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def operation_tree
|
42
|
+
operation_tree_builder_class.call(
|
43
|
+
expected: expected,
|
44
|
+
actual: actual,
|
45
|
+
)
|
46
|
+
end
|
30
47
|
end
|
31
48
|
end
|
32
49
|
end
|
@@ -7,19 +7,10 @@ module SuperDiff
|
|
7
7
|
actual.respond_to?(:attributes_for_super_diff)
|
8
8
|
end
|
9
9
|
|
10
|
-
def call
|
11
|
-
operations.to_diff(indent_level: indent_level)
|
12
|
-
end
|
13
|
-
|
14
10
|
private
|
15
11
|
|
16
|
-
def
|
17
|
-
|
18
|
-
expected: expected,
|
19
|
-
actual: actual,
|
20
|
-
extra_operational_sequencer_classes: extra_operational_sequencer_classes,
|
21
|
-
extra_diff_formatter_classes: extra_diff_formatter_classes,
|
22
|
-
)
|
12
|
+
def operation_tree_builder_class
|
13
|
+
OperationTreeBuilders::CustomObject
|
23
14
|
end
|
24
15
|
end
|
25
16
|
end
|
@@ -5,19 +5,13 @@ module SuperDiff
|
|
5
5
|
expected.class == actual.class
|
6
6
|
end
|
7
7
|
|
8
|
-
def call
|
9
|
-
operations.to_diff(indent_level: indent_level)
|
10
|
-
end
|
11
|
-
|
12
8
|
private
|
13
9
|
|
14
|
-
def
|
15
|
-
|
10
|
+
def operation_tree
|
11
|
+
OperationTreeBuilders::Main.call(
|
16
12
|
expected: expected,
|
17
13
|
actual: actual,
|
18
14
|
all_or_nothing: true,
|
19
|
-
extra_classes: extra_operational_sequencer_classes,
|
20
|
-
extra_diff_formatter_classes: extra_diff_formatter_classes,
|
21
15
|
)
|
22
16
|
end
|
23
17
|
end
|
@@ -5,19 +5,10 @@ module SuperDiff
|
|
5
5
|
expected.is_a?(::Hash) && actual.is_a?(::Hash)
|
6
6
|
end
|
7
7
|
|
8
|
-
def call
|
9
|
-
DiffFormatters::Hash.call(operations, indent_level: indent_level)
|
10
|
-
end
|
11
|
-
|
12
8
|
private
|
13
9
|
|
14
|
-
def
|
15
|
-
|
16
|
-
expected: expected,
|
17
|
-
actual: actual,
|
18
|
-
extra_operational_sequencer_classes: extra_operational_sequencer_classes,
|
19
|
-
extra_diff_formatter_classes: extra_diff_formatter_classes,
|
20
|
-
)
|
10
|
+
def operation_tree_builder_class
|
11
|
+
OperationTreeBuilders::Hash
|
21
12
|
end
|
22
13
|
end
|
23
14
|
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
module SuperDiff
|
2
|
+
module Differs
|
3
|
+
class Main
|
4
|
+
extend AttrExtras.mixin
|
5
|
+
|
6
|
+
method_object(
|
7
|
+
:expected,
|
8
|
+
:actual,
|
9
|
+
[
|
10
|
+
indent_level: 0,
|
11
|
+
index_in_collection: nil,
|
12
|
+
omit_empty: false,
|
13
|
+
],
|
14
|
+
)
|
15
|
+
|
16
|
+
def call
|
17
|
+
if resolved_class
|
18
|
+
resolved_class.call(
|
19
|
+
expected,
|
20
|
+
actual,
|
21
|
+
indent_level: indent_level,
|
22
|
+
index_in_collection: index_in_collection,
|
23
|
+
)
|
24
|
+
else
|
25
|
+
raise Errors::NoDifferAvailableError.create(expected, actual)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
|
29
|
+
private
|
30
|
+
|
31
|
+
attr_query :omit_empty?
|
32
|
+
|
33
|
+
def resolved_class
|
34
|
+
available_classes.find { |klass| klass.applies_to?(expected, actual) }
|
35
|
+
end
|
36
|
+
|
37
|
+
def available_classes
|
38
|
+
classes = SuperDiff.configuration.extra_differ_classes + DEFAULTS
|
39
|
+
|
40
|
+
if omit_empty?
|
41
|
+
classes
|
42
|
+
else
|
43
|
+
classes + [Empty]
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
end
|
@@ -6,22 +6,10 @@ module SuperDiff
|
|
6
6
|
(expected.include?("\n") || actual.include?("\n"))
|
7
7
|
end
|
8
8
|
|
9
|
-
def call
|
10
|
-
DiffFormatters::MultilineString.call(
|
11
|
-
operations,
|
12
|
-
indent_level: indent_level,
|
13
|
-
)
|
14
|
-
end
|
15
|
-
|
16
9
|
private
|
17
10
|
|
18
|
-
def
|
19
|
-
|
20
|
-
expected: expected,
|
21
|
-
actual: actual,
|
22
|
-
extra_operational_sequencer_classes: extra_operational_sequencer_classes,
|
23
|
-
extra_diff_formatter_classes: extra_diff_formatter_classes,
|
24
|
-
)
|
11
|
+
def operation_tree_builder_class
|
12
|
+
OperationTreeBuilders::MultilineString
|
25
13
|
end
|
26
14
|
end
|
27
15
|
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
module SuperDiff
|
2
|
+
module Differs
|
3
|
+
class TimeLike < Base
|
4
|
+
def self.applies_to?(expected, actual)
|
5
|
+
SuperDiff.time_like?(expected) && SuperDiff.time_like?(actual)
|
6
|
+
end
|
7
|
+
|
8
|
+
private
|
9
|
+
|
10
|
+
def operation_tree_builder_class
|
11
|
+
OperationTreeBuilders::TimeLike
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
@@ -3,6 +3,7 @@ module SuperDiff
|
|
3
3
|
autoload :Array, "super_diff/equality_matchers/array"
|
4
4
|
autoload :Base, "super_diff/equality_matchers/base"
|
5
5
|
autoload :Hash, "super_diff/equality_matchers/hash"
|
6
|
+
autoload :Main, "super_diff/equality_matchers/main"
|
6
7
|
autoload :MultilineString, "super_diff/equality_matchers/multiline_string"
|
7
8
|
autoload :Default, "super_diff/equality_matchers/default"
|
8
9
|
autoload :Primitive, "super_diff/equality_matchers/primitive"
|
@@ -10,14 +11,7 @@ module SuperDiff
|
|
10
11
|
:SinglelineString,
|
11
12
|
"super_diff/equality_matchers/singleline_string",
|
12
13
|
)
|
13
|
-
|
14
|
-
DEFAULTS = [
|
15
|
-
Primitive,
|
16
|
-
Array,
|
17
|
-
Hash,
|
18
|
-
MultilineString,
|
19
|
-
SinglelineString,
|
20
|
-
Default,
|
21
|
-
].freeze
|
22
14
|
end
|
23
15
|
end
|
16
|
+
|
17
|
+
require "super_diff/equality_matchers/defaults"
|
@@ -33,13 +33,7 @@ module SuperDiff
|
|
33
33
|
protected
|
34
34
|
|
35
35
|
def diff
|
36
|
-
Differs::Array.call(
|
37
|
-
expected,
|
38
|
-
actual,
|
39
|
-
indent_level: 0,
|
40
|
-
extra_operational_sequencer_classes: extra_operational_sequencer_classes,
|
41
|
-
extra_diff_formatter_classes: extra_diff_formatter_classes,
|
42
|
-
)
|
36
|
+
Differs::Array.call(expected, actual, indent_level: 0)
|
43
37
|
end
|
44
38
|
end
|
45
39
|
end
|
@@ -34,7 +34,7 @@ module SuperDiff
|
|
34
34
|
end
|
35
35
|
|
36
36
|
def diff_section
|
37
|
-
if diff.
|
37
|
+
if diff.empty?
|
38
38
|
""
|
39
39
|
else
|
40
40
|
<<~SECTION
|
@@ -47,13 +47,7 @@ module SuperDiff
|
|
47
47
|
end
|
48
48
|
|
49
49
|
def diff
|
50
|
-
|
51
|
-
expected,
|
52
|
-
actual,
|
53
|
-
indent_level: 0,
|
54
|
-
extra_operational_sequencer_classes: extra_operational_sequencer_classes,
|
55
|
-
extra_diff_formatter_classes: extra_diff_formatter_classes,
|
56
|
-
)
|
50
|
+
Differs::Main.call(expected, actual, indent_level: 0)
|
57
51
|
end
|
58
52
|
end
|
59
53
|
end
|