Class: Configurable
- Inherits:
-
ActiveRecord::Base
- Object
- ActiveRecord::Base
- Configurable
- Defined in:
- app/models/configurable.rb
Class Method Summary collapse
- .[](key) ⇒ Object
- .[]=(key, value) ⇒ Object
- .defaults ⇒ Object
- .keys ⇒ Object
- .method_missing(name, *args) ⇒ Object
- .parse_value(key, value) ⇒ Object
- .serialized_value(key) ⇒ Object
- .value_for_serialization(key, value) ⇒ Object
Instance Method Summary collapse
Class Method Details
.[](key) ⇒ Object
32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 |
# File 'app/models/configurable.rb', line 32 def self.[](key) return parse_value key, defaults[key][:default] unless table_exists? config = if ConfigurableEngine::Engine.config.use_cache Rails.cache.fetch("configurable_engine:#{key}") { find_by_name(key) } else find_by_name(key) end return parse_value key, defaults[key][:default] unless config config.value end |
.[]=(key, value) ⇒ Object
23 24 25 26 27 28 29 30 |
# File 'app/models/configurable.rb', line 23 def self.[]=(key, value) exisiting = find_by_name(key) if exisiting exisiting.update_attribute(:value, value) else create {|c| c.name = key.to_s; c.value = value} end end |
.defaults ⇒ Object
11 12 13 14 15 16 17 |
# File 'app/models/configurable.rb', line 11 def self.defaults @defaults ||= HashWithIndifferentAccess.new( YAML.load_file( Rails.root.join('config', 'configurable.yml') ) ) end |
.keys ⇒ Object
19 20 21 |
# File 'app/models/configurable.rb', line 19 def self.keys self.defaults.collect { |k,v| k.to_s }.sort end |
.method_missing(name, *args) ⇒ Object
88 89 90 91 92 93 94 95 96 97 98 99 |
# File 'app/models/configurable.rb', line 88 def self.method_missing(name, *args) name_stripped = name.to_s.sub(/[\?=]$/, '') if self.keys.include?(name_stripped) if name.to_s.end_with?('=') self[name_stripped] = args.first else self[name_stripped] end else super end end |
.parse_value(key, value) ⇒ Object
52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 |
# File 'app/models/configurable.rb', line 52 def self.parse_value key, value case defaults[key][:type] when 'boolean' [true, 1, "1", "t", "true"].include?(value) when 'decimal' value ||= 0 BigDecimal.new(value.to_s) when 'integer' value.to_i when 'list' value ||= [] if value.is_a? Array value else value.split("\n").collect { |v| v =~ /,/ ? v.split(',') : v } end else value end end |
.serialized_value(key) ⇒ Object
73 74 75 |
# File 'app/models/configurable.rb', line 73 def self.serialized_value key value_for_serialization key, self[key] end |
.value_for_serialization(key, value) ⇒ Object
77 78 79 80 81 82 83 84 85 86 |
# File 'app/models/configurable.rb', line 77 def self.value_for_serialization(key, value) if defaults[key][:type] == 'list' && value.is_a?(Array) if value.all? {|entry| entry.is_a? Array} value = value.collect {|entry| entry.join ','} end value.join("\n") else value.to_s end.gsub("\r\n","\n") end |
Instance Method Details
#value ⇒ Object
48 49 50 |
# File 'app/models/configurable.rb', line 48 def value self.class.parse_value name, super end |