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:
Alex 2020-02-25 11:06:42 -08:00 committed by GitHub
parent 8f7d7cabbb
commit da259107bd
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
9 changed files with 38 additions and 10 deletions

View file

@ -2,7 +2,6 @@ class ChatChannelMembership < ApplicationRecord
include AlgoliaSearch
include Searchable
SEARCH_INDEX_WORKER = Search::ChatChannelMembershipEsIndexWorker
SEARCH_SERIALIZER = Search::ChatChannelMembershipSerializer
SEARCH_CLASS = Search::ChatChannelMembership

View file

@ -2,7 +2,6 @@ class ClassifiedListing < ApplicationRecord
include AlgoliaSearch
include Searchable
SEARCH_INDEX_WORKER = Search::ClassifiedListingEsIndexWorker
SEARCH_SERIALIZER = Search::ClassifiedListingSerializer
SEARCH_CLASS = Search::ClassifiedListing

View file

@ -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

View file

@ -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

View 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

View file

@ -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

View file

@ -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

View file

@ -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

View 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