Class: Setting
Constant Summary
collapse
- CACHE_KEY =
'forest_settings'
- APPLICATION_CACHE_KEY =
'forest_application_cache_key'
- DEFAULT_SETTINGS =
%i(site_title description featured_image)
- VALID_VALUE_TYPES =
%w(text boolean image integer string)
Class Method Summary
collapse
Instance Method Summary
collapse
cache_key, cache_key_name, csv_columns, #expire_cache_key, expire_cache_key, statusable?, #statusable?, to_csv_template, #to_friendly_param, #to_label, #to_select2_response, #to_select2_selection, versionable, #versionable
Class Method Details
.application_cache_key ⇒ Object
28
29
30
31
32
|
# File 'app/models/setting.rb', line 28
def self.application_cache_key
Rails.cache.fetch APPLICATION_CACHE_KEY do
SecureRandom.uuid
end
end
|
.expire_application_cache_key! ⇒ Object
24
25
26
|
# File 'app/models/setting.rb', line 24
def self.expire_application_cache_key!
Rails.cache.delete APPLICATION_CACHE_KEY
end
|
.expire_cache! ⇒ Object
20
21
22
|
# File 'app/models/setting.rb', line 20
def self.expire_cache!
Rails.cache.delete CACHE_KEY
end
|
.for(key) ⇒ Object
12
13
14
|
# File 'app/models/setting.rb', line 12
def self.for(key)
self.get(key).try(:value)
end
|
.get(key) ⇒ Object
16
17
18
|
# File 'app/models/setting.rb', line 16
def self.get(key)
self.settings.select { |setting| setting.slug == key.to_s }.first
end
|
.initialize_from_i18n ⇒ Object
Define setting values, value types, and descriptions in your i18n file using the following pattern: en:
forest:
settings:
banner_text:
forest_setting_value: true
forest_setting_value_type: boolean
forest_setting_description: 'Enable a site-wide banner'
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
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
|
# File 'app/models/setting.rb', line 42
def self.initialize_from_i18n
I18n.backend.send(:init_translations) unless I18n.backend.initialized?
settings_from_i18n = I18n.backend.send(:translations).dig(:en, :forest, :settings).presence || {}
Setting.all.reject { |setting|
Array(Setting::DEFAULT_SETTINGS).concat(settings_from_i18n.keys).include?(setting.slug.to_sym)
}.each { |setting|
if setting.has_not_been_updated?
logger.info { "[Forest][Setting] Destroying obsolete setting for #{setting.slug}" }
setting.destroy
end
}
settings_from_i18n.each do |setting|
k = setting[0].to_s
v = setting[1]
if v.is_a?(Hash) && v.keys.include?(:forest_setting_value)
v = v[:forest_setting_value]
value_type_from_i18n = setting[1][:forest_setting_value_type] unless setting[1].try(:[], :forest_setting_value_type).nil?
description_from_i18n = setting[1][:forest_setting_description] unless setting[1].try(:[], :forest_setting_description).nil?
if VALID_VALUE_TYPES.none?(value_type_from_i18n)
logger.warn { "[Forest][Setting] Warning: invalid value type '#{value_type_from_i18n}' for #{setting}. Setting value type to text." }
value_type_from_i18n = 'text'
end
end
if value_type_from_i18n == 'boolean'
if [true, 'true'].any?(v)
v = 1
else
v = 0
end
end
if [k, v].all?(&:present?)
s = Setting.get(k)
if s.blank?
s = Setting.new(title: k.titleize, slug: k)
end
s.value = v
s.value_type = value_type_from_i18n unless value_type_from_i18n.nil?
s.description = description_from_i18n unless description_from_i18n.nil?
if s.new_record?
logger.info { "[Forest][Setting] Creating new setting for #{k}" }
s.save
elsif s.has_not_been_updated?
if s.changed?
logger.info { "[Forest][Setting] Updating value for setting key #{k}" }
s.update_columns(title: k.titleize, slug: k, value: v)
s.update_column(:value_type, value_type_from_i18n) unless value_type_from_i18n.nil?
s.update_column(:description, description_from_i18n) unless description_from_i18n.nil?
end
end
else
logger.warn { "[Forest][Setting] Warning: unable to create setting for #{setting}. Key or value is blank." }
end
end
expire_cache!
end
|
.resource_description ⇒ Object
110
111
112
|
# File 'app/models/setting.rb', line 110
def self.resource_description
"Settings are where you define static values that are used throughout the site. For example the title of your website, the description, and other values."
end
|
Instance Method Details
#has_not_been_updated? ⇒ Boolean
118
119
120
|
# File 'app/models/setting.rb', line 118
def has_not_been_updated?
updated_at == created_at
end
|
#slug_as_key? ⇒ Boolean
114
115
116
|
# File 'app/models/setting.rb', line 114
def slug_as_key?
true
end
|