Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
872e7b7e
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 搜索 >>
提交
872e7b7e
编写于
5月 15, 2017
作者:
G
George Andrinopoulos
提交者:
Rémy Coutable
5月 15, 2017
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Create a Users Finder
上级
f5e5afc7
变更
3
隐藏空白更改
内联
并排
Showing
3 changed file
with
141 addition
and
10 deletion
+141
-10
app/finders/users_finder.rb
app/finders/users_finder.rb
+74
-0
lib/api/users.rb
lib/api/users.rb
+1
-10
spec/finders/users_finder_spec.rb
spec/finders/users_finder_spec.rb
+66
-0
未找到文件。
app/finders/users_finder.rb
0 → 100644
浏览文件 @
872e7b7e
# UsersFinder
#
# Used to filter users by set of params
#
# Arguments:
# current_user - which user use
# params:
# username: string
# extern_uid: string
# provider: string
# search: string
# active: boolean
# blocked: boolean
# external: boolean
#
class
UsersFinder
attr_accessor
:current_user
,
:params
def
initialize
(
current_user
,
params
=
{})
@current_user
=
current_user
@params
=
params
end
def
execute
users
=
User
.
all
users
=
by_username
(
users
)
users
=
by_search
(
users
)
users
=
by_blocked
(
users
)
users
=
by_active
(
users
)
users
=
by_external_identity
(
users
)
users
=
by_external
(
users
)
users
end
private
def
by_username
(
users
)
return
users
unless
params
[
:username
]
users
.
where
(
username:
params
[
:username
])
end
def
by_search
(
users
)
return
users
unless
params
[
:search
].
present?
users
.
search
(
params
[
:search
])
end
def
by_blocked
(
users
)
return
users
unless
params
[
:blocked
]
users
.
blocked
end
def
by_active
(
users
)
return
users
unless
params
[
:active
]
users
.
active
end
def
by_external_identity
(
users
)
return
users
unless
current_user
.
admin?
&&
params
[
:extern_uid
]
&&
params
[
:provider
]
users
.
joins
(
:identities
).
merge
(
Identity
.
with_extern_uid
(
params
[
:provider
],
params
[
:extern_uid
]))
end
def
by_external
(
users
)
return
users
=
users
.
where
.
not
(
external:
true
)
unless
current_user
.
admin?
return
users
unless
params
[
:external
]
users
.
external
end
end
lib/api/users.rb
浏览文件 @
872e7b7e
...
...
@@ -56,16 +56,7 @@ module API
authenticated_as_admin!
if
params
[
:external
].
present?
||
(
params
[
:extern_uid
].
present?
&&
params
[
:provider
].
present?
)
users
=
User
.
all
users
=
User
.
where
(
username:
params
[
:username
])
if
params
[
:username
]
users
=
users
.
active
if
params
[
:active
]
users
=
users
.
search
(
params
[
:search
])
if
params
[
:search
].
present?
users
=
users
.
blocked
if
params
[
:blocked
]
if
current_user
.
admin?
users
=
users
.
joins
(
:identities
).
merge
(
Identity
.
with_extern_uid
(
params
[
:provider
],
params
[
:extern_uid
]))
if
params
[
:extern_uid
]
&&
params
[
:provider
]
users
=
users
.
external
if
params
[
:external
]
end
users
=
UsersFinder
.
new
(
current_user
,
params
).
execute
entity
=
current_user
.
admin?
?
Entities
::
UserPublic
:
Entities
::
UserBasic
present
paginate
(
users
),
with:
entity
...
...
spec/finders/users_finder_spec.rb
0 → 100644
浏览文件 @
872e7b7e
require
'spec_helper'
describe
UsersFinder
do
describe
'#execute'
do
let!
(
:user1
)
{
create
(
:user
,
username:
'johndoe'
)
}
let!
(
:user2
)
{
create
(
:user
,
:blocked
,
username:
'notsorandom'
,
)
}
let!
(
:external_user
)
{
create
(
:user
,
:external
)
}
let!
(
:omniauth_user
)
{
create
(
:omniauth_user
,
provider:
'twitter'
,
extern_uid:
'123456'
)
}
context
'with a normal user'
do
let
(
:user
)
{
create
(
:user
)
}
it
'returns all users'
do
users
=
described_class
.
new
(
user
).
execute
expect
(
users
).
to
contain_exactly
(
user
,
user1
,
user2
,
omniauth_user
)
end
it
'filters by username'
do
users
=
described_class
.
new
(
user
,
username:
'johndoe'
).
execute
expect
(
users
).
to
contain_exactly
(
user1
)
end
it
'filters by search'
do
users
=
described_class
.
new
(
user
,
search:
'orando'
).
execute
expect
(
users
).
to
contain_exactly
(
user2
)
end
it
'filters by blocked users'
do
users
=
described_class
.
new
(
user
,
blocked:
true
).
execute
expect
(
users
).
to
contain_exactly
(
user2
)
end
it
'filters by active users'
do
users
=
described_class
.
new
(
user
,
active:
true
).
execute
expect
(
users
).
to
contain_exactly
(
user
,
user1
,
omniauth_user
)
end
it
'returns no external users'
do
users
=
described_class
.
new
(
user
,
external:
true
).
execute
expect
(
users
).
to
contain_exactly
(
user
,
user1
,
user2
,
omniauth_user
)
end
end
context
'with an admin user'
do
let
(
:admin
)
{
create
(
:admin
)
}
it
'filters by external users'
do
users
=
described_class
.
new
(
admin
,
external:
true
).
execute
expect
(
users
).
to
contain_exactly
(
external_user
)
end
it
'returns all users'
do
users
=
described_class
.
new
(
admin
).
execute
expect
(
users
).
to
contain_exactly
(
admin
,
user1
,
user2
,
external_user
,
omniauth_user
)
end
end
end
end
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录