No release in over 3 years
Low commit activity in last 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
2025
 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.