Further preparation for Rails 6 (#15916)
* Use ActiveRecord::Result#to_ary instead of deprecated to_hash They do the same thing, and to_hash has been removed from Rails 6.1 * Explicitly name polymorphic indexes to workaround a bug in Rails 6.1 cf. https://github.com/rails/rails/issues/41693 * Fix incorrect usage of “foreign_key” in migration script * Use `ActiveModel::Errors#delete` instead of deprecated clear method * Fix link headers tests on Rails 6.1 Rails 6.1 adds values to the Link header by default, thus it is not a LinkHeader object anymore. Fix the test to parse the Link header instead of assuming it is a LinkHeader.
This commit is contained in:
parent
55ac2b9c60
commit
b358229834
|
@ -22,7 +22,7 @@ module Admin
|
||||||
if existing_domain_block.present? && !@domain_block.stricter_than?(existing_domain_block)
|
if existing_domain_block.present? && !@domain_block.stricter_than?(existing_domain_block)
|
||||||
@domain_block.save
|
@domain_block.save
|
||||||
flash.now[:alert] = I18n.t('admin.domain_blocks.existing_domain_block_html', name: existing_domain_block.domain, unblock_url: admin_domain_block_path(existing_domain_block)).html_safe # rubocop:disable Rails/OutputSafety
|
flash.now[:alert] = I18n.t('admin.domain_blocks.existing_domain_block_html', name: existing_domain_block.domain, unblock_url: admin_domain_block_path(existing_domain_block)).html_safe # rubocop:disable Rails/OutputSafety
|
||||||
@domain_block.errors[:domain].clear
|
@domain_block.errors.delete(:domain)
|
||||||
render :new
|
render :new
|
||||||
else
|
else
|
||||||
if existing_domain_block.present?
|
if existing_domain_block.present?
|
||||||
|
|
|
@ -7,12 +7,12 @@ end
|
||||||
class RailsSettingsMigration < MIGRATION_BASE_CLASS
|
class RailsSettingsMigration < MIGRATION_BASE_CLASS
|
||||||
def self.up
|
def self.up
|
||||||
create_table :settings do |t|
|
create_table :settings do |t|
|
||||||
t.string :var, :null => false
|
t.string :var, null: false
|
||||||
t.text :value
|
t.text :value
|
||||||
t.references :target, :null => false, :polymorphic => true
|
t.references :target, null: false, polymorphic: true, index: { name: 'index_settings_on_target_type_and_target_id' }
|
||||||
t.timestamps :null => true
|
t.timestamps null: true
|
||||||
end
|
end
|
||||||
add_index :settings, [ :target_type, :target_id, :var ], :unique => true
|
add_index :settings, [ :target_type, :target_id, :var ], unique: true
|
||||||
end
|
end
|
||||||
|
|
||||||
def self.down
|
def self.down
|
||||||
|
|
|
@ -3,7 +3,7 @@ class CreateAdminActionLogs < ActiveRecord::Migration[5.1]
|
||||||
create_table :admin_action_logs do |t|
|
create_table :admin_action_logs do |t|
|
||||||
t.belongs_to :account, foreign_key: { on_delete: :cascade }
|
t.belongs_to :account, foreign_key: { on_delete: :cascade }
|
||||||
t.string :action, null: false, default: ''
|
t.string :action, null: false, default: ''
|
||||||
t.references :target, polymorphic: true
|
t.references :target, polymorphic: true, index: { name: 'index_admin_action_logs_on_target_type_and_target_id' }
|
||||||
t.text :recorded_changes, null: false, default: ''
|
t.text :recorded_changes, null: false, default: ''
|
||||||
|
|
||||||
t.timestamps
|
t.timestamps
|
||||||
|
|
|
@ -37,7 +37,7 @@ class FixAccountsUniqueIndex < ActiveRecord::Migration[5.2]
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
duplicates = Account.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM accounts GROUP BY lower(username), lower(domain) HAVING count(*) > 1').to_hash
|
duplicates = Account.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM accounts GROUP BY lower(username), lower(domain) HAVING count(*) > 1').to_ary
|
||||||
|
|
||||||
duplicates.each do |row|
|
duplicates.each do |row|
|
||||||
deduplicate_account!(row['ids'].split(','))
|
deduplicate_account!(row['ids'].split(','))
|
||||||
|
|
|
@ -17,8 +17,8 @@ class MigrateAccountConversations < ActiveRecord::Migration[5.2]
|
||||||
belongs_to :account, optional: true
|
belongs_to :account, optional: true
|
||||||
belongs_to :activity, polymorphic: true, optional: true
|
belongs_to :activity, polymorphic: true, optional: true
|
||||||
|
|
||||||
belongs_to :status, foreign_type: 'Status', foreign_key: 'activity_id', optional: true
|
belongs_to :status, foreign_key: 'activity_id', optional: true
|
||||||
belongs_to :mention, foreign_type: 'Mention', foreign_key: 'activity_id', optional: true
|
belongs_to :mention, foreign_key: 'activity_id', optional: true
|
||||||
|
|
||||||
def target_status
|
def target_status
|
||||||
mention&.status
|
mention&.status
|
||||||
|
|
|
@ -2,7 +2,7 @@ class DowncaseCustomEmojiDomains < ActiveRecord::Migration[5.2]
|
||||||
disable_ddl_transaction!
|
disable_ddl_transaction!
|
||||||
|
|
||||||
def up
|
def up
|
||||||
duplicates = CustomEmoji.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM custom_emojis GROUP BY shortcode, lower(domain) HAVING count(*) > 1').to_hash
|
duplicates = CustomEmoji.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM custom_emojis GROUP BY shortcode, lower(domain) HAVING count(*) > 1').to_ary
|
||||||
|
|
||||||
duplicates.each do |row|
|
duplicates.each do |row|
|
||||||
CustomEmoji.where(id: row['ids'].split(',')[0...-1]).destroy_all
|
CustomEmoji.where(id: row['ids'].split(',')[0...-1]).destroy_all
|
||||||
|
|
|
@ -2,7 +2,7 @@ class AddCaseInsensitiveIndexToTags < ActiveRecord::Migration[5.2]
|
||||||
disable_ddl_transaction!
|
disable_ddl_transaction!
|
||||||
|
|
||||||
def up
|
def up
|
||||||
Tag.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM tags GROUP BY lower(name) HAVING count(*) > 1').to_hash.each do |row|
|
Tag.connection.select_all('SELECT string_agg(id::text, \',\') AS ids FROM tags GROUP BY lower(name) HAVING count(*) > 1').to_ary.each do |row|
|
||||||
canonical_tag_id = row['ids'].split(',').first
|
canonical_tag_id = row['ids'].split(',').first
|
||||||
redundant_tag_ids = row['ids'].split(',')[1..-1]
|
redundant_tag_ids = row['ids'].split(',')[1..-1]
|
||||||
|
|
||||||
|
|
|
@ -319,7 +319,7 @@ module Mastodon
|
||||||
count_arel = table.project(Arel.star.count.as('count'))
|
count_arel = table.project(Arel.star.count.as('count'))
|
||||||
count_arel = yield table, count_arel if block_given?
|
count_arel = yield table, count_arel if block_given?
|
||||||
|
|
||||||
total = exec_query(count_arel.to_sql).to_hash.first['count'].to_i
|
total = exec_query(count_arel.to_sql).to_ary.first['count'].to_i
|
||||||
|
|
||||||
return if total == 0
|
return if total == 0
|
||||||
end
|
end
|
||||||
|
@ -335,7 +335,7 @@ module Mastodon
|
||||||
|
|
||||||
start_arel = table.project(table[:id]).order(table[:id].asc).take(1)
|
start_arel = table.project(table[:id]).order(table[:id].asc).take(1)
|
||||||
start_arel = yield table, start_arel if block_given?
|
start_arel = yield table, start_arel if block_given?
|
||||||
first_row = exec_query(start_arel.to_sql).to_hash.first
|
first_row = exec_query(start_arel.to_sql).to_ary.first
|
||||||
# In case there are no rows but we didn't catch it in the estimated size:
|
# In case there are no rows but we didn't catch it in the estimated size:
|
||||||
return unless first_row
|
return unless first_row
|
||||||
start_id = first_row['id'].to_i
|
start_id = first_row['id'].to_i
|
||||||
|
@ -356,7 +356,7 @@ module Mastodon
|
||||||
.skip(batch_size)
|
.skip(batch_size)
|
||||||
|
|
||||||
stop_arel = yield table, stop_arel if block_given?
|
stop_arel = yield table, stop_arel if block_given?
|
||||||
stop_row = exec_query(stop_arel.to_sql).to_hash.first
|
stop_row = exec_query(stop_arel.to_sql).to_ary.first
|
||||||
|
|
||||||
update_arel = Arel::UpdateManager.new
|
update_arel = Arel::UpdateManager.new
|
||||||
.table(table)
|
.table(table)
|
||||||
|
|
|
@ -25,7 +25,7 @@ describe 'Link headers' do
|
||||||
end
|
end
|
||||||
|
|
||||||
def link_header_with_type(type)
|
def link_header_with_type(type)
|
||||||
response.headers['Link'].links.find do |link|
|
LinkHeader.parse(response.headers['Link'].to_s).links.find do |link|
|
||||||
link.attr_pairs.any? { |pair| pair == ['type', type] }
|
link.attr_pairs.any? { |pair| pair == ['type', type] }
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
Loading…
Reference in New Issue