Sha256: 08a83e1ad2922b12daa173decb33d62a1c5409f0df1c096c6a6148dfe43f5d13

Contents?: true

Size: 1.98 KB

Versions: 23

Compression:

Stored size: 1.98 KB

Contents

class Settings < ActiveRecord::Base
  class SettingNotFound < RuntimeError; end
  
  cattr_accessor :defaults
  @@defaults = {}.with_indifferent_access
  
  # Support old plugin
  if defined?(SettingsDefaults::DEFAULTS)
    @@defaults = SettingsDefaults::DEFAULTS.with_indifferent_access
  end
  
  #get or set a variable with the variable as the called method
  def self.method_missing(method, *args)
    method_name = method.to_s
    super(method, *args)
    
  rescue NoMethodError
    #set a value for a variable
    if method_name =~ /=$/
      var_name = method_name.gsub('=', '')
      value = args.first
      self[var_name] = value
    
    #retrieve a value
    else
      self[method_name]
      
    end
  end
  
  #destroy the specified settings record
  def self.destroy(var_name)
    var_name = var_name.to_s
    if self[var_name]
      object(var_name).destroy
      true
    else
      raise SettingNotFound, "Setting variable \"#{var_name}\" not found"
    end
  end

  #retrieve all settings as a hash
  def self.all
    vars = find(:all, :select => 'var, value')
    
    result = {}
    vars.each do |record|
      result[record.var] = record.value
    end
    result.with_indifferent_access
  end
  
  #retrieve a setting value by [] notation
  def self.[](var_name)
    if var = object(var_name)
      var.value
    elsif @@defaults[var_name.to_s]
      @@defaults[var_name.to_s]
    else
      nil
    end
  end
  
  #set a setting value by [] notation
  def self.[]=(var_name, value)
    var_name = var_name.to_s
    
    record = object(var_name) || Settings.new(:var => var_name)
    record.value = value
    record.save
  end
  
  #retrieve the actual Setting record
  def self.object(var_name)
    Settings.find_by_var(var_name.to_s)
  end
  
  #get the value field, YAML decoded
  def value
    YAML::load(self[:value])
  end
  
  #set the value field, YAML encoded
  def value=(new_value)
    self[:value] = new_value.to_yaml
  end
  
  #Deprecated!
  def self.reload # :nodoc:
    self
  end
end

Version data entries

23 entries across 23 versions & 1 rubygems

Version Path
beef-admin_area-0.1.0 app/models/settings.rb
beef-admin_area-0.1.1 app/models/settings.rb
beef-admin_area-0.1.2 app/models/settings.rb
beef-admin_area-0.1.3 app/models/settings.rb
beef-admin_area-0.1.4 app/models/settings.rb
beef-admin_area-0.1.6 app/models/settings.rb
beef-admin_area-0.1.7 app/models/settings.rb
beef-admin_area-0.3.9 app/models/settings.rb
beef-admin_area-0.3.8 app/models/settings.rb
beef-admin_area-0.3.7 app/models/settings.rb
beef-admin_area-0.3.6 app/models/settings.rb
beef-admin_area-0.3.4 app/models/settings.rb
beef-admin_area-0.3.3 app/models/settings.rb
beef-admin_area-0.3.2 app/models/settings.rb
beef-admin_area-0.3.0 app/models/settings.rb
beef-admin_area-0.2.6 app/models/settings.rb
beef-admin_area-0.2.5 app/models/settings.rb
beef-admin_area-0.2.4 app/models/settings.rb
beef-admin_area-0.2.3 app/models/settings.rb
beef-admin_area-0.2.2 app/models/settings.rb