2012-09-20 12:08:02 +00:00
|
|
|
class Setting < ApplicationModel
|
2012-04-13 13:51:10 +00:00
|
|
|
store :options
|
|
|
|
store :state
|
|
|
|
store :state_initial
|
2012-04-10 14:06:46 +00:00
|
|
|
before_create :set_initial
|
2012-04-14 09:57:01 +00:00
|
|
|
after_create :delete_cache
|
|
|
|
after_update :delete_cache
|
|
|
|
after_destroy :delete_cache
|
2012-04-10 14:06:46 +00:00
|
|
|
|
|
|
|
def self.load
|
2012-07-28 16:37:18 +00:00
|
|
|
|
2012-04-13 13:51:10 +00:00
|
|
|
# check if config is already generated
|
2012-07-28 16:37:18 +00:00
|
|
|
return Thread.current[:settings_config] if Thread.current[:settings_config]
|
|
|
|
|
2012-04-13 13:51:10 +00:00
|
|
|
# read all config settings
|
2012-04-10 14:06:46 +00:00
|
|
|
config = {}
|
|
|
|
Setting.select('name, state').order(:id).each { |setting|
|
|
|
|
config[setting.name] = setting.state[:value]
|
|
|
|
}
|
2012-07-28 16:37:18 +00:00
|
|
|
|
2012-04-13 13:51:10 +00:00
|
|
|
# config lookups
|
|
|
|
config.each { |key, value|
|
|
|
|
next if value.class.to_s != 'String'
|
|
|
|
config[key].gsub!( /\#\{config\.(.+?)\}/ ) { |s|
|
|
|
|
s = config[$1].to_s
|
|
|
|
}
|
|
|
|
}
|
2012-07-28 16:37:18 +00:00
|
|
|
|
2012-04-13 13:51:10 +00:00
|
|
|
# store for class requests
|
2012-07-28 16:37:18 +00:00
|
|
|
Thread.current[:settings_config] = config
|
2012-04-10 14:06:46 +00:00
|
|
|
return config
|
|
|
|
end
|
|
|
|
|
|
|
|
def self.get(name)
|
|
|
|
self.load
|
2012-07-28 16:37:18 +00:00
|
|
|
return Thread.current[:settings_config][name]
|
2012-04-10 14:06:46 +00:00
|
|
|
end
|
2012-07-28 16:37:18 +00:00
|
|
|
|
2012-04-10 14:06:46 +00:00
|
|
|
private
|
2012-04-14 09:57:01 +00:00
|
|
|
def delete_cache
|
2012-07-28 16:37:18 +00:00
|
|
|
Thread.current[:settings_config] = nil
|
2012-04-14 09:57:01 +00:00
|
|
|
end
|
2012-04-10 14:06:46 +00:00
|
|
|
def set_initial
|
|
|
|
self.state_initial = self.state
|
|
|
|
end
|
|
|
|
end
|