summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorYorick Peterse <yorickpeterse@gmail.com>2016-03-01 12:16:15 +0100
committerRobert Speicher <rspeicher@gmail.com>2016-03-11 15:25:21 -0500
commitdb615d0a7992d5118c3e9e8914064eb26970666b (patch)
treebbfb669878093f49579856a51a920cfa40a40a28
parent135659a75135b47563b349d13a9846b9b017af15 (diff)
downloadgitlab-ce-db615d0a7992d5118c3e9e8914064eb26970666b.tar.gz
Use ILIKE in Project.search_by_title
Similar to the changes made to Project.search the method Project.search_by_title now also uses Arel so it can automatically use ILIKE/LIKE instead of the lower() function.
-rw-r--r--app/models/project.rb5
-rw-r--r--spec/models/project_spec.rb16
2 files changed, 20 insertions, 1 deletions
diff --git a/app/models/project.rb b/app/models/project.rb
index 2f19ec9ba89..cb236bf41cd 100644
--- a/app/models/project.rb
+++ b/app/models/project.rb
@@ -298,7 +298,10 @@ class Project < ActiveRecord::Base
end
def search_by_title(query)
- non_archived.where('LOWER(projects.name) LIKE :query', query: "%#{query.downcase}%")
+ pattern = "%#{query}%"
+ table = Project.arel_table
+
+ non_archived.where(table[:name].matches(pattern))
end
def find_with_namespace(id)
diff --git a/spec/models/project_spec.rb b/spec/models/project_spec.rb
index 6627432aa83..59c5ffa6b9c 100644
--- a/spec/models/project_spec.rb
+++ b/spec/models/project_spec.rb
@@ -698,4 +698,20 @@ describe Project, models: true do
project.expire_caches_before_rename('foo')
end
end
+
+ describe '.search_by_title' do
+ let(:project) { create(:project, name: 'kittens') }
+
+ it 'returns projects with a matching name' do
+ expect(described_class.search_by_title(project.name)).to eq([project])
+ end
+
+ it 'returns projects with a partially matching name' do
+ expect(described_class.search_by_title('kitten')).to eq([project])
+ end
+
+ it 'returns projects with a matching name regardless of the casing' do
+ expect(described_class.search_by_title('KITTENS')).to eq([project])
+ end
+ end
end