Skip to content
Snippets Groups Projects
Commit 378dc55d authored by Nihad Abbasov's avatar Nihad Abbasov
Browse files

add project snippets API

parent 1d2c9818
No related branches found
No related tags found
1 merge request!1019API
Loading
Loading
@@ -19,5 +19,11 @@ module Gitlab
class ProjectRepositoryTags < Grape::Entity
expose :name, :commit
end
class ProjectSnippet < Grape::Entity
expose :id, :title, :file_name
expose :author, :using => Entities::User
expose :expires_at, :updated_at, :created_at
end
end
end
Loading
Loading
@@ -45,6 +45,59 @@ module Gitlab
@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
# 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
end
end
end
Loading
Loading
@@ -3,6 +3,7 @@ require 'spec_helper'
describe Gitlab::API do
let(:user) { Factory :user }
let!(:project) { Factory :project, :owner => user }
let!(:snippet) { Factory :snippet, :author => user, :project => project }
before { project.add_access(user, :read) }
 
describe "GET /projects" do
Loading
Loading
@@ -52,4 +53,31 @@ describe Gitlab::API do
json.first['name'].should == project.repo.tags.sort_by(&:name).reverse.first.name
end
end
describe "GET /projects/:id/snippets/:snippet_id" do
it "should return a project snippet" do
get "/api/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}"
response.status.should == 200
json = JSON.parse(response.body)
json['title'].should == snippet.title
end
end
describe "POST /projects/:id/snippets" do
it "should create a new project snippet" do
post "/api/projects/#{project.code}/snippets?private_token=#{user.private_token}",
:title => 'api test', :file_name => 'sample.rb', :code => 'test'
response.status.should == 201
json = JSON.parse(response.body)
json['title'].should == 'api test'
end
end
describe "DELETE /projects/:id/snippets/:snippet_id" do
it "should create a new project snippet" do
expect {
delete "/api/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}"
}.should change { Snippet.count }.by(-1)
end
end
end
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment