Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 3 additions & 1 deletion lib/did_you_mean.rb
Original file line number Diff line number Diff line change
Expand Up @@ -118,14 +118,16 @@ def self.formatter
if defined?(Ractor)
Ractor.current[:__did_you_mean_formatter__] || Formatter
else
Formatter
@formatter || Formatter
end
end

# Updates the primary formatter used to format the suggestions.
def self.formatter=(formatter)
if defined?(Ractor)
Ractor.current[:__did_you_mean_formatter__] = formatter
else
@formatter = formatter
end
end
end
37 changes: 37 additions & 0 deletions test/test_formatter.rb
Original file line number Diff line number Diff line change
@@ -0,0 +1,37 @@
require_relative './helper'

class FormatterTest < Test::Unit::TestCase
class CustomFormatter
def self.message_for(corrections)
" custom suggestions: #{corrections.join(', ')}"
end
end

def setup
@original_formatter = DidYouMean.formatter
end

def teardown
DidYouMean.formatter = @original_formatter
end

def test_custom_formatter_is_used_for_error_messages
DidYouMean.formatter = CustomFormatter
assert_same CustomFormatter, DidYouMean.formatter
error = assert_raise(KeyError) { { book: 1 }.fetch(:boook) }
assert_include DidYouMean::TestHelper.get_message(error), 'custom suggestions: :book'
end

def test_nil_formatter_restores_default
DidYouMean.formatter = CustomFormatter
DidYouMean.formatter = nil
assert_same DidYouMean::Formatter, DidYouMean.formatter
end

unless defined?(Ractor)
def test_formatter_is_shared_between_threads_without_ractors
DidYouMean.formatter = CustomFormatter
assert_same CustomFormatter, Thread.new { DidYouMean.formatter }.value
end
end
end
Loading