class SettingsManager::Base
Attributes
base_obj[R]
Public Class Methods
[](key)
click to toggle source
# File lib/settings-manager/base.rb, line 23 def [](key) if key_allowed?(key) object = object(key) if object.present? object.value else default_setting_for(key) end else raise Errors::KeyInvalidError.new(key) end end
[]=(key, value)
click to toggle source
# File lib/settings-manager/base.rb, line 37 def []=(key, value) key = key.to_s unless key_allowed?(key) raise Errors::KeyInvalidError.new(key) end attributes = { :key => key } if @base_obj attributes[:base_obj_id] = @base_obj.id attributes[:base_obj_type] = @base_obj.class.base_class.to_s end record = object(key) || self.new(attributes) record.value = value record.save! value rescue ActiveRecord::RecordInvalid => e new_exception = Errors::InvalidError.new new_exception.errors << e.record.errors raise new_exception end
base_query()
click to toggle source
# File lib/settings-manager/base.rb, line 125 def base_query where(:base_obj_id => nil, :base_obj_type => nil) end
destroy!(key)
click to toggle source
# File lib/settings-manager/base.rb, line 63 def destroy!(key) record = object(key.to_s) if record.present? record.destroy! else raise Errors::SettingNotFoundError, "setting for `#{key.to_s}` not found" end end
get_all()
click to toggle source
# File lib/settings-manager/base.rb, line 73 def get_all result = default_settings base_query.each do |record| result[record.key] = record.value end result end
method_missing(method, *args)
click to toggle source
Calls superclass method
# File lib/settings-manager/base.rb, line 83 def method_missing(method, *args) method_name = method.to_s super(method, *args) rescue NoMethodError => e if method_name[-1] == "=" key = method_name.sub("=", "") value = args.first self[key] = value else self[method_name] end end
object(key)
click to toggle source
# File lib/settings-manager/base.rb, line 97 def object(key) return nil unless Rails.application.initialized? && table_exists? base_query.find_by(:key => key.to_s) end
set(settings = {})
click to toggle source
# File lib/settings-manager/base.rb, line 103 def set(settings = {}) ActiveRecord::Base.transaction do exception = nil settings.each do |key, value| begin self[key.to_s] = value rescue Errors::KeyInvalidError => e exception ||= Errors::InvalidError.new exception.errors << e.message rescue Errors::InvalidError => e exception ||= Errors::InvalidError.new e.errors.each { |error| exception.errors << error } end end raise exception if exception.present? end self.get_all end
Public Instance Methods
value()
click to toggle source
# File lib/settings-manager/base.rb, line 14 def value YAML.load(self[:value]) if self[:value].present? end
value=(new_value)
click to toggle source
# File lib/settings-manager/base.rb, line 18 def value=(new_value) self[:value] = new_value.to_yaml end