Fix Performance/CollectionLiteralInLoop cop (#24819)
This commit is contained in:
		
							parent
							
								
									326df0d712
								
							
						
					
					
						commit
						e8537a3a01
					
				
					 13 changed files with 35 additions and 30 deletions
				
			
		| 
						 | 
					@ -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:
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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] || {})
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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?
 | 
				
			||||||
 | 
					
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
| 
						 | 
					@ -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
 | 
				
			||||||
| 
						 | 
					
 | 
				
			||||||
		Loading…
	
		Reference in a new issue