From 6646e96a497689d5c23e7e084babcde9b2601894 Mon Sep 17 00:00:00 2001 From: "Marcos G. Zimmermann" Date: Fri, 2 Aug 2024 09:51:45 -0300 Subject: [PATCH] Smart update with :update index with lazy attributes (#11) * feat: after update smart detects to use :update when lazy are present The document itself may not include the lazy attributes, and by performing :index request all the updated done through the lazy update attribute actions will be lost. So updated the logic to attempt push document using :update api with a :index fallback in case doc does not exist yet. This behaviour can be overriten by passing with: :index * feat: remove group from count query * feat: add note about async indexing callbacks * bump version --- Gemfile.lock | 2 +- README.md | 29 +++++++++++++++++++++++++++++ ci/Gemfile.rails-5.2.lock | 2 +- ci/Gemfile.rails-6.0.lock | 2 +- ci/Gemfile.rails-6.1.lock | 2 +- ci/Gemfile.rails-7.0.lock | 2 +- ci/Gemfile.rails-7.1.lock | 2 +- lib/esse/active_record/version.rb | 2 +- 8 files changed, 36 insertions(+), 7 deletions(-) diff --git a/Gemfile.lock b/Gemfile.lock index 181a27e..9fdb2e0 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -1,7 +1,7 @@ PATH remote: . specs: - esse-active_record (0.3.5) + esse-active_record (0.3.6) activerecord (>= 4.2, < 8) esse (>= 0.3.0) diff --git a/README.md b/README.md index 4c4b835..f97a9d3 100644 --- a/README.md +++ b/README.md @@ -210,6 +210,35 @@ User.without_indexing(AccountsIndex) do end ``` +### Asynchronous Indexing + +If you are using a background job processor like Sidekiq or Faktory, you may be interested in indexing documents asynchronously. For this, you can use the [esse-async_indexing](https://github.com/marcosgz/esse-async_indexing) gem. + +Add the `esse-async_indexing` gem to your Gemfile and require the `esse/async_indexing/active_record` file in your application initialization. Make sure to setup the gem configurationg according to the [esse-async_indexing documentation](https://github.com/marcosgz/esse-async_indexing). + + +```ruby +require 'esse/async_indexing/active_record' +``` + +Then, you can use the `async_index_callback` or `async_update_lazy_attribute_callback` methods to push the indexing job to the background job processor. + +```diff +class City < ApplicationRecord + include Esse::ActiveRecord::Model +- include Esse::ActiveRecord::Model ++ include Esse::AsyncIndexing::ActiveRecord::Model + + belongs_to :state, optional: true + + + async_indexing_callback('geos_index:city') { id } +- index_callback('geos_index:city') { id } +- update_lazy_attribute_callback('geos_index:state', 'cities_count', if: :state_id?) { state_id } ++ async_index_callback('geos_index:city', service_name: :sidekiq) { id } ++ async_update_lazy_attribute_callback('geos_index:state', 'cities_count', if: :state_id?, service_name: :sidekiq) { state_id } +end +``` ## Development diff --git a/ci/Gemfile.rails-5.2.lock b/ci/Gemfile.rails-5.2.lock index ed904df..7c8e3b2 100644 --- a/ci/Gemfile.rails-5.2.lock +++ b/ci/Gemfile.rails-5.2.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - esse-active_record (0.3.5) + esse-active_record (0.3.6) activerecord (>= 4.2, < 8) esse (>= 0.3.0) diff --git a/ci/Gemfile.rails-6.0.lock b/ci/Gemfile.rails-6.0.lock index 474f759..2934703 100644 --- a/ci/Gemfile.rails-6.0.lock +++ b/ci/Gemfile.rails-6.0.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - esse-active_record (0.3.5) + esse-active_record (0.3.6) activerecord (>= 4.2, < 8) esse (>= 0.3.0) diff --git a/ci/Gemfile.rails-6.1.lock b/ci/Gemfile.rails-6.1.lock index 05e889b..770b451 100644 --- a/ci/Gemfile.rails-6.1.lock +++ b/ci/Gemfile.rails-6.1.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - esse-active_record (0.3.5) + esse-active_record (0.3.6) activerecord (>= 4.2, < 8) esse (>= 0.3.0) diff --git a/ci/Gemfile.rails-7.0.lock b/ci/Gemfile.rails-7.0.lock index 474f759..2934703 100644 --- a/ci/Gemfile.rails-7.0.lock +++ b/ci/Gemfile.rails-7.0.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - esse-active_record (0.3.5) + esse-active_record (0.3.6) activerecord (>= 4.2, < 8) esse (>= 0.3.0) diff --git a/ci/Gemfile.rails-7.1.lock b/ci/Gemfile.rails-7.1.lock index a6d6f56..2b8fd78 100644 --- a/ci/Gemfile.rails-7.1.lock +++ b/ci/Gemfile.rails-7.1.lock @@ -1,7 +1,7 @@ PATH remote: .. specs: - esse-active_record (0.3.5) + esse-active_record (0.3.6) activerecord (>= 4.2, < 8) esse (>= 0.3.0) diff --git a/lib/esse/active_record/version.rb b/lib/esse/active_record/version.rb index c4f0160..6175be2 100644 --- a/lib/esse/active_record/version.rb +++ b/lib/esse/active_record/version.rb @@ -2,6 +2,6 @@ module Esse module ActiveRecord - VERSION = '0.3.5' + VERSION = '0.3.6' end end