Class: Setting

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
Localized
Defined in:
app/models/setting.rb

Defined Under Namespace

Classes: SettingNotFound

Class Method Summary collapse

Instance Method Summary collapse

Class Method Details

.global(key, opts = {}) ⇒ Object

eg. Setting.global(“site-name”)

Raises:



52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
# File 'app/models/setting.rb', line 52

def self.global(key, opts = {})
  key = key.to_s
  autocreate  = opts.delete(:autocreate)
  kind        = opts.delete(:kind) || :string
  default     = opts.delete(:default)
  group       = (opts.delete(:group) || "global").to_s
  options     = opts.delete(:options)
  locale      = opts.delete(:locale).try(:to_s) 
  
  query = where(:key => key, :group => group, :settable_id => nil)
  
  if locale
    query = query.where(:locale => locale)
  end
      
  setting = query.first ||  (  autocreate && create(
                                  :key => key, 
                                  :locale => locale, 
                                  :kind => kind, 
                                  :"#{kind}_value" => default, 
                                  :group => group, 
                                  :options => options
                                ) 
                            )
  
  raise SettingNotFound.new("Setting `#{[group, key].join('/')}` not found for locale `#{locale || 'any'}`") if !setting
  setting.value || default
  
end

.kindsObject



27
28
29
30
31
32
33
34
35
36
37
# File 'app/models/setting.rb', line 27

def self.kinds
        [ :string,
          :integer,
          :float,
          :boolean,
          :text,
          :datetime,
          :date,
          :file
         ]
end

.update_global(key, value) ⇒ Object



82
83
84
85
86
87
88
# File 'app/models/setting.rb', line 82

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

Instance Method Details

#valueObject



39
40
41
42
43
44
45
46
47
48
# File 'app/models/setting.rb', line 39

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