Sha256: 38b3c87edc5b05608eeed5a4d19fb8e7a85e321fbd7efcabfa5abc0aad9a157e

Contents?: true

Size: 1.88 KB

Versions: 5

Compression:

Stored size: 1.88 KB

Contents

class Setting < ActiveRecord::Base
  belongs_to :settable, :polymorphic => true

  validates_presence_of :key, :kind
  validates :key, :uniqueness => {:scope => [:settable_id, :settable_type]}

  field :key
  index :key
  
  field :kind
  field :group
    
  field :integer_value, :integer, :translatable => true
  field :float_value, :float, :translatable => true
  field :text_value, :text, :translatable => true
  field :string_value, :string, :translatable => true
  field :datetime_value, :datetime, :translatable => true
  field :date_value, :date, :translatable => true
  has_attached :file_value
  
  
  def self.kinds
          [ :string,
            :integer,
            :float,
            :boolean,
            :text,
            :datetime,
            :date,
            :file
           ]
  end

  def value
    setting_kind = self.kind

    # this will break paperclip 'missing.png' feature, but at least
    # provides a way to check if an attachment is missing
    if setting_kind == "file"
      return nil if !file_value?
    end
    self.send("#{setting_kind}_value")
  end

  # eg. Setting.global("site-name")

  def self.global(key, opts = {})
    autocreate = opts.delete(:autocreate)
    kind = opts.delete(:kind) || :string
    default = opts.delete(:default)
    group = opts.delete(:group) || "global"
    options = opts.delete(:options)
    
    s = autocreate ? self.find_or_create_by_key_and_settable_id(key.to_s, nil, :kind => kind, :"#{kind}_value" => default, :group => group, :options => options) : self.find_by_key_and_settable_id(key.to_s, nil)
    if s
      s.value || default
    end
  end

  def self.update_global(key, value)
    s = self.find_by_key_and_settable_id(key.to_s, nil)

    if s
      s.update_attributes(:value => value)
    end
  end
  
  field :options, :text
  serialize :options, Hash
  
  # after_initialize do |record|
  #   record.options ||= {}
  # end
    
end

Version data entries

5 entries across 5 versions & 1 rubygems

Version Path
fullstack-cms-0.2.5 app/models/setting.rb
fullstack-cms-0.2.4 app/models/setting.rb
fullstack-cms-0.2.3 app/models/setting.rb
fullstack-cms-0.2.2 app/models/setting.rb
fullstack-cms-0.2.1 app/models/setting.rb