From a83ddbe5c58276d097b65f263dbff0317647e25e Mon Sep 17 00:00:00 2001 From: Jonas Waelter Date: Wed, 19 May 2021 14:01:35 +0200 Subject: [PATCH 1/3] Add ProjectsFinder param 'topic' in place of 'tag' Changelog: deprecated --- app/finders/projects_finder.rb | 11 +++++++---- app/views/projects/_home_panel.html.haml | 6 +++--- spec/features/projects_spec.rb | 14 +++++++------- spec/finders/projects_finder_spec.rb | 15 +++++++++++++-- 4 files changed, 30 insertions(+), 16 deletions(-) diff --git a/app/finders/projects_finder.rb b/app/finders/projects_finder.rb index 272747a124e3e8..582075efc4ef79 100644 --- a/app/finders/projects_finder.rb +++ b/app/finders/projects_finder.rb @@ -14,7 +14,8 @@ # starred: boolean # sort: string # visibility_level: int -# tags: string[] +# tag: string[] - deprecated, use 'topic' instead +# topic: string[] # personal: boolean # search: string # search_namespaces: boolean @@ -37,6 +38,8 @@ def initialize(params: {}, current_user: nil, project_ids_relation: nil) @params = params @current_user = current_user @project_ids_relation = project_ids_relation + + @params[:topic] ||= @params.delete(:tag) if @params[:tag].present? end def execute @@ -76,7 +79,7 @@ def filter_projects(collection) collection = by_starred(collection) collection = by_trending(collection) collection = by_visibility_level(collection) - collection = by_tags(collection) + collection = by_topics(collection) collection = by_search(collection) collection = by_archived(collection) collection = by_custom_attributes(collection) @@ -176,8 +179,8 @@ def by_visibility_level(items) end # rubocop: enable CodeReuse/ActiveRecord - def by_tags(items) - params[:tag].present? ? items.tagged_with(params[:tag]) : items + def by_topics(items) + params[:topic].present? ? items.tagged_with(params[:topic]) : items end def by_search(items) diff --git a/app/views/projects/_home_panel.html.haml b/app/views/projects/_home_panel.html.haml index a70679dab5f286..26291c0358e265 100644 --- a/app/views/projects/_home_panel.html.haml +++ b/app/views/projects/_home_panel.html.haml @@ -25,14 +25,14 @@ %span.access-request-links.gl-ml-3 = render 'shared/members/access_request_links', source: @project - - if @project.tag_list.present? - = cache_if(cache_enabled, [@project, :tag_list], expires_in: 1.day) do + - if @project.topic_list.present? + = cache_if(cache_enabled, [@project, :topic_list], expires_in: 1.day) do %span.home-panel-topic-list.mt-2.w-100.d-inline-flex.gl-font-base.gl-font-weight-normal.gl-align-items-center = sprite_icon('tag', css_class: 'icon gl-relative gl-mr-2') - @project.topics_to_show.each do |topic| - project_topics_classes = "badge badge-pill badge-secondary gl-mr-2" - - explore_project_topic_path = explore_projects_path(tag: topic) + - explore_project_topic_path = explore_projects_path(topic: topic) - if topic.length > max_project_topic_length %a{ class: "#{ project_topics_classes } str-truncated-30 has-tooltip", data: { container: "body" }, title: topic, href: explore_project_topic_path, itemprop: 'keywords' } = topic.titleize diff --git a/spec/features/projects_spec.rb b/spec/features/projects_spec.rb index c18b0f2688b2c9..2ac829d406c49e 100644 --- a/spec/features/projects_spec.rb +++ b/spec/features/projects_spec.rb @@ -128,23 +128,23 @@ end it 'shows project topics' do - project.update_attribute(:tag_list, 'topic1') + project.update_attribute(:topic_list, 'topic1') visit path expect(page).to have_css('.home-panel-topic-list') - expect(page).to have_link('Topic1', href: explore_projects_path(tag: 'topic1')) + expect(page).to have_link('Topic1', href: explore_projects_path(topic: 'topic1')) end - it 'shows up to 3 project tags' do - project.update_attribute(:tag_list, 'topic1, topic2, topic3, topic4') + it 'shows up to 3 project topics' do + project.update_attribute(:topic_list, 'topic1, topic2, topic3, topic4') visit path expect(page).to have_css('.home-panel-topic-list') - expect(page).to have_link('Topic1', href: explore_projects_path(tag: 'topic1')) - expect(page).to have_link('Topic2', href: explore_projects_path(tag: 'topic2')) - expect(page).to have_link('Topic3', href: explore_projects_path(tag: 'topic3')) + expect(page).to have_link('Topic1', href: explore_projects_path(topic: 'topic1')) + expect(page).to have_link('Topic2', href: explore_projects_path(topic: 'topic2')) + expect(page).to have_link('Topic3', href: explore_projects_path(topic: 'topic3')) expect(page).to have_content('+ 1 more') end end diff --git a/spec/finders/projects_finder_spec.rb b/spec/finders/projects_finder_spec.rb index 364e5de4ece441..f47f070fea885e 100644 --- a/spec/finders/projects_finder_spec.rb +++ b/spec/finders/projects_finder_spec.rb @@ -137,9 +137,9 @@ end end - describe 'filter by tags' do + describe 'filter by tags (deprecated)' do before do - public_project.tag_list = 'foo' + public_project.topic_list = 'foo' public_project.save! end @@ -148,6 +148,17 @@ it { is_expected.to eq([public_project]) } end + describe 'filter by topics' do + before do + public_project.topic_list = 'foo' + public_project.save! + end + + let(:params) { { topic: 'foo' } } + + it { is_expected.to eq([public_project]) } + end + describe 'filter by personal' do let!(:personal_project) { create(:project, namespace: user.namespace) } let(:params) { { personal: true } } -- GitLab From 8799db0920e46d0abcf231e94276e71eef2690dc Mon Sep 17 00:00:00 2001 From: Jonas Waelter Date: Wed, 19 May 2021 14:17:50 +0200 Subject: [PATCH 2/3] Add changelog entry --- changelogs/unreleased/project-topics-projects-finder.yml | 5 +++++ lib/api/helpers.rb | 2 +- 2 files changed, 6 insertions(+), 1 deletion(-) create mode 100644 changelogs/unreleased/project-topics-projects-finder.yml diff --git a/changelogs/unreleased/project-topics-projects-finder.yml b/changelogs/unreleased/project-topics-projects-finder.yml new file mode 100644 index 00000000000000..9e7996707f69c0 --- /dev/null +++ b/changelogs/unreleased/project-topics-projects-finder.yml @@ -0,0 +1,5 @@ +--- +title: Add ProjectsFinder parameter 'topic' in place of 'tag' +merge_request: 62093 +author: Jonas Wälter @wwwjon +type: deprecated diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb index 632717e1b73d55..b719b046977526 100644 --- a/lib/api/helpers.rb +++ b/lib/api/helpers.rb @@ -599,6 +599,7 @@ def project_finder_params_ce :custom_attributes, :last_activity_after, :last_activity_before, + :topic, :repository_storage) .symbolize_keys .compact @@ -611,7 +612,6 @@ def project_finder_params_ce finder_params[:user] = params.delete(:user) if params[:user] finder_params[:id_after] = sanitize_id_param(params[:id_after]) if params[:id_after] finder_params[:id_before] = sanitize_id_param(params[:id_before]) if params[:id_before] - finder_params[:tag] = params[:topic] if params[:topic].present? finder_params end -- GitLab From 7f6acc9d727ba7c6d90bfb0a29d235e39b5c5ada Mon Sep 17 00:00:00 2001 From: Jonas Waelter Date: Tue, 25 May 2021 09:21:39 +0200 Subject: [PATCH 3/3] Remove changelog entry --- changelogs/unreleased/project-topics-projects-finder.yml | 5 ----- 1 file changed, 5 deletions(-) delete mode 100644 changelogs/unreleased/project-topics-projects-finder.yml diff --git a/changelogs/unreleased/project-topics-projects-finder.yml b/changelogs/unreleased/project-topics-projects-finder.yml deleted file mode 100644 index 9e7996707f69c0..00000000000000 --- a/changelogs/unreleased/project-topics-projects-finder.yml +++ /dev/null @@ -1,5 +0,0 @@ ---- -title: Add ProjectsFinder parameter 'topic' in place of 'tag' -merge_request: 62093 -author: Jonas Wälter @wwwjon -type: deprecated -- GitLab