Refactor logic to index to Elasticsearch (#6286) [deploy]
* Refactor logic to index to Elasticsearch * Rename worker argument to object_class * Change to .constantize for better error messaging
This commit is contained in:
parent
8f7d7cabbb
commit
da259107bd
9 changed files with 38 additions and 10 deletions
|
|
@ -2,7 +2,6 @@ class ChatChannelMembership < ApplicationRecord
|
|||
include AlgoliaSearch
|
||||
|
||||
include Searchable
|
||||
SEARCH_INDEX_WORKER = Search::ChatChannelMembershipEsIndexWorker
|
||||
SEARCH_SERIALIZER = Search::ChatChannelMembershipSerializer
|
||||
SEARCH_CLASS = Search::ChatChannelMembership
|
||||
|
||||
|
|
|
|||
|
|
@ -2,7 +2,6 @@ class ClassifiedListing < ApplicationRecord
|
|||
include AlgoliaSearch
|
||||
include Searchable
|
||||
|
||||
SEARCH_INDEX_WORKER = Search::ClassifiedListingEsIndexWorker
|
||||
SEARCH_SERIALIZER = Search::ClassifiedListingSerializer
|
||||
SEARCH_CLASS = Search::ClassifiedListing
|
||||
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
module Searchable
|
||||
def index_to_elasticsearch
|
||||
self.class::SEARCH_INDEX_WORKER.perform_async(id)
|
||||
Search::IndexToElasticsearchWorker.perform_async(self.class.name, id)
|
||||
end
|
||||
|
||||
def index_to_elasticsearch_inline
|
||||
|
|
|
|||
|
|
@ -31,7 +31,6 @@ class Tag < ActsAsTaggableOn::Tag
|
|||
before_save :mark_as_updated
|
||||
|
||||
include Searchable
|
||||
SEARCH_INDEX_WORKER = Search::TagEsIndexWorker
|
||||
SEARCH_SERIALIZER = Search::TagSerializer
|
||||
SEARCH_CLASS = Search::Tag
|
||||
|
||||
|
|
|
|||
12
app/workers/search/index_to_elasticsearch_worker.rb
Normal file
12
app/workers/search/index_to_elasticsearch_worker.rb
Normal file
|
|
@ -0,0 +1,12 @@
|
|||
module Search
|
||||
class IndexToElasticsearchWorker
|
||||
include Sidekiq::Worker
|
||||
|
||||
sidekiq_options queue: :high_priority
|
||||
|
||||
def perform(object_class, id)
|
||||
object = object_class.constantize.find(id)
|
||||
object.index_to_elasticsearch_inline
|
||||
end
|
||||
end
|
||||
end
|
||||
|
|
@ -5,7 +5,7 @@ RSpec.describe ChatChannelMembership, type: :model do
|
|||
|
||||
describe "#index_to_elasticsearch" do
|
||||
it "enqueues job to index tag to elasticsearch" do
|
||||
sidekiq_assert_enqueued_with(job: described_class::SEARCH_INDEX_WORKER, args: [chat_channel_membership.id]) do
|
||||
sidekiq_assert_enqueued_with(job: Search::IndexToElasticsearchWorker, args: [described_class.to_s, chat_channel_membership.id]) do
|
||||
chat_channel_membership.index_to_elasticsearch
|
||||
end
|
||||
end
|
||||
|
|
@ -22,7 +22,7 @@ RSpec.describe ChatChannelMembership, type: :model do
|
|||
describe "#after_commit" do
|
||||
it "on update enqueues job to index chat_channel_membership to elasticsearch" do
|
||||
chat_channel_membership.save
|
||||
sidekiq_assert_enqueued_with(job: described_class::SEARCH_INDEX_WORKER, args: [chat_channel_membership.id]) do
|
||||
sidekiq_assert_enqueued_with(job: Search::IndexToElasticsearchWorker, args: [described_class.to_s, chat_channel_membership.id]) do
|
||||
chat_channel_membership.save
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -74,7 +74,7 @@ RSpec.describe ClassifiedListing, type: :model do
|
|||
|
||||
describe "#index_to_elasticsearch" do
|
||||
it "enqueues job to index classified_listing to elasticsearch" do
|
||||
sidekiq_assert_enqueued_with(job: described_class::SEARCH_INDEX_WORKER, args: [classified_listing.id]) do
|
||||
sidekiq_assert_enqueued_with(job: Search::IndexToElasticsearchWorker, args: [described_class.to_s, classified_listing.id]) do
|
||||
classified_listing.index_to_elasticsearch
|
||||
end
|
||||
end
|
||||
|
|
@ -92,7 +92,7 @@ RSpec.describe ClassifiedListing, type: :model do
|
|||
it "on update enqueues worker to index tag to elasticsearch" do
|
||||
classified_listing.save
|
||||
|
||||
sidekiq_assert_enqueued_with(job: described_class::SEARCH_INDEX_WORKER, args: [classified_listing.id]) do
|
||||
sidekiq_assert_enqueued_with(job: Search::IndexToElasticsearchWorker, args: [described_class.to_s, classified_listing.id]) do
|
||||
classified_listing.save
|
||||
end
|
||||
end
|
||||
|
|
|
|||
|
|
@ -78,7 +78,7 @@ RSpec.describe Tag, type: :model do
|
|||
|
||||
describe "#index_to_elasticsearch" do
|
||||
it "enqueues job to index tag to elasticsearch" do
|
||||
sidekiq_assert_enqueued_with(job: described_class::SEARCH_INDEX_WORKER, args: [tag.id]) do
|
||||
sidekiq_assert_enqueued_with(job: Search::IndexToElasticsearchWorker, args: [described_class.to_s, tag.id]) do
|
||||
tag.index_to_elasticsearch
|
||||
end
|
||||
end
|
||||
|
|
@ -95,7 +95,7 @@ RSpec.describe Tag, type: :model do
|
|||
describe "#after_commit" do
|
||||
it "on update enqueues job to index tag to elasticsearch" do
|
||||
tag.save
|
||||
sidekiq_assert_enqueued_with(job: described_class::SEARCH_INDEX_WORKER, args: [tag.id]) do
|
||||
sidekiq_assert_enqueued_with(job: Search::IndexToElasticsearchWorker, args: [described_class.to_s, tag.id]) do
|
||||
tag.save
|
||||
end
|
||||
end
|
||||
|
|
|
|||
19
spec/workers/search/index_to_elasticsearch_worker_spec.rb
Normal file
19
spec/workers/search/index_to_elasticsearch_worker_spec.rb
Normal file
|
|
@ -0,0 +1,19 @@
|
|||
require "rails_helper"
|
||||
|
||||
RSpec.describe Search::IndexToElasticsearchWorker, type: :worker, elasticsearch: true do
|
||||
let(:worker) { subject }
|
||||
|
||||
include_examples "#enqueues_on_correct_queue", "high_priority", ["Tag", 1]
|
||||
|
||||
it "raises an error if record is not found" do
|
||||
expect { worker.perform("Tag", 1234) }.to raise_error(ActiveRecord::RecordNotFound)
|
||||
end
|
||||
|
||||
it "indexes document" do
|
||||
tag = FactoryBot.create(:tag)
|
||||
expect { tag.elasticsearch_doc }.to raise_error(Elasticsearch::Transport::Transport::Errors::NotFound)
|
||||
worker.perform(tag.class.name, tag.id)
|
||||
|
||||
expect(tag.elasticsearch_doc.dig("_source", "id")).to eql(tag.id)
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Reference in a new issue