lib/configure_me/persisting.rb in configure_me-0.3.2 vs lib/configure_me/persisting.rb in configure_me-0.4.0

- old
+ new

@@ -1,34 +1,47 @@ -require 'active_support/concern' - module ConfigureMe - module Persisting - extend ActiveSupport::Concern - - #included do - # @persisting = false - #end - - module ClassMethods - def persist_me(persistence_key = nil) - if ConfigureMe.persistence_klass.nil? - raise ::RuntimeError, "ConfigureMe: persistence_klass is not set. Make sure you have an initializer to assign it." - end + class Base + class << self + def persist_me @persisting = true end def persisting? @persisting ||= false + @persisting && !ConfigureMe.persistence_klass.nil? end + end + end - def persistence_key - self.config_name + module Persisting + + def read_persist(name) + if self.class.persisting? + setting = ConfigureMe.persistence_klass.find_by_key(self.storage_key(name)) + + unless setting.nil? + YAML.load(setting.value) + end + else + nil end end - def persistence_key(name) - key = "#{self.class.persistence_key}_#{name.to_s}" - key = @parent.persistence_key(key) unless @parent.nil? - key + def write_persist(name, value) + if self.class.persisting? + setting = ConfigureMe.persistence_klass.find_or_create_by_key(self.storage_key(name)) + setting.value = value.to_yaml + setting.save! + else + true + end + end + + def persist_guard(&block) + if ConfigureMe.persistence_klass.respond_to?(:transaction) + ConfigureMe.persistence_klass.transaction({}, &block) + else + block.call + end end end end