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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module DiffFormatters
@@ -5,7 +7,7 @@ module SuperDiff
5
7
  class Collection
6
8
  extend AttrExtras.mixin
7
9
 
8
- ICONS = { delete: "-", insert: "+" }.freeze
10
+ ICONS = { delete: '-', insert: '+' }.freeze
9
11
  STYLES = { insert: :actual, delete: :expected, noop: :plain }.freeze
10
12
 
11
13
  method_object(
@@ -51,20 +53,18 @@ module SuperDiff
51
53
  operation.left_collection,
52
54
  operation.right_collection
53
55
  ) do |already_seen|
54
- if already_seen
55
- raise "Infinite recursion!"
56
- else
57
- operation.child_operations.to_diff(
58
- indent_level: indent_level + 1,
59
- collection_prefix: build_item_prefix.call(operation),
60
- add_comma: operation.should_add_comma_after_displaying?
61
- )
62
- end
56
+ raise 'Infinite recursion!' if already_seen
57
+
58
+ operation.child_operations.to_diff(
59
+ indent_level: indent_level + 1,
60
+ collection_prefix: build_item_prefix.call(operation),
61
+ add_comma: operation.should_add_comma_after_displaying?
62
+ )
63
63
  end
64
64
  end
65
65
 
66
66
  def handle_non_change_operation(operation)
67
- icon = ICONS.fetch(operation.name, " ")
67
+ icon = ICONS.fetch(operation.name, ' ')
68
68
  style_name = STYLES.fetch(operation.name, :normal)
69
69
  chunk =
70
70
  build_chunk_for(
@@ -73,7 +73,7 @@ module SuperDiff
73
73
  icon: icon
74
74
  )
75
75
 
76
- chunk << "," if operation.should_add_comma_after_displaying?
76
+ chunk << ',' if operation.should_add_comma_after_displaying?
77
77
 
78
78
  style_chunk(style_name, chunk)
79
79
  end
@@ -82,13 +82,13 @@ module SuperDiff
82
82
  if operation.value.equal?(operation.collection)
83
83
  build_chunk_from_string(
84
84
  SuperDiff::RecursionGuard::PLACEHOLDER,
85
- prefix: build_item_prefix.call(operation),
85
+ prefix: prefix,
86
86
  icon: icon
87
87
  )
88
88
  else
89
89
  build_chunk_by_inspecting(
90
90
  operation.value,
91
- prefix: build_item_prefix.call(operation),
91
+ prefix: prefix,
92
92
  icon: icon
93
93
  )
94
94
  end
@@ -106,9 +106,9 @@ module SuperDiff
106
106
  .with_index do |line, index|
107
107
  [
108
108
  icon,
109
- " ",
109
+ ' ',
110
110
  indentation(offset: 1),
111
- (index == 0 ? prefix : ""),
111
+ (index.zero? ? prefix : ''),
112
112
  line
113
113
  ].join
114
114
  end
@@ -123,11 +123,11 @@ module SuperDiff
123
123
  end
124
124
 
125
125
  def indentation(offset: 0)
126
- " " * (indent_level + offset)
126
+ ' ' * (indent_level + offset)
127
127
  end
128
128
 
129
129
  def comma
130
- add_comma? ? "," : ""
130
+ add_comma? ? ',' : ''
131
131
  end
132
132
  end
133
133
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  module DiffFormatters
@@ -1,10 +1,12 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module DiffFormatters
4
- autoload :Collection, "super_diff/basic/diff_formatters/collection"
6
+ autoload :Collection, 'super_diff/basic/diff_formatters/collection'
5
7
  autoload(
6
8
  :MultilineString,
7
- "super_diff/basic/diff_formatters/multiline_string"
9
+ 'super_diff/basic/diff_formatters/multiline_string'
8
10
  )
9
11
  end
10
12
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module Differs
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module Differs
4
6
  class CustomObject < Core::AbstractDiffer
5
7
  def self.applies_to?(expected, actual)
6
- expected.class == actual.class &&
8
+ expected.instance_of?(actual.class) &&
7
9
  expected.respond_to?(:attributes_for_super_diff) &&
8
10
  actual.respond_to?(:attributes_for_super_diff)
9
11
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module Differs
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module Differs
4
6
  class DefaultObject < Core::AbstractDiffer
5
7
  def self.applies_to?(expected, actual)
6
- expected.class == actual.class
8
+ expected.instance_of?(actual.class)
7
9
  end
8
10
 
9
11
  protected
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module Differs
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module Differs
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module Differs
@@ -1,21 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module Differs
4
- autoload :Array, "super_diff/basic/differs/array"
5
- autoload :CustomObject, "super_diff/basic/differs/custom_object"
6
- autoload :DateLike, "super_diff/basic/differs/date_like"
7
- autoload :DefaultObject, "super_diff/basic/differs/default_object"
8
- autoload :Hash, "super_diff/basic/differs/hash"
9
- autoload :MultilineString, "super_diff/basic/differs/multiline_string"
10
- autoload :TimeLike, "super_diff/basic/differs/time_like"
6
+ autoload :Array, 'super_diff/basic/differs/array'
7
+ autoload :CustomObject, 'super_diff/basic/differs/custom_object'
8
+ autoload :DateLike, 'super_diff/basic/differs/date_like'
9
+ autoload :DefaultObject, 'super_diff/basic/differs/default_object'
10
+ autoload :Hash, 'super_diff/basic/differs/hash'
11
+ autoload :MultilineString, 'super_diff/basic/differs/multiline_string'
12
+ autoload :TimeLike, 'super_diff/basic/differs/time_like'
11
13
 
12
14
  class Main
13
15
  def self.call(*args)
14
- warn <<~EOT
16
+ warn <<~WARNING
15
17
  WARNING: SuperDiff::Differs::Main.call(...) is deprecated and will be removed in the next major release.
16
18
  Please use SuperDiff.diff(...) instead.
17
19
  #{caller_locations.join("\n")}
18
- EOT
20
+ WARNING
19
21
  SuperDiff.diff(*args)
20
22
  end
21
23
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module InspectionTreeBuilders
@@ -11,7 +13,7 @@ module SuperDiff
11
13
  t1.only_when empty do |t2|
12
14
  # stree-ignore
13
15
  t2.as_lines_when_rendering_to_lines do |t3|
14
- t3.add_text "[]"
16
+ t3.add_text '[]'
15
17
  end
16
18
  end
17
19
 
@@ -20,7 +22,7 @@ module SuperDiff
20
22
  t2.as_lines_when_rendering_to_lines(
21
23
  collection_bookend: :open
22
24
  ) do |t3|
23
- t3.add_text "["
25
+ t3.add_text '['
24
26
  end
25
27
 
26
28
  # stree-ignore
@@ -32,7 +34,7 @@ module SuperDiff
32
34
  t2.as_lines_when_rendering_to_lines(
33
35
  collection_bookend: :close
34
36
  ) do |t3|
35
- t3.add_text "]"
37
+ t3.add_text ']'
36
38
  end
37
39
  end
38
40
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module InspectionTreeBuilders
@@ -15,7 +17,7 @@ module SuperDiff
15
17
 
16
18
  # stree-ignore
17
19
  t2.when_rendering_to_lines do |t3|
18
- t3.add_text "{"
20
+ t3.add_text '{'
19
21
  end
20
22
  end
21
23
 
@@ -28,10 +30,10 @@ module SuperDiff
28
30
  ) do |t2|
29
31
  # stree-ignore
30
32
  t2.when_rendering_to_lines do |t3|
31
- t3.add_text "}"
33
+ t3.add_text '}'
32
34
  end
33
35
 
34
- t2.add_text ">"
36
+ t2.add_text '>'
35
37
  end
36
38
  end
37
39
  end
@@ -0,0 +1,42 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SuperDiff
4
+ module Basic
5
+ module InspectionTreeBuilders
6
+ class DataObject < Core::AbstractInspectionTreeBuilder
7
+ def self.applies_to?(value)
8
+ SuperDiff::Core::Helpers.ruby_version_matches?('~> 3.2') &&
9
+ value.is_a?(Data)
10
+ end
11
+
12
+ def call
13
+ Core::InspectionTree.new do |t1|
14
+ t1.as_lines_when_rendering_to_lines(
15
+ collection_bookend: :open
16
+ ) do |t2|
17
+ t2.add_text "#<data #{object.class.name} "
18
+
19
+ # stree-ignore
20
+ t2.when_rendering_to_lines do |t3|
21
+ t3.add_text '{'
22
+ end
23
+ end
24
+
25
+ t1.nested { |t2| t2.insert_hash_inspection_of(object.to_h) }
26
+
27
+ t1.as_lines_when_rendering_to_lines(
28
+ collection_bookend: :close
29
+ ) do |t2|
30
+ # stree-ignore
31
+ t2.when_rendering_to_lines do |t3|
32
+ t3.add_text '}'
33
+ end
34
+
35
+ t2.add_text '>'
36
+ end
37
+ end
38
+ end
39
+ end
40
+ end
41
+ end
42
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module InspectionTreeBuilders
@@ -15,19 +17,19 @@ module SuperDiff
15
17
 
16
18
  # stree-ignore
17
19
  t2.when_rendering_to_lines do |t3|
18
- t3.add_text "{"
20
+ t3.add_text '{'
19
21
  end
20
22
  end
21
23
 
22
24
  t1.when_rendering_to_string do |t2|
23
- t2.add_text object.strftime("%Y-%m-%d")
25
+ t2.add_text object.strftime('%Y-%m-%d')
24
26
  end
25
27
 
26
28
  t1.when_rendering_to_lines do |t2|
27
29
  t2.nested do |t3|
28
30
  t3.insert_separated_list(%i[year month day]) do |t4, name|
29
31
  t4.add_text name.to_s
30
- t4.add_text ": "
32
+ t4.add_text ': '
31
33
  t4.add_inspection_of object.public_send(name)
32
34
  end
33
35
  end
@@ -38,10 +40,10 @@ module SuperDiff
38
40
  ) do |t2|
39
41
  # stree-ignore
40
42
  t2.when_rendering_to_lines do |t3|
41
- t3.add_text "}"
43
+ t3.add_text '}'
42
44
  end
43
45
 
44
- t2.add_text ">"
46
+ t2.add_text '>'
45
47
  end
46
48
  end
47
49
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module InspectionTreeBuilders
@@ -11,7 +13,7 @@ module SuperDiff
11
13
  t1.only_when empty do |t2|
12
14
  t2.as_lines_when_rendering_to_lines do |t3|
13
15
  t3.add_text(
14
- "#<#{object.class.name}:" + object_address_for(object) + ">"
16
+ "#<#{object.class.name}:#{object_address_for(object)}>"
15
17
  )
16
18
  end
17
19
  end
@@ -26,13 +28,13 @@ module SuperDiff
26
28
 
27
29
  # stree-ignore
28
30
  t3.when_rendering_to_lines do |t4|
29
- t4.add_text " {"
31
+ t4.add_text ' {'
30
32
  end
31
33
  end
32
34
 
33
35
  # stree-ignore
34
36
  t2.when_rendering_to_string do |t3|
35
- t3.add_text " "
37
+ t3.add_text ' '
36
38
  end
37
39
 
38
40
  t2.nested do |t3|
@@ -53,10 +55,10 @@ module SuperDiff
53
55
  ) do |t3|
54
56
  # stree-ignore
55
57
  t3.when_rendering_to_lines do |t4|
56
- t4.add_text "}"
58
+ t4.add_text '}'
57
59
  end
58
60
 
59
- t3.add_text ">"
61
+ t3.add_text '>'
60
62
  end
61
63
  end
62
64
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module InspectionTreeBuilders
@@ -11,7 +13,7 @@ module SuperDiff
11
13
  t1.only_when empty do |t2|
12
14
  # stree-ignore
13
15
  t2.as_lines_when_rendering_to_lines do |t3|
14
- t3.add_text "{}"
16
+ t3.add_text '{}'
15
17
  end
16
18
  end
17
19
 
@@ -20,12 +22,12 @@ module SuperDiff
20
22
  t2.as_lines_when_rendering_to_lines(
21
23
  collection_bookend: :open
22
24
  ) do |t3|
23
- t3.add_text "{"
25
+ t3.add_text '{'
24
26
  end
25
27
 
26
28
  # stree-ignore
27
29
  t2.when_rendering_to_string do |t3|
28
- t3.add_text " "
30
+ t3.add_text ' '
29
31
  end
30
32
 
31
33
  # stree-ignore
@@ -35,14 +37,14 @@ module SuperDiff
35
37
 
36
38
  # stree-ignore
37
39
  t2.when_rendering_to_string do |t3|
38
- t3.add_text " "
40
+ t3.add_text ' '
39
41
  end
40
42
 
41
43
  # stree-ignore
42
44
  t2.as_lines_when_rendering_to_lines(
43
45
  collection_bookend: :close
44
46
  ) do |t3|
45
- t3.add_text "}"
47
+ t3.add_text '}'
46
48
  end
47
49
  end
48
50
  end
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module InspectionTreeBuilders
4
6
  class Primitive < Core::AbstractInspectionTreeBuilder
5
7
  def self.applies_to?(value)
6
- SuperDiff.primitive?(value) || value.is_a?(::String)
8
+ SuperDiff.primitive?(value)
7
9
  end
8
10
 
9
11
  def call
@@ -0,0 +1,19 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SuperDiff
4
+ module Basic
5
+ module InspectionTreeBuilders
6
+ class RangeObject < Core::AbstractInspectionTreeBuilder
7
+ def self.applies_to?(value)
8
+ value.is_a?(Range)
9
+ end
10
+
11
+ def call
12
+ Core::InspectionTree.new do |t1|
13
+ t1.as_lines_when_rendering_to_lines { |t2| t2.add_text object.to_s }
14
+ end
15
+ end
16
+ end
17
+ end
18
+ end
19
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module InspectionTreeBuilders
@@ -15,16 +17,14 @@ module SuperDiff
15
17
 
16
18
  # stree-ignore
17
19
  t2.when_rendering_to_lines do |t3|
18
- t3.add_text "{"
20
+ t3.add_text '{'
19
21
  end
20
22
  end
21
23
 
22
24
  t1.when_rendering_to_string do |t2|
23
25
  t2.add_text(
24
- object.strftime("%Y-%m-%d %H:%M:%S") +
25
- (object.subsec == 0 ? "" : "+#{object.subsec.inspect}") +
26
- " " + object.strftime("%:z") +
27
- (object.zone ? " (#{object.zone})" : "")
26
+ "#{object.strftime('%Y-%m-%d %H:%M:%S')}#{object.subsec.zero? ? '' : "+#{object.subsec.inspect}"} " \
27
+ "#{object.strftime('%:z')}#{object.zone ? " (#{object.zone})" : ''}"
28
28
  )
29
29
  end
30
30
 
@@ -34,7 +34,7 @@ module SuperDiff
34
34
  %i[year month day hour min sec subsec zone utc_offset]
35
35
  ) do |t4, name|
36
36
  t4.add_text name.to_s
37
- t4.add_text ": "
37
+ t4.add_text ': '
38
38
  t4.add_inspection_of object.public_send(name)
39
39
  end
40
40
  end
@@ -45,10 +45,10 @@ module SuperDiff
45
45
  ) do |t2|
46
46
  # stree-ignore
47
47
  t2.when_rendering_to_lines do |t3|
48
- t3.add_text "}"
48
+ t3.add_text '}'
49
49
  end
50
50
 
51
- t2.add_text ">"
51
+ t2.add_text '>'
52
52
  end
53
53
  end
54
54
  end
@@ -1,20 +1,30 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module InspectionTreeBuilders
4
- autoload :Array, "super_diff/basic/inspection_tree_builders/array"
6
+ autoload :Array, 'super_diff/basic/inspection_tree_builders/array'
5
7
  autoload(
6
8
  :CustomObject,
7
- "super_diff/basic/inspection_tree_builders/custom_object"
9
+ 'super_diff/basic/inspection_tree_builders/custom_object'
8
10
  )
11
+ autoload(
12
+ :DataObject,
13
+ 'super_diff/basic/inspection_tree_builders/data_object'
14
+ )
15
+ autoload :DateLike, 'super_diff/basic/inspection_tree_builders/date_like'
9
16
  autoload(
10
17
  :DefaultObject,
11
- "super_diff/basic/inspection_tree_builders/default_object"
18
+ 'super_diff/basic/inspection_tree_builders/default_object'
19
+ )
20
+ autoload :Hash, 'super_diff/basic/inspection_tree_builders/hash'
21
+ autoload :Primitive, 'super_diff/basic/inspection_tree_builders/primitive'
22
+ autoload(
23
+ :RangeObject,
24
+ 'super_diff/basic/inspection_tree_builders/range_object'
12
25
  )
13
- autoload :Hash, "super_diff/basic/inspection_tree_builders/hash"
14
- autoload :Primitive, "super_diff/basic/inspection_tree_builders/primitive"
15
- autoload :String, "super_diff/basic/inspection_tree_builders/string"
16
- autoload :TimeLike, "super_diff/basic/inspection_tree_builders/time_like"
17
- autoload :DateLike, "super_diff/basic/inspection_tree_builders/date_like"
26
+ autoload :String, 'super_diff/basic/inspection_tree_builders/string'
27
+ autoload :TimeLike, 'super_diff/basic/inspection_tree_builders/time_like'
18
28
  end
19
29
  end
20
30
  end
@@ -1,4 +1,6 @@
1
- require "diff-lcs"
1
+ # frozen_string_literal: true
2
+
3
+ require 'diff-lcs'
2
4
 
3
5
  module SuperDiff
4
6
  module Basic
@@ -16,7 +18,7 @@ module SuperDiff
16
18
  private
17
19
 
18
20
  def lcs_callbacks
19
- @_lcs_callbacks ||=
21
+ @lcs_callbacks ||=
20
22
  LcsCallbacks.new(
21
23
  operation_tree: operation_tree,
22
24
  expected: expected,
@@ -26,7 +28,7 @@ module SuperDiff
26
28
  end
27
29
 
28
30
  def operation_tree
29
- @_operation_tree ||= OperationTrees::Array.new([])
31
+ @operation_tree ||= OperationTrees::Array.new([])
30
32
  end
31
33
 
32
34
  class LcsCallbacks
@@ -48,7 +50,7 @@ module SuperDiff
48
50
  end
49
51
 
50
52
  def change(event)
51
- children = compare.(event.old_element, event.new_element)
53
+ children = compare.call(event.old_element, event.new_element)
52
54
 
53
55
  if children
54
56
  add_change_operation(event, children)
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module OperationTreeBuilders
4
6
  class CustomObject < DefaultObject
5
7
  def self.applies_to?(expected, actual)
6
- expected.class == actual.class &&
8
+ expected.instance_of?(actual.class) &&
7
9
  expected.respond_to?(:attributes_for_super_diff) &&
8
10
  actual.respond_to?(:attributes_for_super_diff)
9
11
  end
@@ -0,0 +1,20 @@
1
+ # frozen_string_literal: true
2
+
3
+ module SuperDiff
4
+ module Basic
5
+ module OperationTreeBuilders
6
+ class DataObject < CustomObject
7
+ def self.applies_to?(expected, actual)
8
+ SuperDiff::Core::Helpers.ruby_version_matches?('~> 3.2') &&
9
+ expected.instance_of?(actual.class) && expected.is_a?(Data)
10
+ end
11
+
12
+ protected
13
+
14
+ def attribute_names
15
+ expected.members & actual.members
16
+ end
17
+ end
18
+ end
19
+ end
20
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Basic
3
5
  module OperationTreeBuilders