Use Rails' index_by where it makes sense (#15542)
* Use Rails' index_by where it makes sense * Fix tests Co-authored-by: Claire <claire.github-309c@sitedethib.com>
This commit is contained in:
		| @@ -7,7 +7,7 @@ class Api::V1::MarkersController < Api::BaseController | ||||
|   before_action :require_user! | ||||
|  | ||||
|   def index | ||||
|     @markers = current_user.markers.where(timeline: Array(params[:timeline])).each_with_object({}) { |marker, h| h[marker.timeline] = marker } | ||||
|     @markers = current_user.markers.where(timeline: Array(params[:timeline])).index_by(&:timeline) | ||||
|     render json: serialize_map(@markers) | ||||
|   end | ||||
|  | ||||
|   | ||||
| @@ -38,7 +38,7 @@ module CacheConcern | ||||
|     klass.reload_stale_associations!(cached_keys_with_value.values) if klass.respond_to?(:reload_stale_associations!) | ||||
|  | ||||
|     unless uncached_ids.empty? | ||||
|       uncached = klass.where(id: uncached_ids).with_includes.each_with_object({}) { |item, h| h[item.id] = item } | ||||
|       uncached = klass.where(id: uncached_ids).with_includes.index_by(&:id) | ||||
|  | ||||
|       uncached.each_value do |item| | ||||
|         Rails.cache.write(item, item) | ||||
|   | ||||
| @@ -25,7 +25,7 @@ class EntityCache | ||||
|     end | ||||
|  | ||||
|     unless uncached_ids.empty? | ||||
|       uncached = CustomEmoji.where(shortcode: shortcodes, domain: domain, disabled: false).each_with_object({}) { |item, h| h[item.shortcode] = item } | ||||
|       uncached = CustomEmoji.where(shortcode: shortcodes, domain: domain, disabled: false).index_by(&:shortcode) | ||||
|       uncached.each_value { |item| Rails.cache.write(to_key(:emoji, item.shortcode, domain), item, expires_in: MAX_EXPIRATION) } | ||||
|     end | ||||
|  | ||||
|   | ||||
| @@ -30,7 +30,7 @@ module Settings | ||||
|  | ||||
|     def all_as_records | ||||
|       vars = thing_scoped | ||||
|       records = vars.each_with_object({}) { |r, h| h[r.var] = r } | ||||
|       records = vars.index_by(&:var) | ||||
|  | ||||
|       Setting.default_settings.each do |key, default_value| | ||||
|         next if records.key?(key) || default_value.is_a?(Hash) | ||||
|   | ||||
| @@ -21,7 +21,7 @@ class Webfinger | ||||
|     private | ||||
|  | ||||
|     def links | ||||
|       @links ||= @json['links'].map { |link| [link['rel'], link] }.to_h | ||||
|       @links ||= @json['links'].index_by { |link| link['rel'] } | ||||
|     end | ||||
|   end | ||||
|  | ||||
|   | ||||
| @@ -273,7 +273,7 @@ class Account < ApplicationRecord | ||||
|   end | ||||
|  | ||||
|   def tags_as_strings=(tag_names) | ||||
|     hashtags_map = Tag.find_or_create_by_names(tag_names).each_with_object({}) { |tag, h| h[tag.name] = tag } | ||||
|     hashtags_map = Tag.find_or_create_by_names(tag_names).index_by(&:name) | ||||
|  | ||||
|     # Remove hashtags that are to be deleted | ||||
|     tags.each do |tag| | ||||
|   | ||||
| @@ -96,7 +96,7 @@ class Notification < ApplicationRecord | ||||
|  | ||||
|       return if account_ids.empty? | ||||
|  | ||||
|       accounts = Account.where(id: account_ids).includes(:account_stat).each_with_object({}) { |a, h| h[a.id] = a } | ||||
|       accounts = Account.where(id: account_ids).includes(:account_stat).index_by(&:id) | ||||
|  | ||||
|       cached_items.each do |item| | ||||
|         item.from_account = accounts[item.from_account_id] | ||||
|   | ||||
| @@ -40,7 +40,7 @@ class Setting < RailsSettings::Base | ||||
|  | ||||
|     def all_as_records | ||||
|       vars    = thing_scoped | ||||
|       records = vars.each_with_object({}) { |r, h| h[r.var] = r } | ||||
|       records = vars.index_by(&:var) | ||||
|  | ||||
|       default_settings.each do |key, default_value| | ||||
|         next if records.key?(key) || default_value.is_a?(Hash) | ||||
|   | ||||
| @@ -301,7 +301,7 @@ class Status < ApplicationRecord | ||||
|  | ||||
|       return if account_ids.empty? | ||||
|  | ||||
|       accounts = Account.where(id: account_ids).includes(:account_stat).each_with_object({}) { |a, h| h[a.id] = a } | ||||
|       accounts = Account.where(id: account_ids).includes(:account_stat).index_by(&:id) | ||||
|  | ||||
|       cached_items.each do |item| | ||||
|         item.account = accounts[item.account_id] | ||||
|   | ||||
| @@ -91,7 +91,7 @@ class TrendingTags | ||||
|  | ||||
|       tags = Tag.where(id: tag_ids) | ||||
|       tags = tags.trendable if filtered | ||||
|       tags = tags.each_with_object({}) { |tag, h| h[tag.id] = tag } | ||||
|       tags = tags.index_by(&:id) | ||||
|  | ||||
|       tag_ids.map { |tag_id| tags[tag_id] }.compact.take(limit) | ||||
|     end | ||||
|   | ||||
| @@ -326,7 +326,7 @@ module Mastodon | ||||
|       end | ||||
|  | ||||
|       preload_map.each_with_object({}) do |(model_name, record_ids), model_map| | ||||
|         model_map[model_name] = model_name.constantize.where(id: record_ids).each_with_object({}) { |record, record_map| record_map[record.id] = record } | ||||
|         model_map[model_name] = model_name.constantize.where(id: record_ids).index_by(&:id) | ||||
|       end | ||||
|     end | ||||
|   end | ||||
|   | ||||
| @@ -71,7 +71,7 @@ RSpec.describe Notification, type: :model do | ||||
|       before do | ||||
|         allow(accounts_with_ids).to receive(:[]).with(stale_account1.id).and_return(account1) | ||||
|         allow(accounts_with_ids).to receive(:[]).with(stale_account2.id).and_return(account2) | ||||
|         allow(Account).to receive_message_chain(:where, :includes, :each_with_object).and_return(accounts_with_ids) | ||||
|         allow(Account).to receive_message_chain(:where, :includes, :index_by).and_return(accounts_with_ids) | ||||
|       end | ||||
|  | ||||
|       let(:cached_items) do | ||||
|   | ||||
		Reference in New Issue
	
	Block a user