Class: Settings
Constant Summary
PersistentSettings::VERSION
Class Method Summary
collapse
Class Method Details
.assignation?(method_name) ⇒ 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
|
.keys ⇒ Object
81
82
83
|
# File 'lib/settings.rb', line 81
def self.keys
Settings.select(:var).collect { |s| s.var.to_sym }
end
|
.load_from_persistance ⇒ Object
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
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
|