Commit 61910eb8fa6375dee03dfbf52ce8c74e499ae271

Authored by Nihad Abbasov
1 parent fbd559d4

ability to update and get a raw snippet via API

Showing 2 changed files with 59 additions and 1 deletions   Show diff stats
lib/api/projects.rb
... ... @@ -86,6 +86,34 @@ module Gitlab
86 86 end
87 87 end
88 88  
  89 + # Update an existing project snippet
  90 + #
  91 + # Parameters:
  92 + # id (required) - The code name of a project
  93 + # snippet_id (required) - The ID of a project snippet
  94 + # title (optional) - The title of a snippet
  95 + # file_name (optional) - The name of a snippet file
  96 + # lifetime (optional) - The expiration date of a snippet
  97 + # code (optional) - The content of a snippet
  98 + # Example Request:
  99 + # PUT /projects/:id/snippets/:snippet_id
  100 + put ":id/snippets/:snippet_id" do
  101 + @project = current_user.projects.find_by_code(params[:id])
  102 + @snippet = @project.snippets.find(params[:snippet_id])
  103 + parameters = {
  104 + :title => (params[:title] || @snippet.title),
  105 + :file_name => (params[:file_name] || @snippet.file_name),
  106 + :expires_at => (params[:lifetime] || @snippet.expires_at),
  107 + :content => (params[:code] || @snippet.content)
  108 + }
  109 +
  110 + if @snippet.update_attributes(parameters)
  111 + present @snippet, :with => Entities::ProjectSnippet
  112 + else
  113 + error!({'message' => '404 Not found'}, 404)
  114 + end
  115 + end
  116 +
89 117 # Delete a project snippet
90 118 #
91 119 # Parameters:
... ... @@ -98,6 +126,19 @@ module Gitlab
98 126 @snippet = @project.snippets.find(params[:snippet_id])
99 127 @snippet.destroy
100 128 end
  129 +
  130 + # Get a raw project snippet
  131 + #
  132 + # Parameters:
  133 + # id (required) - The code of a project
  134 + # snippet_id (required) - The ID of a project snippet
  135 + # Example Request:
  136 + # GET /projects/:id/snippets/:snippet_id/raw
  137 + get ":id/snippets/:snippet_id/raw" do
  138 + @project = current_user.projects.find_by_code(params[:id])
  139 + @snippet = @project.snippets.find(params[:snippet_id])
  140 + present @snippet.content
  141 + end
101 142 end
102 143 end
103 144 end
... ...
spec/api/projects_spec.rb
... ... @@ -3,7 +3,7 @@ require 'spec_helper'
3 3 describe Gitlab::API do
4 4 let(:user) { Factory :user }
5 5 let!(:project) { Factory :project, :owner => user }
6   - let!(:snippet) { Factory :snippet, :author => user, :project => project }
  6 + let!(:snippet) { Factory :snippet, :author => user, :project => project, :title => 'example' }
7 7 before { project.add_access(user, :read) }
8 8  
9 9 describe "GET /projects" do
... ... @@ -67,6 +67,16 @@ describe Gitlab::API do
67 67 end
68 68 end
69 69  
  70 + describe "PUT /projects/:id/snippets" do
  71 + it "should update an existing project snippet" do
  72 + put "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}?private_token=#{user.private_token}",
  73 + :code => 'updated code'
  74 + response.status.should == 200
  75 + json_response['title'].should == 'example'
  76 + snippet.reload.content.should == 'updated code'
  77 + end
  78 + end
  79 +
70 80 describe "DELETE /projects/:id/snippets/:snippet_id" do
71 81 it "should create a new project snippet" do
72 82 expect {
... ... @@ -74,4 +84,11 @@ describe Gitlab::API do
74 84 }.should change { Snippet.count }.by(-1)
75 85 end
76 86 end
  87 +
  88 + describe "GET /projects/:id/snippets/:snippet_id/raw" do
  89 + it "should get a raw project snippet" do
  90 + get "#{api_prefix}/projects/#{project.code}/snippets/#{snippet.id}/raw?private_token=#{user.private_token}"
  91 + response.status.should == 200
  92 + end
  93 + end
77 94 end
... ...