DEV: allow for method deprecation using Discourse.deprecate
New method deprecator will ensure one log message an hour happens for all deprecated method calls per call site Also removes unused monkey patches to ActiveRecord::Base
This commit is contained in:
parent
cb824a6b33
commit
44091f20c6
|
@ -527,6 +527,23 @@ module Discourse
|
|||
end
|
||||
end
|
||||
|
||||
def self.deprecate(warning)
|
||||
location = caller_locations[1]
|
||||
warning = "Deprecation Notice: #{warning}\nAt: #{location.label} #{location.path}:#{location.lineno}"
|
||||
if Rails.env == "development"
|
||||
STDERR.puts(warning)
|
||||
end
|
||||
|
||||
digest = Digest::MD5.hexdigest(warning)
|
||||
redis_key = "deprecate-notice-#{digest}"
|
||||
|
||||
if !$redis.without_namespace.get(redis_key)
|
||||
Rails.logger.warn(warning)
|
||||
$redis.without_namespace.setex(redis_key, 3600, "x")
|
||||
end
|
||||
warning
|
||||
end
|
||||
|
||||
SIDEKIQ_NAMESPACE ||= 'sidekiq'.freeze
|
||||
|
||||
def self.sidekiq_redis_config
|
||||
|
|
|
@ -2,19 +2,14 @@ class ActiveRecord::Base
|
|||
|
||||
# Execute SQL manually
|
||||
def self.exec_sql(*args)
|
||||
|
||||
Discourse.deprecate("exec_sql should not be used anymore, please use DB.exec or DB.query instead!")
|
||||
|
||||
conn = ActiveRecord::Base.connection
|
||||
sql = ActiveRecord::Base.send(:sanitize_sql_array, args)
|
||||
conn.raw_connection.async_exec(sql)
|
||||
end
|
||||
|
||||
def self.exec_sql_row_count(*args)
|
||||
exec_sql(*args).cmd_tuples
|
||||
end
|
||||
|
||||
def self.sql_fragment(*sql_array)
|
||||
ActiveRecord::Base.send(:sanitize_sql_array, sql_array)
|
||||
end
|
||||
|
||||
def exec_sql(*args)
|
||||
ActiveRecord::Base.exec_sql(*args)
|
||||
end
|
||||
|
@ -36,10 +31,4 @@ class ActiveRecord::Base
|
|||
end
|
||||
end
|
||||
|
||||
# Support for psql. If we want to support multiple RDBMs in the future we can
|
||||
# split this.
|
||||
def exec_sql_row_count(*args)
|
||||
exec_sql(*args).cmd_tuples
|
||||
end
|
||||
|
||||
end
|
||||
|
|
|
@ -226,4 +226,41 @@ describe Discourse do
|
|||
end
|
||||
end
|
||||
|
||||
context '#deprecate' do
|
||||
|
||||
class FakeLogger
|
||||
attr_reader :warnings
|
||||
def warn(m)
|
||||
@warnings ||= []
|
||||
@warnings << m
|
||||
end
|
||||
end
|
||||
|
||||
def old_method(m)
|
||||
Discourse.deprecate(m)
|
||||
end
|
||||
|
||||
def old_method_caller(m)
|
||||
old_method(m)
|
||||
end
|
||||
|
||||
before do
|
||||
@orig_logger = Rails.logger
|
||||
Rails.logger = @fake_logger = FakeLogger.new
|
||||
end
|
||||
|
||||
after do
|
||||
Rails.logger = @orig_logger
|
||||
end
|
||||
|
||||
it 'can deprecate usage' do
|
||||
k = SecureRandom.hex
|
||||
expect(old_method_caller(k)).to include("old_method_caller")
|
||||
expect(old_method_caller(k)).to include("discourse_spec")
|
||||
expect(old_method_caller(k)).to include(k)
|
||||
|
||||
expect(@fake_logger.warnings).to eq([old_method_caller(k)])
|
||||
end
|
||||
end
|
||||
|
||||
end
|
||||
|
|
Loading…
Reference in New Issue