Class: SiteSetting
Overview
Represents a site setting. Site settings control the operation and display of most aspects of the site, such as reputation awards, additional content, and site constants such as name and logo.
Class Method Summary
collapse
Instance Method Summary
collapse
#attributes_print, fuzzy_search, match_search, #match_search, sanitize_for_search, sanitize_name, sanitize_sql_in, useful_err_msg, with_lax_group_rules
Class Method Details
.[](name) ⇒ Object
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
|
# File 'app/models/site_setting.rb', line 12
def self.[](name)
key = "SiteSettings/#{RequestContext.}/#{name}"
cached = Rails.cache.fetch key, include_community: false do
SiteSetting.applied_setting(name)&.typed
end
if cached.nil?
Rails.cache.delete key, include_community: false
value = SiteSetting.applied_setting(name)&.typed
Rails.cache.write key, value, include_community: false
value
else
cached
end
end
|
.all_communities(name) ⇒ Object
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
|
# File 'app/models/site_setting.rb', line 51
def self.all_communities(name)
communities = Community.all
keys = (communities.map { |c| [c.id, "SiteSetting/#{c.id}/#{name}"] } + [[nil, "SiteSetting//#{name}"]]).to_h
cached = Rails.cache.read_multi(*keys.values, include_community: false)
missing = keys.reject { |_k, v| cached.include?(v) }.map { |k, _v| k }
settings = if missing.empty?
{}
else
SiteSetting.where(name: name, community_id: missing).to_h { |s| [s., s] }
end
Rails.cache.write_multi(missing.to_h { |cid| [keys[cid], settings[cid]&.typed] }, include_community: false)
communities.to_h do |c|
[
c.id,
if cached.include?(keys[c.id])
cached[keys[c.id]]
elsif settings.include?(c.id)
settings[c.id]&.typed
elsif cached.include?(keys[nil])
cached[keys[nil]]
elsif settings.include?(nil)
settings[nil]&.typed
end
]
end
end
|
.applied_setting(name) ⇒ Object
47
48
49
|
# File 'app/models/site_setting.rb', line 47
def self.applied_setting(name)
SiteSetting.(RequestContext.).or(global).where(name: name).priority_order.first
end
|
.exist?(name) ⇒ Boolean
28
29
30
31
|
# File 'app/models/site_setting.rb', line 28
def self.exist?(name)
Rails.cache.exist?("SiteSettings/#{RequestContext.}/#{name}", include_community: false) ||
SiteSetting.where(name: name).count.positive?
end
|
.typed(setting) ⇒ Object
43
44
45
|
# File 'app/models/site_setting.rb', line 43
def self.typed(setting)
SettingConverter.new(setting.value).send("as_#{setting.value_type.downcase}")
end
|
Instance Method Details
#global? ⇒ Boolean
Checks whether the setting is a global site setting
35
36
37
|
# File 'app/models/site_setting.rb', line 35
def global?
.nil?
end
|
#typed ⇒ Object
39
40
41
|
# File 'app/models/site_setting.rb', line 39
def typed
SettingConverter.new(value).send("as_#{value_type.downcase}")
end
|