module HasLogs::HasLogs::ClassMethods

Public Instance Methods

define_attrs(attrs) click to toggle source
# File lib/has_logs/has_logs.rb, line 39
def define_attrs(attrs)
  attrs.each do |attr|
    attr_accessor attr
    define_method "#{attr}?" do
      public_send(:attr).present?
    end
  end
end
has_logs(options = {}) click to toggle source
# File lib/has_logs/has_logs.rb, line 12
def has_logs(options = {})
  return if self.included_modules.include?(HasLogs::InstanceMethods)
  include HasLogs::InstanceMethods

  cattr_accessor :have_type, :log_class_name, :log_foreign_key, :log_table_name, :logging_attrs

  self.have_type = options.delete(:have_type) || :default

  self.log_class_name  = options[:class_name]  || "#{self.name}Log"
  self.log_foreign_key = options[:foreign_key] || "#{self.name}Id".underscore

  self.logging_attrs = (log_class.column_names - [log_class.primary_key, "#{self.name}Id".underscore, 'created_at', 'updated_at'])

  class_eval do
    has_many :logs, options.merge(class_name: log_class_name, foreign_key: log_foreign_key)
    after_find   :set_attrs if %i(default).include? have_type
    before_create :create_log
    before_update :create_log

    define_attrs(logging_attrs) if %i(default).include? have_type
  end
end
has_logs_as(class_name = nil, options = {}) click to toggle source
# File lib/has_logs/has_logs.rb, line 8
def has_logs_as(class_name = nil, options = {})
  has_logs(options.merge(class_name: class_name))
end
log_class() click to toggle source
# File lib/has_logs/has_logs.rb, line 35
def log_class
  log_class_name.constantize
end