No commit activity in last 3 years
No release in over 3 years
defer your after commit callbacks to sidekiq
2005
2006
2007
2008
2009
2010
2011
2012
2013
2014
2015
2016
2017
2018
2019
2020
2021
2022
2023
2024
 Dependencies

Development

~> 2.1
>= 0
~> 10.0
>= 0
> 5.0

Runtime

>= 5.2.0
 Project Readme

Build Status

DelayedAfterCommit

Exactly the same as after_commit, except it puts the job onto the Sidekiq queue.

Allows you to queue active record methods, after they have been created or updated.

Requires Sidekiq, and Rails >= 6.

Installation

Add this line to your application's Gemfile:

  gem 'delayed_after_commit'

And then execute:

$ bundle

Or install it yourself as:

$ gem install delayed_after_commit

Usage

class User < ActiveRecord::Base
  include DelayedAfterCommit
  delayed_after_update :hi_ive_been_updated
  delayed_after_create :hi_im_new_around_here

  def hi_ive_been_updated
    puts "Hi - I've been updated"
  end

  def hi_im_new_around_here
    puts "Hi - I've just been created"
  end
end

Notes

If you want to invoke the delayed_after_update callback only when an attribute has changed, you must check the attribute change with #previous_changes. Example:

delayed_after_update :geolocate, if: :location_changed?

won't invoke geolocate even if #location has changed.

Instead you must do something like

delayed_after_update :geolocate, if: :location_was_changed?

def location_was_changed?
  "location".in? previous_changes
end

This is necessary because the callback is run after the transaction is committed to the database.

Roadmap

  • Allow asyncronous callbacks on destroying objects

Contributing

Bug reports and pull requests are welcome on GitHub at https://github.com/intellum/delayed_after_commit.