gitlab-org--gitlab-foss/app/finders/snippets_finder.rb

64 lines
1.3 KiB
Ruby
Raw Normal View History

2014-10-08 13:44:25 +00:00
class SnippetsFinder
def execute(current_user, params = {})
filter = params[:filter]
case filter
when :all then
snippets(current_user).fresh
2014-10-08 13:44:25 +00:00
when :by_user then
by_user(current_user, params[:user], params[:scope])
when :by_project
by_project(current_user, params[:project])
end
end
private
def snippets(current_user)
if current_user
Snippet.public_and_internal
else
# Not authenticated
#
# Return only:
# public snippets
Snippet.are_public
end
end
def by_user(current_user, user, scope)
snippets = user.snippets.fresh
2014-10-08 13:44:25 +00:00
return snippets.are_public unless current_user
2014-10-08 13:44:25 +00:00
if user == current_user
2014-10-10 12:15:34 +00:00
case scope
when 'are_internal' then
snippets.are_internal
when 'are_private' then
snippets.are_private
when 'are_public' then
snippets.are_public
else
2015-02-03 05:59:28 +00:00
snippets
2014-10-10 12:15:34 +00:00
end
2014-10-08 13:44:25 +00:00
else
2014-10-10 12:15:34 +00:00
snippets.public_and_internal
2014-10-08 13:44:25 +00:00
end
end
def by_project(current_user, project)
snippets = project.snippets.fresh
2014-10-08 13:44:25 +00:00
if current_user
if project.team.member?(current_user) || current_user.admin?
2014-10-08 13:44:25 +00:00
snippets
else
snippets.public_and_internal
end
else
snippets.are_public
end
end
end