Class: Settings

Inherits:
ActiveRecord::Base
  • Object
show all
Includes:
PersistentSettings
Defined in:
lib/settings.rb

Constant Summary

Constants included from PersistentSettings

PersistentSettings::VERSION

Class Method Summary collapse

Class Method Details

.assignation?(method_name) ⇒ Boolean

Returns:

  • (Boolean)


38
39
40
# File 'lib/settings.rb', line 38

def self.assignation?(method_name)
  method_name.to_s.match(/=$/)
end

.cache_key_for(key) ⇒ Object



65
66
67
# File 'lib/settings.rb', line 65

def self.cache_key_for(key)
  "settings/#{key}"
end

.define_setter_and_getter(method_name) ⇒ Object



16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
# File 'lib/settings.rb', line 16

def self.define_setter_and_getter(method_name)
  getter = method_name.to_s.chop

  (class << self; self; end).instance_eval do
    define_method method_name do |value|
      @mutex.synchronize do
        persist(getter, value)
        write_to_cache getter, value
      end
    end

    define_method getter do
      value = read_from_cache getter
      unless value
        value = read_from_persistance getter
        write_to_cache getter, value
      end
      value
    end
  end
end

.keysObject



81
82
83
# File 'lib/settings.rb', line 81

def self.keys
  Settings.select(:var).collect { |s| s.var.to_sym }
end

.load_from_persistanceObject



61
62
63
# File 'lib/settings.rb', line 61

def self.load_from_persistance
  load_from_persistance! if ready?
end

.load_from_persistance!Object



51
52
53
54
55
# File 'lib/settings.rb', line 51

def self.load_from_persistance!
  self.all.each do |setting|
    self.send("#{setting.var}=", setting.value)
  end
end

.method_missing(method_name, *args) ⇒ Object



7
8
9
10
11
12
13
14
# File 'lib/settings.rb', line 7

def self.method_missing(method_name, *args)
  if assignation?(method_name)
    self.define_setter_and_getter(method_name)
    self.send(method_name, args.first)
  else
    super
  end
end

.persist(getter, value) ⇒ Object



42
43
44
45
46
47
48
49
# File 'lib/settings.rb', line 42

def self.persist(getter, value)
  setting = Settings.where(:var => getter).last
  if setting
    setting.update_attribute(:value, value)
  else
    Settings.create(:var => getter, :value => value)
  end
end

.read_from_cache(key) ⇒ Object



73
74
75
# File 'lib/settings.rb', line 73

def self.read_from_cache(key)
  ::Rails.cache.fetch(cache_key_for(key))
end

.read_from_persistance(key) ⇒ Object



57
58
59
# File 'lib/settings.rb', line 57

def self.read_from_persistance(key)
  Settings.find_by_var(key).value
end

.ready?Boolean

Returns:

  • (Boolean)


77
78
79
# File 'lib/settings.rb', line 77

def self.ready?
  connected? && table_exists?
end

.write_to_cache(key, value) ⇒ Object



69
70
71
# File 'lib/settings.rb', line 69

def self.write_to_cache(key, value)
  ::Rails.cache.write(cache_key_for(key), value)
end