Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
800aa296
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
前往新版Gitcode,体验更适合开发者的 AI 搜索 >>
提交
800aa296
编写于
3月 01, 2016
作者:
Y
Yorick Peterse
提交者:
Robert Speicher
3月 11, 2016
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use ILIKE/LIKE for searching users
上级
508b6b46
变更
2
显示空白变更内容
内联
并排
Showing
2 changed file
with
52 addition
and
12 deletion
+52
-12
app/models/user.rb
app/models/user.rb
+15
-1
spec/models/user_spec.rb
spec/models/user_spec.rb
+37
-11
未找到文件。
app/models/user.rb
浏览文件 @
800aa296
...
@@ -286,8 +286,22 @@ class User < ActiveRecord::Base
...
@@ -286,8 +286,22 @@ class User < ActiveRecord::Base
end
end
end
end
# Searches users matching the given query.
#
# This method uses ILIKE on PostgreSQL and LIKE on MySQL.
#
# query - The search query as a String
#
# Returns an ActiveRecord::Relation.
def
search
(
query
)
def
search
(
query
)
where
(
"lower(name) LIKE :query OR lower(email) LIKE :query OR lower(username) LIKE :query"
,
query:
"%
#{
query
.
downcase
}
%"
)
table
=
User
.
arel_table
pattern
=
"%
#{
query
}
%"
where
(
table
[
:name
].
matches
(
pattern
).
or
(
table
[
:email
].
matches
(
pattern
)).
or
(
table
[
:username
].
matches
(
pattern
))
)
end
end
def
by_login
(
login
)
def
by_login
(
login
)
...
...
spec/models/user_spec.rb
浏览文件 @
800aa296
...
@@ -463,17 +463,43 @@ describe User, models: true do
...
@@ -463,17 +463,43 @@ describe User, models: true do
end
end
end
end
describe
'search'
do
describe
'.search'
do
let
(
:user1
)
{
create
(
:user
,
username:
'James'
,
email:
'james@testing.com'
)
}
let
(
:user
)
{
create
(
:user
)
}
let
(
:user2
)
{
create
(
:user
,
username:
'jameson'
,
email:
'jameson@example.com'
)
}
it
'returns users with a matching name'
do
it
"should be case insensitive"
do
expect
(
described_class
.
search
(
user
.
name
)).
to
eq
([
user
])
expect
(
User
.
search
(
user1
.
username
.
upcase
).
to_a
).
to
eq
([
user1
])
end
expect
(
User
.
search
(
user1
.
username
.
downcase
).
to_a
).
to
eq
([
user1
])
expect
(
User
.
search
(
user2
.
username
.
upcase
).
to_a
).
to
eq
([
user2
])
it
'returns users with a partially matching name'
do
expect
(
User
.
search
(
user2
.
username
.
downcase
).
to_a
).
to
eq
([
user2
])
expect
(
described_class
.
search
(
user
.
name
[
0
..
2
])).
to
eq
([
user
])
expect
(
User
.
search
(
user1
.
username
.
downcase
).
to_a
.
size
).
to
eq
(
2
)
end
expect
(
User
.
search
(
user2
.
username
.
downcase
).
to_a
.
size
).
to
eq
(
1
)
it
'returns users with a matching name regarding of the casing'
do
expect
(
described_class
.
search
(
user
.
name
.
upcase
)).
to
eq
([
user
])
end
it
'returns users with a matching Email'
do
expect
(
described_class
.
search
(
user
.
email
)).
to
eq
([
user
])
end
it
'returns users with a partially matching Email'
do
expect
(
described_class
.
search
(
user
.
email
[
0
..
2
])).
to
eq
([
user
])
end
it
'returns users with a matching Email regarding of the casing'
do
expect
(
described_class
.
search
(
user
.
email
.
upcase
)).
to
eq
([
user
])
end
it
'returns users with a matching username'
do
expect
(
described_class
.
search
(
user
.
username
)).
to
eq
([
user
])
end
it
'returns users with a partially matching username'
do
expect
(
described_class
.
search
(
user
.
username
[
0
..
2
])).
to
eq
([
user
])
end
it
'returns users with a matching username regarding of the casing'
do
expect
(
described_class
.
search
(
user
.
username
.
upcase
)).
to
eq
([
user
])
end
end
end
end
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录