Sha256: 2f1a116d7bfb3a7c23622c6bf847d7c13be7da56e814eb2a88d39e3c4b322cdf

Contents?: true

Size: 1.37 KB

Versions: 7

Compression:

Stored size: 1.37 KB

Contents

module Pupper
  module Auditable
    extend ActiveSupport::Concern

    class_methods do
      def audit(*methods)
        underlying_methods = ''

        methods.each do |meth|
          underlying_methods << <<-RB.strip_heredoc
            def #{meth}
              audit { super }
              changes_applied
            end
          RB
        end

        prepend Module.new { module_eval(underlying_methods, __FILE__, __LINE__) }
      end
    end

    included do
      extend ActiveModel::Callbacks

      define_model_callbacks :update, only: :after
      after_update :create_audit_log

      def audit(&block)
        run_callbacks :update, &block
        changes_applied
      end

      def audit_logs
        audit_model.where(auditable_type: model_name.name, auditable_id: primary_key)
      end

      def create_audit_log
        return unless changed?

        audit_model.create(
          auditable_type: model_name.name,
          auditable_id: primary_key,
          user: Pupper.config.current_user,
          what_changed: changes
        )
      end

      def update_attributes(attrs)
        run_callbacks(:update) do
          assign_attributes(attrs)
          backend.update
        end

        changes_applied
      end

      private

      def audit_model
        @audit_model ||= Pupper.config.audit_with.to_s.classify.constantize
      end
    end
  end
end

Version data entries

7 entries across 7 versions & 1 rubygems

Version Path
pupper-0.2.2 lib/pupper/auditable.rb
pupper-0.2.1 lib/pupper/auditable.rb
pupper-0.2.0 lib/pupper/auditable.rb
pupper-0.1.13 lib/pupper/auditable.rb
pupper-0.1.12 lib/pupper/auditable.rb
pupper-0.1.11 lib/pupper/auditable.rb
pupper-0.1.10 lib/pupper/auditable.rb