trabajo-afectivo/app/models/setting.rb

55 lines
1.2 KiB
Ruby
Raw Normal View History

class Setting < ApplicationModel
store :options
store :state
store :state_initial
2012-04-10 14:06:46 +00:00
before_create :set_initial
after_create :delete_cache
after_update :delete_cache
2012-04-10 14:06:46 +00:00
def self.load
2012-07-28 16:37:18 +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]
# 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
# 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
# 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.set(name, value)
setting = Setting.where( :name => name ).first
if !setting
raise "Can't find config setting '#{name}'"
end
setting.state = { :value => value }
setting.save
end
2012-04-10 14:06:46 +00:00
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
def delete_cache
2012-07-28 16:37:18 +00:00
Thread.current[:settings_config] = nil
end
2012-04-10 14:06:46 +00:00
def set_initial
self.state_initial = self.state
end
end