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