Fix Performance/CollectionLiteralInLoop cop (#24819)

pull/18711/merge
Matt Jankowski 2023-05-03 23:33:55 -04:00 committed by GitHub
parent a1cca1c8b6
commit 2c6c398c60
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
13 changed files with 35 additions and 30 deletions

View File

@ -275,21 +275,6 @@ Naming/VariableNumber:
- 'spec/models/user_spec.rb' - 'spec/models/user_spec.rb'
- 'spec/services/activitypub/fetch_featured_collection_service_spec.rb' - 'spec/services/activitypub/fetch_featured_collection_service_spec.rb'
# Configuration parameters: MinSize.
Performance/CollectionLiteralInLoop:
Exclude:
- 'app/models/admin/appeal_filter.rb'
- 'app/models/admin/status_filter.rb'
- 'app/models/relationship_filter.rb'
- 'app/models/trends/preview_card_filter.rb'
- 'app/models/trends/status_filter.rb'
- 'app/presenters/status_relationships_presenter.rb'
- 'app/services/fetch_resource_service.rb'
- 'app/services/suspend_account_service.rb'
- 'app/services/unsuspend_account_service.rb'
- 'config/deploy.rb'
- 'lib/mastodon/media_cli.rb'
# This cop supports unsafe autocorrection (--autocorrect-all). # This cop supports unsafe autocorrection (--autocorrect-all).
Performance/MapCompact: Performance/MapCompact:
Exclude: Exclude:

View File

@ -5,6 +5,8 @@ class Admin::AppealFilter
status status
).freeze ).freeze
IGNORED_PARAMS = %w(page).freeze
attr_reader :params attr_reader :params
def initialize(params) def initialize(params)
@ -15,7 +17,7 @@ class Admin::AppealFilter
scope = Appeal.order(id: :desc) scope = Appeal.order(id: :desc)
params.each do |key, value| params.each do |key, value|
next if %w(page).include?(key.to_s) next if IGNORED_PARAMS.include?(key.to_s)
scope.merge!(scope_for(key, value.to_s.strip)) if value.present? scope.merge!(scope_for(key, value.to_s.strip)) if value.present?
end end

View File

@ -6,6 +6,8 @@ class Admin::StatusFilter
report_id report_id
).freeze ).freeze
IGNORED_PARAMS = %w(page report_id).freeze
attr_reader :params attr_reader :params
def initialize(account, params) def initialize(account, params)
@ -17,7 +19,7 @@ class Admin::StatusFilter
scope = @account.statuses.where(visibility: [:public, :unlisted]) scope = @account.statuses.where(visibility: [:public, :unlisted])
params.each do |key, value| params.each do |key, value|
next if %w(page report_id).include?(key.to_s) next if IGNORED_PARAMS.include?(key.to_s)
scope.merge!(scope_for(key, value.to_s.strip)) if value.present? scope.merge!(scope_for(key, value.to_s.strip)) if value.present?
end end

View File

@ -169,6 +169,8 @@ class MediaAttachment < ApplicationRecord
original: IMAGE_STYLES[:small].freeze, original: IMAGE_STYLES[:small].freeze,
}.freeze }.freeze
DEFAULT_STYLES = [:original].freeze
GLOBAL_CONVERT_OPTIONS = { GLOBAL_CONVERT_OPTIONS = {
all: '-quality 90 +profile "!icc,*" +set modify-date +set create-date', all: '-quality 90 +profile "!icc,*" +set modify-date +set create-date',
}.freeze }.freeze

View File

@ -10,6 +10,8 @@ class RelationshipFilter
location location
).freeze ).freeze
IGNORED_PARAMS = %w(relationship page).freeze
attr_reader :params, :account attr_reader :params, :account
def initialize(account, params) def initialize(account, params)
@ -23,7 +25,7 @@ class RelationshipFilter
scope = scope_for('relationship', params['relationship'].to_s.strip) scope = scope_for('relationship', params['relationship'].to_s.strip)
params.each do |key, value| params.each do |key, value|
next if %w(relationship page).include?(key) next if IGNORED_PARAMS.include?(key)
scope.merge!(scope_for(key.to_s, value.to_s.strip)) if value.present? scope.merge!(scope_for(key.to_s, value.to_s.strip)) if value.present?
end end

View File

@ -6,6 +6,8 @@ class Trends::PreviewCardFilter
locale locale
).freeze ).freeze
IGNORED_PARAMS = %w(page).freeze
attr_reader :params attr_reader :params
def initialize(params) def initialize(params)
@ -16,7 +18,7 @@ class Trends::PreviewCardFilter
scope = initial_scope scope = initial_scope
params.each do |key, value| params.each do |key, value|
next if %w(page).include?(key.to_s) next if IGNORED_PARAMS.include?(key.to_s)
scope.merge!(scope_for(key, value.to_s.strip)) if value.present? scope.merge!(scope_for(key, value.to_s.strip)) if value.present?
end end

View File

@ -6,6 +6,8 @@ class Trends::StatusFilter
locale locale
).freeze ).freeze
IGNORED_PARAMS = %w(page).freeze
attr_reader :params attr_reader :params
def initialize(params) def initialize(params)
@ -16,7 +18,7 @@ class Trends::StatusFilter
scope = initial_scope scope = initial_scope
params.each do |key, value| params.each do |key, value|
next if %w(page).include?(key.to_s) next if IGNORED_PARAMS.include?(key.to_s)
scope.merge!(scope_for(key, value.to_s.strip)) if value.present? scope.merge!(scope_for(key, value.to_s.strip)) if value.present?
end end

View File

@ -1,6 +1,8 @@
# frozen_string_literal: true # frozen_string_literal: true
class StatusRelationshipsPresenter class StatusRelationshipsPresenter
PINNABLE_VISIBILITIES = %w(public unlisted private).freeze
attr_reader :reblogs_map, :favourites_map, :mutes_map, :pins_map, attr_reader :reblogs_map, :favourites_map, :mutes_map, :pins_map,
:bookmarks_map, :filters_map :bookmarks_map, :filters_map
@ -16,7 +18,7 @@ class StatusRelationshipsPresenter
statuses = statuses.compact statuses = statuses.compact
status_ids = statuses.flat_map { |s| [s.id, s.reblog_of_id] }.uniq.compact status_ids = statuses.flat_map { |s| [s.id, s.reblog_of_id] }.uniq.compact
conversation_ids = statuses.filter_map(&:conversation_id).uniq conversation_ids = statuses.filter_map(&:conversation_id).uniq
pinnable_status_ids = statuses.map(&:proper).filter_map { |s| s.id if s.account_id == current_account_id && %w(public unlisted private).include?(s.visibility) } pinnable_status_ids = statuses.map(&:proper).filter_map { |s| s.id if s.account_id == current_account_id && PINNABLE_VISIBILITIES.include?(s.visibility) }
@filters_map = build_filters_map(statuses, current_account_id).merge(options[:filters_map] || {}) @filters_map = build_filters_map(statuses, current_account_id).merge(options[:filters_map] || {})
@reblogs_map = Status.reblogs_map(status_ids, current_account_id).merge(options[:reblogs_map] || {}) @reblogs_map = Status.reblogs_map(status_ids, current_account_id).merge(options[:reblogs_map] || {})

View File

@ -4,6 +4,7 @@ class FetchResourceService < BaseService
include JsonLdHelper include JsonLdHelper
ACCEPT_HEADER = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams", text/html;q=0.1' ACCEPT_HEADER = 'application/activity+json, application/ld+json; profile="https://www.w3.org/ns/activitystreams", text/html;q=0.1'
ACTIVITY_STREAM_LINK_TYPES = ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].freeze
attr_reader :response_code attr_reader :response_code
@ -65,7 +66,7 @@ class FetchResourceService < BaseService
def process_html(response) def process_html(response)
page = Nokogiri::HTML(response.body_with_limit) page = Nokogiri::HTML(response.body_with_limit)
json_link = page.xpath('//link[@rel="alternate"]').find { |link| ['application/activity+json', 'application/ld+json; profile="https://www.w3.org/ns/activitystreams"'].include?(link['type']) } json_link = page.xpath('//link[@rel="alternate"]').find { |link| ACTIVITY_STREAM_LINK_TYPES.include?(link['type']) }
process(json_link['href'], terminal: true) unless json_link.nil? process(json_link['href'], terminal: true) unless json_link.nil?
end end

View File

@ -68,7 +68,7 @@ class SuspendAccountService < BaseService
@account.media_attachments.find_each do |media_attachment| @account.media_attachments.find_each do |media_attachment|
attachment_names.each do |attachment_name| attachment_names.each do |attachment_name|
attachment = media_attachment.public_send(attachment_name) attachment = media_attachment.public_send(attachment_name)
styles = [:original] | attachment.styles.keys styles = MediaAttachment::DEFAULT_STYLES | attachment.styles.keys
next if attachment.blank? next if attachment.blank?

View File

@ -64,7 +64,7 @@ class UnsuspendAccountService < BaseService
@account.media_attachments.find_each do |media_attachment| @account.media_attachments.find_each do |media_attachment|
attachment_names.each do |attachment_name| attachment_names.each do |attachment_name|
attachment = media_attachment.public_send(attachment_name) attachment = media_attachment.public_send(attachment_name)
styles = [:original] | attachment.styles.keys styles = MediaAttachment::DEFAULT_STYLES | attachment.styles.keys
next if attachment.blank? next if attachment.blank?

View File

@ -13,9 +13,12 @@ set :migration_role, :app
append :linked_files, '.env.production', 'public/robots.txt' append :linked_files, '.env.production', 'public/robots.txt'
append :linked_dirs, 'vendor/bundle', 'node_modules', 'public/system' append :linked_dirs, 'vendor/bundle', 'node_modules', 'public/system'
SYSTEMD_SERVICES = %i[sidekiq streaming web].freeze
SERVICE_ACTIONS = %i[reload restart status].freeze
namespace :systemd do namespace :systemd do
%i[sidekiq streaming web].each do |service| SYSTEMD_SERVICES.each do |service|
%i[reload restart status].each do |action| SERVICE_ACTIONS.each do |action|
desc "Perform a #{action} on #{service} service" desc "Perform a #{action} on #{service} service"
task "#{service}:#{action}".to_sym do task "#{service}:#{action}".to_sym do
on roles(:app) do on roles(:app) do

View File

@ -9,6 +9,8 @@ module Mastodon
include ActionView::Helpers::NumberHelper include ActionView::Helpers::NumberHelper
include CLIHelper include CLIHelper
VALID_PATH_SEGMENTS_SIZE = [7, 10].freeze
def self.exit_on_failure? def self.exit_on_failure?
true true
end end
@ -133,7 +135,7 @@ module Mastodon
path_segments = object.key.split('/') path_segments = object.key.split('/')
path_segments.delete('cache') path_segments.delete('cache')
unless [7, 10].include?(path_segments.size) unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size)
progress.log(pastel.yellow("Unrecognized file found: #{object.key}")) progress.log(pastel.yellow("Unrecognized file found: #{object.key}"))
next next
end end
@ -177,7 +179,7 @@ module Mastodon
path_segments = key.split(File::SEPARATOR) path_segments = key.split(File::SEPARATOR)
path_segments.delete('cache') path_segments.delete('cache')
unless [7, 10].include?(path_segments.size) unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size)
progress.log(pastel.yellow("Unrecognized file found: #{key}")) progress.log(pastel.yellow("Unrecognized file found: #{key}"))
next next
end end
@ -310,7 +312,7 @@ module Mastodon
path_segments = path.split('/')[2..] path_segments = path.split('/')[2..]
path_segments.delete('cache') path_segments.delete('cache')
unless [7, 10].include?(path_segments.size) unless VALID_PATH_SEGMENTS_SIZE.include?(path_segments.size)
say('Not a media URL', :red) say('Not a media URL', :red)
exit(1) exit(1)
end end
@ -363,7 +365,7 @@ module Mastodon
segments = object.key.split('/') segments = object.key.split('/')
segments.delete('cache') segments.delete('cache')
next unless [7, 10].include?(segments.size) next unless VALID_PATH_SEGMENTS_SIZE.include?(segments.size)
model_name = segments.first.classify model_name = segments.first.classify
record_id = segments[2..-2].join.to_i record_id = segments[2..-2].join.to_i