Class: DynportTools::Settings
- Inherits:
-
Object
- Object
- DynportTools::Settings
- Defined in:
- lib/dynport_tools/settings.rb
Constant Summary collapse
- SETTINGS_KEY =
"settings"
- SETTINGS_UPDATED_AT_KEY =
"#{SETTINGS_KEY}/updated_at"
Class Attribute Summary collapse
-
.defaults ⇒ Object
Returns the value of attribute defaults.
-
.redis ⇒ Object
Returns the value of attribute redis.
Class Method Summary collapse
- .all ⇒ Object
- .changed? ⇒ Boolean
- .convert_value_for_key(key, value) ⇒ Object
- .define_methods_for_key_and_default(key, default) ⇒ Object
- .expired? ⇒ Boolean
- .get(key) ⇒ Object
- .reload!(timestamp = nil) ⇒ Object
- .set(key_or_hash, default_or_nil = nil) ⇒ Object
- .set_value(key, value) ⇒ Object
Class Attribute Details
.defaults ⇒ Object
Returns the value of attribute defaults.
6 7 8 |
# File 'lib/dynport_tools/settings.rb', line 6 def defaults @defaults end |
.redis ⇒ Object
Returns the value of attribute redis.
6 7 8 |
# File 'lib/dynport_tools/settings.rb', line 6 def redis @redis end |
Class Method Details
.all ⇒ Object
73 74 75 76 77 78 |
# File 'lib/dynport_tools/settings.rb', line 73 def all if @all.nil? || expired? reload! end @all end |
.changed? ⇒ Boolean
89 90 91 |
# File 'lib/dynport_tools/settings.rb', line 89 def changed? @cached_at.nil? || redis.get(SETTINGS_UPDATED_AT_KEY).to_i != @cached_at.to_i end |
.convert_value_for_key(key, value) ⇒ Object
55 56 57 58 59 60 61 62 63 |
# File 'lib/dynport_tools/settings.rb', line 55 def convert_value_for_key(key, value) if defaults[key].is_a?(Numeric) value.to_i elsif [true, false].include?(defaults[key]) value == "true" else value.to_s end end |
.define_methods_for_key_and_default(key, default) ⇒ Object
21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 |
# File 'lib/dynport_tools/settings.rb', line 21 def define_methods_for_key_and_default(key, default) self.class.send(:define_method, key) do get(key) end self.class.send(:define_method, :"set_#{key}") do |value| set_value(key, value) end # bool methods if [true, false].include?(default) self.class.send(:define_method, "#{key}?") do get(key) end self.class.send(:define_method, :"disable_#{key}!") do set_value(key, false) end self.class.send(:define_method, :"enable_#{key}!") do set_value(key, true) end end end |
.expired? ⇒ Boolean
85 86 87 |
# File 'lib/dynport_tools/settings.rb', line 85 def expired? @cached_at && Time.now - @cached_at > 60 end |
.get(key) ⇒ Object
65 66 67 68 69 70 71 |
# File 'lib/dynport_tools/settings.rb', line 65 def get(key) if value = all[key.to_s] convert_value_for_key(key, value) else defaults[key] end end |
.reload!(timestamp = nil) ⇒ Object
80 81 82 83 |
# File 'lib/dynport_tools/settings.rb', line 80 def reload!( = nil) @all = redis.hgetall(SETTINGS_KEY) @cached_at = || Time.now end |
.set(key_or_hash, default_or_nil = nil) ⇒ Object
8 9 10 11 12 13 14 15 16 17 18 19 |
# File 'lib/dynport_tools/settings.rb', line 8 def set(key_or_hash, default_or_nil = nil) self.defaults ||= Hash.new if key_or_hash.is_a?(Hash) key_or_hash.each do |key, default| self.defaults[key.to_sym] = default define_methods_for_key_and_default(key.to_sym, default) end elsif !default_or_nil.nil? self.defaults[key_or_hash.to_sym] = default_or_nil define_methods_for_key_and_default(key_or_hash.to_sym, default_or_nil) end end |
.set_value(key, value) ⇒ Object
46 47 48 49 50 51 52 53 |
# File 'lib/dynport_tools/settings.rb', line 46 def set_value(key, value) time = Time.now redis.multi do redis.hset(SETTINGS_KEY, key, value) redis.set(SETTINGS_UPDATED_AT_KEY, time.to_i) end reload!(time) end |