From d5ba4076290e286d7d017d23bf88071a00adfbf9 Mon Sep 17 00:00:00 2001 From: Mac Siri Date: Fri, 26 Apr 2024 08:59:13 -0400 Subject: [PATCH] Add AlgoliaSearchable to Article (#20892) * Add AlgoliaSearchable to Article * Remove comments * Fix spec --- app/models/article.rb | 1 + .../algolia_searchable/searchable_article.rb | 36 +++++++++++++++++++ spec/models/article_spec.rb | 9 +++++ 3 files changed, 46 insertions(+) create mode 100644 app/models/concerns/algolia_searchable/searchable_article.rb diff --git a/app/models/article.rb b/app/models/article.rb index 08834ea6a..45f5df179 100644 --- a/app/models/article.rb +++ b/app/models/article.rb @@ -5,6 +5,7 @@ class Article < ApplicationRecord include Taggable include UserSubscriptionSourceable include PgSearch::Model + include AlgoliaSearchable acts_as_taggable_on :tags resourcify diff --git a/app/models/concerns/algolia_searchable/searchable_article.rb b/app/models/concerns/algolia_searchable/searchable_article.rb new file mode 100644 index 000000000..236944760 --- /dev/null +++ b/app/models/concerns/algolia_searchable/searchable_article.rb @@ -0,0 +1,36 @@ +module AlgoliaSearchable + module SearchableArticle + extend ActiveSupport::Concern + + included do + include AlgoliaSearch + + algoliasearch(**DEFAULT_ALGOLIA_SETTINGS, if: :indexable) do + attribute :user do + { name: user.name, username: user.username, profile_image: user.profile_image_90 } + end + + attribute :title, :tag_list, :reading_time, :score, :featured, :featured_number, :comments_count, + :reaction_counts, :positive_reaction_counts, :path, :main_image + + attribute :published_at do + published_at.to_i + end + end + end + + class_methods do + def trigger_sidekiq_worker(record, delete) + AlgoliaSearch::SearchIndexWorker.perform_async(record.class.name, record.id, delete) + end + end + + def indexable + published && score.positive? + end + + def indexable_changed? + published_changed? || score_changed? + end + end +end diff --git a/spec/models/article_spec.rb b/spec/models/article_spec.rb index 273c4238a..e1622d3fe 100644 --- a/spec/models/article_spec.rb +++ b/spec/models/article_spec.rb @@ -1672,4 +1672,13 @@ RSpec.describe Article do expect(article.skip_indexing_reason).to eq("unknown") end end + + context "when indexing with Algolia", :algolia do + it "indexes the article" do + allow(AlgoliaSearch::SearchIndexWorker).to receive(:perform_async) + create(:article) + expect(AlgoliaSearch::SearchIndexWorker).to have_received(:perform_async).with("Article", kind_of(Integer), + false).once + end + end end