Sha256: 1b91036334465f2204049647dba87ad26bd86a56d36affed9248c8a0d10c1602

Contents?: true

Size: 1.73 KB

Versions: 120

Compression:

Stored size: 1.73 KB

Contents

module EgovUtils
  module HasAuditTrail

    def self.included(base)
      base.extend(ClassMethods)
    end

    module ClassMethods

      def has_audit_trail(options = {})
        return if self.included_modules.include?(EgovUtils::HasAuditTrail::AuditTrailMethods)

        default_options = {
          :non_audited_columns => %w(id updated_at created_at lft rgt lock_version),
          :important_columns => [],
          :format_detail_date_columns => [],
          :format_detail_time_columns => [],
          :format_detail_reflection_columns => [],
          :format_detail_boolean_columns => [],
          :format_detail_hours_columns => []
        }

        cattr_accessor :audit_trail_options
        self.audit_trail_options = default_options.dup

        options.each do |k,v|
          self.audit_trail_options[k] = Array(self.audit_trail_options[k]) | v
        end

        send :include, EgovUtils::HasAuditTrail::AuditTrailMethods
      end

    end

    module AuditTrailMethods

      def self.included(base)
        base.class_eval do

          has_many :audit_records, :as => :audited, :dependent => :destroy, :inverse_of => :audited

        end
      end

      def clear_current_journal
        @current_record = nil
      end

      def init_audit_record(user, notes = '')
        @current_record ||= AuditRecord.new(:audited => self, :user => user, :notes => notes)
      end

      # Returns the names of attributes that are journalized when updating the issue
      def journalized_attribute_names
        self.class.column_names - self.audit_trail_options[:non_audited_columns]
      end

      private

      def create_audit_record
        if @current_record
          @current_record.save
        end
      end

    end
  end
end

Version data entries

120 entries across 120 versions & 1 rubygems

Version Path
egov_utils-1.5.0.alpha16 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha15 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha14 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha13 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha12 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha11 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha10 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha9 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha8 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha7 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha6 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha5 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha4 lib/egov_utils/has_audit_trail.rb
egov_utils-1.4.5 lib/egov_utils/has_audit_trail.rb
egov_utils-1.4.4 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha3 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha2 lib/egov_utils/has_audit_trail.rb
egov_utils-1.5.0.alpha1 lib/egov_utils/has_audit_trail.rb
egov_utils-1.4.3 lib/egov_utils/has_audit_trail.rb
egov_utils-1.4.2 lib/egov_utils/has_audit_trail.rb