FIX: Incorrect search blurb when advanced search filters are used take2

FIX: Incorrect search blurb when advanced search filters are used take2

Also remove include_blurbs attribute which isn’t used.

diff --git a/app/assets/javascripts/discourse/app/lib/search.js b/app/assets/javascripts/discourse/app/lib/search.js
index d0974eb..b26e173 100644
--- a/app/assets/javascripts/discourse/app/lib/search.js
+++ b/app/assets/javascripts/discourse/app/lib/search.js
@@ -135,7 +135,7 @@ export function searchForTerm(term, opts) {
   if (!opts) opts = {};
 
   // Only include the data we have
-  const data = { term: term, include_blurbs: "true" };
+  const data = { term: term };
   if (opts.typeFilter) data.type_filter = opts.typeFilter;
   if (opts.searchForId) data.search_for_id = true;
   if (opts.restrictToArchetype)
diff --git a/app/controllers/search_controller.rb b/app/controllers/search_controller.rb
index d0dac30..79c9b98 100644
--- a/app/controllers/search_controller.rb
+++ b/app/controllers/search_controller.rb
@@ -35,7 +35,6 @@ class SearchController < ApplicationController
     search_args = {
       type_filter: 'topic',
       guardian: guardian,
-      include_blurbs: true,
       blurb_length: 300,
       page: if params[:page].to_i <= 10
               [params[:page].to_i, 1].max
@@ -53,10 +52,20 @@ class SearchController < ApplicationController
     search_args[:user_id] = current_user.id if current_user.present?
 
     if rate_limit_errors
-      result = Search::GroupedSearchResults.new(search_args[:type_filter], @search_term, context, false, 0)
+      result = Search::GroupedSearchResults.new(
+        type_filter: search_args[:type_filter],
+        term: @search_term,
+        search_context: context
+      )
+
       result.error = I18n.t("rate_limiter.slow_down")
     elsif site_overloaded?
-      result = Search::GroupedSearchResults.new(search_args[:type_filter], @search_term, context, false, 0)
+      result = Search::GroupedSearchResults.new(
+        type_filter: search_args[:type_filter],
+        term: @search_term,
+        search_context: context
+      )
+
       result.error = I18n.t("search.extreme_load_error")
     else
       search = Search.new(@search_term, search_args)
@@ -90,7 +99,6 @@ class SearchController < ApplicationController
     search_args = { guardian: guardian }
 
     search_args[:type_filter] = params[:type_filter]                 if params[:type_filter].present?
-    search_args[:include_blurbs] = params[:include_blurbs] == "true" if params[:include_blurbs].present?
     search_args[:search_for_id] = true                               if params[:search_for_id].present?
 
     context, type = lookup_search_context
@@ -106,10 +114,19 @@ class SearchController < ApplicationController
     search_args[:restrict_to_archetype] = params[:restrict_to_archetype] if params[:restrict_to_archetype].present?
 
     if rate_limit_errors
-      result = Search::GroupedSearchResults.new(search_args[:type_filter], @search_term, context, false, 0)
+      result = Search::GroupedSearchResults.new(
+        type_filter: search_args[:type_filter],
+        term: params[:term],
+        search_context: context
+      )
+
       result.error = I18n.t("rate_limiter.slow_down")
     elsif site_overloaded?
-      result = GroupedSearchResults.new(search_args["type_filter"], params[:term], context, false, 0)
+      result = GroupedSearchResults.new(
+        type_filter: search_args["type_filter"],
+        term: params[:term],
+        search_context: context
+      )
     else
       search = Search.new(params[:term], search_args)
       result = search.execute
diff --git a/lib/search.rb b/lib/search.rb
index 2525591..564c134 100644
--- a/lib/search.rb
+++ b/lib/search.rb
@@ -154,7 +154,6 @@ class Search
     @opts = opts || {}
     @guardian = @opts[:guardian] || Guardian.new
     @search_context = @opts[:search_context]
-    @include_blurbs = @opts[:include_blurbs] || false
     @blurb_length = @opts[:blurb_length]
     @valid = true
     @page = @opts[:page]
@@ -186,11 +185,11 @@ class Search
     end
 
     @results = GroupedSearchResults.new(
-      @opts[:type_filter],
-      clean_term,
-      @search_context,
-      @include_blurbs,
-      @blurb_length
+      type_filter: @opts[:type_filter],
+      term: clean_term,
+      blurb_term: term,
+      search_context: @search_context,
+      blurb_length: @blurb_length
     )
   end
 
diff --git a/lib/search/grouped_search_results.rb b/lib/search/grouped_search_results.rb
index f523901..51413dc 100644
--- a/lib/search/grouped_search_results.rb
+++ b/lib/search/grouped_search_results.rb
@@ -23,19 +23,20 @@ class Search
       :more_users,
       :term,
       :search_context,
-      :include_blurbs,
       :more_full_page_results,
       :error
     )
 
     attr_accessor :search_log_id
 
-    def initialize(type_filter, term, search_context, include_blurbs, blurb_length)
+    BLURB_LENGTH = 200
+
+    def initialize(type_filter:, term:, search_context:, blurb_length: nil, blurb_term: nil)
       @type_filter = type_filter
       @term = term
+      @blurb_term = blurb_term || term
       @search_context = search_context
-      @include_blurbs = include_blurbs
-      @blurb_length = blurb_length || 200
+      @blurb_length = blurb_length || BLURB_LENGTH
       @posts = []
       @categories = []
       @users = []
@@ -57,7 +58,7 @@ class Search
     end
 
     def blurb(post)
-      GroupedSearchResults.blurb_for(post.cooked, @term, @blurb_length)
+      GroupedSearchResults.blurb_for(post.cooked, @blurb_term, @blurb_length)
     end
 
     def add(object)
@@ -72,7 +73,7 @@ class Search
       end
     end
 
-    def self.blurb_for(cooked, term = nil, blurb_length = 200)
+    def self.blurb_for(cooked, term = nil, blurb_length = BLURB_LENGTH)
       blurb = nil
       cooked = SearchIndexer.scrub_html_for_search(cooked)
 
@@ -91,14 +92,11 @@ class Search
       end
 
       if term
-        terms = term.split(/\s+/)
-        phrase = terms.first
-
-        if phrase =~ Regexp.new(Search::PHRASE_MATCH_REGEXP_PATTERN)
-          phrase = Regexp.last_match[1]
+        if term =~ Regexp.new(Search::PHRASE_MATCH_REGEXP_PATTERN)
+          term = Regexp.last_match[1]
         end
 
-        blurb = TextHelper.excerpt(cooked, phrase,
+        blurb = TextHelper.excerpt(cooked, term,
           radius: blurb_length / 2
         )
       end
diff --git a/spec/components/search_spec.rb b/spec/components/search_spec.rb
index 8bf0df4..8375b27 100644
--- a/spec/components/search_spec.rb
+++ b/spec/components/search_spec.rb
@@ -427,7 +427,7 @@ describe Search do
 
     context 'searching the OP' do
       let!(:post) { Fabricate(:post_with_long_raw_content) }
-      let(:result) { Search.execute('hundred', type_filter: 'topic', include_blurbs: true) }
+      let(:result) { Search.execute('hundred', type_filter: 'topic') }
 
       it 'returns a result correctly' do
         expect(result.posts.length).to eq(1)
@@ -449,8 +449,7 @@ describe Search do
 
       it 'returns the post' do
         result = Search.execute('elephant',
-          type_filter: 'topic',
-          include_blurbs: true
+          type_filter: 'topic'
         )
 
         expect(result.posts).to contain_exactly(reply)
@@ -459,8 +458,7 @@ describe Search do
 
       it 'returns the right post and blurb for searches with phrase' do
         result = Search.execute('"elephant"',
-          type_filter: 'topic',
-          include_blurbs: true
+          type_filter: 'topic'
         )
 
         expect(result.posts).to contain_exactly(reply)
@@ -1492,7 +1490,7 @@ describe Search do
       results = Search.execute('ragis', type_filter: 'topic')
       expect(results.posts.length).to eq(1)
 
-      results = Search.execute('Rágis', type_filter: 'topic', include_blurbs: true)
+      results = Search.execute('Rágis', type_filter: 'topic')
       expect(results.posts.length).to eq(1)
 
       # TODO: this is a test we need to fix!
@@ -1514,7 +1512,7 @@ describe Search do
       results = Search.execute('regis', type_filter: 'topic')
       expect(results.posts.length).to eq(0)
 

[... diff too long, it was truncated ...]

GitHub sha: ce39733b