only print one deprecation warning per method.

This commit is contained in:
Micah Geisel 2019-05-21 13:44:23 -06:00
parent 8e9b9e6cb0
commit d4ba260424
3 changed files with 37 additions and 14 deletions

View file

@ -1,3 +1,4 @@
require 'database_cleaner/deprecation'
require 'database_cleaner/null_strategy'
require 'database_cleaner/safeguard'
require 'database_cleaner/orm_autodetector'
@ -73,22 +74,22 @@ module DatabaseCleaner
# TODO remove the following methods in 2.0
def auto_detected?
$stderr.puts "Calling `DatabaseCleaner[...].auto_detected?` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].auto_detected?` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
@orm_autodetector.autodetected?
end
def autodetect_orm
$stderr.puts "Calling `DatabaseCleaner[...].autodetect_orm` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].autodetect_orm` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
@orm_autodetector.orm
end
def clean!
$stderr.puts "Calling `DatabaseCleaner[...].clean!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean instead."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].clean!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean instead."
clean
end
def clean_with!
$stderr.puts "Calling `DatabaseCleaner[...].clean_with!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean_with instead."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].clean_with!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].clean_with instead."
clean_with
end
@ -96,14 +97,14 @@ module DatabaseCleaner
def strategy_db=(desired_db)
if called_externally?(caller)
$stderr.puts "Calling `DatabaseCleaner[...].strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
end
set_strategy_db(strategy, desired_db)
end
def set_strategy_db(strategy, desired_db)
if called_externally?(caller)
$stderr.puts "Calling `DatabaseCleaner[...].set_strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].set_strategy_db=` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].db=` instead."
end
if strategy.respond_to? :db=
strategy.db = desired_db
@ -114,7 +115,7 @@ module DatabaseCleaner
def create_strategy(*args)
if called_externally?(caller)
$stderr.puts "Calling `DatabaseCleaner[...].create_strategy` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].strategy=` instead."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner[...].create_strategy` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner[...].strategy=` instead."
end
strategy, *strategy_args = args
orm_strategy(strategy).new(*strategy_args)
@ -130,7 +131,7 @@ module DatabaseCleaner
def orm_strategy(strategy)
orm_module.const_get(strategy.to_s.capitalize)
rescue NameError
$stderr.puts <<-TEXT
DatabaseCleaner.deprecate <<-TEXT
Requiring the `database_cleaner` gem directly is deprecated, and will raise an error in database_cleaner 2.0. Instead, please require the specific gem (or gems) for your ORM.
For example, replace `gem "database_cleaner"` with `gem "database_cleaner-#{orm}"` in your Gemfile.
TEXT

View file

@ -1,4 +1,5 @@
require 'database_cleaner/base'
require 'database_cleaner/deprecation'
require 'forwardable'
module DatabaseCleaner
@ -82,22 +83,22 @@ module DatabaseCleaner
# TODO remove the following methods in 2.0
def clean!
$stderr.puts "Calling `DatabaseCleaner.clean!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.clean`, instead."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner.clean!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.clean`, instead."
clean
end
def clean_with!(*args)
$stderr.puts "Calling `DatabaseCleaner.clean_with!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.clean_with`, instead."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner.clean_with!` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.clean_with`, instead."
clean_with(*args)
end
def init_cleaners
$stderr.puts "Calling `DatabaseCleaner.init_cleaners` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner.init_cleaners` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
end
def connections
if called_externally?(caller)
$stderr.puts "Calling `DatabaseCleaner.connections` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.cleaners`, instead."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner.connections` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.cleaners`, instead."
end
add_cleaner(:autodetect) if @cleaners.none?
@cleaners.values
@ -107,14 +108,14 @@ module DatabaseCleaner
def add_cleaner(orm, opts = {})
if called_externally?(caller)
$stderr.puts "Calling `DatabaseCleaner.add_cleaner` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.[]`, instead."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner.add_cleaner` is deprecated, and will be removed in database_cleaner 2.0. Use `DatabaseCleaner.[]`, instead."
end
@cleaners.add_cleaner(orm, opts = {})
end
def remove_duplicates
if called_externally?(caller)
$stderr.puts "Calling `DatabaseCleaner.remove_duplicates` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
DatabaseCleaner.deprecate "Calling `DatabaseCleaner.remove_duplicates` is deprecated, and will be removed in database_cleaner 2.0 with no replacement."
end
@cleaners.remove_duplicates
end

View file

@ -0,0 +1,21 @@
module DatabaseCleaner
def deprecate message
method = caller.first[/\d+:in `(.*)'$/, 1].to_sym
@@deprecator ||= Deprecator.new
@@deprecator.deprecate method, message
end
module_function :deprecate
class Deprecator
def initialize
@methods_already_warned = {}
end
def deprecate method, message
return if @methods_already_warned.key?(method)
$stderr.puts message
@methods_already_warned[method] = true
end
end
end