super_diff 0.4.0 → 0.5.2

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 (159) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +104 -73
  3. data/lib/super_diff.rb +20 -11
  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/configuration.rb +60 -0
  23. data/lib/super_diff/diff_formatters.rb +3 -3
  24. data/lib/super_diff/diff_formatters/array.rb +3 -3
  25. data/lib/super_diff/diff_formatters/base.rb +3 -2
  26. data/lib/super_diff/diff_formatters/collection.rb +2 -2
  27. data/lib/super_diff/diff_formatters/custom_object.rb +3 -3
  28. data/lib/super_diff/diff_formatters/default_object.rb +6 -8
  29. data/lib/super_diff/diff_formatters/defaults.rb +10 -0
  30. data/lib/super_diff/diff_formatters/hash.rb +3 -3
  31. data/lib/super_diff/diff_formatters/main.rb +41 -0
  32. data/lib/super_diff/diff_formatters/multiline_string.rb +3 -3
  33. data/lib/super_diff/differs.rb +4 -11
  34. data/lib/super_diff/differs/array.rb +2 -11
  35. data/lib/super_diff/differs/base.rb +20 -3
  36. data/lib/super_diff/differs/custom_object.rb +2 -11
  37. data/lib/super_diff/differs/default_object.rb +2 -8
  38. data/lib/super_diff/differs/defaults.rb +12 -0
  39. data/lib/super_diff/differs/hash.rb +2 -11
  40. data/lib/super_diff/differs/main.rb +48 -0
  41. data/lib/super_diff/differs/multiline_string.rb +2 -14
  42. data/lib/super_diff/differs/time_like.rb +15 -0
  43. data/lib/super_diff/equality_matchers.rb +3 -9
  44. data/lib/super_diff/equality_matchers/array.rb +1 -7
  45. data/lib/super_diff/equality_matchers/base.rb +1 -1
  46. data/lib/super_diff/equality_matchers/default.rb +1 -7
  47. data/lib/super_diff/equality_matchers/defaults.rb +12 -0
  48. data/lib/super_diff/equality_matchers/hash.rb +1 -7
  49. data/lib/super_diff/equality_matchers/main.rb +21 -0
  50. data/lib/super_diff/equality_matchers/multiline_string.rb +1 -7
  51. data/lib/super_diff/errors.rb +16 -0
  52. data/lib/super_diff/errors/no_diff_formatter_available_error.rb +21 -0
  53. data/lib/super_diff/errors/no_differ_available_error.rb +24 -0
  54. data/lib/super_diff/errors/no_operational_sequencer_available_error.rb +22 -0
  55. data/lib/super_diff/implementation_checks.rb +19 -0
  56. data/lib/super_diff/object_inspection.rb +1 -10
  57. data/lib/super_diff/object_inspection/inspection_tree.rb +6 -2
  58. data/lib/super_diff/object_inspection/inspectors.rb +5 -1
  59. data/lib/super_diff/object_inspection/inspectors/array.rb +20 -10
  60. data/lib/super_diff/object_inspection/inspectors/base.rb +36 -0
  61. data/lib/super_diff/object_inspection/inspectors/custom_object.rb +24 -14
  62. data/lib/super_diff/object_inspection/inspectors/default_object.rb +44 -30
  63. data/lib/super_diff/object_inspection/inspectors/defaults.rb +15 -0
  64. data/lib/super_diff/object_inspection/inspectors/hash.rb +20 -10
  65. data/lib/super_diff/object_inspection/inspectors/main.rb +35 -0
  66. data/lib/super_diff/object_inspection/inspectors/primitive.rb +20 -5
  67. data/lib/super_diff/object_inspection/inspectors/string.rb +15 -5
  68. data/lib/super_diff/object_inspection/inspectors/time_like.rb +23 -0
  69. data/lib/super_diff/object_inspection/nodes/inspection.rb +9 -2
  70. data/lib/super_diff/operation_tree_builders.rb +18 -0
  71. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/array.rb +38 -59
  72. data/lib/super_diff/operation_tree_builders/base.rb +98 -0
  73. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/custom_object.rb +3 -3
  74. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/default_object.rb +8 -3
  75. data/lib/super_diff/operation_tree_builders/defaults.rb +5 -0
  76. data/lib/super_diff/operation_tree_builders/hash.rb +226 -0
  77. data/lib/super_diff/operation_tree_builders/main.rb +42 -0
  78. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/multiline_string.rb +3 -3
  79. data/lib/super_diff/operation_tree_builders/time_like.rb +34 -0
  80. data/lib/super_diff/operation_trees.rb +13 -0
  81. data/lib/super_diff/{operation_sequences → operation_trees}/array.rb +5 -1
  82. data/lib/super_diff/{operation_sequences → operation_trees}/base.rb +9 -1
  83. data/lib/super_diff/{operation_sequences → operation_trees}/custom_object.rb +5 -1
  84. data/lib/super_diff/{operation_sequences → operation_trees}/default_object.rb +10 -8
  85. data/lib/super_diff/operation_trees/defaults.rb +5 -0
  86. data/lib/super_diff/{operation_sequences → operation_trees}/hash.rb +5 -1
  87. data/lib/super_diff/operation_trees/main.rb +35 -0
  88. data/lib/super_diff/operation_trees/multiline_string.rb +18 -0
  89. data/lib/super_diff/operations/unary_operation.rb +3 -0
  90. data/lib/super_diff/recursion_guard.rb +2 -0
  91. data/lib/super_diff/rspec.rb +45 -13
  92. data/lib/super_diff/rspec/augmented_matcher.rb +1 -1
  93. data/lib/super_diff/rspec/differ.rb +2 -17
  94. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +2 -7
  95. data/lib/super_diff/rspec/differs/collection_including.rb +2 -7
  96. data/lib/super_diff/rspec/differs/hash_including.rb +2 -7
  97. data/lib/super_diff/rspec/differs/object_having_attributes.rb +2 -7
  98. data/lib/super_diff/rspec/matcher_text_builders/match.rb +1 -1
  99. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +1 -1
  100. data/lib/super_diff/rspec/matcher_text_template.rb +1 -1
  101. data/lib/super_diff/rspec/monkey_patches.rb +9 -5
  102. data/lib/super_diff/rspec/object_inspection.rb +0 -1
  103. data/lib/super_diff/rspec/object_inspection/inspectors.rb +16 -0
  104. data/lib/super_diff/rspec/object_inspection/inspectors/collection_containing_exactly.rb +17 -8
  105. data/lib/super_diff/rspec/object_inspection/inspectors/collection_including.rb +15 -9
  106. data/lib/super_diff/rspec/object_inspection/inspectors/hash_including.rb +20 -10
  107. data/lib/super_diff/rspec/object_inspection/inspectors/instance_of.rb +23 -0
  108. data/lib/super_diff/rspec/object_inspection/inspectors/kind_of.rb +23 -0
  109. data/lib/super_diff/rspec/object_inspection/inspectors/object_having_attributes.rb +20 -11
  110. data/lib/super_diff/rspec/object_inspection/inspectors/primitive.rb +13 -0
  111. data/lib/super_diff/rspec/object_inspection/inspectors/value_within.rb +29 -0
  112. data/lib/super_diff/rspec/operation_tree_builders.rb +22 -0
  113. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/collection_containing_exactly.rb +5 -5
  114. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/collection_including.rb +2 -2
  115. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/hash_including.rb +3 -11
  116. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/object_having_attributes.rb +4 -8
  117. data/lib/super_diff/version.rb +1 -1
  118. data/spec/examples.txt +5 -0
  119. data/spec/integration/rspec/have_attributes_matcher_spec.rb +354 -227
  120. data/spec/integration/rspec/include_matcher_spec.rb +2 -2
  121. data/spec/integration/rspec/unhandled_errors_spec.rb +81 -4
  122. data/spec/support/command_runner.rb +3 -0
  123. data/spec/support/integration/helpers.rb +12 -96
  124. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +14 -29
  125. data/spec/support/integration/test_programs/base.rb +120 -0
  126. data/spec/support/integration/test_programs/plain.rb +13 -0
  127. data/spec/support/integration/test_programs/rspec_active_record.rb +17 -0
  128. data/spec/support/integration/test_programs/rspec_rails.rb +17 -0
  129. data/spec/support/models/active_record/person.rb +4 -11
  130. data/spec/support/models/active_record/shipping_address.rb +10 -14
  131. data/spec/support/object_id.rb +6 -5
  132. data/spec/support/shared_examples/hash_with_indifferent_access.rb +724 -208
  133. data/spec/unit/{equality_matcher_spec.rb → equality_matchers/main_spec.rb} +157 -1
  134. data/spec/unit/object_inspection_spec.rb +77 -1
  135. data/spec/unit/rspec/matchers/raise_error_spec.rb +16 -0
  136. data/super_diff.gemspec +4 -5
  137. metadata +77 -56
  138. data/lib/super_diff/active_record/object_inspection/map_extension.rb +0 -18
  139. data/lib/super_diff/active_record/operational_sequencers.rb +0 -14
  140. data/lib/super_diff/active_support/object_inspection/map_extension.rb +0 -15
  141. data/lib/super_diff/active_support/operational_sequencers.rb +0 -10
  142. data/lib/super_diff/diff_formatter.rb +0 -32
  143. data/lib/super_diff/differ.rb +0 -51
  144. data/lib/super_diff/differs/time.rb +0 -24
  145. data/lib/super_diff/equality_matcher.rb +0 -32
  146. data/lib/super_diff/no_differ_available_error.rb +0 -22
  147. data/lib/super_diff/no_operational_sequencer_available_error.rb +0 -20
  148. data/lib/super_diff/object_inspection/inspector.rb +0 -27
  149. data/lib/super_diff/object_inspection/inspectors/time.rb +0 -13
  150. data/lib/super_diff/object_inspection/map.rb +0 -30
  151. data/lib/super_diff/operation_sequences.rb +0 -9
  152. data/lib/super_diff/operational_sequencer.rb +0 -48
  153. data/lib/super_diff/operational_sequencers.rb +0 -17
  154. data/lib/super_diff/operational_sequencers/base.rb +0 -89
  155. data/lib/super_diff/operational_sequencers/hash.rb +0 -85
  156. data/lib/super_diff/operational_sequencers/time_like.rb +0 -30
  157. data/lib/super_diff/rspec/configuration.rb +0 -31
  158. data/lib/super_diff/rspec/object_inspection/map_extension.rb +0 -23
  159. data/lib/super_diff/rspec/operational_sequencers.rb +0 -22
@@ -0,0 +1,5 @@
1
+ module SuperDiff
2
+ module OperationTrees
3
+ DEFAULTS = [Array, Hash, CustomObject, DefaultObject].freeze
4
+ end
5
+ end
@@ -1,6 +1,10 @@
1
1
  module SuperDiff
2
- module OperationSequences
2
+ module OperationTrees
3
3
  class Hash < Base
4
+ def self.applies_to?(value)
5
+ value.is_a?(::Hash)
6
+ end
7
+
4
8
  def to_diff(indent_level:, collection_prefix:, add_comma:)
5
9
  DiffFormatters::Hash.call(
6
10
  self,
@@ -0,0 +1,35 @@
1
+ module SuperDiff
2
+ module OperationTrees
3
+ class Main
4
+ extend AttrExtras.mixin
5
+
6
+ method_object :value
7
+
8
+ def call
9
+ if resolved_class
10
+ begin
11
+ resolved_class.new([], value_class: value.class)
12
+ rescue ArgumentError
13
+ resolved_class.new([])
14
+ end
15
+ else
16
+ raise Errors::NoOperationalSequenceAvailableError.create(value)
17
+ end
18
+ end
19
+
20
+ private
21
+
22
+ def resolved_class
23
+ if value.respond_to?(:attributes_for_super_diff)
24
+ CustomObject
25
+ else
26
+ available_classes.find { |klass| klass.applies_to?(value) }
27
+ end
28
+ end
29
+
30
+ def available_classes
31
+ SuperDiff.configuration.extra_operation_tree_classes + DEFAULTS
32
+ end
33
+ end
34
+ end
35
+ end
@@ -0,0 +1,18 @@
1
+ module SuperDiff
2
+ module OperationTrees
3
+ class MultilineString < Base
4
+ def self.applies_to?(value)
5
+ value.is_a?(::String) && value.is_a?(::String)
6
+ end
7
+
8
+ def to_diff(indent_level:, collection_prefix:, add_comma:)
9
+ DiffFormatters::MultilineString.call(
10
+ self,
11
+ indent_level: indent_level,
12
+ collection_prefix: collection_prefix,
13
+ add_comma: add_comma,
14
+ )
15
+ end
16
+ end
17
+ end
18
+ end
@@ -6,6 +6,7 @@ module SuperDiff
6
6
  :collection,
7
7
  :key,
8
8
  :value,
9
+ # TODO: Is this even used??
9
10
  :index,
10
11
  :index_in_collection,
11
12
  )
@@ -15,6 +16,7 @@ module SuperDiff
15
16
  collection:,
16
17
  key:,
17
18
  value:,
19
+ # TODO: Is this even used??
18
20
  index:,
19
21
  index_in_collection: index
20
22
  )
@@ -22,6 +24,7 @@ module SuperDiff
22
24
  @collection = collection
23
25
  @key = key
24
26
  @value = value
27
+ # TODO: Is this even used??
25
28
  @index = index
26
29
  @index_in_collection = index_in_collection
27
30
  end
@@ -1,3 +1,5 @@
1
+ require 'set'
2
+
1
3
  module SuperDiff
2
4
  module RecursionGuard
3
5
  RECURSION_GUARD_KEY = "super_diff_recursion_guard_key".freeze
@@ -9,20 +9,14 @@ module SuperDiff
9
9
  autoload :MatcherTextBuilders, "super_diff/rspec/matcher_text_builders"
10
10
  autoload :MatcherTextTemplate, "super_diff/rspec/matcher_text_template"
11
11
  autoload :ObjectInspection, "super_diff/rspec/object_inspection"
12
- autoload :OperationalSequencers, "super_diff/rspec/operational_sequencers"
13
-
14
- class << self
15
- attr_accessor :extra_differ_classes
16
- attr_accessor :extra_operational_sequencer_classes
17
- attr_accessor :extra_diff_formatter_classes
18
- end
12
+ autoload :OperationTreeBuilders, "super_diff/rspec/operation_tree_builders"
19
13
 
20
14
  def self.configure
21
15
  yield configuration
22
16
  end
23
17
 
24
18
  def self.configuration
25
- @_configuration ||= Configuration.new
19
+ SuperDiff.configuration
26
20
  end
27
21
 
28
22
  def self.a_hash_including_something?(value)
@@ -48,16 +42,54 @@ module SuperDiff
48
42
  value.base_matcher.is_a?(::RSpec::Matchers::BuiltIn::ContainExactly)
49
43
  end
50
44
 
45
+ def self.a_kind_of_something?(value)
46
+ fuzzy_object?(value) &&
47
+ value.base_matcher.is_a?(::RSpec::Matchers::BuiltIn::BeAKindOf)
48
+ end
49
+
50
+ def self.an_instance_of_something?(value)
51
+ fuzzy_object?(value) &&
52
+ value.base_matcher.is_a?(::RSpec::Matchers::BuiltIn::BeAnInstanceOf)
53
+ end
54
+
55
+ def self.a_value_within_something?(value)
56
+ fuzzy_object?(value) &&
57
+ value.base_matcher.is_a?(::RSpec::Matchers::BuiltIn::BeWithin)
58
+ end
59
+
51
60
  def self.fuzzy_object?(value)
52
61
  value.is_a?(::RSpec::Matchers::AliasedMatcher)
53
62
  end
63
+
64
+ SuperDiff.configuration.tap do |config|
65
+ config.add_extra_differ_classes(
66
+ Differs::CollectionContainingExactly,
67
+ Differs::CollectionIncluding,
68
+ Differs::HashIncluding,
69
+ Differs::ObjectHavingAttributes,
70
+ )
71
+
72
+ config.add_extra_operation_tree_builder_classes(
73
+ OperationTreeBuilders::CollectionContainingExactly,
74
+ OperationTreeBuilders::CollectionIncluding,
75
+ OperationTreeBuilders::HashIncluding,
76
+ OperationTreeBuilders::ObjectHavingAttributes,
77
+ )
78
+
79
+ config.add_extra_inspector_classes(
80
+ ObjectInspection::Inspectors::CollectionContainingExactly,
81
+ ObjectInspection::Inspectors::CollectionIncluding,
82
+ ObjectInspection::Inspectors::HashIncluding,
83
+ ObjectInspection::Inspectors::InstanceOf,
84
+ ObjectInspection::Inspectors::KindOf,
85
+ ObjectInspection::Inspectors::ObjectHavingAttributes,
86
+ ObjectInspection::Inspectors::Primitive,
87
+ ObjectInspection::Inspectors::ValueWithin,
88
+ )
89
+ end
54
90
  end
55
91
  end
56
92
 
57
93
  require_relative "rspec/monkey_patches"
58
94
 
59
- SuperDiff::ObjectInspection.map.prepend(
60
- SuperDiff::RSpec::ObjectInspection::MapExtension,
61
- )
62
-
63
- SuperDiff::Csi.color_enabled = RSpec.configuration.color_enabled?
95
+ SuperDiff::Csi.color_enabled = ::RSpec.configuration.color_enabled?
@@ -31,7 +31,7 @@ module SuperDiff
31
31
 
32
32
  def matcher_text_builder
33
33
  @_matcher_text_builder ||=
34
- matcher_text_builder_class.new(matcher_text_builder_args)
34
+ matcher_text_builder_class.new(**matcher_text_builder_args)
35
35
  end
36
36
 
37
37
  def matcher_text_builder_class
@@ -7,31 +7,16 @@ module SuperDiff
7
7
 
8
8
  def diff
9
9
  if worth_diffing?
10
- diff = SuperDiff::Differ.call(
10
+ diff = SuperDiff::Differs::Main.call(
11
11
  expected,
12
12
  actual,
13
13
  omit_empty: true,
14
- extra_classes: [
15
- *RSpec.configuration.extra_differ_classes,
16
- Differs::CollectionContainingExactly,
17
- Differs::CollectionIncluding,
18
- Differs::HashIncluding,
19
- Differs::ObjectHavingAttributes,
20
- ],
21
- extra_operational_sequencer_classes: [
22
- *RSpec.configuration.extra_operational_sequencer_classes,
23
- OperationalSequencers::CollectionContainingExactly,
24
- OperationalSequencers::CollectionIncluding,
25
- OperationalSequencers::HashIncluding,
26
- OperationalSequencers::ObjectHavingAttributes,
27
- ],
28
- extra_diff_formatter_classes: RSpec.configuration.extra_diff_formatter_classes,
29
14
  )
30
15
  "\n\n" + diff
31
16
  else
32
17
  ""
33
18
  end
34
- rescue NoDifferAvailableError
19
+ rescue SuperDiff::Errors::NoDifferAvailableError
35
20
  ""
36
21
  end
37
22
 
@@ -9,13 +9,8 @@ module SuperDiff
9
9
 
10
10
  private
11
11
 
12
- def operations
13
- OperationalSequencers::CollectionContainingExactly.call(
14
- expected: expected,
15
- actual: actual,
16
- extra_operational_sequencer_classes: extra_operational_sequencer_classes,
17
- extra_diff_formatter_classes: extra_diff_formatter_classes,
18
- )
12
+ def operation_tree_builder_class
13
+ OperationTreeBuilders::CollectionContainingExactly
19
14
  end
20
15
  end
21
16
  end
@@ -9,13 +9,8 @@ module SuperDiff
9
9
 
10
10
  private
11
11
 
12
- def operations
13
- OperationalSequencers::CollectionIncluding.call(
14
- expected: expected,
15
- actual: actual,
16
- extra_operational_sequencer_classes: extra_operational_sequencer_classes,
17
- extra_diff_formatter_classes: extra_diff_formatter_classes,
18
- )
12
+ def operation_tree_builder_class
13
+ OperationTreeBuilders::CollectionIncluding
19
14
  end
20
15
  end
21
16
  end
@@ -9,13 +9,8 @@ module SuperDiff
9
9
 
10
10
  private
11
11
 
12
- def operations
13
- OperationalSequencers::HashIncluding.call(
14
- expected: expected,
15
- actual: actual,
16
- extra_operational_sequencer_classes: extra_operational_sequencer_classes,
17
- extra_diff_formatter_classes: extra_diff_formatter_classes,
18
- )
12
+ def operation_tree_builder_class
13
+ OperationTreeBuilders::HashIncluding
19
14
  end
20
15
  end
21
16
  end
@@ -8,13 +8,8 @@ module SuperDiff
8
8
 
9
9
  private
10
10
 
11
- def operations
12
- OperationalSequencers::ObjectHavingAttributes.call(
13
- expected: expected,
14
- actual: actual,
15
- extra_operational_sequencer_classes: extra_operational_sequencer_classes,
16
- extra_diff_formatter_classes: extra_diff_formatter_classes,
17
- )
11
+ def operation_tree_builder_class
12
+ OperationTreeBuilders::ObjectHavingAttributes
18
13
  end
19
14
  end
20
15
  end
@@ -3,7 +3,7 @@ module SuperDiff
3
3
  module MatcherTextBuilders
4
4
  class Match < Base
5
5
  def initialize(expected_captures:, **rest)
6
- super(rest)
6
+ super(**rest)
7
7
  @expected_captures = expected_captures
8
8
  end
9
9
 
@@ -9,7 +9,7 @@ module SuperDiff
9
9
  unlimited_arguments:,
10
10
  **rest
11
11
  )
12
- super(rest)
12
+ super(**rest)
13
13
  @expected_arity = expected_arity
14
14
  @arbitrary_keywords = arbitrary_keywords
15
15
  @expected_keywords = expected_keywords
@@ -3,7 +3,7 @@ module SuperDiff
3
3
  class MatcherTextTemplate
4
4
  MAX_LINE_LENGTH = 100
5
5
 
6
- def self.generate(&block)
6
+ def self.render(&block)
7
7
  new(&block).to_s
8
8
  end
9
9
 
@@ -91,10 +91,12 @@ module RSpec
91
91
  @skip_shared_group_trace = options.fetch(:skip_shared_group_trace, false)
92
92
  # Patch to convert options[:failure_lines] to groups
93
93
  if options.include?(:failure_lines)
94
- @failure_line_groups = {
95
- lines: options[:failure_lines],
96
- already_colorized: false
97
- }
94
+ @failure_line_groups = [
95
+ {
96
+ lines: options[:failure_lines],
97
+ already_colorized: false
98
+ }
99
+ ]
98
100
  end
99
101
  end
100
102
 
@@ -659,7 +661,9 @@ module RSpec
659
661
 
660
662
  def expected_for_matcher_text
661
663
  if @expected_message
662
- "#<#{@expected_error.name} #{@expected_message.inspect}>"
664
+ "#<#{@expected_error.name} #{description_of(@expected_message)}>"
665
+ elsif @expected_error.is_a? Regexp
666
+ "#<Exception #{description_of(@expected_error)}>"
663
667
  else
664
668
  "#<#{@expected_error.name}>"
665
669
  end
@@ -2,7 +2,6 @@ module SuperDiff
2
2
  module RSpec
3
3
  module ObjectInspection
4
4
  autoload :Inspectors, "super_diff/rspec/object_inspection/inspectors"
5
- autoload :MapExtension, "super_diff/rspec/object_inspection/map_extension"
6
5
  end
7
6
  end
8
7
  end
@@ -14,10 +14,26 @@ module SuperDiff
14
14
  :HashIncluding,
15
15
  "super_diff/rspec/object_inspection/inspectors/hash_including",
16
16
  )
17
+ autoload(
18
+ :InstanceOf,
19
+ "super_diff/rspec/object_inspection/inspectors/instance_of",
20
+ )
21
+ autoload(
22
+ :KindOf,
23
+ "super_diff/rspec/object_inspection/inspectors/kind_of",
24
+ )
17
25
  autoload(
18
26
  :ObjectHavingAttributes,
19
27
  "super_diff/rspec/object_inspection/inspectors/object_having_attributes",
20
28
  )
29
+ autoload(
30
+ :Primitive,
31
+ "super_diff/rspec/object_inspection/inspectors/primitive",
32
+ )
33
+ autoload(
34
+ :ValueWithin,
35
+ "super_diff/rspec/object_inspection/inspectors/value_within",
36
+ )
21
37
  end
22
38
  end
23
39
  end
@@ -2,17 +2,26 @@ module SuperDiff
2
2
  module RSpec
3
3
  module ObjectInspection
4
4
  module Inspectors
5
- CollectionContainingExactly =
6
- SuperDiff::ObjectInspection::InspectionTree.new do
7
- add_text "#<a collection containing exactly ("
5
+ class CollectionContainingExactly < SuperDiff::ObjectInspection::Inspectors::Base
6
+ def self.applies_to?(value)
7
+ SuperDiff::RSpec.a_collection_containing_exactly_something?(value)
8
+ end
8
9
 
9
- nested do |aliased_matcher|
10
- insert_array_inspection_of(aliased_matcher.expected)
11
- end
10
+ protected
11
+
12
+ def inspection_tree
13
+ SuperDiff::ObjectInspection::InspectionTree.new do
14
+ add_text "#<a collection containing exactly ("
12
15
 
13
- add_break
14
- add_text ")>"
16
+ nested do |aliased_matcher|
17
+ insert_array_inspection_of(aliased_matcher.expected)
18
+ end
19
+
20
+ add_break
21
+ add_text ")>"
22
+ end
15
23
  end
24
+ end
16
25
  end
17
26
  end
18
27
  end
@@ -2,19 +2,25 @@ module SuperDiff
2
2
  module RSpec
3
3
  module ObjectInspection
4
4
  module Inspectors
5
- CollectionIncluding = SuperDiff::ObjectInspection::InspectionTree.new do
6
- def self.applies_to?(object)
7
- SuperDiff::RSpec.a_collection_including?(object)
5
+ class CollectionIncluding < SuperDiff::ObjectInspection::Inspectors::Base
6
+ def self.applies_to?(value)
7
+ SuperDiff::RSpec.a_collection_including_something?(value)
8
8
  end
9
9
 
10
- add_text "#<a collection including ("
10
+ protected
11
11
 
12
- nested do |aliased_matcher|
13
- insert_array_inspection_of(aliased_matcher.expecteds)
14
- end
12
+ def inspection_tree
13
+ SuperDiff::ObjectInspection::InspectionTree.new do
14
+ add_text "#<a collection including ("
15
+
16
+ nested do |aliased_matcher|
17
+ insert_array_inspection_of(aliased_matcher.expecteds)
18
+ end
15
19
 
16
- add_break
17
- add_text ")>"
20
+ add_break
21
+ add_text ")>"
22
+ end
23
+ end
18
24
  end
19
25
  end
20
26
  end