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