lib/settings.rb in persistent_settings-1.1.1 vs lib/settings.rb in persistent_settings-1.2.0
- old
+ new
@@ -1,7 +1,8 @@
class Settings < ActiveRecord::Base
include ::PersistentSettings
+ @mutex = Mutex.new
serialize :value
def self.method_missing(method_name, *args)
if assignation?(method_name)
@@ -15,16 +16,23 @@
def self.define_setter_and_getter(method_name)
getter = method_name.to_s.chop
(class << self; self; end).instance_eval do
define_method method_name do |value|
- persist(getter, value)
- instance_variable_set(:"@#{getter}", value)
+ @mutex.synchronize do
+ persist(getter, value)
+ write_to_cache getter, value
+ end
end
define_method getter do
- instance_variable_get(:"@#{getter}")
+ value = read_from_cache getter
+ unless value
+ value = read_from_persistance getter
+ write_to_cache getter, value
+ end
+ value
end
end
end
def self.assignation?(method_name)
@@ -44,11 +52,27 @@
self.all.each do |setting|
self.send("#{setting.var}=", setting.value)
end
end
+ def self.read_from_persistance(key)
+ Settings.find_by_var(key).value
+ end
+
def self.load_from_persistance
load_from_persistance! if ready?
+ end
+
+ def self.cache_key_for(key)
+ "settings/#{key}"
+ end
+
+ def self.write_to_cache(key, value)
+ ::Rails.cache.write(cache_key_for(key), value)
+ end
+
+ def self.read_from_cache(key)
+ ::Rails.cache.fetch(cache_key_for(key))
end
def self.ready?
connected? && table_exists?
end