class SettingsOnRails::Settings

Constants

REGEX_GETTER
REGEX_SETTER

Public Class Methods

new(keys, target_object, settings_column_name, method_name, parent = nil) click to toggle source
Calls superclass method SettingsOnRails::KeyTreeBuilder::new
# File lib/settings_on_rails/settings.rb, line 5
def initialize(keys, target_object, settings_column_name, method_name, parent = nil)
  super(keys, target_object, settings_column_name, parent)
  @target_object = target_object
  @column_name = settings_column_name
  @method_name = method_name

  self.class_eval do
    define_method(method_name, instance_method(:_settings))
  end
end

Public Instance Methods

_current_node() click to toggle source

Just a wrapper of current_node

# File lib/settings_on_rails/settings.rb, line 40
def _current_node
  current_node
end
inspect() click to toggle source
# File lib/settings_on_rails/settings.rb, line 44
def inspect
  "#<#{self.class.name}:#{self.object_id}, node: #{_current_node}>"
end
method_missing(method_name, *args, &block) click to toggle source
Calls superclass method
# File lib/settings_on_rails/settings.rb, line 23
def method_missing(method_name, *args, &block)
  if block_given?
    node = current_node || {}
    return node.send(method_name, *args, &block)
  end

  if method_name.to_s =~ REGEX_SETTER && args.size == 1
    _set_value($1, args.first)
  elsif method_name.to_s =~ REGEX_GETTER && args.size == 0
    value = _get_value($1)
    value.nil? ? _default_settings($1) : value
  else
    super
  end
end
respond_to?(method_name, include_priv=false) click to toggle source
Calls superclass method
# File lib/settings_on_rails/settings.rb, line 19
def respond_to?(method_name, include_priv=false)
  super || method_name.to_s =~ REGEX_SETTER
end

Private Instance Methods

_default_settings(name) click to toggle source
# File lib/settings_on_rails/settings.rb, line 81
def _default_settings(name)
  default_node = KeyTreeBuilder.new(keys, @target_object.class, Configuration::DEFAULTS_COLUMN, parent).current_node
  default_node[name] if default_node
end
_get_value(name) click to toggle source
# File lib/settings_on_rails/settings.rb, line 62
def _get_value(name)
  node = current_node

  node[name] if node
end
_set_value(name, v) click to toggle source
# File lib/settings_on_rails/settings.rb, line 68
def _set_value(name, v)
  return if _get_value(name) == v

  @target_object.send("#{@column_name}_will_change!")
  build_nodes

  if v.nil?
    current_node.delete(name)
  else
    current_node[name] = v
  end
end
_settings(*keys) click to toggle source
# File lib/settings_on_rails/settings.rb, line 50
def _settings(*keys)
  raise ArgumentError, 'wrong number of arguments (0 for 1..n)' if keys.size == 0
  settings = Settings.new(keys, @target_object, @column_name, @method_name, self)
  node = settings._current_node

  if node.nil? || node.is_a?(Hash)
    settings
  else
    node
  end
end