Skip to content
Snippets Groups Projects
Commit a21bcac9 authored by Eugen Rochko's avatar Eugen Rochko
Browse files

Further abstract caching for includes

parent 356d3874
No related branches found
No related tags found
No related merge requests found
......@@ -59,6 +59,8 @@ class ApplicationController < ActionController::Base
end
def cache_collection(raw, klass)
return raw unless klass.respond_to?(:with_includes)
uncached_ids = []
cached_keys_with_value = Rails.cache.read_multi(*raw.map(&:cache_key))
......
# frozen_string_literal: true
module Cacheable
extend ActiveSupport::Concern
class_methods do
def cache_associated(*associations)
@cache_associated = associations
end
end
included do
scope :with_includes, -> { includes(@cache_associated) }
end
end
......@@ -2,6 +2,7 @@
class Notification < ApplicationRecord
include Paginable
include Cacheable
belongs_to :account
belongs_to :activity, polymorphic: true
......@@ -15,7 +16,7 @@ class Notification < ApplicationRecord
STATUS_INCLUDES = [:account, :stream_entry, :media_attachments, :tags, mentions: :account, reblog: [:stream_entry, :account, :media_attachments, :tags, mentions: :account]].freeze
scope :with_includes, -> { includes(status: STATUS_INCLUDES, mention: [status: STATUS_INCLUDES], favourite: [:account, status: STATUS_INCLUDES], follow: :account) }
cache_associated status: STATUS_INCLUDES, mention: [status: STATUS_INCLUDES], favourite: [:account, status: STATUS_INCLUDES], follow: :account
def activity
send(activity_type.downcase)
......
......@@ -3,6 +3,7 @@
class Status < ApplicationRecord
include Paginable
include Streamable
include Cacheable
belongs_to :account, inverse_of: :statuses
......@@ -27,7 +28,8 @@ class Status < ApplicationRecord
default_scope { order('id desc') }
scope :with_counters, -> { select('statuses.*, (select count(r.id) from statuses as r where r.reblog_of_id = statuses.id) as reblogs_count, (select count(f.id) from favourites as f where f.status_id = statuses.id) as favourites_count') }
scope :with_includes, -> { includes(:account, :media_attachments, :tags, :stream_entry, mentions: :account, reblog: [:account, :stream_entry, :tags, :media_attachments, mentions: :account], thread: :account) }
cache_associated :account, :media_attachments, :tags, :stream_entry, mentions: :account, reblog: [:account, :stream_entry, :tags, :media_attachments, mentions: :account], thread: :account
def local?
uri.nil?
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment