super_diff 0.12.1 → 0.13.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/basic/inspection_tree_builders/data_object.rb +40 -0
- data/lib/super_diff/basic/inspection_tree_builders/primitive.rb +1 -1
- data/lib/super_diff/basic/inspection_tree_builders.rb +4 -0
- data/lib/super_diff/basic/operation_tree_builders/data_object.rb +18 -0
- data/lib/super_diff/basic/operation_tree_builders.rb +4 -0
- data/lib/super_diff/basic.rb +3 -1
- data/lib/super_diff/core/configuration.rb +13 -9
- data/lib/super_diff/core/helpers.rb +1 -1
- data/lib/super_diff/csi.rb +0 -32
- data/lib/super_diff/equality_matchers/defaults.rb +1 -1
- data/lib/super_diff/version.rb +1 -1
- data/lib/super_diff.rb +1 -2
- data/spec/examples.txt +450 -704
- data/spec/spec_helper.rb +1 -0
- data/spec/support/models/point.rb +7 -0
- data/spec/unit/basic/inspection_tree_builders/data_object_spec.rb +146 -0
- data/spec/unit/basic/operation_tree_builders/data_object_spec.rb +82 -0
- data/spec/unit/core/configuration_no_rspec_spec.rb +58 -0
- data/spec/unit/core/configuration_spec.rb +176 -0
- data/super_diff.gemspec +7 -6
- metadata +22 -10
- data/spec/internal/log/test.log +0 -0
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 343438b938b014502f7af0df76fc22ff73f3eaada655081b994b8c4d77bd3618
|
4
|
+
data.tar.gz: 2738da41f517ecfcd1e068e03256cd37aa5436fd984856a2c958518596bd58bf
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 522481e293667b16bf0d2c752fc02ebce5c6b8c607d23d53b009d52eec34e9a0d429fa410cb8dc4802c5b9b3dffd20632f9671024e3ba009e591179a6cb155dc
|
7
|
+
data.tar.gz: c08edc9460956e59f391249f26b508c944797ceda4db80d36b2119415322ef00210cd57817e74f24b6d13cc3b869bf7de1ca50276cd75e01288b1733c4c48b43
|
data/README.md
CHANGED
@@ -1,12 +1,10 @@
|
|
1
|
-
# SuperDiff [![Gem Version][version-badge]][rubygems] [![Build Status][gh-actions-badge]][gh-actions] ![Downloads][downloads-badge]
|
1
|
+
# SuperDiff [![Gem Version][version-badge]][rubygems] [![Build Status][gh-actions-badge]][gh-actions] ![Downloads][downloads-badge]
|
2
2
|
|
3
3
|
[version-badge]: http://img.shields.io/gem/v/super_diff.svg
|
4
4
|
[rubygems]: http://rubygems.org/gems/super_diff
|
5
|
-
[gh-actions-badge]: https://img.shields.io/github/actions/workflow/status/
|
5
|
+
[gh-actions-badge]: https://img.shields.io/github/actions/workflow/status/splitwise/super_diff/super_diff.yml?branch=main
|
6
6
|
[downloads-badge]: http://img.shields.io/gem/dtv/super_diff.svg
|
7
7
|
[hound]: https://houndci.com
|
8
|
-
[issuehunt-badge]: https://img.shields.io/badge/sponsored_through-IssueHunt-2EC28C
|
9
|
-
[issuehunt]: https://issuehunt.io/r/mcmire/super_diff
|
10
8
|
|
11
9
|
**SuperDiff** is a Ruby gem
|
12
10
|
which is designed to display the differences between two objects of any type
|
@@ -102,7 +100,7 @@ and you encounter a bug or have a suggestion,
|
|
102
100
|
feel free to [create an issue][issues-list].
|
103
101
|
I'll try to respond to it as soon as I can!
|
104
102
|
|
105
|
-
[issues-list]: https://github.com/
|
103
|
+
[issues-list]: https://github.com/splitwise/super_diff/issues
|
106
104
|
|
107
105
|
## Contributing
|
108
106
|
|
@@ -110,16 +108,6 @@ Any code contributions to improve this library are welcome!
|
|
110
108
|
Please see the [contributing](./docs/contributors/index.md) document
|
111
109
|
for more on how to do that.
|
112
110
|
|
113
|
-
## Sponsoring
|
114
|
-
|
115
|
-
If there's a change you want implemented, you can choose to sponsor that change!
|
116
|
-
`super_diff` is set up on IssueHunt,
|
117
|
-
so feel free to search for an existing issue (or make your own)
|
118
|
-
and [add a bounty][issuehunt].
|
119
|
-
I'll get notified right away!
|
120
|
-
|
121
|
-
[issuehunt]: https://issuehunt.io/r/mcmire/super_diff
|
122
|
-
|
123
111
|
## Compatibility
|
124
112
|
|
125
113
|
`super_diff` is [tested][gh-actions] to work with
|
@@ -127,7 +115,7 @@ Ruby >= 3.x,
|
|
127
115
|
RSpec 3.x,
|
128
116
|
and Rails >= 6.x.
|
129
117
|
|
130
|
-
[gh-actions]: https://github.com/
|
118
|
+
[gh-actions]: https://github.com/splitwise/super_diff/actions?query=workflow%3ASuperDiff
|
131
119
|
|
132
120
|
## Inspiration/Thanks
|
133
121
|
|
@@ -142,13 +130,13 @@ I made use of or was heavily inspired by these libraries:
|
|
142
130
|
|
143
131
|
Thank you to the authors of these libraries!
|
144
132
|
|
145
|
-
[original-version]: https://github.com/
|
133
|
+
[original-version]: https://github.com/splitwise/super_diff/tree/old-master
|
146
134
|
[diff-lcs]: https://github.com/halostatue/diff-lcs
|
147
135
|
[pretty-printer]: https://github.com/ruby/ruby/tree/master/lib/prettyprint.rb
|
148
136
|
[awesome-print]: https://github.com/awesome-print/awesome_print
|
149
|
-
[inspection-tree]: https://github.com/
|
137
|
+
[inspection-tree]: https://github.com/splitwise/super_diff/blob/main/lib/super_diff/object_inspection/inspection_tree.rb
|
150
138
|
|
151
139
|
## Author/License
|
152
140
|
|
153
|
-
SuperDiff was created and is maintained by
|
141
|
+
SuperDiff was created by Elliot Winkler and is maintained by Splitwise, Inc.
|
154
142
|
It is released under the [MIT license](LICENSE).
|
@@ -0,0 +1,40 @@
|
|
1
|
+
module SuperDiff
|
2
|
+
module Basic
|
3
|
+
module InspectionTreeBuilders
|
4
|
+
class DataObject < Core::AbstractInspectionTreeBuilder
|
5
|
+
def self.applies_to?(value)
|
6
|
+
SuperDiff::Core::Helpers.ruby_version_matches?("~> 3.2") &&
|
7
|
+
value.is_a?(Data)
|
8
|
+
end
|
9
|
+
|
10
|
+
def call
|
11
|
+
Core::InspectionTree.new do |t1|
|
12
|
+
t1.as_lines_when_rendering_to_lines(
|
13
|
+
collection_bookend: :open
|
14
|
+
) do |t2|
|
15
|
+
t2.add_text "#<data #{object.class.name} "
|
16
|
+
|
17
|
+
# stree-ignore
|
18
|
+
t2.when_rendering_to_lines do |t3|
|
19
|
+
t3.add_text "{"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
t1.nested { |t2| t2.insert_hash_inspection_of(object.to_h) }
|
24
|
+
|
25
|
+
t1.as_lines_when_rendering_to_lines(
|
26
|
+
collection_bookend: :close
|
27
|
+
) do |t2|
|
28
|
+
# stree-ignore
|
29
|
+
t2.when_rendering_to_lines do |t3|
|
30
|
+
t3.add_text "}"
|
31
|
+
end
|
32
|
+
|
33
|
+
t2.add_text ">"
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
@@ -6,6 +6,10 @@ module SuperDiff
|
|
6
6
|
:CustomObject,
|
7
7
|
"super_diff/basic/inspection_tree_builders/custom_object"
|
8
8
|
)
|
9
|
+
autoload(
|
10
|
+
:DataObject,
|
11
|
+
"super_diff/basic/inspection_tree_builders/data_object"
|
12
|
+
)
|
9
13
|
autoload(
|
10
14
|
:DefaultObject,
|
11
15
|
"super_diff/basic/inspection_tree_builders/default_object"
|
@@ -0,0 +1,18 @@
|
|
1
|
+
module SuperDiff
|
2
|
+
module Basic
|
3
|
+
module OperationTreeBuilders
|
4
|
+
class DataObject < CustomObject
|
5
|
+
def self.applies_to?(expected, actual)
|
6
|
+
SuperDiff::Core::Helpers.ruby_version_matches?("~> 3.2") &&
|
7
|
+
expected.class == actual.class && expected.is_a?(Data)
|
8
|
+
end
|
9
|
+
|
10
|
+
protected
|
11
|
+
|
12
|
+
def attribute_names
|
13
|
+
expected.members & actual.members
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -6,6 +6,10 @@ module SuperDiff
|
|
6
6
|
:CustomObject,
|
7
7
|
"super_diff/basic/operation_tree_builders/custom_object"
|
8
8
|
)
|
9
|
+
autoload(
|
10
|
+
:DataObject,
|
11
|
+
"super_diff/basic/operation_tree_builders/data_object"
|
12
|
+
)
|
9
13
|
autoload(
|
10
14
|
:DefaultObject,
|
11
15
|
"super_diff/basic/operation_tree_builders/default_object"
|
data/lib/super_diff/basic.rb
CHANGED
@@ -26,6 +26,7 @@ module SuperDiff
|
|
26
26
|
InspectionTreeBuilders::Primitive,
|
27
27
|
InspectionTreeBuilders::TimeLike,
|
28
28
|
InspectionTreeBuilders::DateLike,
|
29
|
+
InspectionTreeBuilders::DataObject,
|
29
30
|
InspectionTreeBuilders::DefaultObject
|
30
31
|
)
|
31
32
|
|
@@ -34,7 +35,8 @@ module SuperDiff
|
|
34
35
|
OperationTreeBuilders::Hash,
|
35
36
|
OperationTreeBuilders::TimeLike,
|
36
37
|
OperationTreeBuilders::DateLike,
|
37
|
-
OperationTreeBuilders::CustomObject
|
38
|
+
OperationTreeBuilders::CustomObject,
|
39
|
+
OperationTreeBuilders::DataObject
|
38
40
|
)
|
39
41
|
|
40
42
|
config.add_extra_operation_tree_classes(
|
@@ -23,7 +23,7 @@ module SuperDiff
|
|
23
23
|
def initialize(options = {})
|
24
24
|
@actual_color = :yellow
|
25
25
|
@border_color = :blue
|
26
|
-
@color_enabled =
|
26
|
+
@color_enabled = nil
|
27
27
|
@diff_elision_enabled = false
|
28
28
|
@diff_elision_maximum = 0
|
29
29
|
@elision_marker_color = :cyan
|
@@ -41,6 +41,8 @@ module SuperDiff
|
|
41
41
|
|
42
42
|
def initialize_dup(original)
|
43
43
|
super
|
44
|
+
@extra_diff_formatter_classes =
|
45
|
+
original.extra_diff_formatter_classes.dup.freeze
|
44
46
|
@extra_differ_classes = original.extra_differ_classes.dup.freeze
|
45
47
|
@extra_operation_tree_builder_classes =
|
46
48
|
original.extra_operation_tree_builder_classes.dup.freeze
|
@@ -51,6 +53,8 @@ module SuperDiff
|
|
51
53
|
end
|
52
54
|
|
53
55
|
def color_enabled?
|
56
|
+
return color_enabled_by_default? if @color_enabled.nil?
|
57
|
+
|
54
58
|
@color_enabled
|
55
59
|
end
|
56
60
|
|
@@ -71,12 +75,6 @@ module SuperDiff
|
|
71
75
|
end
|
72
76
|
|
73
77
|
options.each { |key, value| instance_variable_set("@#{key}", value) }
|
74
|
-
|
75
|
-
updated
|
76
|
-
end
|
77
|
-
|
78
|
-
def updated
|
79
|
-
SuperDiff::Csi.color_enabled = color_enabled?
|
80
78
|
end
|
81
79
|
|
82
80
|
def add_extra_diff_formatter_classes(*classes)
|
@@ -165,7 +163,7 @@ module SuperDiff
|
|
165
163
|
{
|
166
164
|
actual_color: actual_color,
|
167
165
|
border_color: border_color,
|
168
|
-
color_enabled: color_enabled
|
166
|
+
color_enabled: @color_enabled,
|
169
167
|
diff_elision_enabled: diff_elision_enabled?,
|
170
168
|
diff_elision_maximum: diff_elision_maximum,
|
171
169
|
elision_marker_color: elision_marker_color,
|
@@ -185,7 +183,13 @@ module SuperDiff
|
|
185
183
|
private
|
186
184
|
|
187
185
|
def color_enabled_by_default?
|
188
|
-
ENV["CI"] == "true"
|
186
|
+
return true if ENV["CI"] == "true"
|
187
|
+
|
188
|
+
if defined?(::SuperDiff::RSpec)
|
189
|
+
return ::RSpec.configuration.color_enabled?
|
190
|
+
end
|
191
|
+
|
192
|
+
$stdout.respond_to?(:tty?) && $stdout.tty?
|
189
193
|
end
|
190
194
|
end
|
191
195
|
end
|
@@ -6,7 +6,7 @@ module SuperDiff
|
|
6
6
|
# TODO: Simplify this
|
7
7
|
def style(*args, color_enabled: true, **opts, &block)
|
8
8
|
klass =
|
9
|
-
if color_enabled &&
|
9
|
+
if color_enabled && SuperDiff.configuration.color_enabled?
|
10
10
|
Csi::ColorizedDocument
|
11
11
|
else
|
12
12
|
Csi::UncolorizedDocument
|
data/lib/super_diff/csi.rb
CHANGED
@@ -12,26 +12,10 @@ module SuperDiff
|
|
12
12
|
autoload :TwentyFourBitColor, "super_diff/csi/twenty_four_bit_color"
|
13
13
|
autoload :UncolorizedDocument, "super_diff/csi/uncolorized_document"
|
14
14
|
|
15
|
-
class << self
|
16
|
-
attr_writer :color_enabled
|
17
|
-
end
|
18
|
-
|
19
15
|
def self.reset_sequence
|
20
16
|
ResetSequence.new
|
21
17
|
end
|
22
18
|
|
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
19
|
def self.decolorize(text)
|
36
20
|
text.gsub(/\e\[\d+(?:;\d+)*m(.+?)\e\[0m/, '\1')
|
37
21
|
end
|
@@ -39,21 +23,5 @@ module SuperDiff
|
|
39
23
|
def self.already_colorized?(text)
|
40
24
|
text.match?(/\e\[\d+m/)
|
41
25
|
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
26
|
end
|
59
27
|
end
|
data/lib/super_diff/version.rb
CHANGED
data/lib/super_diff.rb
CHANGED
@@ -36,7 +36,6 @@ module SuperDiff
|
|
36
36
|
|
37
37
|
def self.configure
|
38
38
|
yield configuration
|
39
|
-
configuration.updated
|
40
39
|
end
|
41
40
|
|
42
41
|
def self.configuration
|
@@ -114,7 +113,7 @@ module SuperDiff
|
|
114
113
|
|
115
114
|
def self.primitive?(value)
|
116
115
|
case value
|
117
|
-
when true, false, nil, Symbol, Numeric, Regexp, Class
|
116
|
+
when true, false, nil, Symbol, Numeric, Regexp, Class, String
|
118
117
|
true
|
119
118
|
else
|
120
119
|
false
|