class ActiveSetting::Setting

Attributes

category[RW]
data_type[R]
default[RW]
description[RW]
name[RW]
object_options[W]
options[R]
raw_value[RW]
subtype[R]

Public Class Methods

convert_value(val, data_type) click to toggle source
# File lib/active_setting/setting.rb, line 92
def self.convert_value(val, data_type)
  case data_type
  when :boolean then ![nil, false, 'false', 0, '0'].include?(val)
  when :integer then val.to_i
  when :string then val.to_s
  when :symbol then val.to_sym
  when :decimal then BigDecimal(val)
  else val
  end
end
define_shortcut_method(setting) click to toggle source
# File lib/active_setting/setting.rb, line 29
    def self.define_shortcut_method(setting)
      class_eval <<-TEXT
        def self.#{setting.name}
          self.class.registered_settings[:#{setting.name}].value
        end
        def self.#{setting.name}=(value)
          self.class.registered_settings[:#{setting.name}].raw_value = value
        end
      TEXT
    end
new(attr = {}) click to toggle source
# File lib/active_setting/setting.rb, line 12
def initialize(attr = {})
  attr.each do |key, value|
    setter = "#{key}="
    send(setter, value) if respond_to?(setter)
  end
end
register(name, options) click to toggle source
# File lib/active_setting/setting.rb, line 19
def self.register(name, options)
  new(options.merge(name: name)).register
end
registered_settings() click to toggle source
# File lib/active_setting/setting.rb, line 8
def self.registered_settings
  @registered_settings ||= {}
end

Public Instance Methods

calculate_object_options() click to toggle source

DEPRECATED: Please use standard options instead.

# File lib/active_setting/setting.rb, line 63
def calculate_object_options
  puts '[WARNING] ActiveSetting::Setting#object_options is deprecated'\
    ' as it poses a serious security risk and will be removed in future versions'

  objects, key, value = @object_options.split(' ')
  value = key if value.nil? || value == ''
  # TODO: Remove this method, as it uses eval !!!
  objects_from_collection(eval(objects), key, value)
end
data_type=(data_type) click to toggle source
# File lib/active_setting/setting.rb, line 44
def data_type=(data_type)
  @data_type = data_type.to_sym if data_type
end
objects_from_collection(collection, key, value) click to toggle source
# File lib/active_setting/setting.rb, line 73
def objects_from_collection(collection, key, value)
  collection.map { |o| [o.send(key), o.send(value)] }
end
options=(options) click to toggle source
# File lib/active_setting/setting.rb, line 56
def options=(options)
  @options = options.split(' ')
end
raw_value=(new) click to toggle source
# File lib/active_setting/setting.rb, line 77
def raw_value=(new)
  @value = nil
  @raw_value = new
end
register() click to toggle source
# File lib/active_setting/setting.rb, line 23
def register
  self.class.registered_settings[name.to_sym] = self
  Setting.define_shortcut_method(self)
  self
end
setting() click to toggle source
# File lib/active_setting/setting.rb, line 40
def setting
  self.class.registered_settings[@name.to_sym]
end
subtype=(subtype) click to toggle source
# File lib/active_setting/setting.rb, line 48
def subtype=(subtype)
  @subtype = subtype.to_sym if subtype
end
value() click to toggle source
# File lib/active_setting/setting.rb, line 82
def value
  v = raw_value
  v = default if raw_value.nil?

  # TODO: WHY IS the first line here
  return nil if v.nil?

  @value ||= build_value(v)
end

Private Instance Methods

build_value(v) click to toggle source
# File lib/active_setting/setting.rb, line 105
def build_value(v)
  case data_type
  when :hash
    hash_value(v)
  when :csv
    csv_value(v)
  else
    Setting.convert_value(v, data_type)
  end
end
csv_value(v) click to toggle source
# File lib/active_setting/setting.rb, line 124
def csv_value(v)
  return v if v.is_a?(Array) # e.g. default = []
  v.to_s.split(',').map(&:strip).map { |e| Setting.convert_value(e, subtype) }
end
hash_value(v) click to toggle source
# File lib/active_setting/setting.rb, line 116
def hash_value(v)
  chunks = v.split(',')
  chunks.map.with_object({}) do |val, h|
    key, subval   = val.split(':').map(&:strip)
    h[key.to_sym] = subval
  end
end