projects.rb
4.87 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
module Gitlab
# Projects API
class Projects < Grape::API
before { authenticate! }
resource :projects do
# Get a projects list for authenticated user
#
# Example Request:
# GET /projects
get do
@projects = current_user.projects
present @projects, :with => Entities::Project
end
# Get a single project
#
# Parameters:
# id (required) - The code of a project
# Example Request:
# GET /projects/:id
get ":id" do
@project = current_user.projects.find_by_code(params[:id])
present @project, :with => Entities::Project
end
# Get a project repository branches
#
# Parameters:
# id (required) - The code of a project
# Example Request:
# GET /projects/:id/repository/branches
get ":id/repository/branches" do
@project = current_user.projects.find_by_code(params[:id])
present @project.repo.heads.sort_by(&:name), :with => Entities::ProjectRepositoryBranches
end
# Get a project repository tags
#
# Parameters:
# id (required) - The code of a project
# Example Request:
# GET /projects/:id/repository/tags
get ":id/repository/tags" do
@project = current_user.projects.find_by_code(params[:id])
present @project.repo.tags.sort_by(&:name).reverse, :with => Entities::ProjectRepositoryTags
end
# Get a project snippet
#
# Parameters:
# id (required) - The code of a project
# snippet_id (required) - The ID of a project snippet
# Example Request:
# GET /projects/:id/snippets/:snippet_id
get ":id/snippets/:snippet_id" do
@project = current_user.projects.find_by_code(params[:id])
@snippet = @project.snippets.find(params[:snippet_id])
present @snippet, :with => Entities::ProjectSnippet
end
# Create a new project snippet
#
# Parameters:
# id (required) - The code name of a project
# title (required) - The title of a snippet
# file_name (required) - The name of a snippet file
# lifetime (optional) - The expiration date of a snippet
# code (required) - The content of a snippet
# Example Request:
# POST /projects/:id/snippets
post ":id/snippets" do
@project = current_user.projects.find_by_code(params[:id])
@snippet = @project.snippets.new(
:title => params[:title],
:file_name => params[:file_name],
:expires_at => params[:lifetime],
:content => params[:code]
)
@snippet.author = current_user
if @snippet.save
present @snippet, :with => Entities::ProjectSnippet
else
error!({'message' => '404 Not found'}, 404)
end
end
# Update an existing project snippet
#
# Parameters:
# id (required) - The code name of a project
# snippet_id (required) - The ID of a project snippet
# title (optional) - The title of a snippet
# file_name (optional) - The name of a snippet file
# lifetime (optional) - The expiration date of a snippet
# code (optional) - The content of a snippet
# Example Request:
# PUT /projects/:id/snippets/:snippet_id
put ":id/snippets/:snippet_id" do
@project = current_user.projects.find_by_code(params[:id])
@snippet = @project.snippets.find(params[:snippet_id])
parameters = {
:title => (params[:title] || @snippet.title),
:file_name => (params[:file_name] || @snippet.file_name),
:expires_at => (params[:lifetime] || @snippet.expires_at),
:content => (params[:code] || @snippet.content)
}
if @snippet.update_attributes(parameters)
present @snippet, :with => Entities::ProjectSnippet
else
error!({'message' => '404 Not found'}, 404)
end
end
# Delete a project snippet
#
# Parameters:
# id (required) - The code of a project
# snippet_id (required) - The ID of a project snippet
# Example Request:
# DELETE /projects/:id/snippets/:snippet_id
delete ":id/snippets/:snippet_id" do
@project = current_user.projects.find_by_code(params[:id])
@snippet = @project.snippets.find(params[:snippet_id])
@snippet.destroy
end
# Get a raw project snippet
#
# Parameters:
# id (required) - The code of a project
# snippet_id (required) - The ID of a project snippet
# Example Request:
# GET /projects/:id/snippets/:snippet_id/raw
get ":id/snippets/:snippet_id/raw" do
@project = current_user.projects.find_by_code(params[:id])
@snippet = @project.snippets.find(params[:snippet_id])
present @snippet.content
end
end
end
end