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,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,37 +1,23 @@
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"
14
-
15
- class << self
16
- attr_writer :color_enabled
17
- end
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'
18
16
 
19
17
  def self.reset_sequence
20
18
  ResetSequence.new
21
19
  end
22
20
 
23
- def self.color_enabled?
24
- @color_enabled
25
- end
26
-
27
- def self.colorize(*args, **opts, &block)
28
- if color_enabled?
29
- ColorizedDocument.new(*args, **opts, &block)
30
- else
31
- UncolorizedDocument.new(*args, **opts, &block)
32
- end
33
- end
34
-
35
21
  def self.decolorize(text)
36
22
  text.gsub(/\e\[\d+(?:;\d+)*m(.+?)\e\[0m/, '\1')
37
23
  end
@@ -39,21 +25,5 @@ module SuperDiff
39
25
  def self.already_colorized?(text)
40
26
  text.match?(/\e\[\d+m/)
41
27
  end
42
-
43
- def self.inspect_colors_in(text)
44
- [FourBitColor, EightBitColor, TwentyFourBitColor].reduce(
45
- text
46
- ) do |str, klass|
47
- klass.sub_colorized_areas_in(str) do |area, color|
48
- color_block = colorize("◼︎", color.to_foreground)
49
-
50
- layer_indicator = (color.foreground? ? "(fg)" : "(bg)")
51
-
52
- "#{color_block} #{layer_indicator} ❮#{area}❯"
53
- end
54
- end
55
- end
56
-
57
- self.color_enabled = false
58
28
  end
59
29
  end
@@ -1,19 +1,21 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module Differs
3
5
  def self.const_missing(missing_const_name)
4
6
  if missing_const_name == :Base
5
- warn <<~EOT
7
+ warn <<~WARNING
6
8
  WARNING: SuperDiff::Differs::#{missing_const_name} is deprecated and will be removed in the next major release.
7
9
  Please use SuperDiff::Core::AbstractDiffer instead.
8
10
  #{caller_locations.join("\n")}
9
- EOT
11
+ WARNING
10
12
  Core::AbstractDiffer
11
13
  elsif Basic::Differs.const_defined?(missing_const_name)
12
- warn <<~EOT
14
+ warn <<~WARNING
13
15
  WARNING: SuperDiff::Differs::#{missing_const_name} is deprecated and will be removed in the next major release.
14
16
  Please use SuperDiff::Basic::Differs::#{missing_const_name} instead.
15
17
  #{caller_locations.join("\n")}
16
- EOT
18
+ WARNING
17
19
  Basic::Differs.const_get(missing_const_name)
18
20
  else
19
21
  super
@@ -1,30 +1,32 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module EqualityMatchers
3
5
  class Array < Base
4
6
  def self.applies_to?(value)
5
- value.class == ::Array
7
+ value.instance_of?(::Array)
6
8
  end
7
9
 
8
10
  def fail
9
11
  <<~OUTPUT.strip
10
- Differing arrays.
12
+ Differing arrays.
11
13
 
12
- #{
13
- Core::Helpers.style(
14
- :expected,
15
- "Expected: " + SuperDiff.inspect_object(expected, as_lines: false)
16
- )
17
- }
18
- #{
19
- Core::Helpers.style(
20
- :actual,
21
- " Actual: " + SuperDiff.inspect_object(actual, as_lines: false)
22
- )
23
- }
14
+ #{
15
+ Core::Helpers.style(
16
+ :expected,
17
+ "Expected: #{SuperDiff.inspect_object(expected, as_lines: false)}"
18
+ )
19
+ }
20
+ #{
21
+ Core::Helpers.style(
22
+ :actual,
23
+ " Actual: #{SuperDiff.inspect_object(actual, as_lines: false)}"
24
+ )
25
+ }
24
26
 
25
- Diff:
27
+ Diff:
26
28
 
27
- #{diff}
29
+ #{diff}
28
30
  OUTPUT
29
31
  end
30
32
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module EqualityMatchers
3
5
  class Base
@@ -11,14 +13,14 @@ module SuperDiff
11
13
  [
12
14
  :expected!,
13
15
  :actual!,
14
- extra_operation_tree_builder_classes: [],
15
- extra_diff_formatter_classes: []
16
+ { extra_operation_tree_builder_classes: [],
17
+ extra_diff_formatter_classes: [] }
16
18
  ]
17
19
  )
18
20
 
19
21
  def call
20
- if expected == actual
21
- ""
22
+ if expected == actual # rubocop:disable Style/GuardClause `fail` is not Kernel#fail
23
+ ''
22
24
  else
23
25
  fail
24
26
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module EqualityMatchers
3
5
  class Default < Base
@@ -20,20 +22,20 @@ module SuperDiff
20
22
  def expected_line
21
23
  Core::Helpers.style(
22
24
  :expected,
23
- "Expected: " + SuperDiff.inspect_object(expected, as_lines: false)
25
+ "Expected: #{SuperDiff.inspect_object(expected, as_lines: false)}"
24
26
  )
25
27
  end
26
28
 
27
29
  def actual_line
28
30
  Core::Helpers.style(
29
31
  :actual,
30
- " Actual: " + SuperDiff.inspect_object(actual, as_lines: false)
32
+ " Actual: #{SuperDiff.inspect_object(actual, as_lines: false)}"
31
33
  )
32
34
  end
33
35
 
34
36
  def diff_section
35
37
  if diff.empty?
36
- ""
38
+ ''
37
39
  else
38
40
  <<~SECTION
39
41
 
@@ -1,11 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module EqualityMatchers
3
5
  DEFAULTS = [
4
- Primitive,
5
6
  Array,
6
7
  Hash,
7
8
  MultilineString,
8
9
  SinglelineString,
10
+ Primitive,
9
11
  Default
10
12
  ].freeze
11
13
  end
@@ -1,30 +1,32 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module EqualityMatchers
3
5
  class Hash < Base
4
6
  def self.applies_to?(value)
5
- value.class == ::Hash
7
+ value.instance_of?(::Hash)
6
8
  end
7
9
 
8
10
  def fail
9
11
  <<~OUTPUT.strip
10
- Differing hashes.
12
+ Differing hashes.
11
13
 
12
- #{
13
- Core::Helpers.style(
14
- :expected,
15
- "Expected: " + SuperDiff.inspect_object(expected, as_lines: false)
16
- )
17
- }
18
- #{
19
- Core::Helpers.style(
20
- :actual,
21
- " Actual: " + SuperDiff.inspect_object(actual, as_lines: false)
22
- )
23
- }
14
+ #{
15
+ Core::Helpers.style(
16
+ :expected,
17
+ "Expected: #{SuperDiff.inspect_object(expected, as_lines: false)}"
18
+ )
19
+ }
20
+ #{
21
+ Core::Helpers.style(
22
+ :actual,
23
+ " Actual: #{SuperDiff.inspect_object(actual, as_lines: false)}"
24
+ )
25
+ }
24
26
 
25
- Diff:
27
+ Diff:
26
28
 
27
- #{diff}
29
+ #{diff}
28
30
  OUTPUT
29
31
  end
30
32
 
@@ -1,9 +1,11 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module EqualityMatchers
3
5
  class Main
4
6
  extend AttrExtras.mixin
5
7
 
6
- method_object [:expected!, :actual!, extra_classes: []]
8
+ method_object [:expected!, :actual!, { extra_classes: [] }]
7
9
 
8
10
  def call
9
11
  resolved_class.call(expected: expected, actual: actual)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module EqualityMatchers
3
5
  class MultilineString < Base
@@ -7,25 +9,25 @@ module SuperDiff
7
9
 
8
10
  def fail
9
11
  <<~OUTPUT.strip
10
- Differing strings.
12
+ Differing strings.
11
13
 
12
- #{
13
- # TODO: This whole thing should not be red or green, just the values
14
- Core::Helpers.style(
15
- :expected,
16
- "Expected: " + SuperDiff.inspect_object(expected, as_lines: false)
17
- )
18
- }
19
- #{
20
- Core::Helpers.style(
21
- :actual,
22
- " Actual: " + SuperDiff.inspect_object(actual, as_lines: false)
23
- )
24
- }
14
+ #{
15
+ # TODO: This whole thing should not be red or green, just the values
16
+ Core::Helpers.style(
17
+ :expected,
18
+ "Expected: #{SuperDiff.inspect_object(expected, as_lines: false)}"
19
+ )
20
+ }
21
+ #{
22
+ Core::Helpers.style(
23
+ :actual,
24
+ " Actual: #{SuperDiff.inspect_object(actual, as_lines: false)}"
25
+ )
26
+ }
25
27
 
26
- Diff:
28
+ Diff:
27
29
 
28
- #{diff}
30
+ #{diff}
29
31
  OUTPUT
30
32
  end
31
33
 
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module SuperDiff
2
4
  module EqualityMatchers
3
5
  class Primitive < Base
@@ -8,20 +10,20 @@ module SuperDiff
8
10
 
9
11
  def fail
10
12
  <<~OUTPUT.strip
11
- Differing #{Core::Helpers.plural_type_for(actual)}.
13
+ Differing #{Core::Helpers.plural_type_for(actual)}.
12
14
 
13
- #{
14
- Core::Helpers.style(
15
- :expected,
16
- "Expected: " + SuperDiff.inspect_object(expected, as_lines: false)
17
- )
18
- }
19
- #{
20
- Core::Helpers.style(
21
- :actual,
22
- " Actual: " + SuperDiff.inspect_object(actual, as_lines: false)
23
- )
24
- }
15
+ #{
16
+ Core::Helpers.style(
17
+ :expected,
18
+ "Expected: #{SuperDiff.inspect_object(expected, as_lines: false)}"
19
+ )
20
+ }
21
+ #{
22
+ Core::Helpers.style(
23
+ :actual,
24
+ " Actual: #{SuperDiff.inspect_object(actual, as_lines: false)}"
25
+ )
26
+ }
25
27
  OUTPUT
26
28
  end
27
29
  end