blob: add71fa120e485cd52c6ecb84061fccb79734ec4 (
plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
|
# frozen_string_literal: true
module Gitlab
module MarkdownCache
module Redis
module Extension
extend ActiveSupport::Concern
attr_reader :cached_markdown_version
class_methods do
def cache_markdown_field(markdown_field, context = {})
super
# define the `[field]_html` accessor
html_field = cached_markdown_fields.html_field(markdown_field)
define_method(html_field) do
load_cached_markdown unless markdown_data_loaded?
instance_variable_get("@#{html_field}")
end
end
end
prepended do
def self.preload_markdown_cache!(objects)
fields = Gitlab::MarkdownCache::Redis::Store.bulk_read(objects)
objects.each do |object|
fields[object.cache_key].value.each do |field_name, value|
object.write_markdown_field(field_name, value)
end
end
end
end
def write_markdown_field(field_name, value)
# The value read from redis is a string, so we're converting it back
# to an int.
value = value.to_i if field_name == :cached_markdown_version
instance_variable_set("@#{field_name}", value)
end
private
def save_markdown(updates)
markdown_store.save(updates)
end
def markdown_field_changed?(field_name)
false
end
def changed_attributes
{}
end
def cached_markdown
@cached_data ||= markdown_store.read
end
def load_cached_markdown
cached_markdown.each do |field_name, value|
write_markdown_field(field_name, value)
end
end
def markdown_data_loaded?
cached_markdown_version.present? || markdown_store.loaded?
end
def markdown_store
@store ||= Gitlab::MarkdownCache::Redis::Store.new(self)
end
end
end
end
end
|