Class: EasySetting
- Defined in:
- app/models/easy_setting.rb
Overview
EasySetting
Mapping
- type
-
boolean, integer, float (default: none)
- default
-
(default: nil)
- disabled_from_params
-
(default: false)
- skip_blank_params
-
(default: false)
- from_params
-
Accept block or lambda with one argument for raw_value. Evaluated in EasySetting instance. (default: none)
- validate
-
Accept block or lambda. Evaluated in EasySetting instance. (default: none)
- after_save
-
Accept block or lambda. Evaluated in EasySetting instance. (default: none)
Mapping examples
EasySetting.map do
# Integer key
key :integer_key do
type 'integer'
default 42
validate { errors.add(:value, 'Bad range') if value < 0 || value > 500 }
after_save { Mailer.integer_key_changed }
end
# Custom definition
key :custom_key do
default 'Ondra'
from_params lambda {|v| v.to_s }
end
# Cannot be changed via params
key :not_from_params do
default 'Ondra'
disabled_from_params
end
end
# Boolean key definition
EasySetting.map.key(:boolean_key, type: 'boolean')
# Multiple defintions
EasySetting.map.keys(:key1, :key2, :key3, disabled_from_params: true)
Constant Summary collapse
- @@mapper =
EasySettings::Mapper.new
Class Method Summary collapse
-
.beginning_of_fiscal_year(date = nil) ⇒ Object
TODO: Move away.
- .boolean_keys ⇒ Object
- .copy_all_project_settings(source_project, target_project) ⇒ Object
- .copy_project_settings(setting_name, source_project_id, target_project_id) ⇒ Object
- .delete_key(key, project) ⇒ Object
-
.end_of_fiscal_year(date = nil) ⇒ Object
TODO: Move away.
-
.get_beginning_of_fiscal_for_year(year = nil) ⇒ Object
TODO: Move away.
- .map(&block) ⇒ Object
- .mapper_clear_caches ⇒ Object
- .mapper_defaults ⇒ Object
- .plugin_defaults ⇒ Object
- .value(key, project = nil, use_fallback = true) ⇒ Object
Instance Method Summary collapse
- #disabled_from_params? ⇒ Boolean
- #from_params(raw_value) ⇒ Object
- #mapper_after_save ⇒ Object
- #mapper_validate ⇒ Object
- #skip_blank_params? ⇒ Boolean
Class Method Details
.beginning_of_fiscal_year(date = nil) ⇒ Object
TODO: Move away
213 214 215 216 217 218 219 220 221 222 |
# File 'app/models/easy_setting.rb', line 213 def self.beginning_of_fiscal_year(date = nil) today = date || Date.today fy = get_beginning_of_fiscal_for_year(today.year) if fy <= today fy else fy - 1.year end end |
.boolean_keys ⇒ Object
117 118 119 |
# File 'app/models/easy_setting.rb', line 117 def self.boolean_keys [] end |
.copy_all_project_settings(source_project, target_project) ⇒ Object
121 122 123 124 125 126 127 128 129 130 131 132 |
# File 'app/models/easy_setting.rb', line 121 def self.copy_all_project_settings(source_project, target_project) source_project = source_project.id if source_project.is_a?(Project) target_project = target_project.id if target_project.is_a?(Project) = { scope: EasySetting.where(project_id: source_project) } Redmine::Hook.call_hook(:copy_all_project_settings_exceceptions, options: ) source_project_names = [:scope].pluck(:name) source_project_names.each do |name| copy_project_settings(name, source_project, target_project) end end |
.copy_project_settings(setting_name, source_project_id, target_project_id) ⇒ Object
134 135 136 137 138 139 140 141 142 143 144 145 146 |
# File 'app/models/easy_setting.rb', line 134 def self.copy_project_settings(setting_name, source_project_id, target_project_id) source = EasySetting.where(name: setting_name, project_id: source_project_id).first target = EasySetting.where(name: setting_name, project_id: target_project_id).first if source.nil? && !target.nil? target.destroy elsif !source.nil? && target.nil? EasySetting.create(name: setting_name, project_id: target_project_id, value: source.value) elsif !source.nil? && !target.nil? && target.value != source.value target.value = source.value target.save end end |
.delete_key(key, project) ⇒ Object
186 187 188 189 190 191 192 193 194 195 196 197 |
# File 'app/models/easy_setting.rb', line 186 def self.delete_key(key, project) if project.is_a?(Project) project_id = project.id elsif project.present? project_id = project.to_i else project_id = nil end return if project_id.nil? EasySetting.where(name: key, project_id: project_id).destroy_all end |
.end_of_fiscal_year(date = nil) ⇒ Object
TODO: Move away
225 226 227 |
# File 'app/models/easy_setting.rb', line 225 def self.end_of_fiscal_year(date = nil) beginning_of_fiscal_year(date) + 1.year - 1.day end |
.get_beginning_of_fiscal_for_year(year = nil) ⇒ Object
TODO: Move away
200 201 202 203 204 205 206 207 208 209 210 |
# File 'app/models/easy_setting.rb', line 200 def self.get_beginning_of_fiscal_for_year(year = nil) f_y = year || Date.today.year f_m = (EasySetting.value('fiscal_month') || 1).to_i f_d = 1 begin Date.civil(f_y, f_m, f_d) rescue Date.civil(f_y, 1, 1) end end |
.map(&block) ⇒ Object
80 81 82 83 84 85 86 |
# File 'app/models/easy_setting.rb', line 80 def self.map(&block) if block @@mapper.instance_eval(&block) else @@mapper end end |
.mapper_clear_caches ⇒ Object
92 93 94 |
# File 'app/models/easy_setting.rb', line 92 def self.mapper_clear_caches @mapper_defaults = nil end |
.mapper_defaults ⇒ Object
88 89 90 |
# File 'app/models/easy_setting.rb', line 88 def self.mapper_defaults @mapper_defaults ||= @@mapper.default_values end |
.plugin_defaults ⇒ Object
148 149 150 151 152 153 154 155 156 157 |
# File 'app/models/easy_setting.rb', line 148 def self.plugin_defaults @plugin_defaults ||= Redmine::Plugin.all.inject({}) do |res, p| if p.settings && p.settings[:easy_settings].is_a?(Hash) p.settings[:easy_settings].each do |key, value| res["#{p.id}_#{key}"] = value end end res end end |
.value(key, project = nil, use_fallback = true) ⇒ Object
159 160 161 162 163 164 165 166 167 168 169 170 171 172 173 174 175 176 177 178 179 180 181 182 183 184 |
# File 'app/models/easy_setting.rb', line 159 def self.value(key, project = nil, use_fallback = true) if project.is_a?(Project) project_id = project.id elsif project.present? project_id = project.to_i else project_id = nil end cache_key = "EasySetting/#{key}/#{project_id}" fallback_cache_key = "EasySetting/#{key}/" result = Rails.cache.fetch(cache_key) do EasySetting.where(name: key, project_id: project_id).limit(1).pluck(:value).first end if use_fallback && result.nil? result = Rails.cache.fetch(fallback_cache_key) do EasySetting.where(name: key, project_id: nil).limit(1).pluck(:value).first end end result = plugin_defaults[key.to_s] if result.nil? result = mapper_defaults[key.to_s] if result.nil? result end |
Instance Method Details
#disabled_from_params? ⇒ Boolean
109 110 111 |
# File 'app/models/easy_setting.rb', line 109 def disabled_from_params? @@mapper.disabled_from_params?(self) end |
#from_params(raw_value) ⇒ Object
104 105 106 107 |
# File 'app/models/easy_setting.rb', line 104 def from_params(raw_value) return if disabled_from_params? self.value = @@mapper.from_params(self, raw_value) end |
#mapper_after_save ⇒ Object
96 97 98 |
# File 'app/models/easy_setting.rb', line 96 def mapper_after_save @@mapper.after_save(self) end |
#mapper_validate ⇒ Object
100 101 102 |
# File 'app/models/easy_setting.rb', line 100 def mapper_validate @@mapper.validate(self) end |
#skip_blank_params? ⇒ Boolean
113 114 115 |
# File 'app/models/easy_setting.rb', line 113 def skip_blank_params? @@mapper.skip_blank_params?(self) end |