super_diff 0.12.1 → 0.15.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 (272) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +7 -19
  3. data/lib/super_diff/active_record/differs/active_record_relation.rb +2 -0
  4. data/lib/super_diff/active_record/differs.rb +3 -1
  5. data/lib/super_diff/active_record/inspection_tree_builders/active_record_model.rb +7 -5
  6. data/lib/super_diff/active_record/inspection_tree_builders/active_record_relation.rb +12 -10
  7. data/lib/super_diff/active_record/inspection_tree_builders.rb +4 -2
  8. data/lib/super_diff/active_record/monkey_patches.rb +4 -2
  9. data/lib/super_diff/active_record/object_inspection.rb +6 -4
  10. data/lib/super_diff/active_record/operation_tree_builders/active_record_model.rb +3 -1
  11. data/lib/super_diff/active_record/operation_tree_builders/active_record_relation.rb +3 -1
  12. data/lib/super_diff/active_record/operation_tree_builders.rb +4 -2
  13. data/lib/super_diff/active_record/operation_tree_flatteners/active_record_relation.rb +4 -2
  14. data/lib/super_diff/active_record/operation_tree_flatteners.rb +3 -1
  15. data/lib/super_diff/active_record/operation_trees/active_record_relation.rb +2 -0
  16. data/lib/super_diff/active_record/operation_trees.rb +3 -1
  17. data/lib/super_diff/active_record.rb +10 -8
  18. data/lib/super_diff/active_support/differs/hash_with_indifferent_access.rb +2 -0
  19. data/lib/super_diff/active_support/differs.rb +3 -1
  20. data/lib/super_diff/active_support/inspection_tree_builders/hash_with_indifferent_access.rb +16 -14
  21. data/lib/super_diff/active_support/inspection_tree_builders/ordered_options.rb +16 -14
  22. data/lib/super_diff/active_support/inspection_tree_builders.rb +4 -2
  23. data/lib/super_diff/active_support/object_inspection.rb +6 -4
  24. data/lib/super_diff/active_support/operation_tree_builders/hash_with_indifferent_access.rb +6 -4
  25. data/lib/super_diff/active_support/operation_tree_builders.rb +3 -1
  26. data/lib/super_diff/active_support/operation_tree_flatteners/hash_with_indifferent_access.rb +4 -2
  27. data/lib/super_diff/active_support/operation_tree_flatteners.rb +3 -1
  28. data/lib/super_diff/active_support/operation_trees/hash_with_indifferent_access.rb +2 -0
  29. data/lib/super_diff/active_support/operation_trees.rb +3 -1
  30. data/lib/super_diff/active_support.rb +8 -6
  31. data/lib/super_diff/basic/diff_formatters/collection.rb +18 -18
  32. data/lib/super_diff/basic/diff_formatters/multiline_string.rb +2 -0
  33. data/lib/super_diff/basic/diff_formatters.rb +4 -2
  34. data/lib/super_diff/basic/differs/array.rb +2 -0
  35. data/lib/super_diff/basic/differs/custom_object.rb +3 -1
  36. data/lib/super_diff/basic/differs/date_like.rb +2 -0
  37. data/lib/super_diff/basic/differs/default_object.rb +3 -1
  38. data/lib/super_diff/basic/differs/hash.rb +2 -0
  39. data/lib/super_diff/basic/differs/multiline_string.rb +2 -0
  40. data/lib/super_diff/basic/differs/time_like.rb +2 -0
  41. data/lib/super_diff/basic/differs.rb +11 -9
  42. data/lib/super_diff/basic/inspection_tree_builders/array.rb +5 -3
  43. data/lib/super_diff/basic/inspection_tree_builders/custom_object.rb +5 -3
  44. data/lib/super_diff/basic/inspection_tree_builders/data_object.rb +42 -0
  45. data/lib/super_diff/basic/inspection_tree_builders/date_like.rb +7 -5
  46. data/lib/super_diff/basic/inspection_tree_builders/default_object.rb +7 -5
  47. data/lib/super_diff/basic/inspection_tree_builders/hash.rb +7 -5
  48. data/lib/super_diff/basic/inspection_tree_builders/primitive.rb +3 -1
  49. data/lib/super_diff/basic/inspection_tree_builders/range_object.rb +19 -0
  50. data/lib/super_diff/basic/inspection_tree_builders/time_like.rb +8 -8
  51. data/lib/super_diff/basic/inspection_tree_builders.rb +18 -8
  52. data/lib/super_diff/basic/operation_tree_builders/array.rb +6 -4
  53. data/lib/super_diff/basic/operation_tree_builders/custom_object.rb +3 -1
  54. data/lib/super_diff/basic/operation_tree_builders/data_object.rb +20 -0
  55. data/lib/super_diff/basic/operation_tree_builders/date_like.rb +2 -0
  56. data/lib/super_diff/basic/operation_tree_builders/default_object.rb +32 -31
  57. data/lib/super_diff/basic/operation_tree_builders/hash.rb +49 -46
  58. data/lib/super_diff/basic/operation_tree_builders/multiline_string.rb +5 -3
  59. data/lib/super_diff/basic/operation_tree_builders/time_like.rb +5 -3
  60. data/lib/super_diff/basic/operation_tree_builders.rb +15 -9
  61. data/lib/super_diff/basic/operation_tree_flatteners/array.rb +4 -2
  62. data/lib/super_diff/basic/operation_tree_flatteners/collection.rb +11 -11
  63. data/lib/super_diff/basic/operation_tree_flatteners/custom_object.rb +5 -3
  64. data/lib/super_diff/basic/operation_tree_flatteners/default_object.rb +6 -5
  65. data/lib/super_diff/basic/operation_tree_flatteners/hash.rb +5 -3
  66. data/lib/super_diff/basic/operation_tree_flatteners/multiline_string.rb +3 -1
  67. data/lib/super_diff/basic/operation_tree_flatteners.rb +8 -6
  68. data/lib/super_diff/basic/operation_trees/array.rb +2 -0
  69. data/lib/super_diff/basic/operation_trees/custom_object.rb +2 -0
  70. data/lib/super_diff/basic/operation_trees/default_object.rb +6 -4
  71. data/lib/super_diff/basic/operation_trees/hash.rb +2 -0
  72. data/lib/super_diff/basic/operation_trees/multiline_string.rb +3 -1
  73. data/lib/super_diff/basic/operation_trees.rb +9 -7
  74. data/lib/super_diff/basic.rb +12 -7
  75. data/lib/super_diff/core/abstract_differ.rb +2 -0
  76. data/lib/super_diff/core/abstract_inspection_tree_builder.rb +2 -0
  77. data/lib/super_diff/core/abstract_operation_tree.rb +4 -2
  78. data/lib/super_diff/core/abstract_operation_tree_builder.rb +15 -18
  79. data/lib/super_diff/core/abstract_operation_tree_flattener.rb +5 -3
  80. data/lib/super_diff/core/binary_operation.rb +3 -1
  81. data/lib/super_diff/core/colorized_document_extensions.rb +2 -0
  82. data/lib/super_diff/core/configuration.rb +23 -43
  83. data/lib/super_diff/core/differ_dispatcher.rb +4 -2
  84. data/lib/super_diff/core/gem_version.rb +2 -0
  85. data/lib/super_diff/core/helpers.rb +14 -12
  86. data/lib/super_diff/core/implementation_checks.rb +6 -2
  87. data/lib/super_diff/core/inspection_tree.rb +38 -38
  88. data/lib/super_diff/core/inspection_tree_builder_dispatcher.rb +5 -5
  89. data/lib/super_diff/core/inspection_tree_nodes/as_lines_when_rendering_to_lines.rb +3 -1
  90. data/lib/super_diff/core/inspection_tree_nodes/as_prefix_when_rendering_to_lines.rb +2 -0
  91. data/lib/super_diff/core/inspection_tree_nodes/as_prelude_when_rendering_to_lines.rb +2 -0
  92. data/lib/super_diff/core/inspection_tree_nodes/as_single_line.rb +2 -0
  93. data/lib/super_diff/core/inspection_tree_nodes/base.rb +9 -9
  94. data/lib/super_diff/core/inspection_tree_nodes/inspection.rb +2 -0
  95. data/lib/super_diff/core/inspection_tree_nodes/nesting.rb +2 -0
  96. data/lib/super_diff/core/inspection_tree_nodes/only_when.rb +5 -1
  97. data/lib/super_diff/core/inspection_tree_nodes/text.rb +2 -0
  98. data/lib/super_diff/core/inspection_tree_nodes/when_empty.rb +3 -1
  99. data/lib/super_diff/core/inspection_tree_nodes/when_non_empty.rb +3 -1
  100. data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_lines.rb +3 -1
  101. data/lib/super_diff/core/inspection_tree_nodes/when_rendering_to_string.rb +2 -0
  102. data/lib/super_diff/core/inspection_tree_nodes.rb +16 -14
  103. data/lib/super_diff/core/line.rb +9 -7
  104. data/lib/super_diff/core/no_differ_available_error.rb +7 -5
  105. data/lib/super_diff/core/no_inspection_tree_builder_available_error.rb +5 -3
  106. data/lib/super_diff/core/no_operation_tree_available_error.rb +4 -2
  107. data/lib/super_diff/core/no_operation_tree_builder_available_error.rb +7 -5
  108. data/lib/super_diff/core/operation_tree_builder_dispatcher.rb +3 -3
  109. data/lib/super_diff/core/operation_tree_finder.rb +8 -8
  110. data/lib/super_diff/core/prefix_for_next_inspection_tree_node.rb +2 -0
  111. data/lib/super_diff/core/prelude_for_next_inspection_tree_node.rb +2 -0
  112. data/lib/super_diff/core/recursion_guard.rb +6 -4
  113. data/lib/super_diff/core/tiered_lines.rb +2 -0
  114. data/lib/super_diff/core/tiered_lines_elider.rb +53 -54
  115. data/lib/super_diff/core/tiered_lines_formatter.rb +6 -4
  116. data/lib/super_diff/core/unary_operation.rb +2 -0
  117. data/lib/super_diff/core.rb +31 -29
  118. data/lib/super_diff/csi/bold_sequence.rb +2 -0
  119. data/lib/super_diff/csi/color.rb +4 -4
  120. data/lib/super_diff/csi/color_sequence_block.rb +3 -1
  121. data/lib/super_diff/csi/colorized_document.rb +7 -9
  122. data/lib/super_diff/csi/document.rb +15 -18
  123. data/lib/super_diff/csi/eight_bit_color.rb +32 -37
  124. data/lib/super_diff/csi/four_bit_color.rb +12 -9
  125. data/lib/super_diff/csi/reset_sequence.rb +2 -0
  126. data/lib/super_diff/csi/twenty_four_bit_color.rb +22 -21
  127. data/lib/super_diff/csi/uncolorized_document.rb +2 -0
  128. data/lib/super_diff/csi.rb +12 -42
  129. data/lib/super_diff/differs.rb +6 -4
  130. data/lib/super_diff/equality_matchers/array.rb +18 -16
  131. data/lib/super_diff/equality_matchers/base.rb +6 -4
  132. data/lib/super_diff/equality_matchers/default.rb +5 -3
  133. data/lib/super_diff/equality_matchers/defaults.rb +3 -1
  134. data/lib/super_diff/equality_matchers/hash.rb +18 -16
  135. data/lib/super_diff/equality_matchers/main.rb +3 -1
  136. data/lib/super_diff/equality_matchers/multiline_string.rb +18 -16
  137. data/lib/super_diff/equality_matchers/primitive.rb +15 -13
  138. data/lib/super_diff/equality_matchers/singleline_string.rb +16 -14
  139. data/lib/super_diff/equality_matchers.rb +11 -9
  140. data/lib/super_diff/errors.rb +4 -2
  141. data/lib/super_diff/object_inspection.rb +17 -15
  142. data/lib/super_diff/operation_tree_builders.rb +6 -4
  143. data/lib/super_diff/operation_tree_flatteners.rb +6 -4
  144. data/lib/super_diff/operation_trees.rb +6 -4
  145. data/lib/super_diff/operations.rb +4 -2
  146. data/lib/super_diff/rails.rb +4 -2
  147. data/lib/super_diff/rspec/augmented_matcher.rb +3 -1
  148. data/lib/super_diff/rspec/differ.rb +16 -7
  149. data/lib/super_diff/rspec/differs/collection_containing_exactly.rb +2 -0
  150. data/lib/super_diff/rspec/differs/collection_including.rb +2 -0
  151. data/lib/super_diff/rspec/differs/hash_including.rb +2 -0
  152. data/lib/super_diff/rspec/differs/object_having_attributes.rb +2 -0
  153. data/lib/super_diff/rspec/differs.rb +6 -4
  154. data/lib/super_diff/rspec/inspection_tree_builders/collection_containing_exactly.rb +12 -10
  155. data/lib/super_diff/rspec/inspection_tree_builders/collection_including.rb +10 -8
  156. data/lib/super_diff/rspec/inspection_tree_builders/double.rb +20 -18
  157. data/lib/super_diff/rspec/inspection_tree_builders/generic_describable_matcher.rb +2 -0
  158. data/lib/super_diff/rspec/inspection_tree_builders/hash_including.rb +10 -8
  159. data/lib/super_diff/rspec/inspection_tree_builders/instance_of.rb +2 -0
  160. data/lib/super_diff/rspec/inspection_tree_builders/kind_of.rb +2 -0
  161. data/lib/super_diff/rspec/inspection_tree_builders/object_having_attributes.rb +12 -10
  162. data/lib/super_diff/rspec/inspection_tree_builders/primitive.rb +2 -0
  163. data/lib/super_diff/rspec/inspection_tree_builders/value_within.rb +6 -4
  164. data/lib/super_diff/rspec/inspection_tree_builders.rb +12 -10
  165. data/lib/super_diff/rspec/matcher_text_builders/base.rb +12 -12
  166. data/lib/super_diff/rspec/matcher_text_builders/be_predicate.rb +19 -17
  167. data/lib/super_diff/rspec/matcher_text_builders/contain_exactly.rb +3 -1
  168. data/lib/super_diff/rspec/matcher_text_builders/have_predicate.rb +7 -5
  169. data/lib/super_diff/rspec/matcher_text_builders/match.rb +6 -4
  170. data/lib/super_diff/rspec/matcher_text_builders/raise_error.rb +5 -3
  171. data/lib/super_diff/rspec/matcher_text_builders/respond_to.rb +20 -18
  172. data/lib/super_diff/rspec/matcher_text_builders.rb +9 -7
  173. data/lib/super_diff/rspec/matcher_text_template.rb +34 -39
  174. data/lib/super_diff/rspec/monkey_patches.rb +129 -56
  175. data/lib/super_diff/rspec/object_inspection.rb +7 -5
  176. data/lib/super_diff/rspec/operation_tree_builders/collection_containing_exactly.rb +4 -4
  177. data/lib/super_diff/rspec/operation_tree_builders/collection_including.rb +2 -0
  178. data/lib/super_diff/rspec/operation_tree_builders/hash_including.rb +2 -0
  179. data/lib/super_diff/rspec/operation_tree_builders/object_having_attributes.rb +2 -0
  180. data/lib/super_diff/rspec/operation_tree_builders.rb +6 -4
  181. data/lib/super_diff/rspec-rails.rb +4 -2
  182. data/lib/super_diff/rspec.rb +27 -14
  183. data/lib/super_diff/version.rb +3 -1
  184. data/lib/super_diff.rb +24 -27
  185. data/super_diff.gemspec +20 -18
  186. metadata +15 -182
  187. data/spec/examples.txt +0 -704
  188. data/spec/integration/rails/active_record_spec.rb +0 -21
  189. data/spec/integration/rails/active_support_spec.rb +0 -19
  190. data/spec/integration/rails/engines_spec.rb +0 -25
  191. data/spec/integration/rails/hash_with_indifferent_access_spec.rb +0 -21
  192. data/spec/integration/rspec/be_falsey_matcher_spec.rb +0 -58
  193. data/spec/integration/rspec/be_matcher_spec.rb +0 -605
  194. data/spec/integration/rspec/be_nil_matcher_spec.rb +0 -57
  195. data/spec/integration/rspec/be_predicate_matcher_spec.rb +0 -615
  196. data/spec/integration/rspec/be_truthy_matcher_spec.rb +0 -62
  197. data/spec/integration/rspec/contain_exactly_matcher_spec.rb +0 -377
  198. data/spec/integration/rspec/eq_matcher_spec.rb +0 -1066
  199. data/spec/integration/rspec/generic_describable_matchers_spec.rb +0 -177
  200. data/spec/integration/rspec/have_attributes_matcher_spec.rb +0 -443
  201. data/spec/integration/rspec/have_predicate_matcher_spec.rb +0 -478
  202. data/spec/integration/rspec/include_matcher_spec.rb +0 -452
  203. data/spec/integration/rspec/magic_metadata_spec.rb +0 -51
  204. data/spec/integration/rspec/match_array_matcher_spec.rb +0 -424
  205. data/spec/integration/rspec/match_matcher_spec.rb +0 -1359
  206. data/spec/integration/rspec/raise_error_matcher_spec.rb +0 -1488
  207. data/spec/integration/rspec/respond_to_matcher_spec.rb +0 -999
  208. data/spec/integration/rspec/third_party_matcher_spec.rb +0 -245
  209. data/spec/integration/rspec/unhandled_errors_spec.rb +0 -150
  210. data/spec/internal/log/test.log +0 -0
  211. data/spec/spec_helper.rb +0 -90
  212. data/spec/support/colorizer.rb +0 -9
  213. data/spec/support/command_runner.rb +0 -253
  214. data/spec/support/helpers.rb +0 -21
  215. data/spec/support/integration/helpers.rb +0 -124
  216. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
  217. data/spec/support/integration/matchers.rb +0 -177
  218. data/spec/support/integration/test_programs/base.rb +0 -143
  219. data/spec/support/integration/test_programs/plain.rb +0 -19
  220. data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
  221. data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
  222. data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
  223. data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
  224. data/spec/support/models/a.rb +0 -11
  225. data/spec/support/models/active_record/person.rb +0 -28
  226. data/spec/support/models/active_record/query.rb +0 -15
  227. data/spec/support/models/active_record/shipping_address.rb +0 -24
  228. data/spec/support/models/customer.rb +0 -22
  229. data/spec/support/models/empty_class.rb +0 -6
  230. data/spec/support/models/item.rb +0 -10
  231. data/spec/support/models/order.rb +0 -9
  232. data/spec/support/models/person.rb +0 -20
  233. data/spec/support/models/player.rb +0 -30
  234. data/spec/support/models/shipping_address.rb +0 -25
  235. data/spec/support/shared_examples/active_record.rb +0 -428
  236. data/spec/support/shared_examples/active_support.rb +0 -188
  237. data/spec/support/shared_examples/elided_diffs.rb +0 -938
  238. data/spec/support/shared_examples/hash_with_indifferent_access.rb +0 -749
  239. data/spec/support/shared_examples/key.rb +0 -123
  240. data/spec/support/unit/helpers.rb +0 -24
  241. data/spec/support/unit/matchers/be_deprecated_in_favor_of.rb +0 -39
  242. data/spec/support/unit/matchers/match_output.rb +0 -40
  243. data/spec/unit/active_record/object_inspection_spec.rb +0 -289
  244. data/spec/unit/active_support/object_inspection_spec.rb +0 -170
  245. data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
  246. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  247. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  248. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  249. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  250. data/spec/unit/core/helpers_spec.rb +0 -68
  251. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  252. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  253. data/spec/unit/deprecations_spec.rb +0 -176
  254. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  255. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  256. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  257. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  258. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  259. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  260. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  261. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  262. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  263. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  264. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  265. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  266. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  267. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  268. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  269. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  270. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  271. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  272. data/spec/unit/super_diff_spec.rb +0 -2115
@@ -1,22 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module OperationTrees
4
- autoload :Array, "super_diff/basic/operation_trees/array"
5
- autoload :CustomObject, "super_diff/basic/operation_trees/custom_object"
6
- autoload :DefaultObject, "super_diff/basic/operation_trees/default_object"
7
- autoload :Hash, "super_diff/basic/operation_trees/hash"
6
+ autoload :Array, 'super_diff/basic/operation_trees/array'
7
+ autoload :CustomObject, 'super_diff/basic/operation_trees/custom_object'
8
+ autoload :DefaultObject, 'super_diff/basic/operation_trees/default_object'
9
+ autoload :Hash, 'super_diff/basic/operation_trees/hash'
8
10
  autoload(
9
11
  :MultilineString,
10
- "super_diff/basic/operation_trees/multiline_string"
12
+ 'super_diff/basic/operation_trees/multiline_string'
11
13
  )
12
14
 
13
15
  class Main
14
16
  def self.call(*args)
15
- warn <<~EOT
17
+ warn <<~WARNING
16
18
  WARNING: SuperDiff::OperationTrees::Main.call(...) is deprecated and will be removed in the next major release.
17
19
  Please use SuperDiff.find_operation_tree_for(...) instead.
18
20
  #{caller_locations.join("\n")}
19
- EOT
21
+ WARNING
20
22
  SuperDiff.find_operation_tree_for(*args)
21
23
  end
22
24
  end
@@ -1,12 +1,14 @@
1
- require "super_diff/basic/differs"
2
- require "super_diff/basic/inspection_tree_builders"
3
- require "super_diff/basic/operation_tree_builders"
4
- require "super_diff/basic/operation_tree_flatteners"
5
- require "super_diff/basic/operation_trees"
1
+ # frozen_string_literal: true
2
+
3
+ require 'super_diff/basic/differs'
4
+ require 'super_diff/basic/inspection_tree_builders'
5
+ require 'super_diff/basic/operation_tree_builders'
6
+ require 'super_diff/basic/operation_tree_flatteners'
7
+ require 'super_diff/basic/operation_trees'
6
8
 
7
9
  module SuperDiff
8
10
  module Basic
9
- autoload :DiffFormatters, "super_diff/basic/diff_formatters"
11
+ autoload :DiffFormatters, 'super_diff/basic/diff_formatters'
10
12
 
11
13
  SuperDiff.configuration.tap do |config|
12
14
  config.add_extra_differ_classes(
@@ -26,6 +28,8 @@ module SuperDiff
26
28
  InspectionTreeBuilders::Primitive,
27
29
  InspectionTreeBuilders::TimeLike,
28
30
  InspectionTreeBuilders::DateLike,
31
+ InspectionTreeBuilders::DataObject,
32
+ InspectionTreeBuilders::RangeObject,
29
33
  InspectionTreeBuilders::DefaultObject
30
34
  )
31
35
 
@@ -34,7 +38,8 @@ module SuperDiff
34
38
  OperationTreeBuilders::Hash,
35
39
  OperationTreeBuilders::TimeLike,
36
40
  OperationTreeBuilders::DateLike,
37
- OperationTreeBuilders::CustomObject
41
+ OperationTreeBuilders::CustomObject,
42
+ OperationTreeBuilders::DataObject
38
43
  )
39
44
 
40
45
  config.add_extra_operation_tree_classes(
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class AbstractDiffer
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class AbstractInspectionTreeBuilder
@@ -1,4 +1,6 @@
1
- require "forwardable"
1
+ # frozen_string_literal: true
2
+
3
+ require 'forwardable'
2
4
 
3
5
  module SuperDiff
4
6
  module Core
@@ -32,7 +34,7 @@ module SuperDiff
32
34
  end
33
35
 
34
36
  def pretty_print(pp)
35
- pp.group(1, "#<#{self.class.name} [", "]>") do
37
+ pp.group(1, "#<#{self.class.name} [", ']>') do
36
38
  pp.breakable
37
39
  pp.seplist(self) { |value| pp.pp value }
38
40
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class AbstractOperationTreeBuilder
@@ -31,16 +33,15 @@ module SuperDiff
31
33
  operation_tree = build_operation_tree
32
34
  unmatched_delete_operations = []
33
35
 
34
- unary_operations.each_with_index do |operation, index|
35
- if (
36
- operation.name == :insert &&
37
- (
38
- delete_operation =
39
- unmatched_delete_operations.find do |op|
40
- op.key == operation.key
41
- end
42
- ) && (insert_operation = operation)
43
- )
36
+ unary_operations.each_with_index do |operation, _index|
37
+ if operation.name == :insert &&
38
+ (
39
+ delete_operation =
40
+ unmatched_delete_operations.find do |op|
41
+ op.key == operation.key
42
+ end
43
+ ) && (insert_operation = operation)
44
+
44
45
  unmatched_delete_operations.delete(delete_operation)
45
46
 
46
47
  if (
@@ -64,9 +65,7 @@ module SuperDiff
64
65
  operation_tree << insert_operation
65
66
  end
66
67
  else
67
- if operation.name == :delete
68
- unmatched_delete_operations << operation
69
- end
68
+ unmatched_delete_operations << operation if operation.name == :delete
70
69
 
71
70
  operation_tree << operation
72
71
  end
@@ -76,11 +75,9 @@ module SuperDiff
76
75
  end
77
76
 
78
77
  def possible_comparison_of(operation, next_operation)
79
- if should_compare?(operation, next_operation)
80
- compare(operation.value, next_operation.value)
81
- else
82
- nil
83
- end
78
+ return unless should_compare?(operation, next_operation)
79
+
80
+ compare(operation.value, next_operation.value)
84
81
  end
85
82
 
86
83
  def should_compare?(operation, next_operation)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class AbstractOperationTreeFlattener
@@ -21,7 +23,7 @@ module SuperDiff
21
23
  def beginning_lines
22
24
  if tiered_lines.empty?
23
25
  []
24
- elsif indentation_level > 0
26
+ elsif indentation_level.positive?
25
27
  [tiered_lines[0]]
26
28
  else
27
29
  [tiered_lines[0].with_complete_bookend(:open)]
@@ -35,7 +37,7 @@ module SuperDiff
35
37
  def ending_lines
36
38
  if tiered_lines.empty?
37
39
  []
38
- elsif indentation_level > 0
40
+ elsif indentation_level.positive?
39
41
  [tiered_lines[-1]]
40
42
  else
41
43
  [tiered_lines[-1].with_complete_bookend(:close)]
@@ -43,7 +45,7 @@ module SuperDiff
43
45
  end
44
46
 
45
47
  def tiered_lines
46
- @_tiered_lines ||= build_tiered_lines
48
+ @tiered_lines ||= build_tiered_lines
47
49
  end
48
50
  end
49
51
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class BinaryOperation
@@ -14,7 +16,7 @@ module SuperDiff
14
16
  :right_value!,
15
17
  :left_index!,
16
18
  :right_index!,
17
- children: []
19
+ { children: [] }
18
20
  ]
19
21
  )
20
22
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module ColorizedDocumentExtensions
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class Configuration
@@ -23,7 +25,7 @@ module SuperDiff
23
25
  def initialize(options = {})
24
26
  @actual_color = :yellow
25
27
  @border_color = :blue
26
- @color_enabled = color_enabled_by_default?
28
+ @color_enabled = nil
27
29
  @diff_elision_enabled = false
28
30
  @diff_elision_maximum = 0
29
31
  @elision_marker_color = :cyan
@@ -41,6 +43,8 @@ module SuperDiff
41
43
 
42
44
  def initialize_dup(original)
43
45
  super
46
+ @extra_diff_formatter_classes =
47
+ original.extra_diff_formatter_classes.dup.freeze
44
48
  @extra_differ_classes = original.extra_differ_classes.dup.freeze
45
49
  @extra_operation_tree_builder_classes =
46
50
  original.extra_operation_tree_builder_classes.dup.freeze
@@ -51,6 +55,8 @@ module SuperDiff
51
55
  end
52
56
 
53
57
  def color_enabled?
58
+ return color_enabled_by_default? if @color_enabled.nil?
59
+
54
60
  @color_enabled
55
61
  end
56
62
 
@@ -71,101 +77,71 @@ module SuperDiff
71
77
  end
72
78
 
73
79
  options.each { |key, value| instance_variable_set("@#{key}", value) }
74
-
75
- updated
76
- end
77
-
78
- def updated
79
- SuperDiff::Csi.color_enabled = color_enabled?
80
80
  end
81
81
 
82
82
  def add_extra_diff_formatter_classes(*classes)
83
83
  @extra_diff_formatter_classes =
84
84
  (@extra_diff_formatter_classes + classes).freeze
85
85
  end
86
- alias_method(
87
- :add_extra_diff_formatter_class,
88
- :add_extra_diff_formatter_classes
89
- )
86
+ alias add_extra_diff_formatter_class add_extra_diff_formatter_classes
90
87
 
91
88
  def prepend_extra_diff_formatter_classes(*classes)
92
89
  @extra_diff_formatter_classes =
93
90
  (classes + @extra_diff_formatter_classes).freeze
94
91
  end
95
- alias_method(
96
- :prepend_extra_diff_formatter_class,
97
- :prepend_extra_diff_formatter_classes
98
- )
92
+ alias prepend_extra_diff_formatter_class prepend_extra_diff_formatter_classes
99
93
 
100
94
  def add_extra_differ_classes(*classes)
101
95
  @extra_differ_classes = (@extra_differ_classes + classes).freeze
102
96
  end
103
- alias_method :add_extra_differ_class, :add_extra_differ_classes
97
+ alias add_extra_differ_class add_extra_differ_classes
104
98
 
105
99
  def prepend_extra_differ_classes(*classes)
106
100
  @extra_differ_classes = (classes + @extra_differ_classes).freeze
107
101
  end
108
- alias_method :prepend_extra_differ_class, :prepend_extra_differ_classes
102
+ alias prepend_extra_differ_class prepend_extra_differ_classes
109
103
 
110
104
  def add_extra_inspection_tree_builder_classes(*classes)
111
105
  @extra_inspection_tree_builder_classes =
112
106
  (@extra_inspection_tree_builder_classes + classes).freeze
113
107
  end
114
- alias_method(
115
- :add_extra_inspection_tree_builder_class,
116
- :add_extra_inspection_tree_builder_classes
117
- )
108
+ alias add_extra_inspection_tree_builder_class add_extra_inspection_tree_builder_classes
118
109
 
119
110
  def prepend_extra_inspection_tree_builder_classes(*classes)
120
111
  @extra_inspection_tree_builder_classes =
121
112
  (classes + @extra_inspection_tree_builder_classes).freeze
122
113
  end
123
- alias_method(
124
- :prepend_extra_inspection_tree_builder_class,
125
- :prepend_extra_inspection_tree_builder_classes
126
- )
114
+ alias prepend_extra_inspection_tree_builder_class prepend_extra_inspection_tree_builder_classes
127
115
 
128
116
  def add_extra_operation_tree_builder_classes(*classes)
129
117
  @extra_operation_tree_builder_classes =
130
118
  (@extra_operation_tree_builder_classes + classes).freeze
131
119
  end
132
- alias_method(
133
- :add_extra_operation_tree_builder_class,
134
- :add_extra_operation_tree_builder_classes
135
- )
120
+ alias add_extra_operation_tree_builder_class add_extra_operation_tree_builder_classes
136
121
 
137
122
  def prepend_extra_operation_tree_builder_classes(*classes)
138
123
  @extra_operation_tree_builder_classes =
139
124
  (classes + @extra_operation_tree_builder_classes).freeze
140
125
  end
141
- alias_method(
142
- :prepend_extra_operation_tree_builder_class,
143
- :prepend_extra_operation_tree_builder_classes
144
- )
126
+ alias prepend_extra_operation_tree_builder_class prepend_extra_operation_tree_builder_classes
145
127
 
146
128
  def add_extra_operation_tree_classes(*classes)
147
129
  @extra_operation_tree_classes =
148
130
  (@extra_operation_tree_classes + classes).freeze
149
131
  end
150
- alias_method(
151
- :add_extra_operation_tree_class,
152
- :add_extra_operation_tree_classes
153
- )
132
+ alias add_extra_operation_tree_class add_extra_operation_tree_classes
154
133
 
155
134
  def prepend_extra_operation_tree_classes(*classes)
156
135
  @extra_operation_tree_classes =
157
136
  (classes + @extra_operation_tree_classes).freeze
158
137
  end
159
- alias_method(
160
- :prepend_extra_operation_tree_class,
161
- :prepend_extra_operation_tree_classes
162
- )
138
+ alias prepend_extra_operation_tree_class prepend_extra_operation_tree_classes
163
139
 
164
140
  def to_h
165
141
  {
166
142
  actual_color: actual_color,
167
143
  border_color: border_color,
168
- color_enabled: color_enabled?,
144
+ color_enabled: @color_enabled,
169
145
  diff_elision_enabled: diff_elision_enabled?,
170
146
  diff_elision_maximum: diff_elision_maximum,
171
147
  elision_marker_color: elision_marker_color,
@@ -185,7 +161,11 @@ module SuperDiff
185
161
  private
186
162
 
187
163
  def color_enabled_by_default?
188
- ENV["CI"] == "true" || $stdout.respond_to?(:tty?) && $stdout.tty?
164
+ return true if ENV['CI'] == 'true'
165
+
166
+ return ::RSpec.configuration.color_enabled? if defined?(::SuperDiff::RSpec)
167
+
168
+ $stdout.respond_to?(:tty?) && $stdout.tty?
189
169
  end
190
170
  end
191
171
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class DifferDispatcher
@@ -6,7 +8,7 @@ module SuperDiff
6
8
  method_object(
7
9
  :expected,
8
10
  :actual,
9
- [:available_classes, indent_level: 0, raise_if_nothing_applies: true]
11
+ [:available_classes, { indent_level: 0, raise_if_nothing_applies: true }]
10
12
  )
11
13
 
12
14
  def call
@@ -15,7 +17,7 @@ module SuperDiff
15
17
  elsif raise_if_nothing_applies?
16
18
  raise NoDifferAvailableError.create(expected, actual)
17
19
  else
18
- ""
20
+ ''
19
21
  end
20
22
  end
21
23
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class GemVersion
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module Helpers
@@ -6,7 +8,7 @@ module SuperDiff
6
8
  # TODO: Simplify this
7
9
  def style(*args, color_enabled: true, **opts, &block)
8
10
  klass =
9
- if color_enabled && Csi.color_enabled?
11
+ if color_enabled && SuperDiff.configuration.color_enabled?
10
12
  Csi::ColorizedDocument
11
13
  else
12
14
  Csi::UncolorizedDocument
@@ -26,13 +28,13 @@ module SuperDiff
26
28
  def plural_type_for(value)
27
29
  case value
28
30
  when Numeric
29
- "numbers"
31
+ 'numbers'
30
32
  when String
31
- "strings"
33
+ 'strings'
32
34
  when Symbol
33
- "symbols"
35
+ 'symbols'
34
36
  else
35
- "objects"
37
+ 'objects'
36
38
  end
37
39
  end
38
40
 
@@ -49,26 +51,26 @@ module SuperDiff
49
51
  if jruby?
50
52
  def object_address_for(object)
51
53
  # Source: <https://github.com/jruby/jruby/blob/master/core/src/main/java/org/jruby/RubyBasicObject.java>
52
- "0x%x" % object.hash
54
+ '0x%x' % object.hash
53
55
  end
54
- elsif ruby_version_matches?(">= 2.7.0")
55
- require "json"
56
- require "objspace"
56
+ elsif ruby_version_matches?('>= 2.7.0')
57
+ require 'json'
58
+ require 'objspace'
57
59
 
58
60
  def object_address_for(object)
59
61
  # Sources: <https://bugs.ruby-lang.org/issues/15408> and <https://bugs.ruby-lang.org/issues/15626#Object-ID>
60
62
  json = JSON.parse(ObjectSpace.dump(object))
61
- json.is_a?(Hash) ? "0x%016x" % Integer(json["address"], 16) : ""
63
+ json.is_a?(Hash) ? '0x%016x' % Integer(json['address'], 16) : ''
62
64
  end
63
65
  else
64
66
  def object_address_for(object)
65
- "0x%016x" % (object.object_id * 2)
67
+ format('0x%016x', (object.object_id * 2))
66
68
  end
67
69
  end
68
70
 
69
71
  def with_slice_of_array_replaced(array, range, replacement)
70
72
  beginning =
71
- if range.begin > 0
73
+ if range.begin.positive?
72
74
  array[Range.new(0, range.begin - 1)]
73
75
  else
74
76
  []
@@ -1,7 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module ImplementationChecks
4
- protected def unimplemented_instance_method!
6
+ protected
7
+
8
+ def unimplemented_instance_method!
5
9
  raise(
6
10
  NotImplementedError,
7
11
  "#{self.class} must implement ##{caller_locations(1, 1).first.label}",
@@ -9,7 +13,7 @@ module SuperDiff
9
13
  )
10
14
  end
11
15
 
12
- protected def unimplemented_class_method!
16
+ def unimplemented_class_method!
13
17
  raise(
14
18
  NotImplementedError,
15
19
  "#{self} must implement .#{caller_locations(1, 1).first.label}",
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class InspectionTree
@@ -21,11 +23,11 @@ module SuperDiff
21
23
  end
22
24
 
23
25
  def before_each_callbacks
24
- @_before_each_callbacks ||= Hash.new { |h, k| h[k] = [] }
26
+ @before_each_callbacks ||= Hash.new { |h, k| h[k] = [] }
25
27
  end
26
28
 
27
29
  def render_to_string(object)
28
- nodes.reduce("") do |string, node|
30
+ nodes.reduce('') do |string, node|
29
31
  string + node.render_to_string(object)
30
32
  end
31
33
  end
@@ -34,7 +36,7 @@ module SuperDiff
34
36
  nodes
35
37
  .each_with_index
36
38
  .reduce(
37
- [TieredLines.new, "", ""]
39
+ [TieredLines.new, '', '']
38
40
  ) do |(tiered_lines, prelude, prefix), (node, index)|
39
41
  UpdateTieredLines.call(
40
42
  object: object,
@@ -59,10 +61,10 @@ module SuperDiff
59
61
  insert_separated_list(array) do |t, value|
60
62
  # Have to do these shenanigans so that if value is a hash, Ruby
61
63
  # doesn't try to interpret it as keyword args
62
- if Helpers.ruby_version_matches?(">= 2.7.1")
64
+ if Helpers.ruby_version_matches?('>= 2.7.1')
63
65
  t.add_inspection_of(value, **{})
64
66
  else
65
- t.add_inspection_of(*[value, {}])
67
+ t.add_inspection_of(value, {})
66
68
  end
67
69
  end
68
70
  end
@@ -80,16 +82,16 @@ module SuperDiff
80
82
  else
81
83
  t1.as_prefix_when_rendering_to_lines do |t2|
82
84
  t2.add_inspection_of key, as_lines: false
83
- t2.add_text " => "
85
+ t2.add_text ' => '
84
86
  end
85
87
  end
86
88
 
87
89
  # Have to do these shenanigans so that if hash[key] is a hash, Ruby
88
90
  # doesn't try to interpret it as keyword args
89
- if Helpers.ruby_version_matches?(">= 2.7.1")
91
+ if Helpers.ruby_version_matches?('>= 2.7.1')
90
92
  t1.add_inspection_of(hash[key], **{})
91
93
  else
92
- t1.add_inspection_of(*[hash[key], {}])
94
+ t1.add_inspection_of(hash[key], {})
93
95
  end
94
96
  end
95
97
  end
@@ -99,10 +101,10 @@ module SuperDiff
99
101
  as_lines_when_rendering_to_lines(
100
102
  add_comma: index < enumerable.size - 1
101
103
  ) do |t1|
102
- if index > 0
104
+ if index.positive?
103
105
  # stree-ignore
104
106
  t1.when_rendering_to_string do |t2|
105
- t2.add_text " "
107
+ t2.add_text ' '
106
108
  end
107
109
  end
108
110
  t1.evaluate_block(value, &block)
@@ -114,36 +116,34 @@ module SuperDiff
114
116
 
115
117
  attr_reader :disallowed_node_names, :nodes
116
118
 
117
- def add_node(node_class, *args, **options, &block)
118
- if disallowed_node_names.include?(node_class.name)
119
- raise DisallowedNodeError.create(node_name: node_class.name)
120
- end
119
+ def add_node(node_class, ...)
120
+ raise DisallowedNodeError.create(node_name: node_class.name) if disallowed_node_names.include?(node_class.name)
121
121
 
122
- append_node(build_node(node_class, *args, **options, &block))
122
+ append_node(build_node(node_class, ...))
123
123
  end
124
124
 
125
125
  def append_node(node)
126
126
  nodes.push(node)
127
127
  end
128
128
 
129
- def build_node(node_class, *args, **options, &block)
130
- node_class.new(self, *args, **options, &block)
129
+ def build_node(node_class, ...)
130
+ node_class.new(self, ...)
131
131
  end
132
132
 
133
133
  class UpdateTieredLines
134
134
  extend AttrExtras.mixin
135
135
 
136
136
  method_object %i[
137
- object!
138
- type!
139
- indentation_level!
140
- nodes!
141
- tiered_lines!
142
- prelude!
143
- prefix!
144
- node!
145
- index!
146
- ]
137
+ object!
138
+ type!
139
+ indentation_level!
140
+ nodes!
141
+ tiered_lines!
142
+ prelude!
143
+ prefix!
144
+ node!
145
+ index!
146
+ ]
147
147
 
148
148
  def call
149
149
  if rendering.is_a?(Array)
@@ -165,18 +165,18 @@ module SuperDiff
165
165
  def concat_with_lines
166
166
  additional_lines =
167
167
  prefix_with(prefix, prepend_with(prelude, rendering))
168
- [tiered_lines + additional_lines, "", ""]
168
+ [tiered_lines + additional_lines, '', '']
169
169
  end
170
170
 
171
171
  def prefix_with(prefix, text)
172
- prefix.empty? ? text : [text[0].prefixed_with(prefix)] + text[1..-1]
172
+ prefix.empty? ? text : [text[0].prefixed_with(prefix)] + text[1..]
173
173
  end
174
174
 
175
175
  def prepend_with(prelude, text)
176
176
  if prelude.empty?
177
177
  text
178
178
  else
179
- [text[0].with_value_prepended(prelude)] + text[1..-1]
179
+ [text[0].with_value_prepended(prelude)] + text[1..]
180
180
  end
181
181
  end
182
182
 
@@ -187,7 +187,7 @@ module SuperDiff
187
187
  def add_to_last_line
188
188
  new_lines =
189
189
  tiered_lines[0..-2] +
190
- [tiered_lines[-1].with_value_appended(rendering)]
190
+ [tiered_lines[-1].with_value_appended(rendering)]
191
191
  [new_lines, prelude, prefix]
192
192
  end
193
193
 
@@ -198,13 +198,13 @@ module SuperDiff
198
198
  def add_to_lines
199
199
  new_lines =
200
200
  tiered_lines +
201
- [
202
- Line.new(
203
- type: type,
204
- indentation_level: indentation_level,
205
- value: rendering
206
- )
207
- ]
201
+ [
202
+ Line.new(
203
+ type: type,
204
+ indentation_level: indentation_level,
205
+ value: rendering
206
+ )
207
+ ]
208
208
  [new_lines, prelude, prefix]
209
209
  end
210
210