super_diff 0.13.0 → 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 (276) hide show
  1. checksums.yaml +4 -4
  2. data/README.md +1 -1
  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 +6 -4
  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 +2 -0
  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 +15 -9
  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 +4 -2
  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 +12 -10
  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 +9 -6
  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 +14 -38
  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 +13 -11
  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 -10
  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 +2 -0
  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 -26
  185. data/super_diff.gemspec +20 -19
  186. metadata +6 -185
  187. data/spec/examples.txt +0 -450
  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/spec_helper.rb +0 -91
  211. data/spec/support/colorizer.rb +0 -9
  212. data/spec/support/command_runner.rb +0 -253
  213. data/spec/support/helpers.rb +0 -21
  214. data/spec/support/integration/helpers.rb +0 -124
  215. data/spec/support/integration/matchers/produce_output_when_run_matcher.rb +0 -104
  216. data/spec/support/integration/matchers.rb +0 -177
  217. data/spec/support/integration/test_programs/base.rb +0 -143
  218. data/spec/support/integration/test_programs/plain.rb +0 -19
  219. data/spec/support/integration/test_programs/rspec_active_record.rb +0 -20
  220. data/spec/support/integration/test_programs/rspec_active_support.rb +0 -20
  221. data/spec/support/integration/test_programs/rspec_rails.rb +0 -20
  222. data/spec/support/integration/test_programs/rspec_rails_engine.rb +0 -20
  223. data/spec/support/models/a.rb +0 -11
  224. data/spec/support/models/active_record/person.rb +0 -28
  225. data/spec/support/models/active_record/query.rb +0 -15
  226. data/spec/support/models/active_record/shipping_address.rb +0 -24
  227. data/spec/support/models/customer.rb +0 -22
  228. data/spec/support/models/empty_class.rb +0 -6
  229. data/spec/support/models/item.rb +0 -10
  230. data/spec/support/models/order.rb +0 -9
  231. data/spec/support/models/person.rb +0 -20
  232. data/spec/support/models/player.rb +0 -30
  233. data/spec/support/models/point.rb +0 -7
  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/inspection_tree_builders/data_object_spec.rb +0 -146
  246. data/spec/unit/basic/operation_tree_builders/data_object_spec.rb +0 -82
  247. data/spec/unit/basic/operation_tree_flatteners/array_spec.rb +0 -637
  248. data/spec/unit/basic/operation_tree_flatteners/custom_object_spec.rb +0 -685
  249. data/spec/unit/basic/operation_tree_flatteners/default_object_spec.rb +0 -685
  250. data/spec/unit/basic/operation_tree_flatteners/hash_spec.rb +0 -671
  251. data/spec/unit/basic/operation_tree_flatteners/multiline_string_spec.rb +0 -131
  252. data/spec/unit/core/configuration_no_rspec_spec.rb +0 -58
  253. data/spec/unit/core/configuration_spec.rb +0 -176
  254. data/spec/unit/core/helpers_spec.rb +0 -68
  255. data/spec/unit/core/tiered_lines_elider_spec.rb +0 -6328
  256. data/spec/unit/core/tiered_lines_formatter_spec.rb +0 -131
  257. data/spec/unit/deprecations_spec.rb +0 -176
  258. data/spec/unit/equality_matchers/main_spec.rb +0 -1842
  259. data/spec/unit/rspec/matchers/be_compared_to_spec.rb +0 -23
  260. data/spec/unit/rspec/matchers/be_falsey_spec.rb +0 -9
  261. data/spec/unit/rspec/matchers/be_nil_spec.rb +0 -9
  262. data/spec/unit/rspec/matchers/be_predicate_spec.rb +0 -31
  263. data/spec/unit/rspec/matchers/be_spec.rb +0 -17
  264. data/spec/unit/rspec/matchers/be_truthy_spec.rb +0 -9
  265. data/spec/unit/rspec/matchers/contain_exactly_spec.rb +0 -11
  266. data/spec/unit/rspec/matchers/eq_spec.rb +0 -9
  267. data/spec/unit/rspec/matchers/have_attributes_spec.rb +0 -11
  268. data/spec/unit/rspec/matchers/have_predicate_spec.rb +0 -21
  269. data/spec/unit/rspec/matchers/include_spec.rb +0 -21
  270. data/spec/unit/rspec/matchers/match_array_spec.rb +0 -11
  271. data/spec/unit/rspec/matchers/match_spec.rb +0 -9
  272. data/spec/unit/rspec/matchers/raise_error_spec.rb +0 -77
  273. data/spec/unit/rspec/matchers/respond_to_spec.rb +0 -85
  274. data/spec/unit/rspec/object_inspection/rspec_matcher_spec.rb +0 -91
  275. data/spec/unit/rspec/object_inspection_spec.rb +0 -471
  276. data/spec/unit/super_diff_spec.rb +0 -2115
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module InspectionTreeNodes
@@ -15,10 +17,8 @@ module SuperDiff
15
17
 
16
18
  def initialize(tree, *args, **options, &block)
17
19
  if !args.empty? && block
18
- raise ArgumentError.new(
19
- "You cannot provide both an immediate value and a lazy value. " +
20
- "Either pass a block or a positional argument."
21
- )
20
+ raise ArgumentError, 'You cannot provide both an immediate value and a lazy value. ' \
21
+ 'Either pass a block or a positional argument.'
22
22
  end
23
23
 
24
24
  @tree = tree
@@ -62,12 +62,12 @@ module SuperDiff
62
62
 
63
63
  def pretty_print(pp)
64
64
  pp.object_address_group(self) do
65
- pp.seplist(pretty_print_variables, proc { pp.text "," }) do |name|
65
+ pp.seplist(pretty_print_variables, proc { pp.text ',' }) do |name|
66
66
  value = instance_variable_get(name)
67
- pp.breakable " "
67
+ pp.breakable ' '
68
68
  pp.group(1) do
69
- pp.text name[1..-1].to_s
70
- pp.text ":"
69
+ pp.text name[1..].to_s
70
+ pp.text ':'
71
71
  pp.breakable
72
72
  pp.pp value
73
73
  end
@@ -80,7 +80,7 @@ module SuperDiff
80
80
  attr_reader :tree, :immediate_value, :block, :options
81
81
 
82
82
  def pretty_print_variables
83
- block ? [:"@block"] : [:"@immediate_value"]
83
+ block ? [:@block] : [:@immediate_value]
84
84
  end
85
85
 
86
86
  def evaluate_block(object)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module InspectionTreeNodes
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module InspectionTreeNodes
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module InspectionTreeNodes
@@ -11,6 +13,8 @@ module SuperDiff
11
13
  end
12
14
 
13
15
  def initialize(tree, test, **options, &block)
16
+ super(tree, **options, &block)
17
+
14
18
  @tree = tree
15
19
  @test = test
16
20
  @block = block
@@ -18,7 +22,7 @@ module SuperDiff
18
22
  end
19
23
 
20
24
  def render_to_string(object)
21
- test_passes? ? render_to_string_in_subtree(object) : ""
25
+ test_passes? ? render_to_string_in_subtree(object) : ''
22
26
  end
23
27
 
24
28
  def render_to_lines(object, type:, indentation_level:)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module InspectionTreeNodes
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module InspectionTreeNodes
@@ -11,7 +13,7 @@ module SuperDiff
11
13
  end
12
14
 
13
15
  def render_to_string(object)
14
- empty?(object) ? render_to_string_in_subtree(object) : ""
16
+ empty?(object) ? render_to_string_in_subtree(object) : ''
15
17
  end
16
18
 
17
19
  def render_to_lines(object, type:, indentation_level:)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module InspectionTreeNodes
@@ -11,7 +13,7 @@ module SuperDiff
11
13
  end
12
14
 
13
15
  def render_to_string(object)
14
- empty?(object) ? "" : render_to_string_in_subtree(object)
16
+ empty?(object) ? '' : render_to_string_in_subtree(object)
15
17
  end
16
18
 
17
19
  def render_to_lines(object, type:, indentation_level:)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module InspectionTreeNodes
@@ -11,7 +13,7 @@ module SuperDiff
11
13
  end
12
14
 
13
15
  def render_to_string(*)
14
- ""
16
+ ''
15
17
  end
16
18
 
17
19
  def render_to_lines(object, type:, indentation_level:)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module InspectionTreeNodes
@@ -1,43 +1,45 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module InspectionTreeNodes
4
6
  autoload(
5
7
  :AsLinesWhenRenderingToLines,
6
- "super_diff/core/inspection_tree_nodes/as_lines_when_rendering_to_lines"
8
+ 'super_diff/core/inspection_tree_nodes/as_lines_when_rendering_to_lines'
7
9
  )
8
10
  autoload(
9
11
  :AsPrefixWhenRenderingToLines,
10
- "super_diff/core/inspection_tree_nodes/as_prefix_when_rendering_to_lines"
12
+ 'super_diff/core/inspection_tree_nodes/as_prefix_when_rendering_to_lines'
11
13
  )
12
14
  autoload(
13
15
  :AsPreludeWhenRenderingToLines,
14
- "super_diff/core/inspection_tree_nodes/as_prelude_when_rendering_to_lines"
16
+ 'super_diff/core/inspection_tree_nodes/as_prelude_when_rendering_to_lines'
15
17
  )
16
18
  autoload(
17
19
  :AsSingleLine,
18
- "super_diff/core/inspection_tree_nodes/as_single_line"
20
+ 'super_diff/core/inspection_tree_nodes/as_single_line'
19
21
  )
20
- autoload :Base, "super_diff/core/inspection_tree_nodes/base"
21
- autoload :Inspection, "super_diff/core/inspection_tree_nodes/inspection"
22
- autoload :Nesting, "super_diff/core/inspection_tree_nodes/nesting"
23
- autoload :OnlyWhen, "super_diff/core/inspection_tree_nodes/only_when"
24
- autoload :Text, "super_diff/core/inspection_tree_nodes/text"
25
- autoload :WhenEmpty, "super_diff/core/inspection_tree_nodes/when_empty"
22
+ autoload :Base, 'super_diff/core/inspection_tree_nodes/base'
23
+ autoload :Inspection, 'super_diff/core/inspection_tree_nodes/inspection'
24
+ autoload :Nesting, 'super_diff/core/inspection_tree_nodes/nesting'
25
+ autoload :OnlyWhen, 'super_diff/core/inspection_tree_nodes/only_when'
26
+ autoload :Text, 'super_diff/core/inspection_tree_nodes/text'
27
+ autoload :WhenEmpty, 'super_diff/core/inspection_tree_nodes/when_empty'
26
28
  autoload(
27
29
  :WhenNonEmpty,
28
- "super_diff/core/inspection_tree_nodes/when_non_empty"
30
+ 'super_diff/core/inspection_tree_nodes/when_non_empty'
29
31
  )
30
32
  autoload(
31
33
  :WhenRenderingToLines,
32
- "super_diff/core/inspection_tree_nodes/when_rendering_to_lines"
34
+ 'super_diff/core/inspection_tree_nodes/when_rendering_to_lines'
33
35
  )
34
36
  autoload(
35
37
  :WhenRenderingToString,
36
- "super_diff/core/inspection_tree_nodes/when_rendering_to_string"
38
+ 'super_diff/core/inspection_tree_nodes/when_rendering_to_string'
37
39
  )
38
40
 
39
41
  def self.registry
40
- @_registry ||= [
42
+ @registry ||= [
41
43
  AsLinesWhenRenderingToLines,
42
44
  AsPrefixWhenRenderingToLines,
43
45
  AsPreludeWhenRenderingToLines,
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class Line
4
6
  extend AttrExtras.mixin
5
7
 
6
- ICONS = { delete: "-", insert: "+", noop: " " }.freeze
8
+ ICONS = { delete: '-', insert: '+', noop: ' ' }.freeze
7
9
  COLORS = { insert: :actual, delete: :expected, noop: :plain }.freeze
8
10
 
9
11
  rattr_initialize(
@@ -11,12 +13,12 @@ module SuperDiff
11
13
  :type!,
12
14
  :indentation_level!,
13
15
  :value!,
14
- prefix: "",
15
- add_comma: false,
16
- children: [],
17
- elided: false,
18
- collection_bookend: nil,
19
- complete_bookend: nil
16
+ { prefix: '',
17
+ add_comma: false,
18
+ children: [],
19
+ elided: false,
20
+ collection_bookend: nil,
21
+ complete_bookend: nil }
20
22
  ]
21
23
  )
22
24
  attr_query :add_comma?
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class NoDifferAvailableError < StandardError
@@ -12,11 +14,11 @@ module SuperDiff
12
14
  attr_accessor :expected, :actual
13
15
 
14
16
  def initialize
15
- super(<<-MESSAGE)
16
- There is no differ available to handle an "expected" value of type
17
- #{expected.class}
18
- and an "actual" value of type
19
- #{actual.class}.
17
+ super(<<~MESSAGE)
18
+ There is no differ available to handle an "expected" value of type
19
+ #{expected.class}
20
+ and an "actual" value of type
21
+ #{actual.class}.
20
22
  MESSAGE
21
23
  end
22
24
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class NoInspectionTreeBuilderAvailableError < StandardError
@@ -11,9 +13,9 @@ module SuperDiff
11
13
  attr_accessor :object
12
14
 
13
15
  def initialize
14
- super(<<-MESSAGE)
15
- There is no inspection tree builder available to handle a "value" of type
16
- #{object.class}.
16
+ super(<<~MESSAGE)
17
+ There is no inspection tree builder available to handle a "value" of type
18
+ #{object.class}.
17
19
  MESSAGE
18
20
  end
19
21
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class NoOperationTreeAvailableError < StandardError
@@ -11,8 +13,8 @@ module SuperDiff
11
13
  attr_accessor :value
12
14
 
13
15
  def initialize
14
- super(<<-MESSAGE)
15
- There is no operation tree available to handle a "value" of type #{value.class}.
16
+ super(<<~MESSAGE)
17
+ There is no operation tree available to handle a "value" of type #{value.class}.
16
18
  MESSAGE
17
19
  end
18
20
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class NoOperationTreeBuilderAvailableError < StandardError
@@ -12,11 +14,11 @@ module SuperDiff
12
14
  attr_accessor :expected, :actual
13
15
 
14
16
  def initialize
15
- super(<<-MESSAGE)
16
- There is no operation tree builder available to handle an "expected" value of type
17
- #{expected.class}
18
- and an "actual" value of type
19
- #{actual.class}.
17
+ super(<<~MESSAGE)
18
+ There is no operation tree builder available to handle an "expected" value of type
19
+ #{expected.class}
20
+ and an "actual" value of type
21
+ #{actual.class}.
20
22
  MESSAGE
21
23
  end
22
24
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class OperationTreeBuilderDispatcher
@@ -6,7 +8,7 @@ module SuperDiff
6
8
  method_object(
7
9
  :expected,
8
10
  :actual,
9
- [:available_classes, raise_if_nothing_applies: true]
11
+ [:available_classes, { raise_if_nothing_applies: true }]
10
12
  )
11
13
 
12
14
  def call
@@ -14,8 +16,6 @@ module SuperDiff
14
16
  resolved_class.call(expected: expected, actual: actual)
15
17
  elsif raise_if_nothing_applies?
16
18
  raise NoOperationTreeBuilderAvailableError.create(expected, actual)
17
- else
18
- nil
19
19
  end
20
20
  end
21
21
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class OperationTreeFinder
@@ -6,14 +8,12 @@ module SuperDiff
6
8
  method_object :value, [:available_classes]
7
9
 
8
10
  def call
9
- if resolved_class
10
- begin
11
- resolved_class.new([], underlying_object: value)
12
- rescue ArgumentError
13
- resolved_class.new([])
14
- end
15
- else
16
- raise NoOperationTreeAvailableError.create(value)
11
+ raise NoOperationTreeAvailableError.create(value) unless resolved_class
12
+
13
+ begin
14
+ resolved_class.new([], underlying_object: value)
15
+ rescue ArgumentError
16
+ resolved_class.new([])
17
17
  end
18
18
  end
19
19
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class PrefixForNextInspectionTreeNode < String
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class PreludeForNextInspectionTreeNode < String
@@ -1,10 +1,12 @@
1
- require "set"
1
+ # frozen_string_literal: true
2
+
3
+ require 'set'
2
4
 
3
5
  module SuperDiff
4
6
  module Core
5
7
  module RecursionGuard
6
- RECURSION_GUARD_KEY = "super_diff_recursion_guard_key".freeze
7
- PLACEHOLDER = "∙∙∙".freeze
8
+ RECURSION_GUARD_KEY = 'super_diff_recursion_guard_key'
9
+ PLACEHOLDER = '∙∙∙'
8
10
 
9
11
  def self.guarding_recursion_of(*objects, &block)
10
12
  already_seen_objects, first_seen_objects =
@@ -17,7 +19,7 @@ module SuperDiff
17
19
  end
18
20
 
19
21
  result =
20
- if block.arity > 0
22
+ if block.arity.positive?
21
23
  block.call(already_seen_objects.any?)
22
24
  else
23
25
  block.call
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class TieredLines < Array
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class TieredLinesElider
@@ -27,7 +29,7 @@ module SuperDiff
27
29
  end
28
30
 
29
31
  def boxes_to_elide
30
- @_boxes_to_elide ||=
32
+ @boxes_to_elide ||=
31
33
  panes_to_consider_for_eliding.reduce([]) do |array, pane|
32
34
  array + (find_boxes_to_elide_within(pane) || [])
33
35
  end
@@ -38,12 +40,12 @@ module SuperDiff
38
40
  end
39
41
 
40
42
  def panes
41
- @_panes ||=
43
+ @panes ||=
42
44
  BuildPanes.call(dirty_panes: padded_dirty_panes, lines: lines)
43
45
  end
44
46
 
45
47
  def padded_dirty_panes
46
- @_padded_dirty_panes ||=
48
+ @padded_dirty_panes ||=
47
49
  combine_congruent_panes(
48
50
  dirty_panes
49
51
  .map(&:padded)
@@ -52,33 +54,33 @@ module SuperDiff
52
54
  end
53
55
 
54
56
  def dirty_panes
55
- @_dirty_panes ||=
57
+ @dirty_panes ||=
56
58
  lines
57
- .each_with_index
58
- .select { |line, index| line.type != :noop }
59
- .reduce([]) do |panes, (_, index)|
60
- if !panes.empty? && panes.last.range.end == index - 1
61
- panes[0..-2] + [panes[-1].extended_to(index)]
62
- else
63
- panes + [Pane.new(type: :dirty, range: index..index)]
64
- end
59
+ .each_with_index
60
+ .reject { |line, _index| line.type == :noop }
61
+ .reduce([]) do |panes, (_, index)|
62
+ if !panes.empty? && panes.last.range.end == index - 1
63
+ panes[0..-2] + [panes[-1].extended_to(index)]
64
+ else
65
+ panes + [Pane.new(type: :dirty, range: index..index)]
65
66
  end
67
+ end
66
68
  end
67
69
 
68
70
  def with_box_elided(box, lines)
69
71
  box_at_start_of_lines =
70
- if lines.first.complete_bookend?
71
- box.range.begin == 1
72
- else
73
- box.range.begin == 0
74
- end
72
+ box.range.begin == if lines.first.complete_bookend?
73
+ 1
74
+ else
75
+ 0
76
+ end
75
77
 
76
78
  box_at_end_of_lines =
77
- if lines.last.complete_bookend?
78
- box.range.end == lines.size - 2
79
- else
80
- box.range.end == lines.size - 1
81
- end
79
+ box.range.end == if lines.last.complete_bookend?
80
+ lines.size - 2
81
+ else
82
+ lines.size - 1
83
+ end
82
84
 
83
85
  if one_dimensional_line_tree? && outermost_box?(box)
84
86
  if box_at_start_of_lines
@@ -108,7 +110,7 @@ module SuperDiff
108
110
  def all_indentation_levels
109
111
  lines
110
112
  .map(&:indentation_level)
111
- .select { |indentation_level| indentation_level > 0 }
113
+ .select(&:positive?)
112
114
  .uniq
113
115
  end
114
116
 
@@ -120,11 +122,11 @@ module SuperDiff
120
122
  lines[pane.range].reject(&:complete_bookend?).size
121
123
 
122
124
  if total_size_before_eliding > maximum
123
- if maximum > 0
125
+ if maximum.positive?
124
126
  set_of_boxes.find do |boxes|
125
127
  total_size_after_eliding =
126
128
  total_size_before_eliding -
127
- boxes.sum { |box| box.range.size - SIZE_OF_ELISION }
129
+ boxes.sum { |box| box.range.size - SIZE_OF_ELISION }
128
130
  total_size_after_eliding <= maximum
129
131
  end
130
132
  else
@@ -146,11 +148,11 @@ module SuperDiff
146
148
 
147
149
  possible_indentation_levels =
148
150
  boxes_within_pane
149
- .map(&:indentation_level)
150
- .select { |indentation_level| indentation_level > 0 }
151
- .uniq
152
- .sort
153
- .reverse
151
+ .map(&:indentation_level)
152
+ .select(&:positive?)
153
+ .uniq
154
+ .sort
155
+ .reverse
154
156
 
155
157
  possible_indentation_levels.map do |indentation_level|
156
158
  boxes_within_pane.select do |box|
@@ -183,13 +185,12 @@ module SuperDiff
183
185
  def combine(spannables, on:)
184
186
  criterion = on
185
187
  spannables.reduce([]) do |combined_spannables, spannable|
186
- if (
187
- !combined_spannables.empty? &&
188
- spannable.range.begin <=
189
- combined_spannables.last.range.end + 1 &&
190
- spannable.public_send(criterion) ==
191
- combined_spannables.last.public_send(criterion)
192
- )
188
+ if !combined_spannables.empty? &&
189
+ spannable.range.begin <=
190
+ combined_spannables.last.range.end + 1 &&
191
+ spannable.public_send(criterion) ==
192
+ combined_spannables.last.public_send(criterion)
193
+
193
194
  combined_spannables[0..-2] +
194
195
  [combined_spannables[-1].extended_to(spannable.range.end)]
195
196
  else
@@ -199,12 +200,12 @@ module SuperDiff
199
200
  end
200
201
 
201
202
  def boxes
202
- @_boxes ||= BuildBoxes.call(lines)
203
+ @boxes ||= BuildBoxes.call(lines)
203
204
  end
204
205
 
205
206
  def with_start_of_box_elided(box, lines)
206
207
  amount_to_elide =
207
- if maximum > 0
208
+ if maximum.positive?
208
209
  box.range.size - maximum + SIZE_OF_ELISION
209
210
  else
210
211
  box.range.size
@@ -220,14 +221,14 @@ module SuperDiff
220
221
 
221
222
  def with_end_of_box_elided(box, lines)
222
223
  amount_to_elide =
223
- if maximum > 0
224
+ if maximum.positive?
224
225
  box.range.size - maximum + SIZE_OF_ELISION
225
226
  else
226
227
  box.range.size
227
228
  end
228
229
 
229
230
  range =
230
- if amount_to_elide > 0
231
+ if amount_to_elide.positive?
231
232
  Range.new(box.range.end - amount_to_elide + 1, box.range.end)
232
233
  else
233
234
  box.range
@@ -242,15 +243,14 @@ module SuperDiff
242
243
 
243
244
  def with_middle_of_box_elided(box, lines)
244
245
  half_of_maximum, remainder =
245
- if maximum > 0
246
+ if maximum.positive?
246
247
  (maximum - SIZE_OF_ELISION).divmod(2)
247
248
  else
248
249
  [0, 0]
249
250
  end
250
251
 
251
- opening_length, closing_length =
252
- half_of_maximum,
253
- half_of_maximum + remainder
252
+ opening_length = half_of_maximum
253
+ closing_length = half_of_maximum + remainder
254
254
 
255
255
  with_subset_of_lines_elided(
256
256
  lines,
@@ -290,7 +290,7 @@ module SuperDiff
290
290
  private
291
291
 
292
292
  def beginning
293
- if (dirty_panes.empty? || dirty_panes.first.range.begin == 0)
293
+ if dirty_panes.empty? || dirty_panes.first.range.begin.zero?
294
294
  []
295
295
  else
296
296
  [
@@ -324,10 +324,9 @@ module SuperDiff
324
324
  end
325
325
 
326
326
  def ending
327
- if (
328
- dirty_panes.empty? ||
329
- dirty_panes.last.range.end >= lines.size - 1
330
- )
327
+ if dirty_panes.empty? ||
328
+ dirty_panes.last.range.end >= lines.size - 1
329
+
331
330
  []
332
331
  else
333
332
  [
@@ -354,8 +353,8 @@ module SuperDiff
354
353
  end
355
354
 
356
355
  def capped_to(beginning, ending)
357
- new_beginning = range.begin < beginning ? beginning : range.begin
358
- new_ending = range.end > ending ? ending : range.end
356
+ new_beginning = [range.begin, beginning].max
357
+ new_ending = [range.end, ending].min
359
358
  self.class.new(
360
359
  type: type,
361
360
  range: Range.new(new_beginning, new_ending)
@@ -452,11 +451,11 @@ module SuperDiff
452
451
  end
453
452
 
454
453
  def prefix
455
- ""
454
+ ''
456
455
  end
457
456
 
458
457
  def value
459
- "# ..."
458
+ '# ...'
460
459
  end
461
460
 
462
461
  def elided?