This website works better with JavaScript.
Home
Explore
Help
Sign In
closed-social
/
mastodon
Watch
3
Star
0
Fork
2
Code
Issues
5
Pull Requests
0
Projects
0
Releases
3
Wiki
Activity
Browse Source
Further abstract caching for includes
closed-social-glitch-2
Eugen Rochko
7 years ago
parent
356d3874eb
commit
a21bcac9e1
4 changed files
with
22 additions
and
2 deletions
Split View
Diff Options
Show Stats
Download Patch File
Download Diff File
+2
-0
app/controllers/application_controller.rb
+15
-0
app/models/concerns/cacheable.rb
+2
-1
app/models/notification.rb
+3
-1
app/models/status.rb
+ 2
- 0
app/controllers/application_controller.rb
View File
@ -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
)
)
+ 15
- 0
app/models/concerns/cacheable.rb
View File
@ -0,0 +1,15 @@
# 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
- 1
app/models/notification.rb
View File
@ -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
- 1
app/models/status.rb
View File
@ -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?
Write
Preview
Loading…
Cancel
Save