36 lines
1.2 KiB
Ruby
36 lines
1.2 KiB
Ruby
|
module Elasticsearch
|
||
|
module Model
|
||
|
|
||
|
# Allows to automatically update index based on model changes,
|
||
|
# by hooking into the model lifecycle.
|
||
|
#
|
||
|
# @note A blocking HTTP request is done during the update process.
|
||
|
# If you need a more performant/resilient way of updating the index,
|
||
|
# consider adapting the callbacks behaviour, and use a background
|
||
|
# processing solution such as [Sidekiq](http://sidekiq.org)
|
||
|
# or [Resque](https://github.com/resque/resque).
|
||
|
#
|
||
|
module Callbacks
|
||
|
|
||
|
# When included in a model, automatically injects the callback subscribers (`after_save`, etc)
|
||
|
#
|
||
|
# @example Automatically update Elasticsearch index when the model changes
|
||
|
#
|
||
|
# class Article
|
||
|
# include Elasticsearch::Model
|
||
|
# include Elasticsearch::Model::Callbacks
|
||
|
# end
|
||
|
#
|
||
|
# Article.first.update_attribute :title, 'Updated'
|
||
|
# # SQL (0.3ms) UPDATE "articles" SET "title" = ...
|
||
|
# # 2013-11-20 15:08:52 +0100: POST http://localhost:9200/articles/article/1/_update ...
|
||
|
#
|
||
|
def self.included(base)
|
||
|
adapter = Adapter.from_class(base)
|
||
|
base.__send__ :include, adapter.callbacks_mixin
|
||
|
end
|
||
|
|
||
|
end
|
||
|
end
|
||
|
end
|