summaryrefslogtreecommitdiffstats
path: root/app/models/setting.rb
diff options
context:
space:
mode:
Diffstat (limited to 'app/models/setting.rb')
-rw-r--r--app/models/setting.rb84
1 files changed, 52 insertions, 32 deletions
diff --git a/app/models/setting.rb b/app/models/setting.rb
index c207de22b..bc02d29ce 100644
--- a/app/models/setting.rb
+++ b/app/models/setting.rb
@@ -75,16 +75,12 @@ class Setting < ActiveRecord::Base
TIS-620)
cattr_accessor :available_settings
- @@available_settings = YAML::load(File.open("#{Rails.root}/config/settings.yml"))
- Redmine::Plugin.all.each do |plugin|
- next unless plugin.settings
- @@available_settings["plugin_#{plugin.id}"] = {'default' => plugin.settings[:default], 'serialized' => true}
- end
+ self.available_settings ||= {}
validates_uniqueness_of :name
- validates_inclusion_of :name, :in => @@available_settings.keys
+ validates_inclusion_of :name, :in => Proc.new {available_settings.keys}
validates_numericality_of :value, :only_integer => true, :if => Proc.new { |setting|
- (s = @@available_settings[setting.name]) && s['format'] == 'int'
+ (s = available_settings[setting.name]) && s['format'] == 'int'
}
attr_protected :id
@@ -95,13 +91,13 @@ class Setting < ActiveRecord::Base
def value
v = read_attribute(:value)
# Unserialize serialized settings
- v = YAML::load(v) if @@available_settings[name]['serialized'] && v.is_a?(String)
- v = v.to_sym if @@available_settings[name]['format'] == 'symbol' && !v.blank?
+ v = YAML::load(v) if available_settings[name]['serialized'] && v.is_a?(String)
+ v = v.to_sym if available_settings[name]['format'] == 'symbol' && !v.blank?
v
end
def value=(v)
- v = v.to_yaml if v && @@available_settings[name] && @@available_settings[name]['serialized']
+ v = v.to_yaml if v && available_settings[name] && available_settings[name]['serialized']
write_attribute(:value, v.to_s)
end
@@ -119,26 +115,6 @@ class Setting < ActiveRecord::Base
setting.value
end
- # Defines getter and setter for each setting
- # Then setting values can be read using: Setting.some_setting_name
- # or set using Setting.some_setting_name = "some value"
- @@available_settings.each do |name, params|
- src = <<-END_SRC
- def self.#{name}
- self[:#{name}]
- end
-
- def self.#{name}?
- self[:#{name}].to_i > 0
- end
-
- def self.#{name}=(value)
- self[:#{name}] = value
- end
-END_SRC
- class_eval src, __FILE__, __LINE__
- end
-
# Sets a setting value from params
def self.set_from_params(name, params)
params = params.dup
@@ -217,17 +193,61 @@ END_SRC
logger.info "Settings cache cleared." if logger
end
+ def self.define_plugin_setting(plugin)
+ if plugin.settings
+ name = "plugin_#{plugin.id}"
+ define_setting name, {'default' => plugin.settings[:default], 'serialized' => true}
+ end
+ end
+
+ # Defines getter and setter for each setting
+ # Then setting values can be read using: Setting.some_setting_name
+ # or set using Setting.some_setting_name = "some value"
+ def self.define_setting(name, options={})
+ available_settings[name.to_s] = options
+
+ src = <<-END_SRC
+ def self.#{name}
+ self[:#{name}]
+ end
+
+ def self.#{name}?
+ self[:#{name}].to_i > 0
+ end
+
+ def self.#{name}=(value)
+ self[:#{name}] = value
+ end
+END_SRC
+ class_eval src, __FILE__, __LINE__
+ end
+
+ def self.load_available_settings
+ YAML::load(File.open("#{Rails.root}/config/settings.yml")).each do |name, options|
+ define_setting name, options
+ end
+ end
+
+ def self.load_plugin_settings
+ Redmine::Plugin.all.each do |plugin|
+ define_plugin_setting(plugin)
+ end
+ end
+
+ load_available_settings
+ load_plugin_settings
+
private
# Returns the Setting instance for the setting named name
# (record found in database or new record with default value)
def self.find_or_default(name)
name = name.to_s
- raise "There's no setting named #{name}" unless @@available_settings.has_key?(name)
+ raise "There's no setting named #{name}" unless available_settings.has_key?(name)
setting = where(:name => name).first
unless setting
setting = new
setting.name = name
- setting.value = @@available_settings[name]['default']
+ setting.value = available_settings[name]['default']
end
setting
end