Skip to content

Commit 804af74

Browse files
author
Alice Bartlett
committed
Extract scoped search to separate presenter
Since out code for scoped searches is getting a bit more involved with the inclusion of un-scoped results, let's extract this functionality to a new presenter `scoped_search_results_presenter`. This commit just extracts the existing functionality into a new presenter, no new features are added.
1 parent 5b7049b commit 804af74

File tree

3 files changed

+39
-32
lines changed

3 files changed

+39
-32
lines changed

Diff for: app/controllers/search_controller.rb

+7-1
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,13 @@ def index
1717
search_response = search_client.search(search_params)
1818

1919
@search_term = search_params.search_term
20-
@results = SearchResultsPresenter.new(search_response, search_params)
20+
21+
if (search_response["scope"].present?)
22+
@results = ScopedSearchResultsPresenter.new(search_response, search_params)
23+
else
24+
@results = SearchResultsPresenter.new(search_response, search_params)
25+
end
26+
2127
@facets = search_response["facets"]
2228
@spelling_suggestion = @results.spelling_suggestion
2329

Diff for: app/presenters/scoped_search_results_presenter.rb

+19
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,19 @@
1+
class ScopedSearchResultsPresenter < SearchResultsPresenter
2+
3+
def to_hash
4+
super.merge({
5+
is_scoped?: true,
6+
scope_title: scope_title,
7+
})
8+
end
9+
10+
private
11+
12+
def filter_fields
13+
end
14+
15+
def scope_title
16+
search_response[:scope][:title]
17+
end
18+
19+
end

Diff for: app/presenters/search_results_presenter.rb

+13-31
Original file line numberDiff line numberDiff line change
@@ -17,7 +17,7 @@ def to_hash
1717
{
1818
query: search_parameters.search_term,
1919
result_count: result_count,
20-
result_count_string: result_count_string,
20+
result_count_string: result_count_string(result_count),
2121
results_any?: results.any?,
2222
results: results.map { |result| result.to_hash },
2323
filter_fields: filter_fields,
@@ -29,25 +29,19 @@ def to_hash
2929
previous_page_link: previous_page_link,
3030
previous_page_label: previous_page_label,
3131
first_result_number: (search_parameters.start + 1),
32-
is_scoped?: is_scoped?,
33-
scope_title: scope_title,
3432
}
3533
end
3634

3735
def filter_fields
38-
if is_scoped?
39-
[]
40-
else
41-
search_response["facets"].map do |field, value|
42-
external = SearchParameters::external_field_name(field)
43-
facet_params = search_parameters.filter(external)
44-
facet = SearchFacetPresenter.new(value, facet_params)
45-
{
46-
field: external,
47-
field_title: FACET_TITLES.fetch(field, field),
48-
options: facet.to_hash,
49-
}
50-
end
36+
search_response["facets"].map do |field, value|
37+
external = SearchParameters::external_field_name(field)
38+
facet_params = search_parameters.filter(external)
39+
facet = SearchFacetPresenter.new(value, facet_params)
40+
{
41+
field: external,
42+
field_title: FACET_TITLES.fetch(field, field),
43+
options: facet.to_hash,
44+
}
5145
end
5246
end
5347

@@ -72,18 +66,16 @@ def result_count
7266
search_response["total"].to_i
7367
end
7468

75-
def result_count_string
76-
pluralize(number_with_delimiter(result_count), "result")
69+
def result_count_string(count)
70+
pluralize(number_with_delimiter(count), "result")
7771
end
7872

7973
def results
8074
search_response["results"].map { |result| build_result(result) }
8175
end
8276

8377
def build_result(result)
84-
if is_scoped?
85-
ScopedResult.new(search_parameters, result)
86-
elsif result["document_type"] == "group"
78+
if result["document_type"] == "group"
8779
GroupResult.new(search_parameters, result)
8880
elsif result["document_type"] && result["document_type"] != "edition"
8981
NonEditionResult.new(search_parameters, result)
@@ -127,16 +119,6 @@ def previous_page_label
127119
end
128120
end
129121

130-
def is_scoped?
131-
search_response[:scope].present?
132-
end
133-
134-
def scope_title
135-
if is_scoped?
136-
search_response[:scope][:title]
137-
end
138-
end
139-
140122
private
141123

142124
attr_reader :search_parameters, :search_response

0 commit comments

Comments
 (0)