Commit e6524a919ee4c92d82518c2520d5c0cabc32eb47
1 parent
db3d90cb
Exists in
master
and in
4 other branches
Wiki search
Very basic, using LIKE, and no search snippets.
Showing
6 changed files
with
50 additions
and
2 deletions
Show diff stats
app/contexts/search_context.rb
| @@ -13,6 +13,7 @@ class SearchContext | @@ -13,6 +13,7 @@ class SearchContext | ||
| 13 | result[:projects] = Project.where(id: project_ids).search(query).limit(10) | 13 | result[:projects] = Project.where(id: project_ids).search(query).limit(10) |
| 14 | result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10) | 14 | result[:merge_requests] = MergeRequest.where(project_id: project_ids).search(query).limit(10) |
| 15 | result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10) | 15 | result[:issues] = Issue.where(project_id: project_ids).search(query).limit(10) |
| 16 | + result[:wiki_pages] = Wiki.where(project_id: project_ids).search(query).limit(10) | ||
| 16 | result | 17 | result |
| 17 | end | 18 | end |
| 18 | 19 | ||
| @@ -20,7 +21,8 @@ class SearchContext | @@ -20,7 +21,8 @@ class SearchContext | ||
| 20 | @result ||= { | 21 | @result ||= { |
| 21 | projects: [], | 22 | projects: [], |
| 22 | merge_requests: [], | 23 | merge_requests: [], |
| 23 | - issues: [] | 24 | + issues: [], |
| 25 | + wiki_pages: [] | ||
| 24 | } | 26 | } |
| 25 | end | 27 | end |
| 26 | end | 28 | end |
app/controllers/search_controller.rb
| @@ -5,5 +5,6 @@ class SearchController < ApplicationController | @@ -5,5 +5,6 @@ class SearchController < ApplicationController | ||
| 5 | @projects = result[:projects] | 5 | @projects = result[:projects] |
| 6 | @merge_requests = result[:merge_requests] | 6 | @merge_requests = result[:merge_requests] |
| 7 | @issues = result[:issues] | 7 | @issues = result[:issues] |
| 8 | + @wiki_pages = result[:wiki_pages] | ||
| 8 | end | 9 | end |
| 9 | end | 10 | end |
app/models/wiki.rb
| @@ -15,6 +15,12 @@ class Wiki < ActiveRecord::Base | @@ -15,6 +15,12 @@ class Wiki < ActiveRecord::Base | ||
| 15 | slug | 15 | slug |
| 16 | end | 16 | end |
| 17 | 17 | ||
| 18 | + class << self | ||
| 19 | + def search(query) | ||
| 20 | + where("title like :query OR content like :query", query: "%#{query}%") | ||
| 21 | + end | ||
| 22 | + end | ||
| 23 | + | ||
| 18 | protected | 24 | protected |
| 19 | 25 | ||
| 20 | def self.regenerate_from wiki | 26 | def self.regenerate_from wiki |
app/views/search/show.html.haml
| @@ -9,7 +9,7 @@ | @@ -9,7 +9,7 @@ | ||
| 9 | %br | 9 | %br |
| 10 | %h3 | 10 | %h3 |
| 11 | Search results | 11 | Search results |
| 12 | - %small (#{@projects.count + @merge_requests.count + @issues.count}) | 12 | + %small (#{@projects.count + @merge_requests.count + @issues.count + @wiki_pages.count}) |
| 13 | %hr | 13 | %hr |
| 14 | .search_results | 14 | .search_results |
| 15 | .row | 15 | .row |
| @@ -69,6 +69,23 @@ | @@ -69,6 +69,23 @@ | ||
| 69 | %tr | 69 | %tr |
| 70 | %td | 70 | %td |
| 71 | %h4.nothing_here_message No Issues | 71 | %h4.nothing_here_message No Issues |
| 72 | + .span6 | ||
| 73 | + %table | ||
| 74 | + %thead | ||
| 75 | + %tr | ||
| 76 | + %th Wiki | ||
| 77 | + %tbody | ||
| 78 | + - @wiki_pages.each do |wiki_page| | ||
| 79 | + %tr | ||
| 80 | + %td | ||
| 81 | + = link_to project_wiki_path(wiki_page.project, wiki_page) do | ||
| 82 | + %strong.term= truncate wiki_page.title, length: 40 | ||
| 83 | + %strong.right | ||
| 84 | + %span.label= wiki_page.project.name | ||
| 85 | + - if @wiki_pages.blank? | ||
| 86 | + %tr | ||
| 87 | + %td | ||
| 88 | + %h4.nothing_here_message No wiki pages | ||
| 72 | :javascript | 89 | :javascript |
| 73 | $(function() { | 90 | $(function() { |
| 74 | $(".search_results .term").highlight("#{params[:search]}"); | 91 | $(".search_results .term").highlight("#{params[:search]}"); |
features/dashboard/search.feature
| @@ -2,8 +2,13 @@ Feature: Dashboard Search | @@ -2,8 +2,13 @@ Feature: Dashboard Search | ||
| 2 | Background: | 2 | Background: |
| 3 | Given I sign in as a user | 3 | Given I sign in as a user |
| 4 | And I own project "Shop" | 4 | And I own project "Shop" |
| 5 | + And Project "Shop" has wiki page "Contibuting guide" | ||
| 5 | And I visit dashboard search page | 6 | And I visit dashboard search page |
| 6 | 7 | ||
| 7 | Scenario: I should see project I am looking for | 8 | Scenario: I should see project I am looking for |
| 8 | Given I search for "Sho" | 9 | Given I search for "Sho" |
| 9 | Then I should see "Shop" project link | 10 | Then I should see "Shop" project link |
| 11 | + | ||
| 12 | + Scenario: I should see wiki page I am looking for | ||
| 13 | + Given I search for "Contibuting" | ||
| 14 | + Then I should see "Contibuting guide" wiki link | ||
| 10 | \ No newline at end of file | 15 | \ No newline at end of file |
features/steps/dashboard/dashboard_search.rb
| @@ -15,4 +15,21 @@ class DashboardSearch < Spinach::FeatureSteps | @@ -15,4 +15,21 @@ class DashboardSearch < Spinach::FeatureSteps | ||
| 15 | @project = Factory :project, :name => "Shop" | 15 | @project = Factory :project, :name => "Shop" |
| 16 | @project.add_access(@user, :admin) | 16 | @project.add_access(@user, :admin) |
| 17 | end | 17 | end |
| 18 | + | ||
| 19 | + Given 'I search for "Contibuting"' do | ||
| 20 | + fill_in "dashboard_search", :with => "Contibuting" | ||
| 21 | + click_button "Search" | ||
| 22 | + end | ||
| 23 | + | ||
| 24 | + And 'Project "Shop" has wiki page "Contibuting guide"' do | ||
| 25 | + @wiki_page = Factory :wiki, :project => @project, | ||
| 26 | + :title => "Contibuting guide", | ||
| 27 | + :slug => "contributing" | ||
| 28 | + end | ||
| 29 | + | ||
| 30 | + Then 'I should see "Contibuting guide" wiki link' do | ||
| 31 | + page.should have_link "Contibuting guide" | ||
| 32 | + end | ||
| 33 | + | ||
| 34 | + | ||
| 18 | end | 35 | end |