Sha256: 1f3b67a1aed22777cbf096e30e30dba27357324b2b923c51fdb5661942b8abaa

Contents?: true

Size: 1.52 KB

Versions: 4

Compression:

Stored size: 1.52 KB

Contents

# Call EffectiveLog.info or EffectiveLog.success  EffectiveLog.error

class EffectiveLogger
  def self.log(message, status = EffectiveLogging.statuses.first, options = {})
    if options[:user].present? && !options[:user].kind_of?(User)
      raise ArgumentError.new("Log.log :user => ... argument must be a User object")
    end

    if options[:parent].present? && !options[:parent].kind_of?(Effective::Log)
      raise ArgumentError.new("Log.log :parent => ... argument must be an Effective::Log object")
    end

    if options[:associated].present? && !options[:associated].kind_of?(ActiveRecord::Base)
      raise ArgumentError.new("Log.log :associated => ... argument must be an ActiveRecord::Base object")
    end

    Effective::Log.new().tap do |log|
      log.message = message
      log.status = status

      log.user_id = options.delete(:user_id)
      log.user = options.delete(:user)
      log.parent = options.delete(:parent)
      log.associated = options.delete(:associated)
      log.associated_to_s = options.delete(:associated_to_s)

      if log.associated.present?
        log.associated_to_s ||= (log.associated.to_s rescue nil)
      end

      log.details = options.delete_if { |k, v| v.blank? } if options.kind_of?(Hash)

      log.save
    end
  end

  # Dynamically add logging methods based on the defined statuses
  # EffectiveLogging.info 'my message'
  (EffectiveLogging.statuses || []).each do |status|
    self.singleton_class.send(:define_method, status) { |message, options={}| log(message, status, options) }
  end

end

Version data entries

4 entries across 4 versions & 1 rubygems

Version Path
effective_logging-1.10.3 app/models/effective_logger.rb
effective_logging-1.10.2 app/models/effective_logger.rb
effective_logging-1.10.1 app/models/effective_logger.rb
effective_logging-1.10.0 app/models/effective_logger.rb