module RailsSettings::Base

Public Class Methods

included(base) click to toggle source
# File lib/rails-settings/base.rb, line 3
def self.included(base)
  base.class_eval do
    has_many :setting_objects,
             :as         => :target,
             :autosave   => true,
             :dependent  => :delete_all,
             :class_name => self.setting_object_class_name

    def settings(var)
      raise ArgumentError unless var.is_a?(Symbol)
      raise ArgumentError.new("Unknown key: #{var}") unless self.class.default_settings[var]

      if RailsSettings.can_protect_attributes?
        setting_objects.detect { |s| s.var == var.to_s } || setting_objects.build({ :var => var.to_s }, :without_protection => true)
      else
        setting_objects.detect { |s| s.var == var.to_s } || setting_objects.build(:var => var.to_s, :target => self)
      end
    end

    def settings=(value)
      if value.nil?
        setting_objects.each(&:mark_for_destruction)
      else
        raise ArgumentError
      end
    end

    def settings?(var=nil)
      if var.nil?
        setting_objects.any? { |setting_object| !setting_object.marked_for_destruction? && setting_object.value.present? }
      else
        settings(var).value.present?
      end
    end

    def to_settings_hash
      settings_hash = self.class.default_settings.dup
      settings_hash.each do |var, vals|
        settings_hash[var] = settings_hash[var].merge(settings(var.to_sym).value)
      end
      settings_hash
    end
  end
end

Public Instance Methods

settings(var) click to toggle source
# File lib/rails-settings/base.rb, line 11
def settings(var)
  raise ArgumentError unless var.is_a?(Symbol)
  raise ArgumentError.new("Unknown key: #{var}") unless self.class.default_settings[var]

  if RailsSettings.can_protect_attributes?
    setting_objects.detect { |s| s.var == var.to_s } || setting_objects.build({ :var => var.to_s }, :without_protection => true)
  else
    setting_objects.detect { |s| s.var == var.to_s } || setting_objects.build(:var => var.to_s, :target => self)
  end
end
settings=(value) click to toggle source
# File lib/rails-settings/base.rb, line 22
def settings=(value)
  if value.nil?
    setting_objects.each(&:mark_for_destruction)
  else
    raise ArgumentError
  end
end
settings?(var=nil) click to toggle source
# File lib/rails-settings/base.rb, line 30
def settings?(var=nil)
  if var.nil?
    setting_objects.any? { |setting_object| !setting_object.marked_for_destruction? && setting_object.value.present? }
  else
    settings(var).value.present?
  end
end
to_settings_hash() click to toggle source
# File lib/rails-settings/base.rb, line 38
def to_settings_hash
  settings_hash = self.class.default_settings.dup
  settings_hash.each do |var, vals|
    settings_hash[var] = settings_hash[var].merge(settings(var.to_sym).value)
  end
  settings_hash
end