No commit activity in last 3 years
No release in over 3 years
Pass a user through to your active_jobs and associate it with any generated audits
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

Runtime

 Project Readme

Audited::ActiveJob

Build Status Coverage Status Code Climate Gem Version Dependency Status

Audited::ActiveJob ties together activejob and audited to allow passing an optional audit_user through to your ActiveJob classes. It also wraps the execution of your MyJob#perform method with Audited.audit_class.as_user, which automatically associates any audits generated in your jobs to the audit_user you pass through (usually the user who triggered the job, if there is one).

In cases where you do not pass an audit_user argument to MyJob.perform_now or MyJob.perform_later (i.e. jobs queued up by automated processes) everything will behave as usual, and any generated audits will not have a user associated with them.

Getting Started

Just add the gem to your Gemfile and run bundle install:

gem 'audited-activejob'

Usage

audit_user

First, the gem provides an audit_user method to any jobs that include the Audited::ActiveJob mixin, which you can use however you like within your jobs. You can populate this when queueing up your job by passing an audit_user: user keyword argument. Note: You do not need to modify your job's MyJob#perform method to accept this extra argument.

class MyJob < ActiveJob::Base
  include Audited::ActiveJob
  queue_as :default

  def perform
    Rails.logger.info "Executed MyJob for #{audit_user.try(:email) || 'unknown'}"
  end
end

# without a user
MyJob.perform_later
# writes "Executed MyJob for unknown" to the rails log

# with a user
MyJob.perform_later audit_user: User.find_by(email: 'mark@markrebec.com')
# writes "Executed MyJob for mark@markrebec.com" to the rails log

# if you're in a controller or some other context where you already have a current_user
# you'll probably just want to pass that through.
MyJob.perform_later audit_user: current_user

Audits

Any job that includes the Audited::ActiveJob mixin will also have it's MyJob#perform method wrapped with Audited.audit_class.as_user(audit_user) in an around_perform block. This ensures that any audits generated during your job execution will be associated with the provided user.

class MyModel < ActiveRecord::Base
  audited

  # ...
end

class MyJob < ActiveJob::Base
  include Audited::ActiveJob
  queue_as :default

  def perform(my_model)
    my_model.update(foo: 'bar')
  end
end

# creates all audits without an associated user
MyJob.perform_later MyModel.find(1)

# associates all created audits with the provided user
MyJob.perform_later MyModel.find(1), audit_user: User.find(1)

ActiveJob::Users

audited-activejob has a loose/optional dependency on activejob-users, and if you're using both gems the audit_user method will fallback to your existing job_user arguments you're already using, so you don't have to make any changes and everything will just work.

# associates all created audits with the provided user
MyJob.perform_later MyModel.find(1), job_user: current_user

Contributing

  1. Fork it
  2. Create your feature branch (git checkout -b my-new-feature)
  3. Commit your changes (git commit -am 'Add some feature')
  4. Push to the branch (git push origin my-new-feature)
  5. Create new Pull Request