Commit a5972bbc authored by Rémy Coutable's avatar Rémy Coutable

Merge branch 'replace-alias_method_chain' into 'master'

Remove the "soon to be deprecated" `alias_method_chain` in favor of `Module#prepend`.

## Are there points in the code the reviewer needs to double check?

Double check whether the behavior of `attr_encrypted_no_db_connection` is still the desired one.

## Why was this MR needed?

The `alias_method_chain` becomes deprecated in Rails 5 in favor of the `Module#prepend` introduced in Ruby 2.0.

This MR prevents future deprecated warnings in light of a possible Rails version bump.

Closes #22302

See merge request !6570
parents 6591b594 d16e1184
...@@ -12,6 +12,7 @@ v 8.13.0 (unreleased) ...@@ -12,6 +12,7 @@ v 8.13.0 (unreleased)
- Allow the Koding integration to be configured through the API - Allow the Koding integration to be configured through the API
- Fix robots.txt disallowing access to groups starting with "s" (Matt Harrison) - Fix robots.txt disallowing access to groups starting with "s" (Matt Harrison)
- Use a ConnectionPool for Rails.cache on Sidekiq servers - Use a ConnectionPool for Rails.cache on Sidekiq servers
- Replace `alias_method_chain` with `Module#prepend`
- Only update issuable labels if they have been changed - Only update issuable labels if they have been changed
- Take filters in account in issuable counters. !6496 - Take filters in account in issuable counters. !6496
- Revoke button in Applications Settings underlines on hover. - Revoke button in Applications Settings underlines on hover.
......
module AttrEncrypted module AttrEncrypted
module Adapters module Adapters
module ActiveRecord module ActiveRecord
def attribute_instance_methods_as_symbols_with_no_db_connection module DBConnectionQuerier
# Use with_connection so the connection doesn't stay pinned to the thread. def attribute_instance_methods_as_symbols
connected = ::ActiveRecord::Base.connection_pool.with_connection(&:active?) rescue false # Use with_connection so the connection doesn't stay pinned to the thread.
connected = ::ActiveRecord::Base.connection_pool.with_connection(&:active?) rescue false
if connected
# Call version from AttrEncrypted::Adapters::ActiveRecord if connected
attribute_instance_methods_as_symbols_without_no_db_connection # Call version from AttrEncrypted::Adapters::ActiveRecord
else super
# Call version from AttrEncrypted, i.e., `super` with regards to AttrEncrypted::Adapters::ActiveRecord else
AttrEncrypted.instance_method(:attribute_instance_methods_as_symbols).bind(self).call # Call version from AttrEncrypted, i.e., `super` with regards to AttrEncrypted::Adapters::ActiveRecord
AttrEncrypted.instance_method(:attribute_instance_methods_as_symbols).bind(self).call
end
end end
end end
prepend DBConnectionQuerier
alias_method_chain :attribute_instance_methods_as_symbols, :no_db_connection
end end
end end
end end
if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter) if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter class ActiveRecord::ConnectionAdapters::PostgreSQLAdapter
module LimitFilter
def add_column(table_name, column_name, type, options = {})
options.delete(:limit) if type == :text
super(table_name, column_name, type, options)
end
def change_column(table_name, column_name, type, options = {})
options.delete(:limit) if type == :text
super(table_name, column_name, type, options)
end
end
prepend ActiveRecord::ConnectionAdapters::PostgreSQLAdapter::LimitFilter
class TableDefinition class TableDefinition
def text(*args) def text(*args)
options = args.extract_options! options = args.extract_options!
...@@ -9,18 +23,5 @@ if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter) ...@@ -9,18 +23,5 @@ if defined?(ActiveRecord::ConnectionAdapters::PostgreSQLAdapter)
column_names.each { |name| column(name, type, options) } column_names.each { |name| column(name, type, options) }
end end
end end
def add_column_with_limit_filter(table_name, column_name, type, options = {})
options.delete(:limit) if type == :text
add_column_without_limit_filter(table_name, column_name, type, options)
end
def change_column_with_limit_filter(table_name, column_name, type, options = {})
options.delete(:limit) if type == :text
change_column_without_limit_filter(table_name, column_name, type, options)
end
alias_method_chain :add_column, :limit_filter
alias_method_chain :change_column, :limit_filter
end end
end end
...@@ -10,19 +10,21 @@ module Banzai ...@@ -10,19 +10,21 @@ module Banzai
# task_list gem. # task_list gem.
# #
# See https://github.com/github/task_list/pull/60 # See https://github.com/github/task_list/pull/60
class TaskListFilter < TaskList::Filter module ClassNamesFilter
def add_css_class_with_fix(node, *new_class_names) def add_css_class(node, *new_class_names)
if new_class_names.include?('task-list') if new_class_names.include?('task-list')
# Don't add class to all lists # Don't add class to all lists
return return
elsif new_class_names.include?('task-list-item') elsif new_class_names.include?('task-list-item')
add_css_class_without_fix(node.parent, 'task-list') super(node.parent, 'task-list')
end end
add_css_class_without_fix(node, *new_class_names) super(node, *new_class_names)
end end
end
alias_method_chain :add_css_class, :fix class TaskListFilter < TaskList::Filter
prepend ClassNamesFilter
end end
end end
end end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment