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
  class TieredLinesFormatter
@@ -29,8 +31,8 @@ module SuperDiff
29
31
  class FormattableLine
30
32
  extend AttrExtras.mixin
31
33
 
32
- INDENTATION_UNIT = " ".freeze
33
- ICONS = { delete: "-", insert: "+", elision: " ", noop: " " }.freeze
34
+ INDENTATION_UNIT = ' '
35
+ ICONS = { delete: '-', insert: '+', elision: ' ', noop: ' ' }.freeze
34
36
  COLORS = {
35
37
  delete: :expected,
36
38
  insert: :actual,
@@ -41,7 +43,7 @@ module SuperDiff
41
43
  pattr_initialize :line
42
44
 
43
45
  def content
44
- icon + " " + indentation + line.prefix + line.value + possible_comma
46
+ "#{icon} #{indentation}#{line.prefix}#{line.value}#{possible_comma}"
45
47
  end
46
48
 
47
49
  def color
@@ -69,7 +71,7 @@ module SuperDiff
69
71
  end
70
72
 
71
73
  def possible_comma
72
- line.add_comma? ? "," : ""
74
+ line.add_comma? ? ',' : ''
73
75
  end
74
76
  end
75
77
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
5
  class UnaryOperation
@@ -1,69 +1,71 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Core
3
- autoload :AbstractDiffer, "super_diff/core/abstract_differ"
5
+ autoload :AbstractDiffer, 'super_diff/core/abstract_differ'
4
6
  autoload(
5
7
  :AbstractInspectionTreeBuilder,
6
- "super_diff/core/abstract_inspection_tree_builder"
8
+ 'super_diff/core/abstract_inspection_tree_builder'
7
9
  )
8
- autoload :AbstractOperationTree, "super_diff/core/abstract_operation_tree"
10
+ autoload :AbstractOperationTree, 'super_diff/core/abstract_operation_tree'
9
11
  autoload(
10
12
  :AbstractOperationTreeBuilder,
11
- "super_diff/core/abstract_operation_tree_builder"
13
+ 'super_diff/core/abstract_operation_tree_builder'
12
14
  )
13
15
  autoload(
14
16
  :AbstractOperationTreeFlattener,
15
- "super_diff/core/abstract_operation_tree_flattener"
17
+ 'super_diff/core/abstract_operation_tree_flattener'
16
18
  )
17
- autoload :BinaryOperation, "super_diff/core/binary_operation"
19
+ autoload :BinaryOperation, 'super_diff/core/binary_operation'
18
20
  autoload(
19
21
  :ColorizedDocumentExtensions,
20
- "super_diff/core/colorized_document_extensions"
22
+ 'super_diff/core/colorized_document_extensions'
21
23
  )
22
- autoload :Configuration, "super_diff/core/configuration"
23
- autoload :DifferDispatcher, "super_diff/core/differ_dispatcher"
24
- autoload :GemVersion, "super_diff/core/gem_version"
25
- autoload :Helpers, "super_diff/core/helpers"
26
- autoload :ImplementationChecks, "super_diff/core/implementation_checks"
27
- autoload :InspectionTree, "super_diff/core/inspection_tree"
24
+ autoload :Configuration, 'super_diff/core/configuration'
25
+ autoload :DifferDispatcher, 'super_diff/core/differ_dispatcher'
26
+ autoload :GemVersion, 'super_diff/core/gem_version'
27
+ autoload :Helpers, 'super_diff/core/helpers'
28
+ autoload :ImplementationChecks, 'super_diff/core/implementation_checks'
29
+ autoload :InspectionTree, 'super_diff/core/inspection_tree'
28
30
  autoload(
29
31
  :InspectionTreeBuilderDispatcher,
30
- "super_diff/core/inspection_tree_builder_dispatcher"
32
+ 'super_diff/core/inspection_tree_builder_dispatcher'
31
33
  )
32
- autoload :InspectionTreeNodes, "super_diff/core/inspection_tree_nodes"
33
- autoload :Line, "super_diff/core/line"
34
+ autoload :InspectionTreeNodes, 'super_diff/core/inspection_tree_nodes'
35
+ autoload :Line, 'super_diff/core/line'
34
36
  autoload(
35
37
  :OperationTreeBuilderDispatcher,
36
- "super_diff/core/operation_tree_builder_dispatcher"
38
+ 'super_diff/core/operation_tree_builder_dispatcher'
37
39
  )
38
40
  autoload(
39
41
  :NoDifferAvailableError,
40
- "super_diff/core/no_differ_available_error"
42
+ 'super_diff/core/no_differ_available_error'
41
43
  )
42
44
  autoload(
43
45
  :NoInspectionTreeAvailableError,
44
- "super_diff/core/no_inspection_tree_builder_available_error"
46
+ 'super_diff/core/no_inspection_tree_builder_available_error'
45
47
  )
46
48
  autoload(
47
49
  :NoOperationTreeBuilderAvailableError,
48
- "super_diff/core/no_operation_tree_builder_available_error"
50
+ 'super_diff/core/no_operation_tree_builder_available_error'
49
51
  )
50
52
  autoload(
51
53
  :NoOperationTreeAvailableError,
52
- "super_diff/core/no_operation_tree_available_error"
54
+ 'super_diff/core/no_operation_tree_available_error'
53
55
  )
54
- autoload :OperationTreeFinder, "super_diff/core/operation_tree_finder"
56
+ autoload :OperationTreeFinder, 'super_diff/core/operation_tree_finder'
55
57
  autoload(
56
58
  :PrefixForNextInspectionTreeNode,
57
- "super_diff/core/prefix_for_next_inspection_tree_node"
59
+ 'super_diff/core/prefix_for_next_inspection_tree_node'
58
60
  )
59
61
  autoload(
60
62
  :PreludeForNextInspectionTreeNode,
61
- "super_diff/core/prelude_for_next_inspection_tree_node"
63
+ 'super_diff/core/prelude_for_next_inspection_tree_node'
62
64
  )
63
- autoload :RecursionGuard, "super_diff/core/recursion_guard"
64
- autoload :TieredLines, "super_diff/core/tiered_lines"
65
- autoload :TieredLinesElider, "super_diff/core/tiered_lines_elider"
66
- autoload :TieredLinesFormatter, "super_diff/core/tiered_lines_formatter"
67
- autoload :UnaryOperation, "super_diff/core/unary_operation"
65
+ autoload :RecursionGuard, 'super_diff/core/recursion_guard'
66
+ autoload :TieredLines, 'super_diff/core/tiered_lines'
67
+ autoload :TieredLinesElider, 'super_diff/core/tiered_lines_elider'
68
+ autoload :TieredLinesFormatter, 'super_diff/core/tiered_lines_formatter'
69
+ autoload :UnaryOperation, 'super_diff/core/unary_operation'
68
70
  end
69
71
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class BoldSequence
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class Color
@@ -51,10 +53,8 @@ module SuperDiff
51
53
  if %i[foreground background].include?(layer)
52
54
  layer
53
55
  else
54
- raise ArgumentError.new(
55
- "Invalid layer #{layer.inspect}. " +
56
- "Layer must be :foreground or :background."
57
- )
56
+ raise ArgumentError, "Invalid layer #{layer.inspect}. " \
57
+ 'Layer must be :foreground or :background.'
58
58
  end
59
59
  end
60
60
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class ColorSequenceBlock
@@ -14,7 +16,7 @@ module SuperDiff
14
16
  def push(color)
15
17
  colors.push(color)
16
18
  end
17
- alias_method :<<, :push
19
+ alias << push
18
20
 
19
21
  def to_s
20
22
  colors.map(&:to_s).join
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class ColorizedDocument < Document
@@ -19,9 +21,9 @@ module SuperDiff
19
21
  add_part(Csi.reset_sequence)
20
22
 
21
23
  color_sequence_to_reopen = color_sequences_open_in_parent.pop
22
- if color_sequences_open_in_parent.any?
23
- add_part(color_sequence_to_reopen)
24
- end
24
+ return unless color_sequences_open_in_parent.any?
25
+
26
+ add_part(color_sequence_to_reopen)
25
27
  end
26
28
 
27
29
  def colorize_inline(contents, colors, opts)
@@ -54,13 +56,9 @@ module SuperDiff
54
56
  ColorSequenceBlock
55
57
  .new(colors)
56
58
  .tap do |sequence|
57
- if opts[:fg]
58
- sequence << Color.resolve(opts[:fg], layer: :foreground)
59
- end
59
+ sequence << Color.resolve(opts[:fg], layer: :foreground) if opts[:fg]
60
60
 
61
- if opts[:bg]
62
- sequence << Color.resolve(opts[:bg], layer: :background)
63
- end
61
+ sequence << Color.resolve(opts[:bg], layer: :background) if opts[:bg]
64
62
  end
65
63
  end
66
64
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class Document
@@ -14,8 +16,8 @@ module SuperDiff
14
16
  parts.each(&block)
15
17
  end
16
18
 
17
- def bold(*args, **opts, &block)
18
- colorize(BoldSequence.new, *args, **opts, &block)
19
+ def bold(...)
20
+ colorize(BoldSequence.new, ...)
19
21
  end
20
22
 
21
23
  def colorize(*args, **opts, &block)
@@ -23,11 +25,10 @@ module SuperDiff
23
25
  args.partition { |arg| arg.is_a?(String) || arg.is_a?(self.class) }
24
26
 
25
27
  if colors[0].is_a?(Symbol)
26
- if colors[0] == :colorize
27
- raise ArgumentError, "#colorize can't call itself!"
28
- else
29
- public_send(colors[0], *contents, *colors[1..-1], **opts, &block)
30
- end
28
+ raise ArgumentError, "#colorize can't call itself!" if colors[0] == :colorize
29
+
30
+ public_send(colors[0], *contents, *colors[1..], **opts, &block)
31
+
31
32
  elsif !block && colors.empty? && opts.empty?
32
33
  text(*contents)
33
34
  elsif block
@@ -35,10 +36,10 @@ module SuperDiff
35
36
  elsif contents.any?
36
37
  colorize_inline(contents, colors, opts)
37
38
  else
38
- raise ArgumentError, "Must have something to colorize!"
39
+ raise ArgumentError, 'Must have something to colorize!'
39
40
  end
40
41
  end
41
- alias_method :colored, :colorize
42
+ alias colored colorize
42
43
 
43
44
  def text(*contents, **, &block)
44
45
  if block
@@ -46,10 +47,10 @@ module SuperDiff
46
47
  elsif contents.any?
47
48
  contents.each { |part| add_part(part) }
48
49
  else
49
- raise ArgumentError.new("Must have something to add to the document!")
50
+ raise ArgumentError, 'Must have something to add to the document!'
50
51
  end
51
52
  end
52
- alias_method :plain, :text
53
+ alias plain text
53
54
 
54
55
  def line(*contents, indent_by: 0, &block)
55
56
  indent(by: indent_by) do
@@ -60,9 +61,7 @@ module SuperDiff
60
61
  elsif contents.any?
61
62
  text(*contents)
62
63
  else
63
- raise ArgumentError.new(
64
- "Must have something to add to the document!"
65
- )
64
+ raise ArgumentError, 'Must have something to add to the document!'
66
65
  end
67
66
  end
68
67
 
@@ -75,7 +74,7 @@ module SuperDiff
75
74
 
76
75
  def indent(by:, &block)
77
76
  # TODO: This won't work if using `text` manually to add lines
78
- indentation_stack << (by.is_a?(String) ? by : " " * by)
77
+ indentation_stack << (by.is_a?(String) ? by : ' ' * by)
79
78
  evaluate_block(&block)
80
79
  indentation_stack.pop
81
80
  end
@@ -116,13 +115,11 @@ module SuperDiff
116
115
  end
117
116
  elsif Csi::Color.exists?(name.to_sym)
118
117
  ColorRequest.new(name: name.to_sym, line: false)
119
- else
120
- nil
121
118
  end
122
119
  end
123
120
 
124
121
  def evaluate_block(&block)
125
- if block.arity > 0
122
+ if block.arity.positive?
126
123
  block.call(self)
127
124
  else
128
125
  instance_eval(&block)
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class EightBitColor < Color
4
- VALID_COMPONENT_RANGE = (0..6).freeze
5
- VALID_CODE_RANGE = (0..255).freeze
6
+ VALID_COMPONENT_RANGE = (0..6)
7
+ VALID_CODE_RANGE = (0..255)
6
8
  VALID_CODES_BY_NAME = {
7
9
  black: 0,
8
10
  red: 1,
@@ -35,7 +37,7 @@ module SuperDiff
35
37
  LEADING_CODES_BY_LAYER = { foreground: 38, background: 48 }.freeze
36
38
  LAYERS_BY_LEADING_CODE = LEADING_CODES_BY_LAYER.invert.freeze
37
39
  SERIAL_CODE = 5
38
- OPENING_REGEX = /\e\[(\d+);#{SERIAL_CODE};(\d+)m/.freeze
40
+ OPENING_REGEX = /\e\[(\d+);#{SERIAL_CODE};(\d+)m/
39
41
 
40
42
  def self.opening_regex
41
43
  OPENING_REGEX
@@ -50,6 +52,7 @@ module SuperDiff
50
52
  type: nil,
51
53
  index: nil
52
54
  )
55
+ super()
53
56
  if value
54
57
  case value
55
58
  when Symbol
@@ -92,14 +95,12 @@ module SuperDiff
92
95
 
93
96
  def interpret_triplet!(red:, green:, blue:)
94
97
  if invalid_triplet?(red, green, blue)
95
- raise ArgumentError.new(
96
- "(#{red},#{green},#{blue}) is not a valid color " +
97
- "specification. All components must be between " +
98
- "#{VALID_COMPONENT_RANGE.begin} and #{VALID_COMPONENT_RANGE.end}."
99
- )
98
+ raise ArgumentError, "(#{red},#{green},#{blue}) is not a valid color " \
99
+ 'specification. All components must be between ' \
100
+ "#{VALID_COMPONENT_RANGE.begin} and #{VALID_COMPONENT_RANGE.end}."
100
101
  end
101
102
 
102
- 16 + 36 * red + 6 * green + blue
103
+ 16 + (36 * red) + (6 * green) + blue
103
104
  end
104
105
 
105
106
  def invalid_triplet?(*values)
@@ -107,37 +108,33 @@ module SuperDiff
107
108
  end
108
109
 
109
110
  def interpret_color_name!(name)
110
- if !VALID_CODES_BY_NAME.include?(name)
111
+ unless VALID_CODES_BY_NAME.include?(name)
111
112
  message =
112
- "#{name.inspect} is not a valid color name.\n" +
113
- "Valid names are:\n"
113
+ "#{name.inspect} is not a valid color name.\n" \
114
+ "Valid names are:\n"
114
115
 
115
- VALID_CODES_BY_NAME.keys.each do |valid_name|
116
+ VALID_CODES_BY_NAME.each_key do |valid_name|
116
117
  message << "- #{valid_name}\n"
117
118
  end
118
119
 
119
- raise ArgumentError.new(message)
120
+ raise ArgumentError, message
120
121
  end
121
122
 
122
123
  VALID_CODES_BY_NAME[name]
123
124
  end
124
125
 
125
126
  def interpret_pair!(type:, index:)
126
- if !VALID_PAIR_TYPES.include?(type)
127
- raise ArgumentError.new(
128
- "Given pair did not have a valid type. " +
129
- "Type must be one of: #{VALID_PAIR_TYPES}"
130
- )
127
+ unless VALID_PAIR_TYPES.include?(type)
128
+ raise ArgumentError, 'Given pair did not have a valid type. ' \
129
+ "Type must be one of: #{VALID_PAIR_TYPES}"
131
130
  end
132
131
 
133
132
  valid_range = VALID_PAIR_INDEX_RANGES[type]
134
133
 
135
- if !valid_range.cover?(index)
136
- raise ArgumentError.new(
137
- "Given pair did not have a valid index. " +
138
- "For #{type}, index must be between #{valid_range.begin} and " +
139
- "#{valid_range.end}."
140
- )
134
+ unless valid_range.cover?(index)
135
+ raise ArgumentError, 'Given pair did not have a valid index. ' \
136
+ "For #{type}, index must be between #{valid_range.begin} and " \
137
+ "#{valid_range.end}."
141
138
  end
142
139
 
143
140
  STARTING_INDICES[type] + index
@@ -146,16 +143,16 @@ module SuperDiff
146
143
  def interpret_sequence!(sequence)
147
144
  match = sequence.match(OPENING_REGEX)
148
145
 
149
- if match
150
- {
151
- layer: interpret_layer!(match[1]),
152
- code: interpret_code!(match[2].to_i)
153
- }
154
- end
146
+ return unless match
147
+
148
+ {
149
+ layer: interpret_layer!(match[1]),
150
+ code: interpret_code!(match[2].to_i)
151
+ }
155
152
  end
156
153
 
157
154
  def interpret_layer!(value)
158
- if value.to_s.to_i > 0
155
+ if value.to_s.to_i.positive?
159
156
  LAYERS_BY_LEADING_CODE.fetch(value.to_s.to_i)
160
157
  else
161
158
  super
@@ -163,11 +160,9 @@ module SuperDiff
163
160
  end
164
161
 
165
162
  def interpret_code!(code)
166
- if !VALID_CODE_RANGE.cover?(code)
167
- raise ArgumentError.new(
168
- "#{code.inspect} is not a valid color code " +
169
- "(must be between 0 and 255)."
170
- )
163
+ unless VALID_CODE_RANGE.cover?(code)
164
+ raise ArgumentError, "#{code.inspect} is not a valid color code " \
165
+ '(must be between 0 and 255).'
171
166
  end
172
167
 
173
168
  code
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class FourBitColor < Color
@@ -83,10 +85,10 @@ module SuperDiff
83
85
  end
84
86
  VALID_NAMES = VALID_CODES_BY_NAME.keys
85
87
  VALID_CODE_RANGES = [30..37, 40..47, 90..97, 100..107].freeze
86
- OPENING_REGEX = /\e\[(\d+)m/.freeze
88
+ OPENING_REGEX = /\e\[(\d+)m/
87
89
 
88
90
  def self.exists?(name)
89
- VALID_CODES_BY_NAME.has_key?(name)
91
+ VALID_CODES_BY_NAME.key?(name)
90
92
  end
91
93
 
92
94
  def self.opening_regex
@@ -94,6 +96,7 @@ module SuperDiff
94
96
  end
95
97
 
96
98
  def initialize(value, layer: nil)
99
+ super()
97
100
  if value.is_a?(Symbol)
98
101
  @name = interpret_name!(value)
99
102
  @layer = interpret_layer!(layer)
@@ -124,14 +127,14 @@ module SuperDiff
124
127
  attr_reader :name
125
128
 
126
129
  def interpret_name!(name)
127
- if !VALID_NAMES.include?(name)
130
+ unless VALID_NAMES.include?(name)
128
131
  message =
129
- "#{name.inspect} is not a valid color name.\n" +
130
- "Valid names are:\n"
132
+ "#{name.inspect} is not a valid color name.\n" \
133
+ "Valid names are:\n"
131
134
 
132
135
  VALID_NAMES.each { |valid_name| message << "- #{valid_name}" }
133
136
 
134
- raise ArgumentError.new(message)
137
+ raise ArgumentError, message
135
138
  end
136
139
 
137
140
  name
@@ -146,14 +149,14 @@ module SuperDiff
146
149
  def interpret_code!(code)
147
150
  if VALID_CODE_RANGES.none? { |range| range.cover?(code) }
148
151
  message =
149
- "#{code.inspect} is not a valid color code.\n" +
150
- "Valid codes are:\n"
152
+ "#{code.inspect} is not a valid color code.\n" \
153
+ "Valid codes are:\n"
151
154
 
152
155
  VALID_CODE_RANGES.each do |range|
153
156
  message << "- #{range.begin} through #{range.end}\n"
154
157
  end
155
158
 
156
- raise ArgumentError.new(message)
159
+ raise ArgumentError, message
157
160
  end
158
161
 
159
162
  COLORS_BY_CODE.fetch(code)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class ResetSequence
@@ -1,17 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class TwentyFourBitColor < Color
4
- VALID_COMPONENT_RANGE = (0..255).freeze
6
+ VALID_COMPONENT_RANGE = (0..255)
5
7
  LEADING_CODES_BY_LAYER = { foreground: 38, background: 48 }.freeze
6
8
  LAYERS_BY_LEADING_CODE = LEADING_CODES_BY_LAYER.invert.freeze
7
9
  SERIAL_CODE = 2
8
- OPENING_REGEX = /\e\[(\d+);#{SERIAL_CODE};(\d+);(\d+);(\d+)m/.freeze
10
+ OPENING_REGEX = /\e\[(\d+);#{SERIAL_CODE};(\d+);(\d+);(\d+)m/
9
11
 
10
12
  def self.opening_regex
11
13
  OPENING_REGEX
12
14
  end
13
15
 
14
16
  def initialize(value = nil, layer: nil, red: nil, green: nil, blue: nil)
17
+ super()
15
18
  if value
16
19
  pair = interpret_sequence!(value)
17
20
  @triplet = pair.fetch(:triplet)
@@ -23,13 +26,13 @@ module SuperDiff
23
26
  end
24
27
 
25
28
  def to_s
26
- [
29
+ [ # rubocop:disable Style/StringConcatenation
27
30
  "\e[#{leading_code}",
28
31
  SERIAL_CODE,
29
32
  triplet.red,
30
33
  triplet.blue,
31
34
  triplet.green
32
- ].join(";") + "m"
35
+ ].join(';') + 'm'
33
36
  end
34
37
 
35
38
  def to_foreground
@@ -52,26 +55,24 @@ module SuperDiff
52
55
  def interpret_sequence!(sequence)
53
56
  match = sequence.match(OPENING_REGEX)
54
57
 
55
- if match
56
- {
57
- layer: interpret_layer!(match[1]),
58
- triplet:
59
- interpret_triplet!(
60
- red: match[2].to_i,
61
- green: match[3].to_i,
62
- blue: match[4].to_i
63
- )
64
- }
65
- end
58
+ return unless match
59
+
60
+ {
61
+ layer: interpret_layer!(match[1]),
62
+ triplet:
63
+ interpret_triplet!(
64
+ red: match[2].to_i,
65
+ green: match[3].to_i,
66
+ blue: match[4].to_i
67
+ )
68
+ }
66
69
  end
67
70
 
68
71
  def interpret_triplet!(red:, green:, blue:)
69
72
  if invalid_triplet?(red, green, blue)
70
- raise ArgumentError.new(
71
- "(#{red},#{green},#{blue}) is not a valid color " +
72
- "specification. All components must be between " +
73
- "#{VALID_COMPONENT_RANGE.begin} and #{VALID_COMPONENT_RANGE.end}."
74
- )
73
+ raise ArgumentError, "(#{red},#{green},#{blue}) is not a valid color " \
74
+ 'specification. All components must be between ' \
75
+ "#{VALID_COMPONENT_RANGE.begin} and #{VALID_COMPONENT_RANGE.end}."
75
76
  end
76
77
 
77
78
  Triplet.new(red: red, green: green, blue: blue)
@@ -82,7 +83,7 @@ module SuperDiff
82
83
  end
83
84
 
84
85
  def interpret_layer!(value)
85
- if value.to_s.to_i > 0
86
+ if value.to_s.to_i.positive?
86
87
  LAYERS_BY_LEADING_CODE.fetch(value.to_s.to_i)
87
88
  else
88
89
  super
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Csi
3
5
  class UncolorizedDocument < Document
@@ -1,16 +1,18 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Source: <https://en.wikipedia.org/wiki/ANSI_escape_code>
2
4
  module SuperDiff
3
5
  module Csi
4
- autoload :BoldSequence, "super_diff/csi/bold_sequence"
5
- autoload :Color, "super_diff/csi/color"
6
- autoload :ColorSequenceBlock, "super_diff/csi/color_sequence_block"
7
- autoload :ColorizedDocument, "super_diff/csi/colorized_document"
8
- autoload :Document, "super_diff/csi/document"
9
- autoload :EightBitColor, "super_diff/csi/eight_bit_color"
10
- autoload :FourBitColor, "super_diff/csi/four_bit_color"
11
- autoload :ResetSequence, "super_diff/csi/reset_sequence"
12
- autoload :TwentyFourBitColor, "super_diff/csi/twenty_four_bit_color"
13
- autoload :UncolorizedDocument, "super_diff/csi/uncolorized_document"
6
+ autoload :BoldSequence, 'super_diff/csi/bold_sequence'
7
+ autoload :Color, 'super_diff/csi/color'
8
+ autoload :ColorSequenceBlock, 'super_diff/csi/color_sequence_block'
9
+ autoload :ColorizedDocument, 'super_diff/csi/colorized_document'
10
+ autoload :Document, 'super_diff/csi/document'
11
+ autoload :EightBitColor, 'super_diff/csi/eight_bit_color'
12
+ autoload :FourBitColor, 'super_diff/csi/four_bit_color'
13
+ autoload :ResetSequence, 'super_diff/csi/reset_sequence'
14
+ autoload :TwentyFourBitColor, 'super_diff/csi/twenty_four_bit_color'
15
+ autoload :UncolorizedDocument, 'super_diff/csi/uncolorized_document'
14
16
 
15
17
  def self.reset_sequence
16
18
  ResetSequence.new