super_diff 0.2.0 → 0.5.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 (187) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +108 -74
  3. data/lib/super_diff.rb +20 -11
  4. data/lib/super_diff/active_record.rb +21 -23
  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/monkey_patches.rb +9 -0
  8. data/lib/super_diff/active_record/object_inspection/inspectors/active_record_model.rb +32 -22
  9. data/lib/super_diff/active_record/object_inspection/inspectors/active_record_relation.rb +17 -7
  10. data/lib/super_diff/active_record/operation_tree_builders.rb +14 -0
  11. data/lib/super_diff/active_record/{operational_sequencers → operation_tree_builders}/active_record_model.rb +2 -2
  12. data/lib/super_diff/active_record/{operational_sequencers → operation_tree_builders}/active_record_relation.rb +4 -4
  13. data/lib/super_diff/active_record/{operation_sequences.rb → operation_trees.rb} +2 -2
  14. data/lib/super_diff/active_record/{operation_sequences → operation_trees}/active_record_relation.rb +2 -2
  15. data/lib/super_diff/active_support.rb +16 -19
  16. data/lib/super_diff/active_support/diff_formatters/hash_with_indifferent_access.rb +3 -3
  17. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +3 -5
  18. data/lib/super_diff/active_support/object_inspection/inspectors/hash_with_indifferent_access.rb +17 -7
  19. data/lib/super_diff/active_support/operation_tree_builders.rb +10 -0
  20. data/lib/super_diff/active_support/{operational_sequencers → operation_tree_builders}/hash_with_indifferent_access.rb +2 -2
  21. data/lib/super_diff/active_support/{operation_sequences.rb → operation_trees.rb} +2 -2
  22. data/lib/super_diff/active_support/{operation_sequences → operation_trees}/hash_with_indifferent_access.rb +2 -2
  23. data/lib/super_diff/configuration.rb +60 -0
  24. data/lib/super_diff/csi.rb +4 -0
  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 +2 -2
  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 +3 -3
  35. data/lib/super_diff/differs.rb +4 -9
  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 +1 -7
  47. data/lib/super_diff/equality_matchers/base.rb +1 -1
  48. data/lib/super_diff/equality_matchers/default.rb +2 -8
  49. data/lib/super_diff/equality_matchers/defaults.rb +12 -0
  50. data/lib/super_diff/equality_matchers/hash.rb +1 -7
  51. data/lib/super_diff/equality_matchers/main.rb +21 -0
  52. data/lib/super_diff/equality_matchers/multiline_string.rb +1 -7
  53. data/lib/super_diff/errors.rb +16 -0
  54. data/lib/super_diff/errors/no_diff_formatter_available_error.rb +21 -0
  55. data/lib/super_diff/errors/no_differ_available_error.rb +24 -0
  56. data/lib/super_diff/errors/no_operational_sequencer_available_error.rb +22 -0
  57. data/lib/super_diff/implementation_checks.rb +19 -0
  58. data/lib/super_diff/object_inspection.rb +1 -10
  59. data/lib/super_diff/object_inspection/inspection_tree.rb +6 -2
  60. data/lib/super_diff/object_inspection/inspectors.rb +5 -0
  61. data/lib/super_diff/object_inspection/inspectors/array.rb +20 -10
  62. data/lib/super_diff/object_inspection/inspectors/base.rb +36 -0
  63. data/lib/super_diff/object_inspection/inspectors/custom_object.rb +24 -14
  64. data/lib/super_diff/object_inspection/inspectors/default_object.rb +44 -30
  65. data/lib/super_diff/object_inspection/inspectors/defaults.rb +15 -0
  66. data/lib/super_diff/object_inspection/inspectors/hash.rb +20 -10
  67. data/lib/super_diff/object_inspection/inspectors/main.rb +35 -0
  68. data/lib/super_diff/object_inspection/inspectors/primitive.rb +20 -5
  69. data/lib/super_diff/object_inspection/inspectors/string.rb +15 -5
  70. data/lib/super_diff/object_inspection/inspectors/time_like.rb +23 -0
  71. data/lib/super_diff/object_inspection/nodes/inspection.rb +9 -2
  72. data/lib/super_diff/operation_tree_builders.rb +18 -0
  73. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/array.rb +38 -59
  74. data/lib/super_diff/operation_tree_builders/base.rb +98 -0
  75. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/custom_object.rb +3 -3
  76. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/default_object.rb +8 -3
  77. data/lib/super_diff/operation_tree_builders/defaults.rb +5 -0
  78. data/lib/super_diff/operation_tree_builders/hash.rb +226 -0
  79. data/lib/super_diff/operation_tree_builders/main.rb +42 -0
  80. data/lib/super_diff/{operational_sequencers → operation_tree_builders}/multiline_string.rb +3 -3
  81. data/lib/super_diff/operation_tree_builders/time_like.rb +34 -0
  82. data/lib/super_diff/operation_trees.rb +13 -0
  83. data/lib/super_diff/{operation_sequences → operation_trees}/array.rb +5 -1
  84. data/lib/super_diff/operation_trees/base.rb +31 -0
  85. data/lib/super_diff/{operation_sequences → operation_trees}/custom_object.rb +5 -1
  86. data/lib/super_diff/{operation_sequences → operation_trees}/default_object.rb +10 -8
  87. data/lib/super_diff/operation_trees/defaults.rb +5 -0
  88. data/lib/super_diff/{operation_sequences → operation_trees}/hash.rb +5 -1
  89. data/lib/super_diff/operation_trees/main.rb +35 -0
  90. data/lib/super_diff/operation_trees/multiline_string.rb +18 -0
  91. data/lib/super_diff/operations/unary_operation.rb +3 -0
  92. data/lib/super_diff/rspec.rb +54 -22
  93. data/lib/super_diff/rspec/augmented_matcher.rb +1 -1
  94. data/lib/super_diff/rspec/differ.rb +2 -17
  95. data/lib/super_diff/rspec/differs.rb +9 -3
  96. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +3 -8
  97. data/lib/super_diff/rspec/differs/collection_including.rb +18 -0
  98. data/lib/super_diff/rspec/differs/hash_including.rb +18 -0
  99. data/lib/super_diff/rspec/differs/object_having_attributes.rb +17 -0
  100. data/lib/super_diff/rspec/matcher_text_builders.rb +4 -0
  101. data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +26 -7
  102. data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +61 -0
  103. data/lib/super_diff/rspec/matcher_text_builders/match.rb +1 -1
  104. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +13 -1
  105. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +1 -1
  106. data/lib/super_diff/rspec/matcher_text_template.rb +1 -1
  107. data/lib/super_diff/rspec/monkey_patches.rb +226 -115
  108. data/lib/super_diff/rspec/object_inspection.rb +0 -1
  109. data/lib/super_diff/rspec/object_inspection/inspectors.rb +22 -6
  110. data/lib/super_diff/rspec/object_inspection/inspectors/collection_containing_exactly.rb +17 -8
  111. data/lib/super_diff/rspec/object_inspection/inspectors/collection_including.rb +28 -0
  112. data/lib/super_diff/rspec/object_inspection/inspectors/hash_including.rb +31 -0
  113. data/lib/super_diff/rspec/object_inspection/inspectors/instance_of.rb +23 -0
  114. data/lib/super_diff/rspec/object_inspection/inspectors/kind_of.rb +23 -0
  115. data/lib/super_diff/rspec/object_inspection/inspectors/object_having_attributes.rb +31 -0
  116. data/lib/super_diff/rspec/object_inspection/inspectors/primitive.rb +13 -0
  117. data/lib/super_diff/rspec/object_inspection/inspectors/value_within.rb +29 -0
  118. data/lib/super_diff/rspec/operation_tree_builders.rb +22 -0
  119. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/collection_containing_exactly.rb +6 -6
  120. data/lib/super_diff/rspec/{operational_sequencers/partial_array.rb → operation_tree_builders/collection_including.rb} +4 -3
  121. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +25 -0
  122. data/lib/super_diff/rspec/{operational_sequencers/partial_object.rb → operation_tree_builders/object_having_attributes.rb} +5 -11
  123. data/lib/super_diff/version.rb +1 -1
  124. data/spec/examples.txt +397 -328
  125. data/spec/integration/rails/active_record_spec.rb +1 -1
  126. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +1 -1
  127. data/spec/integration/rspec/be_predicate_matcher_spec.rb +111 -59
  128. data/spec/integration/rspec/eq_matcher_spec.rb +139 -3
  129. data/spec/integration/rspec/have_attributes_matcher_spec.rb +354 -227
  130. data/spec/integration/rspec/have_predicate_matcher_spec.rb +484 -0
  131. data/spec/integration/rspec/include_matcher_spec.rb +2 -2
  132. data/spec/integration/rspec/match_array_matcher_spec.rb +372 -0
  133. data/spec/integration/rspec/match_matcher_spec.rb +8 -8
  134. data/spec/integration/rspec/raise_error_matcher_spec.rb +605 -226
  135. data/spec/integration/rspec/third_party_matcher_spec.rb +241 -0
  136. data/spec/integration/rspec/unhandled_errors_spec.rb +110 -58
  137. data/spec/spec_helper.rb +18 -7
  138. data/spec/support/command_runner.rb +3 -0
  139. data/spec/support/integration/helpers.rb +14 -90
  140. data/spec/support/integration/matchers.rb +143 -0
  141. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +14 -29
  142. data/spec/support/integration/test_programs/base.rb +120 -0
  143. data/spec/support/integration/test_programs/plain.rb +13 -0
  144. data/spec/support/integration/test_programs/rspec_active_record.rb +17 -0
  145. data/spec/support/integration/test_programs/rspec_rails.rb +17 -0
  146. data/spec/support/models/active_record/person.rb +4 -11
  147. data/spec/support/models/active_record/query.rb +15 -0
  148. data/spec/support/models/active_record/shipping_address.rb +10 -14
  149. data/spec/support/object_id.rb +27 -0
  150. data/spec/support/ruby_versions.rb +4 -0
  151. data/spec/support/shared_examples/active_record.rb +71 -0
  152. data/spec/support/shared_examples/hash_with_indifferent_access.rb +724 -208
  153. data/spec/tmp/integration_spec.rb +15 -0
  154. data/spec/unit/{equality_matcher_spec.rb → equality_matchers/main_spec.rb} +165 -9
  155. data/spec/unit/object_inspection_spec.rb +94 -18
  156. data/spec/unit/rspec/matchers/have_predicate_spec.rb +21 -0
  157. data/spec/unit/rspec/matchers/match_array_spec.rb +11 -0
  158. data/spec/unit/rspec/matchers/raise_error_spec.rb +16 -0
  159. data/super_diff.gemspec +3 -6
  160. metadata +99 -91
  161. data/lib/super_diff/active_record/object_inspection/map_extension.rb +0 -18
  162. data/lib/super_diff/active_record/operational_sequencers.rb +0 -14
  163. data/lib/super_diff/active_support/object_inspection/map_extension.rb +0 -15
  164. data/lib/super_diff/active_support/operational_sequencers.rb +0 -10
  165. data/lib/super_diff/diff_formatter.rb +0 -32
  166. data/lib/super_diff/differ.rb +0 -51
  167. data/lib/super_diff/equality_matcher.rb +0 -32
  168. data/lib/super_diff/no_differ_available_error.rb +0 -22
  169. data/lib/super_diff/no_operational_sequencer_available_error.rb +0 -20
  170. data/lib/super_diff/object_inspection/inspector.rb +0 -27
  171. data/lib/super_diff/object_inspection/map.rb +0 -28
  172. data/lib/super_diff/operation_sequences.rb +0 -9
  173. data/lib/super_diff/operation_sequences/base.rb +0 -11
  174. data/lib/super_diff/operational_sequencer.rb +0 -48
  175. data/lib/super_diff/operational_sequencers.rb +0 -16
  176. data/lib/super_diff/operational_sequencers/base.rb +0 -89
  177. data/lib/super_diff/operational_sequencers/hash.rb +0 -85
  178. data/lib/super_diff/rspec/configuration.rb +0 -31
  179. data/lib/super_diff/rspec/differs/partial_array.rb +0 -22
  180. data/lib/super_diff/rspec/differs/partial_hash.rb +0 -22
  181. data/lib/super_diff/rspec/differs/partial_object.rb +0 -22
  182. data/lib/super_diff/rspec/object_inspection/inspectors/partial_array.rb +0 -22
  183. data/lib/super_diff/rspec/object_inspection/inspectors/partial_hash.rb +0 -21
  184. data/lib/super_diff/rspec/object_inspection/inspectors/partial_object.rb +0 -21
  185. data/lib/super_diff/rspec/object_inspection/map_extension.rb +0 -23
  186. data/lib/super_diff/rspec/operational_sequencers.rb +0 -22
  187. data/lib/super_diff/rspec/operational_sequencers/partial_hash.rb +0 -32
@@ -1,85 +0,0 @@
1
- module SuperDiff
2
- module OperationalSequencers
3
- class Hash < Base
4
- def self.applies_to?(expected, actual)
5
- expected.is_a?(::Hash) && actual.is_a?(::Hash)
6
- end
7
-
8
- protected
9
-
10
- def unary_operations
11
- all_keys.reduce([]) do |operations, key|
12
- possibly_add_noop_to(operations, key)
13
- possibly_add_delete_to(operations, key)
14
- possibly_add_insert_to(operations, key)
15
- operations
16
- end
17
- end
18
-
19
- def build_operation_sequencer
20
- OperationSequences::Hash.new([])
21
- end
22
-
23
- private
24
-
25
- def all_keys
26
- actual.keys | expected.keys
27
- end
28
-
29
- def possibly_add_noop_to(operations, key)
30
- if should_add_noop_operation?(key)
31
- operations << Operations::UnaryOperation.new(
32
- name: :noop,
33
- collection: actual,
34
- key: key,
35
- index: all_keys.index(key),
36
- index_in_collection: actual.keys.index(key),
37
- value: actual[key],
38
- )
39
- end
40
- end
41
-
42
- def should_add_noop_operation?(key)
43
- expected.include?(key) &&
44
- actual.include?(key) &&
45
- expected[key] == actual[key]
46
- end
47
-
48
- def possibly_add_delete_to(operations, key)
49
- if should_add_delete_operation?(key)
50
- operations << Operations::UnaryOperation.new(
51
- name: :delete,
52
- collection: expected,
53
- key: key,
54
- index: all_keys.index(key),
55
- index_in_collection: expected.keys.index(key),
56
- value: expected[key],
57
- )
58
- end
59
- end
60
-
61
- def should_add_delete_operation?(key)
62
- expected.include?(key) &&
63
- (!actual.include?(key) || expected[key] != actual[key])
64
- end
65
-
66
- def possibly_add_insert_to(operations, key)
67
- if should_add_insert_operation?(key)
68
- operations << Operations::UnaryOperation.new(
69
- name: :insert,
70
- collection: actual,
71
- key: key,
72
- index: all_keys.index(key),
73
- index_in_collection: actual.keys.index(key),
74
- value: actual[key],
75
- )
76
- end
77
- end
78
-
79
- def should_add_insert_operation?(key)
80
- !expected.include?(key) ||
81
- (actual.include?(key) && expected[key] != actual[key])
82
- end
83
- end
84
- end
85
- end
@@ -1,31 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- class Configuration
4
- attr_reader(
5
- :extra_differ_classes,
6
- :extra_operational_sequencer_classes,
7
- :extra_diff_formatter_classes,
8
- )
9
-
10
- def initialize
11
- @extra_differ_classes = [].freeze
12
- @extra_operational_sequencer_classes = [].freeze
13
- @extra_diff_formatter_classes = [].freeze
14
- end
15
-
16
- def add_extra_differ_class(klass)
17
- @extra_differ_classes = (@extra_differ_classes + [klass]).freeze
18
- end
19
-
20
- def add_extra_operational_sequencer_class(klass)
21
- @extra_operational_sequencer_classes =
22
- (@extra_operational_sequencer_classes + [klass]).freeze
23
- end
24
-
25
- def add_extra_diff_formatter_class(klass)
26
- @extra_diff_formatter_classes =
27
- (@extra_diff_formatter_classes + [klass]).freeze
28
- end
29
- end
30
- end
31
- end
@@ -1,22 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module Differs
4
- class PartialArray < SuperDiff::Differs::Array
5
- def self.applies_to?(expected, actual)
6
- SuperDiff::RSpec.partial_array?(expected) && actual.is_a?(::Array)
7
- end
8
-
9
- private
10
-
11
- def operations
12
- OperationalSequencers::PartialArray.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
- )
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module Differs
4
- class PartialHash < SuperDiff::Differs::Hash
5
- def self.applies_to?(expected, actual)
6
- SuperDiff::RSpec.partial_hash?(expected) && actual.is_a?(::Hash)
7
- end
8
-
9
- private
10
-
11
- def operations
12
- OperationalSequencers::PartialHash.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
- )
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module Differs
4
- class PartialObject < SuperDiff::Differs::DefaultObject
5
- def self.applies_to?(expected, _actual)
6
- SuperDiff::RSpec.partial_object?(expected)
7
- end
8
-
9
- private
10
-
11
- def operations
12
- OperationalSequencers::PartialObject.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
- )
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,22 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module Inspectors
5
- PartialArray = SuperDiff::ObjectInspection::InspectionTree.new do
6
- def self.applies_to?(object)
7
- SuperDiff::RSpec.partial_array?(object)
8
- end
9
-
10
- add_text "#<a collection including ("
11
-
12
- nested do |aliased_matcher|
13
- insert_array_inspection_of(aliased_matcher.expecteds)
14
- end
15
-
16
- add_break
17
- add_text ")>"
18
- end
19
- end
20
- end
21
- end
22
- end
@@ -1,21 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module Inspectors
5
- PartialHash = SuperDiff::ObjectInspection::InspectionTree.new do
6
- add_text "#<a hash including ("
7
-
8
- nested do |aliased_matcher|
9
- insert_hash_inspection_of(
10
- aliased_matcher.expecteds.first,
11
- initial_break: nil,
12
- )
13
- end
14
-
15
- add_break
16
- add_text ")>"
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,21 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module Inspectors
5
- PartialObject = SuperDiff::ObjectInspection::InspectionTree.new do
6
- add_text "#<an object having attributes ("
7
-
8
- nested do |aliased_matcher|
9
- insert_hash_inspection_of(
10
- aliased_matcher.expected,
11
- initial_break: nil,
12
- )
13
- end
14
-
15
- add_break
16
- add_text ")>"
17
- end
18
- end
19
- end
20
- end
21
- end
@@ -1,23 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module ObjectInspection
4
- module MapExtension
5
- def call(object)
6
- if SuperDiff::RSpec.partial_hash?(object)
7
- Inspectors::PartialHash
8
- elsif SuperDiff::RSpec.partial_array?(object)
9
- Inspectors::PartialArray
10
- elsif SuperDiff::RSpec.partial_object?(object)
11
- Inspectors::PartialObject
12
- elsif SuperDiff::RSpec.collection_containing_exactly?(object)
13
- Inspectors::CollectionContainingExactly
14
- elsif object.is_a?(::RSpec::Mocks::Double)
15
- SuperDiff::ObjectInspection::Inspectors::Primitive
16
- else
17
- super
18
- end
19
- end
20
- end
21
- end
22
- end
23
- end
@@ -1,22 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module OperationalSequencers
4
- autoload(
5
- :CollectionContainingExactly,
6
- "super_diff/rspec/operational_sequencers/collection_containing_exactly",
7
- )
8
- autoload(
9
- :PartialArray,
10
- "super_diff/rspec/operational_sequencers/partial_array",
11
- )
12
- autoload(
13
- :PartialHash,
14
- "super_diff/rspec/operational_sequencers/partial_hash",
15
- )
16
- autoload(
17
- :PartialObject,
18
- "super_diff/rspec/operational_sequencers/partial_object",
19
- )
20
- end
21
- end
22
- end
@@ -1,32 +0,0 @@
1
- module SuperDiff
2
- module RSpec
3
- module OperationalSequencers
4
- class PartialHash < SuperDiff::OperationalSequencers::Hash
5
- def self.applies_to?(expected, actual)
6
- SuperDiff::RSpec.partial_hash?(expected) && actual.is_a?(::Hash)
7
- end
8
-
9
- def initialize(expected:, **rest)
10
- super
11
-
12
- @expected = expected.expecteds.first
13
- end
14
-
15
- private
16
-
17
- def should_add_noop_operation?(key)
18
- !expected.include?(key) || (
19
- actual.include?(key) &&
20
- expected[key] == actual[key]
21
- )
22
- end
23
-
24
- def should_add_insert_operation?(key)
25
- expected.include?(key) &&
26
- actual.include?(key) &&
27
- expected[key] != actual[key]
28
- end
29
- end
30
- end
31
- end
32
- end