Skip to content

Commit bf77b23

Browse files
committed
WIP - Reorganize
1 parent 0d76405 commit bf77b23

File tree

214 files changed

+4131
-3481
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

214 files changed

+4131
-3481
lines changed

lib/super_diff.rb

Lines changed: 69 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -1,47 +1,93 @@
11
require "attr_extras/explicit"
2-
require "diff-lcs"
3-
require "patience_diff"
42
require "date"
53

64
module SuperDiff
7-
autoload(
8-
:ColorizedDocumentExtensions,
9-
"super_diff/colorized_document_extensions"
10-
)
11-
autoload :OperationTreeFlatteners, "super_diff/operation_tree_flatteners"
12-
autoload :Configuration, "super_diff/configuration"
5+
autoload :Core, "super_diff/core"
136
autoload :Csi, "super_diff/csi"
14-
autoload :DiffFormatters, "super_diff/diff_formatters"
157
autoload :Differs, "super_diff/differs"
168
autoload :EqualityMatchers, "super_diff/equality_matchers"
179
autoload :Errors, "super_diff/errors"
18-
autoload :GemVersion, "super_diff/gem_version"
19-
autoload :Helpers, "super_diff/helpers"
20-
autoload :ImplementationChecks, "super_diff/implementation_checks"
21-
autoload :Line, "super_diff/line"
22-
autoload :TieredLines, "super_diff/tiered_lines"
23-
autoload :TieredLinesElider, "super_diff/tiered_lines_elider"
24-
autoload :TieredLinesFormatter, "super_diff/tiered_lines_formatter"
2510
autoload :ObjectInspection, "super_diff/object_inspection"
26-
autoload :OperationTrees, "super_diff/operation_trees"
2711
autoload :OperationTreeBuilders, "super_diff/operation_tree_builders"
12+
autoload :OperationTreeFlatteners, "super_diff/operation_tree_flatteners"
13+
autoload :OperationTrees, "super_diff/operation_trees"
2814
autoload :Operations, "super_diff/operations"
29-
autoload :RecursionGuard, "super_diff/recursion_guard"
3015
autoload :VERSION, "super_diff/version"
3116

17+
def self.const_missing(missing_const_name)
18+
if Core.const_defined?(missing_const_name)
19+
warn <<~EOT
20+
WARNING: SuperDiff::#{missing_const_name} is deprecated and will be removed in the next major release.
21+
Please use SuperDiff::Core::#{missing_const_name} instead.
22+
#{caller_locations.join("\n")}
23+
EOT
24+
Core.const_get(missing_const_name)
25+
elsif Basic.const_defined?(missing_const_name)
26+
warn <<~EOT
27+
WARNING: SuperDiff::#{missing_const_name} is deprecated and will be removed in the next major release.
28+
Please use SuperDiff::Basic::#{missing_const_name} instead.
29+
#{caller_locations.join("\n")}
30+
EOT
31+
Basic.const_get(missing_const_name)
32+
else
33+
super
34+
end
35+
end
36+
3237
def self.configure
3338
yield configuration
3439
configuration.updated
3540
end
3641

3742
def self.configuration
38-
@_configuration ||= Configuration.new
43+
@_configuration ||= Core::Configuration.new
44+
end
45+
46+
def self.diff(
47+
expected,
48+
actual,
49+
indent_level: 0,
50+
raise_if_nothing_applies: true
51+
)
52+
Core::DifferDispatcher.call(
53+
expected,
54+
actual,
55+
available_classes: configuration.extra_differ_classes,
56+
indent_level: indent_level,
57+
raise_if_nothing_applies: raise_if_nothing_applies
58+
)
59+
end
60+
61+
def self.build_operation_tree_for(
62+
expected,
63+
actual,
64+
extra_operation_tree_builder_classes: [],
65+
raise_if_nothing_applies: false
66+
)
67+
Core::OperationTreeBuilderDispatcher.call(
68+
expected,
69+
actual,
70+
available_classes:
71+
configuration.extra_operation_tree_builder_classes +
72+
extra_operation_tree_builder_classes,
73+
raise_if_nothing_applies: raise_if_nothing_applies
74+
)
75+
end
76+
77+
def self.find_operation_tree_for(value)
78+
SuperDiff::Core::OperationTreeFinder.call(
79+
value,
80+
available_classes: configuration.extra_operation_tree_classes
81+
)
3982
end
4083

4184
def self.inspect_object(object, as_lines:, **rest)
42-
SuperDiff::RecursionGuard.guarding_recursion_of(object) do
85+
Core::RecursionGuard.guarding_recursion_of(object) do
4386
inspection_tree =
44-
ObjectInspection::InspectionTreeBuilders::Main.call(object)
87+
Core::InspectionTreeBuilderDispatcher.call(
88+
object,
89+
available_classes: configuration.extra_inspection_tree_builder_classes
90+
)
4591

4692
if as_lines
4793
inspection_tree.render_to_lines(object, **rest)
@@ -87,3 +133,5 @@ def self.insert_singleton_overrides(target_module, mod = nil, &block)
87133
end
88134
end
89135
end
136+
137+
require "super_diff/basic"

lib/super_diff/active_record.rb

Lines changed: 12 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,28 +1,24 @@
11
require "super_diff/active_support"
22

3+
require "super_diff/active_record/differs"
4+
require "super_diff/active_record/inspection_tree_builders"
5+
require "super_diff/active_record/operation_trees"
6+
require "super_diff/active_record/operation_tree_builders"
7+
require "super_diff/active_record/operation_tree_flatteners"
8+
39
module SuperDiff
410
module ActiveRecord
5-
autoload :Differs, "super_diff/active_record/differs"
6-
autoload(:ObjectInspection, "super_diff/active_record/object_inspection")
7-
autoload(:OperationTrees, "super_diff/active_record/operation_trees")
8-
autoload(
9-
:OperationTreeBuilders,
10-
"super_diff/active_record/operation_tree_builders"
11-
)
12-
autoload(
13-
:OperationTreeFlatteners,
14-
"super_diff/active_record/operation_tree_flatteners"
15-
)
11+
autoload :ObjectInspection, "super_diff/active_record/object_inspection"
1612

1713
SuperDiff.configure do |config|
18-
config.add_extra_differ_classes(Differs::ActiveRecordRelation)
19-
config.add_extra_operation_tree_builder_classes(
14+
config.prepend_extra_differ_classes(Differs::ActiveRecordRelation)
15+
config.prepend_extra_operation_tree_builder_classes(
2016
OperationTreeBuilders::ActiveRecordModel,
2117
OperationTreeBuilders::ActiveRecordRelation
2218
)
23-
config.add_extra_inspection_tree_builder_classes(
24-
ObjectInspection::InspectionTreeBuilders::ActiveRecordModel,
25-
ObjectInspection::InspectionTreeBuilders::ActiveRecordRelation
19+
config.prepend_extra_inspection_tree_builder_classes(
20+
InspectionTreeBuilders::ActiveRecordModel,
21+
InspectionTreeBuilders::ActiveRecordRelation
2622
)
2723
end
2824
end

lib/super_diff/active_record/differs/active_record_relation.rb

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
module SuperDiff
22
module ActiveRecord
33
module Differs
4-
class ActiveRecordRelation < SuperDiff::Differs::Base
4+
class ActiveRecordRelation < Core::AbstractDiffer
55
def self.applies_to?(expected, actual)
66
expected.is_a?(::Array) && actual.is_a?(::ActiveRecord::Relation)
77
end
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
module SuperDiff
2+
module ActiveRecord
3+
module InspectionTreeBuilders
4+
autoload(
5+
:ActiveRecordModel,
6+
"super_diff/active_record/inspection_tree_builders/active_record_model"
7+
)
8+
autoload(
9+
:ActiveRecordRelation,
10+
"super_diff/active_record/inspection_tree_builders/active_record_relation"
11+
)
12+
end
13+
end
14+
end
Lines changed: 49 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,49 @@
1+
module SuperDiff
2+
module ActiveRecord
3+
module InspectionTreeBuilders
4+
class ActiveRecordModel < Core::AbstractInspectionTreeBuilder
5+
def self.applies_to?(value)
6+
value.is_a?(::ActiveRecord::Base)
7+
end
8+
9+
def call
10+
Core::InspectionTree.new do |t1|
11+
t1.as_lines_when_rendering_to_lines(
12+
collection_bookend: :open
13+
) do |t2|
14+
t2.add_text "#<#{object.class} "
15+
16+
# stree-ignore
17+
t2.when_rendering_to_lines do |t3|
18+
t3.add_text "{"
19+
end
20+
end
21+
22+
t1.nested do |t2|
23+
t2.insert_separated_list(
24+
["id"] + (object.attributes.keys.sort - ["id"])
25+
) do |t3, name|
26+
t3.as_prefix_when_rendering_to_lines do |t4|
27+
t4.add_text "#{name}: "
28+
end
29+
30+
t3.add_inspection_of object.read_attribute(name)
31+
end
32+
end
33+
34+
t1.as_lines_when_rendering_to_lines(
35+
collection_bookend: :close
36+
) do |t2|
37+
# stree-ignore
38+
t2.when_rendering_to_lines do |t3|
39+
t3.add_text "}"
40+
end
41+
42+
t2.add_text ">"
43+
end
44+
end
45+
end
46+
end
47+
end
48+
end
49+
end
Lines changed: 34 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,34 @@
1+
module SuperDiff
2+
module ActiveRecord
3+
module InspectionTreeBuilders
4+
class ActiveRecordRelation < Core::AbstractInspectionTreeBuilder
5+
def self.applies_to?(value)
6+
value.is_a?(::ActiveRecord::Relation)
7+
end
8+
9+
def call
10+
Core::InspectionTree.new do |t1|
11+
# stree-ignore
12+
t1.as_lines_when_rendering_to_lines(
13+
collection_bookend: :open
14+
) do |t2|
15+
t2.add_text "#<ActiveRecord::Relation ["
16+
end
17+
18+
# stree-ignore
19+
t1.nested do |t2|
20+
t2.insert_array_inspection_of(object)
21+
end
22+
23+
# stree-ignore
24+
t1.as_lines_when_rendering_to_lines(
25+
collection_bookend: :close
26+
) do |t2|
27+
t2.add_text "]>"
28+
end
29+
end
30+
end
31+
end
32+
end
33+
end
34+
end

lib/super_diff/active_record/monkey_patches.rb

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,6 @@
11
# rubocop:disable Style/BracesAroundHashParameters, Style/ClassAndModuleChildren
22
class ActiveRecord::Base
3+
# TODO: Remove this monkey patch if possible
34
def attributes_for_super_diff
45
(attributes.keys.sort - ["id"]).reduce({ id: id }) do |hash, key|
56
hash.merge(key.to_sym => attributes[key])
Lines changed: 16 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,22 @@
11
module SuperDiff
22
module ActiveRecord
33
module ObjectInspection
4-
autoload(
5-
:InspectionTreeBuilders,
6-
"super_diff/active_record/object_inspection/inspection_tree_builders"
7-
)
4+
module InspectionTreeBuilders
5+
def self.const_missing(missing_const_name)
6+
if ActiveRecord::InspectionTreeBuilders.const_defined?(
7+
missing_const_name
8+
)
9+
warn <<~EOT
10+
WARNING: SuperDiff::ActiveRecord::ObjectInspection::InspectionTreeBuilders::#{missing_const_name} is deprecated and will be removed in the next major release.
11+
Please use SuperDiff::ActiveRecord::InspectionTreeBuilders::#{missing_const_name} instead.
12+
#{caller_locations.join("\n")}
13+
EOT
14+
ActiveRecord::InspectionTreeBuilders.const_get(missing_const_name)
15+
else
16+
super
17+
end
18+
end
19+
end
820
end
921
end
1022
end

lib/super_diff/active_record/object_inspection/inspection_tree_builders.rb

Lines changed: 0 additions & 16 deletions
This file was deleted.

lib/super_diff/active_record/object_inspection/inspection_tree_builders/active_record_model.rb

Lines changed: 0 additions & 51 deletions
This file was deleted.

0 commit comments

Comments
 (0)