super_diff 0.4.2 → 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 (156) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +21 -8
  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 +7 -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/rspec.rb +45 -13
  91. data/lib/super_diff/rspec/augmented_matcher.rb +1 -1
  92. data/lib/super_diff/rspec/differ.rb +2 -17
  93. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +2 -7
  94. data/lib/super_diff/rspec/differs/collection_including.rb +2 -7
  95. data/lib/super_diff/rspec/differs/hash_including.rb +2 -7
  96. data/lib/super_diff/rspec/differs/object_having_attributes.rb +2 -7
  97. data/lib/super_diff/rspec/matcher_text_builders/match.rb +1 -1
  98. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +1 -1
  99. data/lib/super_diff/rspec/matcher_text_template.rb +1 -1
  100. data/lib/super_diff/rspec/object_inspection.rb +0 -1
  101. data/lib/super_diff/rspec/object_inspection/inspectors.rb +16 -0
  102. data/lib/super_diff/rspec/object_inspection/inspectors/collection_containing_exactly.rb +17 -8
  103. data/lib/super_diff/rspec/object_inspection/inspectors/collection_including.rb +15 -9
  104. data/lib/super_diff/rspec/object_inspection/inspectors/hash_including.rb +20 -10
  105. data/lib/super_diff/rspec/object_inspection/inspectors/instance_of.rb +23 -0
  106. data/lib/super_diff/rspec/object_inspection/inspectors/kind_of.rb +23 -0
  107. data/lib/super_diff/rspec/object_inspection/inspectors/object_having_attributes.rb +20 -11
  108. data/lib/super_diff/rspec/object_inspection/inspectors/primitive.rb +13 -0
  109. data/lib/super_diff/rspec/object_inspection/inspectors/value_within.rb +29 -0
  110. data/lib/super_diff/rspec/operation_tree_builders.rb +22 -0
  111. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/collection_containing_exactly.rb +5 -5
  112. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/collection_including.rb +2 -2
  113. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/hash_including.rb +3 -11
  114. data/lib/super_diff/rspec/{operational_sequencers → operation_tree_builders}/object_having_attributes.rb +4 -8
  115. data/lib/super_diff/version.rb +1 -1
  116. data/spec/examples.txt +397 -393
  117. data/spec/integration/rspec/have_attributes_matcher_spec.rb +354 -227
  118. data/spec/integration/rspec/include_matcher_spec.rb +2 -2
  119. data/spec/integration/rspec/unhandled_errors_spec.rb +68 -12
  120. data/spec/support/command_runner.rb +3 -0
  121. data/spec/support/integration/helpers.rb +12 -96
  122. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +14 -29
  123. data/spec/support/integration/test_programs/base.rb +120 -0
  124. data/spec/support/integration/test_programs/plain.rb +13 -0
  125. data/spec/support/integration/test_programs/rspec_active_record.rb +17 -0
  126. data/spec/support/integration/test_programs/rspec_rails.rb +17 -0
  127. data/spec/support/models/active_record/person.rb +4 -11
  128. data/spec/support/models/active_record/shipping_address.rb +10 -14
  129. data/spec/support/object_id.rb +6 -5
  130. data/spec/tmp/integration_spec.rb +15 -0
  131. data/spec/unit/{equality_matcher_spec.rb → equality_matchers/main_spec.rb} +157 -1
  132. data/spec/unit/object_inspection_spec.rb +77 -1
  133. data/super_diff.gemspec +0 -1
  134. metadata +72 -64
  135. data/lib/super_diff/active_record/object_inspection/map_extension.rb +0 -18
  136. data/lib/super_diff/active_record/operational_sequencers.rb +0 -14
  137. data/lib/super_diff/active_support/object_inspection/map_extension.rb +0 -15
  138. data/lib/super_diff/active_support/operational_sequencers.rb +0 -10
  139. data/lib/super_diff/diff_formatter.rb +0 -32
  140. data/lib/super_diff/differ.rb +0 -51
  141. data/lib/super_diff/differs/time.rb +0 -24
  142. data/lib/super_diff/equality_matcher.rb +0 -32
  143. data/lib/super_diff/no_differ_available_error.rb +0 -22
  144. data/lib/super_diff/no_operational_sequencer_available_error.rb +0 -20
  145. data/lib/super_diff/object_inspection/inspector.rb +0 -27
  146. data/lib/super_diff/object_inspection/inspectors/time.rb +0 -13
  147. data/lib/super_diff/object_inspection/map.rb +0 -30
  148. data/lib/super_diff/operation_sequences.rb +0 -9
  149. data/lib/super_diff/operational_sequencer.rb +0 -48
  150. data/lib/super_diff/operational_sequencers.rb +0 -17
  151. data/lib/super_diff/operational_sequencers/base.rb +0 -89
  152. data/lib/super_diff/operational_sequencers/hash.rb +0 -85
  153. data/lib/super_diff/operational_sequencers/time_like.rb +0 -30
  154. data/lib/super_diff/rspec/configuration.rb +0 -31
  155. data/lib/super_diff/rspec/object_inspection/map_extension.rb +0 -23
  156. data/lib/super_diff/rspec/operational_sequencers.rb +0 -22
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: eed0200e5bbaa7abc329598fb01c4c3b7d21e3a871fccbc8c50f99a295e9cdd4
4
- data.tar.gz: 392e4d85b279fb33f8c28f47394da7509095bc50787d2784f7b6b4aed34358d8
3
+ metadata.gz: 31484b874ef6086f57dd96cf538d32692040bcfe20df0b5a03ffb2d37528e178
4
+ data.tar.gz: ffe9ee2546b907b77018edfc856b207384c111f8d59dcdae54c6148cf1cf6cec
5
5
  SHA512:
6
- metadata.gz: ea68e889de434c3340a8dc9ded4e6a1874056253d6af94bc7ea30cacda46e115100c40f27519c4770ec5f77bf4cd9d7925d63ccaff927a1cd50bb10a0c8fc64d
7
- data.tar.gz: 2e10c9d374b7f458aa2e582faa70dbecf26f22dd5445315fd72ad47529d8d193def3fa5f6e7460afd36ed26df6f3f135931533e99cf712032496b1195099b16e
6
+ metadata.gz: 7f3a9f593e712569fac26dfc8ae395be685006d641576e317dfbc4aee773c506c833142b76f430b22e3089aa8ad2c8be3aabecb6d50992834db15e5ad4968fd0
7
+ data.tar.gz: b308ffce611c4bc457115247a9f1a5fb7bf310a78bc9a478fb5c99e6ca2d6fd40070013177d99e372554f0a25615278b094a262226c0460fcc127402aed27f71
data/README.md CHANGED
@@ -1,11 +1,12 @@
1
- # SuperDiff [![Gem Version][version-badge]][rubygems] [![Build Status][travis-badge]][travis] ![Downloads][downloads-badge] [![Hound][hound-badge]][hound]
1
+ # SuperDiff [![Gem Version][version-badge]][rubygems] [![Build Status][travis-badge]][travis] ![Downloads][downloads-badge] [![IssueHunt][issuehunt-badge]][issuehunt]
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
5
  [travis-badge]: http://img.shields.io/travis/mcmire/super_diff/master.svg
6
6
  [downloads-badge]: http://img.shields.io/gem/dtv/super_diff.svg
7
- [hound-badge]: https://img.shields.io/badge/Reviewed_by-Hound-8E64B0.svg
8
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
9
10
 
10
11
  SuperDiff is a gem that hooks into RSpec
11
12
  to intelligently display the differences between two data structures of any type.
@@ -85,7 +86,7 @@ expect(actual).to eq(expected)
85
86
 
86
87
  You would get output that looks like this:
87
88
 
88
- ![Before super_diff](doc/before.png)
89
+ ![Before super_diff](docs/before.png)
89
90
 
90
91
  What this library does
91
92
  is to provide a diff engine
@@ -94,7 +95,7 @@ and display them in a sensible way.
94
95
  So, using the example above,
95
96
  you'd get this instead:
96
97
 
97
- ![After super_diff](doc/after.png)
98
+ ![After super_diff](docs/after.png)
98
99
 
99
100
  ## Installation
100
101
 
@@ -164,14 +165,18 @@ you would add something like this to your test helper file
164
165
  (`rails_helper` or `spec_helper`):
165
166
 
166
167
  ``` ruby
167
- SuperDiff::RSpec.configure do |config|
168
+ SuperDiff.configure do |config|
168
169
  config.add_extra_differ_class(YourDiffer)
169
- config.add_extra_operational_sequencer_class(YourOperationalSequencer)
170
+ config.add_extra_operation_tree_builder_class(YourOperationTreeBuilder)
171
+ config.add_extra_operation_tree_class(YourOperationTree)
170
172
  config.add_extra_diff_formatter_class(YourDiffFormatter)
171
173
  end
172
174
  ```
173
175
 
174
- *(More info here in the future on adding a custom differ, operational sequencer, and diff formatter.
176
+ *(More info here in the future on adding a custom differ,
177
+ operation tree builder,
178
+ operation tree,
179
+ and diff formatter.
175
180
  Also explanations on what these are.)*
176
181
 
177
182
  ## Support
@@ -186,9 +191,17 @@ I'll try to respond to it as soon as I can!
186
191
 
187
192
  ## Contributing
188
193
 
189
- Any contributions to improve this library are welcome!
194
+ Any code contributions to improve this library are welcome!
190
195
  Please see the [contributing](./CONTRIBUTING.md) document for more on how to do that.
191
196
 
197
+ ## Sponsoring
198
+
199
+ If there's a change you want implemented, you can choose to sponsor that change!
200
+ `super_diff` is set up on IssueHunt,
201
+ so feel free to search for an existing issue (or make your own)
202
+ and [add a bounty](https://issuehunt.io/r/mcmire/super_diff/issues).
203
+ I'll get notified right away!
204
+
192
205
  ## Compatibility
193
206
 
194
207
  `super_diff` is [tested][travis] to work with
@@ -7,23 +7,17 @@ module SuperDiff
7
7
  :ColorizedDocumentExtensions,
8
8
  "super_diff/colorized_document_extensions",
9
9
  )
10
+ autoload :Configuration, "super_diff/configuration"
10
11
  autoload :Csi, "super_diff/csi"
11
- autoload :DiffFormatter, "super_diff/diff_formatter"
12
12
  autoload :DiffFormatters, "super_diff/diff_formatters"
13
- autoload :Differ, "super_diff/differ"
14
13
  autoload :Differs, "super_diff/differs"
15
- autoload :EqualityMatcher, "super_diff/equality_matcher"
16
14
  autoload :EqualityMatchers, "super_diff/equality_matchers"
15
+ autoload :Errors, "super_diff/errors"
17
16
  autoload :Helpers, "super_diff/helpers"
18
- autoload :NoDifferAvailableError, "super_diff/no_differ_available_error"
19
- autoload(
20
- :NoOperationalSequencerAvailableError,
21
- "super_diff/no_operational_sequencer_available_error",
22
- )
17
+ autoload :ImplementationChecks, "super_diff/implementation_checks"
23
18
  autoload :ObjectInspection, "super_diff/object_inspection"
24
- autoload :OperationalSequencer, "super_diff/operational_sequencer"
25
- autoload :OperationalSequencers, "super_diff/operational_sequencers"
26
- autoload :OperationSequences, "super_diff/operation_sequences"
19
+ autoload :OperationTrees, "super_diff/operation_trees"
20
+ autoload :OperationTreeBuilders, "super_diff/operation_tree_builders"
27
21
  autoload :Operations, "super_diff/operations"
28
22
  autoload :RecursionGuard, "super_diff/recursion_guard"
29
23
 
@@ -33,4 +27,19 @@ module SuperDiff
33
27
  border: :blue,
34
28
  header: :white,
35
29
  }.freeze
30
+
31
+ def self.configure
32
+ yield configuration
33
+ end
34
+
35
+ def self.configuration
36
+ @_configuration ||= Configuration.new
37
+ end
38
+
39
+ def self.time_like?(value)
40
+ # Check for ActiveSupport's #acts_like_time? for their time-like objects
41
+ # (like ActiveSupport::TimeWithZone).
42
+ (value.respond_to?(:acts_like_time?) && value.acts_like_time?) ||
43
+ value.is_a?(Time)
44
+ end
36
45
  end
@@ -9,35 +9,31 @@ module SuperDiff
9
9
  "super_diff/active_record/object_inspection",
10
10
  )
11
11
  autoload(
12
- :OperationSequences,
13
- "super_diff/active_record/operation_sequences",
12
+ :OperationTrees,
13
+ "super_diff/active_record/operation_trees",
14
14
  )
15
15
  autoload(
16
- :OperationalSequencers,
17
- "super_diff/active_record/operational_sequencers",
16
+ :OperationTreeBuilders,
17
+ "super_diff/active_record/operation_tree_builders",
18
18
  )
19
- end
20
- end
21
19
 
22
- if defined?(SuperDiff::RSpec)
23
- SuperDiff::RSpec.configure do |config|
24
- config.add_extra_differ_class(
25
- SuperDiff::ActiveRecord::Differs::ActiveRecordRelation,
26
- )
27
- config.add_extra_operational_sequencer_class(
28
- SuperDiff::ActiveRecord::OperationalSequencers::ActiveRecordModel,
29
- )
30
- config.add_extra_operational_sequencer_class(
31
- SuperDiff::ActiveRecord::OperationalSequencers::ActiveRecordRelation,
32
- )
33
- config.add_extra_diff_formatter_class(
34
- SuperDiff::ActiveRecord::DiffFormatters::ActiveRecordRelation,
35
- )
20
+ SuperDiff.configure do |config|
21
+ config.add_extra_differ_classes(
22
+ Differs::ActiveRecordRelation,
23
+ )
24
+ config.add_extra_operation_tree_builder_classes(
25
+ OperationTreeBuilders::ActiveRecordModel,
26
+ OperationTreeBuilders::ActiveRecordRelation,
27
+ )
28
+ config.add_extra_diff_formatter_classes(
29
+ DiffFormatters::ActiveRecordRelation,
30
+ )
31
+ config.add_extra_inspector_classes(
32
+ ObjectInspection::Inspectors::ActiveRecordModel,
33
+ ObjectInspection::Inspectors::ActiveRecordRelation,
34
+ )
35
+ end
36
36
  end
37
37
  end
38
38
 
39
39
  require "super_diff/active_record/monkey_patches"
40
-
41
- SuperDiff::ObjectInspection.map.prepend(
42
- SuperDiff::ActiveRecord::ObjectInspection::MapExtension,
43
- )
@@ -2,8 +2,8 @@ module SuperDiff
2
2
  module ActiveRecord
3
3
  module DiffFormatters
4
4
  class ActiveRecordRelation < SuperDiff::DiffFormatters::Base
5
- def self.applies_to?(operations)
6
- operations.is_a?(OperationSequences::ActiveRecordRelation)
5
+ def self.applies_to?(operation_tree)
6
+ operation_tree.is_a?(OperationTrees::ActiveRecordRelation)
7
7
  end
8
8
 
9
9
  def call
@@ -12,7 +12,7 @@ module SuperDiff
12
12
  close_token: "]>",
13
13
  collection_prefix: collection_prefix,
14
14
  build_item_prefix: proc { "" },
15
- operations: operations,
15
+ operation_tree: operation_tree,
16
16
  indent_level: indent_level,
17
17
  add_comma: add_comma?,
18
18
  )
@@ -9,19 +9,17 @@ module SuperDiff
9
9
 
10
10
  def call
11
11
  DiffFormatters::ActiveRecordRelation.call(
12
- operations,
12
+ operation_tree,
13
13
  indent_level: indent_level,
14
14
  )
15
15
  end
16
16
 
17
17
  private
18
18
 
19
- def operations
20
- OperationalSequencers::ActiveRecordRelation.call(
19
+ def operation_tree
20
+ OperationTreeBuilders::ActiveRecordRelation.call(
21
21
  expected: expected,
22
22
  actual: actual,
23
- extra_operational_sequencer_classes: extra_operational_sequencer_classes,
24
- extra_diff_formatter_classes: extra_diff_formatter_classes,
25
23
  )
26
24
  end
27
25
  end
@@ -2,35 +2,45 @@ module SuperDiff
2
2
  module ActiveRecord
3
3
  module ObjectInspection
4
4
  module Inspectors
5
- ActiveRecordModel = SuperDiff::ObjectInspection::InspectionTree.new do
6
- add_text do |object|
7
- "#<#{object.class} "
5
+ class ActiveRecordModel < SuperDiff::ObjectInspection::Inspectors::Base
6
+ def self.applies_to?(value)
7
+ value.is_a?(::ActiveRecord::Base)
8
8
  end
9
9
 
10
- when_multiline do
11
- add_text "{"
12
- end
10
+ protected
13
11
 
14
- nested do |object|
15
- add_break
12
+ def inspection_tree
13
+ SuperDiff::ObjectInspection::InspectionTree.new do
14
+ add_text do |object|
15
+ "#<#{object.class} "
16
+ end
16
17
 
17
- insert_separated_list(
18
- ["id"] + (object.attributes.keys.sort - ["id"]),
19
- separator: ",",
20
- ) do |name|
21
- add_text name
22
- add_text ": "
23
- add_inspection_of object.read_attribute(name)
24
- end
25
- end
18
+ when_multiline do
19
+ add_text "{"
20
+ end
26
21
 
27
- add_break
22
+ nested do |object|
23
+ add_break
28
24
 
29
- when_multiline do
30
- add_text "}"
31
- end
25
+ insert_separated_list(
26
+ ["id"] + (object.attributes.keys.sort - ["id"]),
27
+ separator: ",",
28
+ ) do |name|
29
+ add_text name
30
+ add_text ": "
31
+ add_inspection_of object.read_attribute(name)
32
+ end
33
+ end
32
34
 
33
- add_text ">"
35
+ add_break
36
+
37
+ when_multiline do
38
+ add_text "}"
39
+ end
40
+
41
+ add_text ">"
42
+ end
43
+ end
34
44
  end
35
45
  end
36
46
  end
@@ -2,15 +2,25 @@ module SuperDiff
2
2
  module ActiveRecord
3
3
  module ObjectInspection
4
4
  module Inspectors
5
- ActiveRecordRelation = SuperDiff::ObjectInspection::InspectionTree.new do
6
- add_text "#<ActiveRecord::Relation ["
7
-
8
- nested do |array|
9
- insert_array_inspection_of(array)
5
+ class ActiveRecordRelation < SuperDiff::ObjectInspection::Inspectors::Base
6
+ def self.applies_to?(value)
7
+ value.is_a?(::ActiveRecord::Relation)
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 "#<ActiveRecord::Relation ["
15
+
16
+ nested do |array|
17
+ insert_array_inspection_of(array)
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,14 @@
1
+ module SuperDiff
2
+ module ActiveRecord
3
+ module OperationTreeBuilders
4
+ autoload(
5
+ :ActiveRecordModel,
6
+ "super_diff/active_record/operation_tree_builders/active_record_model",
7
+ )
8
+ autoload(
9
+ :ActiveRecordRelation,
10
+ "super_diff/active_record/operation_tree_builders/active_record_relation",
11
+ )
12
+ end
13
+ end
14
+ end
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module ActiveRecord
3
- module OperationalSequencers
4
- class ActiveRecordModel < SuperDiff::OperationalSequencers::CustomObject
3
+ module OperationTreeBuilders
4
+ class ActiveRecordModel < SuperDiff::OperationTreeBuilders::CustomObject
5
5
  def self.applies_to?(expected, actual)
6
6
  expected.is_a?(::ActiveRecord::Base) &&
7
7
  actual.is_a?(::ActiveRecord::Base) &&
@@ -1,7 +1,7 @@
1
1
  module SuperDiff
2
2
  module ActiveRecord
3
- module OperationalSequencers
4
- class ActiveRecordRelation < SuperDiff::OperationalSequencers::Array
3
+ module OperationTreeBuilders
4
+ class ActiveRecordRelation < SuperDiff::OperationTreeBuilders::Array
5
5
  def self.applies_to?(expected, actual)
6
6
  expected.is_a?(::Array) &&
7
7
  actual.is_a?(::ActiveRecord::Relation)
@@ -15,8 +15,8 @@ module SuperDiff
15
15
 
16
16
  private
17
17
 
18
- def operations
19
- @_operations ||= OperationSequences::ActiveRecordRelation.new([])
18
+ def operation_tree
19
+ @_operation_tree ||= OperationTrees::ActiveRecordRelation.new([])
20
20
  end
21
21
  end
22
22
  end
@@ -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
- )