super_diff 0.4.2 → 0.6.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.
Files changed (185) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +64 -24
  3. data/lib/super_diff.rb +20 -17
  4. data/lib/super_diff/active_record.rb +20 -24
  5. data/lib/super_diff/active_record/diff_formatters/active_record_relation.rb +3 -3
  6. data/lib/super_diff/active_record/differs/active_record_relation.rb +3 -5
  7. data/lib/super_diff/active_record/object_inspection/inspectors/active_record_model.rb +32 -22
  8. data/lib/super_diff/active_record/object_inspection/inspectors/active_record_relation.rb +17 -7
  9. data/lib/super_diff/active_record/operation_tree_builders.rb +14 -0
  10. data/lib/super_diff/active_record/{operational_sequencers → operation_tree_builders}/active_record_model.rb +2 -2
  11. data/lib/super_diff/active_record/{operational_sequencers → operation_tree_builders}/active_record_relation.rb +4 -4
  12. data/lib/super_diff/active_record/{operation_sequences.rb → operation_trees.rb} +2 -2
  13. data/lib/super_diff/active_record/{operation_sequences → operation_trees}/active_record_relation.rb +2 -2
  14. data/lib/super_diff/active_support.rb +16 -19
  15. data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +3 -3
  16. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +3 -5
  17. data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +17 -7
  18. data/lib/super_diff/active_support/operation_tree_builders.rb +10 -0
  19. data/lib/super_diff/active_support/{operational_sequencers → operation_tree_builders}/hash_with_indifferent_access.rb +2 -2
  20. data/lib/super_diff/active_support/{operation_sequences.rb → operation_trees.rb} +2 -2
  21. data/lib/super_diff/active_support/{operation_sequences → operation_trees}/hash_with_indifferent_access.rb +2 -2
  22. data/lib/super_diff/colorized_document_extensions.rb +4 -4
  23. data/lib/super_diff/configuration.rb +70 -0
  24. data/lib/super_diff/csi.rb +2 -1
  25. data/lib/super_diff/diff_formatters.rb +3 -3
  26. data/lib/super_diff/diff_formatters/array.rb +3 -3
  27. data/lib/super_diff/diff_formatters/base.rb +3 -2
  28. data/lib/super_diff/diff_formatters/collection.rb +3 -3
  29. data/lib/super_diff/diff_formatters/custom_object.rb +3 -3
  30. data/lib/super_diff/diff_formatters/default_object.rb +6 -8
  31. data/lib/super_diff/diff_formatters/defaults.rb +10 -0
  32. data/lib/super_diff/diff_formatters/hash.rb +3 -3
  33. data/lib/super_diff/diff_formatters/main.rb +41 -0
  34. data/lib/super_diff/diff_formatters/multiline_string.rb +7 -7
  35. data/lib/super_diff/differs.rb +4 -11
  36. data/lib/super_diff/differs/array.rb +2 -11
  37. data/lib/super_diff/differs/base.rb +20 -3
  38. data/lib/super_diff/differs/custom_object.rb +2 -11
  39. data/lib/super_diff/differs/default_object.rb +2 -8
  40. data/lib/super_diff/differs/defaults.rb +12 -0
  41. data/lib/super_diff/differs/hash.rb +2 -11
  42. data/lib/super_diff/differs/main.rb +48 -0
  43. data/lib/super_diff/differs/multiline_string.rb +2 -14
  44. data/lib/super_diff/differs/time_like.rb +15 -0
  45. data/lib/super_diff/equality_matchers.rb +3 -9
  46. data/lib/super_diff/equality_matchers/array.rb +3 -9
  47. data/lib/super_diff/equality_matchers/base.rb +1 -1
  48. data/lib/super_diff/equality_matchers/default.rb +3 -9
  49. data/lib/super_diff/equality_matchers/defaults.rb +12 -0
  50. data/lib/super_diff/equality_matchers/hash.rb +3 -9
  51. data/lib/super_diff/equality_matchers/main.rb +21 -0
  52. data/lib/super_diff/equality_matchers/multiline_string.rb +3 -9
  53. data/lib/super_diff/equality_matchers/primitive.rb +2 -2
  54. data/lib/super_diff/equality_matchers/singleline_string.rb +2 -2
  55. data/lib/super_diff/errors.rb +16 -0
  56. data/lib/super_diff/errors/no_diff_formatter_available_error.rb +21 -0
  57. data/lib/super_diff/errors/no_differ_available_error.rb +24 -0
  58. data/lib/super_diff/errors/no_operational_sequencer_available_error.rb +22 -0
  59. data/lib/super_diff/gem_version.rb +45 -0
  60. data/lib/super_diff/implementation_checks.rb +19 -0
  61. data/lib/super_diff/object_inspection.rb +1 -10
  62. data/lib/super_diff/object_inspection/inspection_tree.rb +6 -2
  63. data/lib/super_diff/object_inspection/inspectors.rb +5 -1
  64. data/lib/super_diff/object_inspection/inspectors/array.rb +20 -10
  65. data/lib/super_diff/object_inspection/inspectors/base.rb +36 -0
  66. data/lib/super_diff/object_inspection/inspectors/custom_object.rb +24 -14
  67. data/lib/super_diff/object_inspection/inspectors/default_object.rb +44 -30
  68. data/lib/super_diff/object_inspection/inspectors/defaults.rb +15 -0
  69. data/lib/super_diff/object_inspection/inspectors/hash.rb +20 -10
  70. data/lib/super_diff/object_inspection/inspectors/main.rb +35 -0
  71. data/lib/super_diff/object_inspection/inspectors/primitive.rb +20 -5
  72. data/lib/super_diff/object_inspection/inspectors/string.rb +15 -5
  73. data/lib/super_diff/object_inspection/inspectors/time_like.rb +23 -0
  74. data/lib/super_diff/object_inspection/nodes/inspection.rb +9 -2
  75. data/lib/super_diff/operation_tree_builders.rb +18 -0
  76. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/array.rb +38 -59
  77. data/lib/super_diff/operation_tree_builders/base.rb +98 -0
  78. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/custom_object.rb +3 -3
  79. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/default_object.rb +8 -3
  80. data/lib/super_diff/operation_tree_builders/defaults.rb +5 -0
  81. data/lib/super_diff/operation_tree_builders/hash.rb +226 -0
  82. data/lib/super_diff/operation_tree_builders/main.rb +42 -0
  83. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/multiline_string.rb +3 -3
  84. data/lib/super_diff/operation_tree_builders/time_like.rb +34 -0
  85. data/lib/super_diff/operation_trees.rb +13 -0
  86. data/lib/super_diff/{operation_sequences → operation_trees}/array.rb +5 -1
  87. data/lib/super_diff/{operation_sequences → operation_trees}/base.rb +9 -1
  88. data/lib/super_diff/{operation_sequences → operation_trees}/custom_object.rb +5 -1
  89. data/lib/super_diff/{operation_sequences → operation_trees}/default_object.rb +10 -8
  90. data/lib/super_diff/operation_trees/defaults.rb +5 -0
  91. data/lib/super_diff/{operation_sequences → operation_trees}/hash.rb +5 -1
  92. data/lib/super_diff/operation_trees/main.rb +35 -0
  93. data/lib/super_diff/operation_trees/multiline_string.rb +18 -0
  94. data/lib/super_diff/operations/unary_operation.rb +3 -0
  95. data/lib/super_diff/recursion_guard.rb +2 -0
  96. data/lib/super_diff/rspec.rb +49 -13
  97. data/lib/super_diff/rspec/augmented_matcher.rb +1 -1
  98. data/lib/super_diff/rspec/differ.rb +2 -17
  99. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +2 -7
  100. data/lib/super_diff/rspec/differs/collection_including.rb +2 -7
  101. data/lib/super_diff/rspec/differs/hash_including.rb +2 -7
  102. data/lib/super_diff/rspec/differs/object_having_attributes.rb +2 -7
  103. data/lib/super_diff/rspec/matcher_text_builders/base.rb +7 -7
  104. data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +6 -6
  105. data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +1 -1
  106. data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +4 -4
  107. data/lib/super_diff/rspec/matcher_text_builders/match.rb +1 -1
  108. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +1 -1
  109. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +6 -6
  110. data/lib/super_diff/rspec/matcher_text_template.rb +1 -1
  111. data/lib/super_diff/rspec/monkey_patches.rb +23 -14
  112. data/lib/super_diff/rspec/object_inspection.rb +0 -1
  113. data/lib/super_diff/rspec/object_inspection/inspectors.rb +16 -0
  114. data/lib/super_diff/rspec/object_inspection/inspectors/collection_containing_exactly.rb +17 -8
  115. data/lib/super_diff/rspec/object_inspection/inspectors/collection_including.rb +15 -9
  116. data/lib/super_diff/rspec/object_inspection/inspectors/hash_including.rb +20 -10
  117. data/lib/super_diff/rspec/object_inspection/inspectors/instance_of.rb +23 -0
  118. data/lib/super_diff/rspec/object_inspection/inspectors/kind_of.rb +23 -0
  119. data/lib/super_diff/rspec/object_inspection/inspectors/object_having_attributes.rb +20 -11
  120. data/lib/super_diff/rspec/object_inspection/inspectors/primitive.rb +13 -0
  121. data/lib/super_diff/rspec/object_inspection/inspectors/value_within.rb +29 -0
  122. data/lib/super_diff/rspec/operation_tree_builders.rb +22 -0
  123. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/collection_containing_exactly.rb +17 -6
  124. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/collection_including.rb +2 -2
  125. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/hash_including.rb +3 -11
  126. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/object_having_attributes.rb +4 -8
  127. data/lib/super_diff/version.rb +1 -1
  128. data/spec/examples.txt +393 -393
  129. data/spec/integration/rspec/be_falsey_matcher_spec.rb +10 -10
  130. data/spec/integration/rspec/be_matcher_spec.rb +100 -100
  131. data/spec/integration/rspec/be_nil_matcher_spec.rb +10 -10
  132. data/spec/integration/rspec/be_predicate_matcher_spec.rb +103 -103
  133. data/spec/integration/rspec/be_truthy_matcher_spec.rb +10 -10
  134. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +107 -107
  135. data/spec/integration/rspec/eq_matcher_spec.rb +230 -230
  136. data/spec/integration/rspec/have_attributes_matcher_spec.rb +360 -233
  137. data/spec/integration/rspec/have_predicate_matcher_spec.rb +65 -65
  138. data/spec/integration/rspec/include_matcher_spec.rb +73 -73
  139. data/spec/integration/rspec/match_array_matcher_spec.rb +149 -107
  140. data/spec/integration/rspec/match_matcher_spec.rb +274 -274
  141. data/spec/integration/rspec/raise_error_matcher_spec.rb +86 -86
  142. data/spec/integration/rspec/respond_to_matcher_spec.rb +240 -240
  143. data/spec/integration/rspec/third_party_matcher_spec.rb +8 -8
  144. data/spec/integration/rspec/unhandled_errors_spec.rb +69 -13
  145. data/spec/spec_helper.rb +22 -13
  146. data/spec/support/command_runner.rb +3 -0
  147. data/spec/support/integration/helpers.rb +15 -95
  148. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +15 -30
  149. data/spec/support/integration/test_programs/base.rb +122 -0
  150. data/spec/support/integration/test_programs/plain.rb +13 -0
  151. data/spec/support/integration/test_programs/rspec_active_record.rb +17 -0
  152. data/spec/support/integration/test_programs/rspec_active_support.rb +17 -0
  153. data/spec/support/integration/test_programs/rspec_rails.rb +17 -0
  154. data/spec/support/models/active_record/person.rb +4 -11
  155. data/spec/support/models/active_record/shipping_address.rb +10 -14
  156. data/spec/support/object_id.rb +6 -5
  157. data/spec/support/shared_examples/active_record.rb +108 -108
  158. data/spec/support/shared_examples/hash_with_indifferent_access.rb +196 -232
  159. data/spec/tmp/integration_spec.rb +15 -0
  160. data/spec/unit/{equality_matcher_spec.rb → equality_matchers/main_spec.rb} +518 -362
  161. data/spec/unit/object_inspection_spec.rb +77 -1
  162. data/super_diff.gemspec +3 -2
  163. metadata +83 -54
  164. data/lib/super_diff/active_record/object_inspection/map_extension.rb +0 -18
  165. data/lib/super_diff/active_record/operational_sequencers.rb +0 -14
  166. data/lib/super_diff/active_support/object_inspection/map_extension.rb +0 -15
  167. data/lib/super_diff/active_support/operational_sequencers.rb +0 -10
  168. data/lib/super_diff/diff_formatter.rb +0 -32
  169. data/lib/super_diff/differ.rb +0 -51
  170. data/lib/super_diff/differs/time.rb +0 -24
  171. data/lib/super_diff/equality_matcher.rb +0 -32
  172. data/lib/super_diff/no_differ_available_error.rb +0 -22
  173. data/lib/super_diff/no_operational_sequencer_available_error.rb +0 -20
  174. data/lib/super_diff/object_inspection/inspector.rb +0 -27
  175. data/lib/super_diff/object_inspection/inspectors/time.rb +0 -13
  176. data/lib/super_diff/object_inspection/map.rb +0 -30
  177. data/lib/super_diff/operation_sequences.rb +0 -9
  178. data/lib/super_diff/operational_sequencer.rb +0 -48
  179. data/lib/super_diff/operational_sequencers.rb +0 -17
  180. data/lib/super_diff/operational_sequencers/base.rb +0 -89
  181. data/lib/super_diff/operational_sequencers/hash.rb +0 -85
  182. data/lib/super_diff/operational_sequencers/time_like.rb +0 -30
  183. data/lib/super_diff/rspec/configuration.rb +0 -31
  184. data/lib/super_diff/rspec/object_inspection/map_extension.rb +0 -23
  185. data/lib/super_diff/rspec/operational_sequencers.rb +0 -22
@@ -1,9 +1,9 @@
1
1
  module SuperDiff
2
2
  module ActiveRecord
3
- module OperationSequences
3
+ module OperationTrees
4
4
  autoload(
5
5
  :ActiveRecordRelation,
6
- "super_diff/active_record/operation_sequences/active_record_relation",
6
+ "super_diff/active_record/operation_trees/active_record_relation",
7
7
  )
8
8
  end
9
9
  end
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module ActiveRecord
3
- module OperationSequences
4
- class ActiveRecordRelation < SuperDiff::OperationSequences::Array
3
+ module OperationTrees
4
+ class ActiveRecordRelation < SuperDiff::OperationTrees::Array
5
5
  def to_diff(indent_level:, collection_prefix:, add_comma:)
6
6
  DiffFormatters::ActiveRecordRelation.call(
7
7
  self,
@@ -4,30 +4,27 @@ module SuperDiff
4
4
  autoload :Differs, "super_diff/active_support/differs"
5
5
  autoload :ObjectInspection, "super_diff/active_support/object_inspection"
6
6
  autoload(
7
- :OperationalSequencers,
8
- "super_diff/active_support/operational_sequencers",
7
+ :OperationTreeBuilders,
8
+ "super_diff/active_support/operation_tree_builders",
9
9
  )
10
10
  autoload(
11
11
  :OperationalSequences,
12
12
  "super_diff/active_support/operational_sequences",
13
13
  )
14
- end
15
- end
16
14
 
17
- if defined?(SuperDiff::RSpec)
18
- SuperDiff::RSpec.configure do |config|
19
- config.add_extra_differ_class(
20
- SuperDiff::ActiveSupport::Differs::HashWithIndifferentAccess,
21
- )
22
- config.add_extra_operational_sequencer_class(
23
- SuperDiff::ActiveSupport::OperationalSequencers::HashWithIndifferentAccess,
24
- )
25
- config.add_extra_diff_formatter_class(
26
- SuperDiff::ActiveSupport::DiffFormatters::HashWithIndifferentAccess,
27
- )
15
+ SuperDiff.configure do |config|
16
+ config.add_extra_differ_classes(
17
+ Differs::HashWithIndifferentAccess,
18
+ )
19
+ config.add_extra_operation_tree_builder_classes(
20
+ OperationTreeBuilders::HashWithIndifferentAccess,
21
+ )
22
+ config.add_extra_diff_formatter_classes(
23
+ DiffFormatters::HashWithIndifferentAccess,
24
+ )
25
+ config.add_extra_inspector_classes(
26
+ ObjectInspection::Inspectors::HashWithIndifferentAccess,
27
+ )
28
+ end
28
29
  end
29
30
  end
30
-
31
- SuperDiff::ObjectInspection.map.prepend(
32
- SuperDiff::ActiveSupport::ObjectInspection::MapExtension,
33
- )
@@ -2,8 +2,8 @@ module SuperDiff
2
2
  module ActiveSupport
3
3
  module DiffFormatters
4
4
  class HashWithIndifferentAccess < SuperDiff::DiffFormatters::Base
5
- def self.applies_to?(operations)
6
- operations.is_a?(OperationSequences::HashWithIndifferentAccess)
5
+ def self.applies_to?(operation_tree)
6
+ operation_tree.is_a?(OperationTrees::HashWithIndifferentAccess)
7
7
  end
8
8
 
9
9
  def call
@@ -25,7 +25,7 @@ module SuperDiff
25
25
  "#{key.inspect} => "
26
26
  end
27
27
  },
28
- operations: operations,
28
+ operation_tree: operation_tree,
29
29
  indent_level: indent_level,
30
30
  add_comma: add_comma?,
31
31
  )
@@ -15,19 +15,17 @@ module SuperDiff
15
15
 
16
16
  def call
17
17
  DiffFormatters::HashWithIndifferentAccess.call(
18
- operations,
18
+ operation_tree,
19
19
  indent_level: indent_level,
20
20
  )
21
21
  end
22
22
 
23
23
  private
24
24
 
25
- def operations
26
- OperationalSequencers::HashWithIndifferentAccess.call(
25
+ def operation_tree
26
+ OperationTreeBuilders::HashWithIndifferentAccess.call(
27
27
  expected: expected,
28
28
  actual: actual,
29
- extra_operational_sequencer_classes: extra_operational_sequencer_classes,
30
- extra_diff_formatter_classes: extra_diff_formatter_classes,
31
29
  )
32
30
  end
33
31
  end
@@ -2,15 +2,25 @@ module SuperDiff
2
2
  module ActiveSupport
3
3
  module ObjectInspection
4
4
  module Inspectors
5
- HashWithIndifferentAccess = SuperDiff::ObjectInspection::InspectionTree.new do
6
- add_text "#<HashWithIndifferentAccess {"
7
-
8
- nested do |hash|
9
- insert_hash_inspection_of(hash)
5
+ class HashWithIndifferentAccess < SuperDiff::ObjectInspection::Inspectors::Base
6
+ def self.applies_to?(value)
7
+ value.is_a?(::HashWithIndifferentAccess)
10
8
  end
11
9
 
12
- add_break " "
13
- add_text "}>"
10
+ protected
11
+
12
+ def inspection_tree
13
+ SuperDiff::ObjectInspection::InspectionTree.new do
14
+ add_text "#<HashWithIndifferentAccess {"
15
+
16
+ nested do |hash|
17
+ insert_hash_inspection_of(hash)
18
+ end
19
+
20
+ add_break " "
21
+ add_text "}>"
22
+ end
23
+ end
14
24
  end
15
25
  end
16
26
  end
@@ -0,0 +1,10 @@
1
+ module SuperDiff
2
+ module ActiveSupport
3
+ module OperationTreeBuilders
4
+ autoload(
5
+ :HashWithIndifferentAccess,
6
+ "super_diff/active_support/operation_tree_builders/hash_with_indifferent_access",
7
+ )
8
+ end
9
+ end
10
+ end
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module ActiveSupport
3
- module OperationalSequencers
4
- class HashWithIndifferentAccess < SuperDiff::OperationalSequencers::Hash
3
+ module OperationTreeBuilders
4
+ class HashWithIndifferentAccess < SuperDiff::OperationTreeBuilders::Hash
5
5
  def initialize(expected:, actual:, **rest)
6
6
  super
7
7
 
@@ -1,9 +1,9 @@
1
1
  module SuperDiff
2
2
  module ActiveSupport
3
- module OperationSequences
3
+ module OperationTrees
4
4
  autoload(
5
5
  :HashWithIndifferentAccess,
6
- "super_diff/active_support/operation_sequences/hash_with_indifferent_access",
6
+ "super_diff/active_support/operation_trees/hash_with_indifferent_access",
7
7
  )
8
8
  end
9
9
  end
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module ActiveSupport
3
- module OperationSequences
4
- class HashWithIndifferentAccess < SuperDiff::OperationSequences::Base
3
+ module OperationTrees
4
+ class HashWithIndifferentAccess < SuperDiff::OperationTrees::Base
5
5
  def to_diff(indent_level:, collection_prefix:, add_comma:)
6
6
  DiffFormatters::HashWithIndifferentAccess.call(
7
7
  self,
@@ -6,12 +6,12 @@ module SuperDiff
6
6
  end
7
7
  end
8
8
 
9
- def alpha(*args, **opts, &block)
10
- colorize(*args, **opts, fg: SuperDiff::COLORS.fetch(:alpha), &block)
9
+ def expected(*args, **opts, &block)
10
+ colorize(*args, **opts, fg: SuperDiff.configuration.expected_color, &block)
11
11
  end
12
12
 
13
- def beta(*args, **opts, &block)
14
- colorize(*args, **opts, fg: SuperDiff::COLORS.fetch(:beta), &block)
13
+ def actual(*args, **opts, &block)
14
+ colorize(*args, **opts, fg: SuperDiff.configuration.actual_color, &block)
15
15
  end
16
16
  end
17
17
  end
@@ -0,0 +1,70 @@
1
+ module SuperDiff
2
+ class Configuration
3
+ attr_reader(
4
+ :extra_diff_formatter_classes,
5
+ :extra_differ_classes,
6
+ :extra_inspector_classes,
7
+ :extra_operation_tree_builder_classes,
8
+ :extra_operation_tree_classes,
9
+ )
10
+ attr_accessor(
11
+ :actual_color,
12
+ :border_color,
13
+ :expected_color,
14
+ :header_color,
15
+ )
16
+
17
+ def initialize
18
+ @actual_color = :yellow
19
+ @border_color = :blue
20
+ @expected_color = :magenta
21
+ @extra_diff_formatter_classes = [].freeze
22
+ @extra_differ_classes = [].freeze
23
+ @extra_inspector_classes = [].freeze
24
+ @extra_operation_tree_builder_classes = [].freeze
25
+ @extra_operation_tree_classes = [].freeze
26
+ @header_color = :white
27
+ end
28
+
29
+ def add_extra_diff_formatter_classes(*classes)
30
+ @extra_diff_formatter_classes =
31
+ (@extra_diff_formatter_classes + classes).freeze
32
+ end
33
+ alias_method(
34
+ :add_extra_diff_formatter_class,
35
+ :add_extra_diff_formatter_classes,
36
+ )
37
+
38
+ def add_extra_differ_classes(*classes)
39
+ @extra_differ_classes = (@extra_differ_classes + classes).freeze
40
+ end
41
+ alias_method :add_extra_differ_class, :add_extra_differ_classes
42
+
43
+ def add_extra_inspector_classes(*classes)
44
+ @extra_inspector_classes =
45
+ (@extra_inspector_classes + classes).freeze
46
+ end
47
+ alias_method(
48
+ :add_extra_inspector_class,
49
+ :add_extra_inspector_classes,
50
+ )
51
+
52
+ def add_extra_operation_tree_builder_classes(*classes)
53
+ @extra_operation_tree_builder_classes =
54
+ (@extra_operation_tree_builder_classes + classes).freeze
55
+ end
56
+ alias_method(
57
+ :add_extra_operation_tree_builder_class,
58
+ :add_extra_operation_tree_builder_classes,
59
+ )
60
+
61
+ def add_extra_operation_tree_classes(*classes)
62
+ @extra_operation_tree_classes =
63
+ (@extra_operation_tree_classes + classes).freeze
64
+ end
65
+ alias_method(
66
+ :add_extra_operation_tree_class,
67
+ :add_extra_operation_tree_classes,
68
+ )
69
+ end
70
+ end
@@ -58,6 +58,7 @@ module SuperDiff
58
58
  end
59
59
  end
60
60
 
61
- self.color_enabled = STDOUT.tty?
61
+ self.color_enabled = ENV["CI"] == "true" || STDOUT.tty?
62
+ # puts "(SuperDiff::Csi) Super::Csi.color_enabled: #{color_enabled?}"
62
63
  end
63
64
  end
@@ -6,9 +6,9 @@ module SuperDiff
6
6
  autoload :CustomObject, "super_diff/diff_formatters/custom_object"
7
7
  autoload :DefaultObject, "super_diff/diff_formatters/default_object"
8
8
  autoload :Hash, "super_diff/diff_formatters/hash"
9
+ autoload :Main, "super_diff/diff_formatters/main"
9
10
  autoload :MultilineString, "super_diff/diff_formatters/multiline_string"
10
-
11
- # TODO: Why doesn't this include CustomObject and DefaultObject?
12
- DEFAULTS = [Array, Hash, MultilineString].freeze
13
11
  end
14
12
  end
13
+
14
+ require "super_diff/diff_formatters/defaults"
@@ -1,8 +1,8 @@
1
1
  module SuperDiff
2
2
  module DiffFormatters
3
3
  class Array < Base
4
- def self.applies_to?(operations)
5
- operations.is_a?(OperationSequences::Array)
4
+ def self.applies_to?(operation_tree)
5
+ operation_tree.is_a?(OperationTrees::Array)
6
6
  end
7
7
 
8
8
  def call
@@ -11,7 +11,7 @@ module SuperDiff
11
11
  close_token: "]",
12
12
  collection_prefix: collection_prefix,
13
13
  build_item_prefix: proc { "" },
14
- operations: operations,
14
+ operation_tree: operation_tree,
15
15
  indent_level: indent_level,
16
16
  add_comma: add_comma?,
17
17
  )
@@ -1,14 +1,15 @@
1
1
  module SuperDiff
2
2
  module DiffFormatters
3
3
  class Base
4
- def self.applies_to?(_operations)
4
+ def self.applies_to?(*)
5
5
  raise NotImplementedError
6
6
  end
7
7
 
8
+ include ImplementationChecks
8
9
  extend AttrExtras.mixin
9
10
 
10
11
  method_object(
11
- :operations,
12
+ :operation_tree,
12
13
  [
13
14
  :indent_level!,
14
15
  collection_prefix: "",
@@ -4,13 +4,13 @@ module SuperDiff
4
4
  extend AttrExtras.mixin
5
5
 
6
6
  ICONS = { delete: "-", insert: "+" }.freeze
7
- STYLES = { insert: :beta, delete: :alpha, noop: :plain }.freeze
7
+ STYLES = { insert: :actual, delete: :expected, noop: :plain }.freeze
8
8
 
9
9
  method_object(
10
10
  [
11
11
  :open_token!,
12
12
  :close_token!,
13
- :operations!,
13
+ :operation_tree!,
14
14
  :indent_level!,
15
15
  :add_comma!,
16
16
  :collection_prefix!,
@@ -35,7 +35,7 @@ module SuperDiff
35
35
  end
36
36
 
37
37
  def contents
38
- operations.map do |operation|
38
+ operation_tree.map do |operation|
39
39
  if operation.name == :change
40
40
  handle_change_operation(operation)
41
41
  else
@@ -1,8 +1,8 @@
1
1
  module SuperDiff
2
2
  module DiffFormatters
3
3
  class CustomObject < DefaultObject
4
- def self.applies_to?(operations)
5
- operations.is_a?(OperationSequences::CustomObject)
4
+ def self.applies_to?(operation_tree)
5
+ operation_tree.is_a?(OperationTrees::CustomObject)
6
6
  end
7
7
 
8
8
  def call
@@ -20,7 +20,7 @@ module SuperDiff
20
20
 
21
21
  "#{key}: "
22
22
  },
23
- operations: operations,
23
+ operation_tree: operation_tree,
24
24
  indent_level: indent_level,
25
25
  add_comma: add_comma?,
26
26
  )
@@ -1,12 +1,12 @@
1
1
  module SuperDiff
2
2
  module DiffFormatters
3
3
  class DefaultObject < Base
4
- def self.applies_to?(operations)
5
- operations.is_a?(OperationSequences::DefaultObject)
4
+ def self.applies_to?(operation_tree)
5
+ operation_tree.is_a?(OperationTrees::DefaultObject)
6
6
  end
7
7
 
8
- def initialize(operations, value_class: nil, **rest)
9
- super(operations, **rest)
8
+ def initialize(operation_tree, value_class: nil, **rest)
9
+ super(operation_tree, **rest)
10
10
 
11
11
  @value_class = value_class
12
12
  end
@@ -26,7 +26,7 @@ module SuperDiff
26
26
 
27
27
  "@#{key}="
28
28
  },
29
- operations: operations,
29
+ operation_tree: operation_tree,
30
30
  indent_level: indent_level,
31
31
  add_comma: add_comma?,
32
32
  )
@@ -38,9 +38,7 @@ module SuperDiff
38
38
  if @value_class
39
39
  @value_class
40
40
  else
41
- raise NotImplementedError.new(
42
- "You must override #value_class in your subclass.",
43
- )
41
+ unimplemented_instance_method!
44
42
  end
45
43
  end
46
44
  end
@@ -0,0 +1,10 @@
1
+ module SuperDiff
2
+ module DiffFormatters
3
+ DEFAULTS = [
4
+ Array,
5
+ Hash,
6
+ CustomObject,
7
+ DefaultObject,
8
+ ].freeze
9
+ end
10
+ end