Sha256: d5cd65113fe1c66f049402520a0401f06525fe65677770a6abc90e0521ca6ec8

Contents?: true

Size: 1.23 KB

Versions: 6

Compression:

Stored size: 1.23 KB

Contents

require 'dm-serializer'
module Ixtlan
  module Models
    module Audit
      def self.included(model)
        model.send(:include, DataMapper::Resource)

        model.property :id, ::DataMapper::Types::Serial

        model.property :date, DateTime, :required => true

        model.property :login, String, :required => true, :format => /^[a-zA-Z0-9]+$/, :length => 32, :auto_validation => false #required => true does not allow empty string :-( so skip validation

        model.property :message, String, :required => true, :length => 255

        model.class_eval <<-EOS, __FILE__, __LINE__
      unless const_defined? "CONFIGURATION"
        CONFIGURATION = Object.full_const_get(Models::CONFIGURATION)
      end
      def self.pop_all
        result = Thread.current[:audit] || []
        Thread.current[:audit] = nil
        if(!@last_cleanup.nil? && @last_cleanup < 1.days.ago)
          @last_cleanup = Date.today
          begin
            self.class.all(:date.lt => CONFIGURATION.keep_audit_log.days.ago).destroy!
          rescue Error
            # TODO log this !!
          end
        end
        result
      end
EOS
      end

      def push
        list = (Thread.current[:audit] ||= [])
        list << self
      end
    end
  end
end
  

Version data entries

6 entries across 6 versions & 1 rubygems

Version Path
ixtlan-0.4.3 lib/ixtlan/models/audit.rb
ixtlan-0.4.2 lib/ixtlan/models/audit.rb
ixtlan-0.4.1 lib/ixtlan/models/audit.rb
ixtlan-0.4.0 lib/ixtlan/models/audit.rb
ixtlan-0.4.0.pre5 lib/ixtlan/models/audit.rb
ixtlan-0.4.0.pre4 lib/ixtlan/models/audit.rb