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