diff options
author | Marius Mathiesen <marius@shortcut.no> | 2009-12-14 15:15:22 +0100 |
---|---|---|
committer | Marius Mathiesen <marius@shortcut.no> | 2009-12-14 15:15:35 +0100 |
commit | 6539ee7d741b435848e103bae9711c0ed22e03e1 (patch) | |
tree | cd42cbceac5d6e1a6d5284dfd0de07098c65c963 | |
parent | 8eef9e3d5dea455e41a702909d8c54b21d7cd37a (diff) | |
download | gitorious-mainline-outdated-6539ee7d741b435848e103bae9711c0ed22e03e1.zip gitorious-mainline-outdated-6539ee7d741b435848e103bae9711c0ed22e03e1.tar.gz gitorious-mainline-outdated-6539ee7d741b435848e103bae9711c0ed22e03e1.tar.bz2 |
Project#search_repositories now uses the same logic as Repository#search_clones
-rw-r--r-- | app/controllers/repositories_controller.rb | 2 | ||||
-rw-r--r-- | app/models/project.rb | 4 | ||||
-rw-r--r-- | app/models/repository.rb | 27 | ||||
-rw-r--r-- | test/unit/project_test.rb | 12 |
4 files changed, 31 insertions, 14 deletions
diff --git a/app/controllers/repositories_controller.rb b/app/controllers/repositories_controller.rb index b46dc3c..c599c42 100644 --- a/app/controllers/repositories_controller.rb +++ b/app/controllers/repositories_controller.rb @@ -34,7 +34,7 @@ class RepositoriesController < ApplicationController def index if term = params[:filter] - @repositories = @project.search_repositories(Regexp.new(term)) + @repositories = @project.search_repositories(term) else @repositories = @owner.repositories.find(:all, :include => [:user, :events, :project]) end diff --git a/app/models/project.rb b/app/models/project.rb index 9854d73..c4ade8a 100644 --- a/app/models/project.rb +++ b/app/models/project.rb @@ -341,9 +341,7 @@ class Project < ActiveRecord::Base end def search_repositories(term) - repositories.regular.find_all {|r| - r.matches_regexp?(term) - } + Repository.title_search(term, "project_id", id) end def wiki_permissions diff --git a/app/models/repository.rb b/app/models/repository.rb index 7d68449..8d85fa5 100644 --- a/app/models/repository.rb +++ b/app/models/repository.rb @@ -670,10 +670,27 @@ class Repository < ActiveRecord::Base end def search_clones(term) + self.class.title_search(term, "parent_id", id) + end + + # Searches for term in + # - title + # - description + # - owner name/login + # + # Scoped to column +key+ having +value+ + # + # Example: + # title_search("foo", "parent_id", 1) # will find clones of Repo with id 1 + # matching 'foo' + # + # title_search("foo", "project_id", 1) # will find repositories in Project#1 + # matching 'foo' + def self.title_search(term, key, value) sql = "SELECT repositories.* FROM repositories INNER JOIN users on repositories.user_id=users.id INNER JOIN groups on repositories.owner_id=groups.id - WHERE repositories.parent_id=:id + WHERE repositories.#{key}=#{value} AND (repositories.name LIKE :q OR repositories.description LIKE :q OR groups.name LIKE :q) AND repositories.owner_type='Group' AND kind in (:kinds) @@ -681,12 +698,14 @@ class Repository < ActiveRecord::Base SELECT repositories.* from repositories INNER JOIN users on repositories.user_id=users.id INNER JOIN users owners on repositories.owner_id=owners.id - WHERE repositories.parent_id=:id + WHERE repositories.#{key}=#{value} AND (repositories.name LIKE :q OR repositories.description LIKE :q OR owners.login LIKE :q) AND repositories.owner_type='User' AND kind in (:kinds)" - clones.find_by_sql([sql, {:q => "%#{term}%", :id => id, :kinds => - [KIND_TEAM_REPO, KIND_USER_REPO, KIND_PROJECT_REPO]}]) + self.find_by_sql([sql, {:q => "%#{term}%", + :id => value, + :kinds => + [KIND_TEAM_REPO, KIND_USER_REPO, KIND_PROJECT_REPO]}]) end protected diff --git a/test/unit/project_test.rb b/test/unit/project_test.rb index 7ec1840..9114a06 100644 --- a/test/unit/project_test.rb +++ b/test/unit/project_test.rb @@ -403,7 +403,7 @@ class ProjectTest < ActiveSupport::TestCase @owner = Factory.create(:user, :login => "thejoker") @project = Factory.create(:project, :user => @owner, :owner => @owner) - @repo = Factory.create(:repository, :project => @project, :owner => @project, + @repo = Factory.create(:repository, :project => @project, :owner => @owner, :user => @owner, :name => "thework", :description => "halloween") @group = Factory.create(:group, :creator => @owner, :name => "foo-hackers", :user_id => @owner.to_param) @@ -413,23 +413,23 @@ class ProjectTest < ActiveSupport::TestCase end should "find repositories matching the repo name" do - assert @project.search_repositories(/work/).include?(@repo) + assert @project.search_repositories("work").include?(@repo) end should "find repositories with a matching description" do - assert @project.search_repositories(/ween/).include?(@repo) + assert @project.search_repositories("ween").include?(@repo) end should "find repositories matching the owning user's name" do - assert @project.search_repositories(/joker/).include?(@repo) + assert @project.search_repositories("joker").include?(@repo) end should "find repositories matching the owning group's name" do - assert @project.search_repositories(/hackers/).include?(@group_repo) + assert @project.search_repositories("hackers").include?(@group_repo) end should "only include regular repositories" do - assert !@project.search_repositories(/track/).include?(@tracking_repo) + assert !@project.search_repositories("track").include?(@tracking_repo) end end |