From a527265df729b581aef76687d8034ca7fa5ce2cb Mon Sep 17 00:00:00 2001 From: Jeff Stubler Date: Mon, 30 Nov 2020 15:27:46 -0600 Subject: [PATCH] Add configuration for custom colors --- README.md | 20 ++++++++++++ lib/super_diff.rb | 7 ---- .../colorized_document_extensions.rb | 4 +-- lib/super_diff/configuration.rb | 32 +++++++++++++++++++ .../rspec/matcher_text_builders/base.rb | 4 +-- lib/super_diff/rspec/monkey_patches.rb | 22 ++++++------- 6 files changed, 67 insertions(+), 22 deletions(-) diff --git a/README.md b/README.md index 5a68ba60..ac05a5bf 100644 --- a/README.md +++ b/README.md @@ -155,6 +155,26 @@ require "super_diff/rspec" ## Configuration +### Custom colors + +If you want to use something other than the default colors, you can +configure them by adding them to your test helper file +(`rails_helper` or `spec_helper`): + +``` ruby +SuperDiff.configure do |config| + config.set_actual_color(:green) + config.set_expected_color(:red) + config.set_border_color(:yellow) + config.set_header_color(:yellow) +end +``` + +See [eight_bit_color.rb](lib/super_diff/csi/eight_bit_color.rb) for the list +of available colors. + +### Diffing custom objects + As capable as this library is, it doesn't know how to deal with every kind of object out there. If you have a custom class, diff --git a/lib/super_diff.rb b/lib/super_diff.rb index 818d5a17..0dc38e07 100644 --- a/lib/super_diff.rb +++ b/lib/super_diff.rb @@ -21,13 +21,6 @@ module SuperDiff autoload :Operations, "super_diff/operations" autoload :RecursionGuard, "super_diff/recursion_guard" - COLORS = { - alpha: :magenta, - beta: :yellow, - border: :blue, - header: :white, - }.freeze - def self.configure yield configuration end diff --git a/lib/super_diff/colorized_document_extensions.rb b/lib/super_diff/colorized_document_extensions.rb index e0ca5ce5..17c8a49b 100644 --- a/lib/super_diff/colorized_document_extensions.rb +++ b/lib/super_diff/colorized_document_extensions.rb @@ -7,11 +7,11 @@ def self.extended(extendee) end def alpha(*args, **opts, &block) - colorize(*args, **opts, fg: SuperDiff::COLORS.fetch(:alpha), &block) + colorize(*args, **opts, fg: SuperDiff.configuration.alpha_color, &block) end def beta(*args, **opts, &block) - colorize(*args, **opts, fg: SuperDiff::COLORS.fetch(:beta), &block) + colorize(*args, **opts, fg: SuperDiff.configuration.beta_color, &block) end end end diff --git a/lib/super_diff/configuration.rb b/lib/super_diff/configuration.rb index 71fc1d3c..7da7883c 100644 --- a/lib/super_diff/configuration.rb +++ b/lib/super_diff/configuration.rb @@ -6,6 +6,10 @@ class Configuration :extra_operation_tree_classes, :extra_diff_formatter_classes, :extra_inspector_classes, + :alpha_color, + :beta_color, + :border_color, + :header_color, ) def initialize @@ -14,6 +18,10 @@ def initialize @extra_operation_tree_classes = [].freeze @extra_diff_formatter_classes = [].freeze @extra_inspector_classes = [].freeze + @alpha_color = :magenta + @beta_color = :yellow + @border_color = :blue + @header_color = :white end def add_extra_differ_classes(*classes) @@ -56,5 +64,29 @@ def add_extra_inspector_classes(*classes) :add_extra_inspector_class, :add_extra_inspector_classes, ) + + def set_alpha_color(color) + @alpha_color = color + end + alias_method( + :set_expected_color, + :set_alpha_color + ) + + def set_beta_color(color) + @beta_color = color + end + alias_method( + :set_actual_color, + :set_beta_color + ) + + def set_border_color(color) + @border_color = color + end + + def set_header_color(color) + @header_color = color + end end end diff --git a/lib/super_diff/rspec/matcher_text_builders/base.rb b/lib/super_diff/rspec/matcher_text_builders/base.rb index 58283e70..af71501d 100644 --- a/lib/super_diff/rspec/matcher_text_builders/base.rb +++ b/lib/super_diff/rspec/matcher_text_builders/base.rb @@ -46,11 +46,11 @@ def add_extra_after_error end def beta_color - SuperDiff::COLORS.fetch(:beta) + SuperDiff.configuration.beta_color end def alpha_color - SuperDiff::COLORS.fetch(:alpha) + SuperDiff.configuration.alpha_color end private diff --git a/lib/super_diff/rspec/monkey_patches.rb b/lib/super_diff/rspec/monkey_patches.rb index 39eef840..d1ee535c 100644 --- a/lib/super_diff/rspec/monkey_patches.rb +++ b/lib/super_diff/rspec/monkey_patches.rb @@ -272,34 +272,34 @@ def self.from(expected) return expected if self === expected text = - colorizer.wrap("Diff:", SuperDiff::COLORS.fetch(:header)) + + colorizer.wrap("Diff:", SuperDiff.configuration.header_color) + "\n\n" + colorizer.wrap( "┌ (Key) ──────────────────────────┐", - SuperDiff::COLORS.fetch(:border) + SuperDiff.configuration.border_color ) + "\n" + - colorizer.wrap("│ ", SuperDiff::COLORS.fetch(:border)) + + colorizer.wrap("│ ", SuperDiff.configuration.border_color) + colorizer.wrap( "‹-› in expected, not in actual", - SuperDiff::COLORS.fetch(:alpha) + SuperDiff.configuration.alpha_color ) + - colorizer.wrap(" │", SuperDiff::COLORS.fetch(:border)) + + colorizer.wrap(" │", SuperDiff.configuration.border_color) + "\n" + - colorizer.wrap("│ ", SuperDiff::COLORS.fetch(:border)) + + colorizer.wrap("│ ", SuperDiff.configuration.border_color) + colorizer.wrap( "‹+› in actual, not in expected", - SuperDiff::COLORS.fetch(:beta) + SuperDiff.configuration.beta_color ) + - colorizer.wrap(" │", SuperDiff::COLORS.fetch(:border)) + + colorizer.wrap(" │", SuperDiff.configuration.border_color) + "\n" + - colorizer.wrap("│ ", SuperDiff::COLORS.fetch(:border)) + + colorizer.wrap("│ ", SuperDiff.configuration.border_color) + "‹ › in both expected and actual" + - colorizer.wrap(" │", SuperDiff::COLORS.fetch(:border)) + + colorizer.wrap(" │", SuperDiff.configuration.border_color) + "\n" + colorizer.wrap( "└─────────────────────────────────┘", - SuperDiff::COLORS.fetch(:border) + SuperDiff.configuration.border_color ) new([[expected, text]])