class SettingsOnRails::HasSettings

Creates a object to save default settings

@param [Array] keys, the symbol keys in a array @param [Class] target_model, default values will be saved in an class attribute in target model @param [Symbol] column_name, the column name in target_model to save default values @param [HasSettings] parent, parent has_settings object

Constants

REGEX_ATTR

Public Class Methods

new(keys, target_model, column_name, parent = nil) click to toggle source
Calls superclass method
# File lib/settings_on_rails/has_settings.rb, line 11
def initialize(keys, target_model, column_name, parent = nil)
  super(keys, target_model, column_name, parent)

  @target_model = target_model
  @column_name = column_name
end

Public Instance Methods

attr(value, options = {}) click to toggle source

Declare an attribute with default value

@param [Symbol] value @param [Hash] options, options with a default Hash

# File lib/settings_on_rails/has_settings.rb, line 42
def attr(value, options = {})
  unless value.is_a?(Symbol) || value.is_a?(String)
    raise ArgumentError.new("has_settings: symbol expected, but got a #{value.class}")
  end
  raise ArgumentError.new("has_settings: Option :default expected, but got #{options.keys.join(', ')}") unless options.blank? || (options.keys == [:default])

  default_value = options[:default]
  raise 'Error' unless value.to_s =~ REGEX_ATTR

  _set_value(value.to_s, default_value)
end
has_settings(*keys) { |settings| ... } click to toggle source
# File lib/settings_on_rails/has_settings.rb, line 54
def has_settings(*keys)
  settings = HasSettings.new(keys, @target_model, @column_name, self)
  yield settings if block_given?
  settings
end
key(*keys) click to toggle source

Declare a key, with default values

@param [Symbol] keys @param [Hash] options, the last param must be an option with a defaults hash

# File lib/settings_on_rails/has_settings.rb, line 24
def key(*keys)
  options = keys.extract_options!
  raise ArgumentError.new("has_settings: Option :defaults expected, but got #{options.keys.join(', ')}") unless options.blank? || (options.keys == [:defaults])
  keys.each do |key_name|
    unless key_name.is_a?(Symbol) || key_name.is_a?(String)
      raise ArgumentError.new("has_settings: symbol or string expected, but got a #{key_name.class}")
    end
  end

  options[:defaults].each do |k, v|
    has_settings(*keys).attr(k, default: v)
  end
end

Private Instance Methods

_set_value(name, v) click to toggle source
# File lib/settings_on_rails/has_settings.rb, line 62
def _set_value(name, v)
  build_nodes

  if v.nil?
    current_node.delete(name)
  else
    current_node[name] = v
  end
end