module SettingsOnRails::Configuration
Constants
- DEFAULTS_COLUMN
- NAME_COLUMN
Public Class Methods
check!(instance)
click to toggle source
Check for the validity of the settings column Returns the column name if valid
# File lib/settings_on_rails/configuration.rb, line 30 def self.check!(instance) settings_column_name = column_name(instance) raise NoSettingsColumnError unless settings_column_name raise ColumnNotExistError unless instance.has_attribute?(settings_column_name) raise InvalidColumnTypeError if column_type_not_text?(instance, settings_column_name) settings_column_name end
column_name(instance)
click to toggle source
Returns the name of settings column for that instance
# File lib/settings_on_rails/configuration.rb, line 24 def self.column_name(instance) instance.class.send(Configuration::NAME_COLUMN) end
init(klass, column)
click to toggle source
Initialize needed variables for given class @param [ActiveRecord] klass, the Model who has settings @param [Symbol] column, the column to store settings
# File lib/settings_on_rails/configuration.rb, line 9 def self.init(klass, column) unless column.is_a?(Symbol) || column.is_a?(String) raise ArgumentError.new("has_settings_on: symbol or string expected, but got a #{column.class}") end klass.class_eval do class_attribute Configuration::NAME_COLUMN, Configuration::DEFAULTS_COLUMN serialize column, HashWithIndifferentAccess Configuration::init_defaults_column(self) Configuration::init_name_column(self, column) end end
init_defaults_column(klass)
click to toggle source
init to Hash {} for data attribute in klass if nil
# File lib/settings_on_rails/configuration.rb, line 40 def self.init_defaults_column(klass) defaults = klass.send(Configuration::DEFAULTS_COLUMN) klass.send(Configuration::DEFAULTS_COLUMN.to_s + '=', ActiveSupport::HashWithIndifferentAccess.new) unless defaults end
init_name_column(klass, column_name)
click to toggle source
# File lib/settings_on_rails/configuration.rb, line 45 def self.init_name_column(klass, column_name) klass.send(Configuration::NAME_COLUMN.to_s + '=', column_name) end
Private Class Methods
column_type_not_text?(instance, settings_column)
click to toggle source
# File lib/settings_on_rails/configuration.rb, line 52 def self.column_type_not_text?(instance, settings_column) return true if instance.column_for_attribute(settings_column).try(:sql_type) != 'text' end