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