Commit 10d3a30b authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets

APi for commits. Better api docs

parent 4cc169d3
...@@ -4,6 +4,7 @@ ...@@ -4,6 +4,7 @@
guard 'rspec', :version => 2, :all_on_start => false, :all_after_pass => false do guard 'rspec', :version => 2, :all_on_start => false, :all_after_pass => false do
watch(%r{^spec/.+_spec\.rb$}) watch(%r{^spec/.+_spec\.rb$})
watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" } watch(%r{^lib/(.+)\.rb$}) { |m| "spec/lib/#{m[1]}_spec.rb" }
watch(%r{^lib/api/(.+)\.rb$}) { |m| "spec/requests/api/#{m[1]}_spec.rb" }
watch('spec/spec_helper.rb') { "spec" } watch('spec/spec_helper.rb') { "spec" }
# Rails example # Rails example
......
%h3 API %h3.page_title API
.back_link .back_link
= link_to help_path do = link_to help_path do
← to index ← to index
%hr %br
%ol %ul.nav.nav-tabs.log-tabs
%li.active
= link_to "README", "#README", 'data-toggle' => 'tab'
%li %li
%a{href: "#README"} README = link_to "Projects", "#projects", 'data-toggle' => 'tab'
%li %li
%a{href: "#projects"} Projects = link_to "Snippets", "#snippets", 'data-toggle' => 'tab'
%li %li
%a{href: "#snippets"} Snippets = link_to "Users", "#users", 'data-toggle' => 'tab'
%li %li
%a{href: "#users"} Users = link_to "Session", "#session", 'data-toggle' => 'tab'
%li %li
%a{href: "#session"} Session = link_to "Issues", "#issues", 'data-toggle' => 'tab'
%li %li
%a{href: "#issues"} Issues = link_to "Milestones", "#milestones", 'data-toggle' => 'tab'
%li %li
%a{href: "#milestones"} Milestones = link_to "Commits", "#commits", 'data-toggle' => 'tab'
.file_holder#README
.file_title
%i.icon-file
README
.file_content.wiki
= preserve do
= markdown File.read(Rails.root.join("doc", "api", "README.md"))
%br
.file_holder#projects
.file_title
%i.icon-file
Projects
.file_content.wiki
= preserve do
= markdown File.read(Rails.root.join("doc", "api", "projects.md"))
%br
.file_holder#snippets
.file_title
%i.icon-file
Projects Snippets
.file_content.wiki
= preserve do
= markdown File.read(Rails.root.join("doc", "api", "snippets.md"))
%br .tab-content
.tab-pane.active#README
.file_holder
.file_title
%i.icon-file
README
.file_content.wiki
= preserve do
= markdown File.read(Rails.root.join("doc", "api", "README.md"))
.file_holder#users .tab-pane#projects
.file_title .file_holder
%i.icon-file .file_title
Users %i.icon-file
.file_content.wiki Projects
= preserve do .file_content.wiki
= markdown File.read(Rails.root.join("doc", "api", "users.md")) = preserve do
= markdown File.read(Rails.root.join("doc", "api", "projects.md"))
%br .tab-pane#snippets
.file_holder
.file_title
%i.icon-file
Projects Snippets
.file_content.wiki
= preserve do
= markdown File.read(Rails.root.join("doc", "api", "snippets.md"))
.file_holder#session .tab-pane#users
.file_title .file_holder
%i.icon-file .file_title
Session %i.icon-file
.file_content.wiki Users
= preserve do .file_content.wiki
= markdown File.read(Rails.root.join("doc", "api", "session.md")) = preserve do
= markdown File.read(Rails.root.join("doc", "api", "users.md"))
%br .tab-pane#session
.file_holder
.file_title
%i.icon-file
Session
.file_content.wiki
= preserve do
= markdown File.read(Rails.root.join("doc", "api", "session.md"))
.file_holder#issues .tab-pane#issues
.file_title .file_holder
%i.icon-file .file_title
Issues %i.icon-file
.file_content.wiki Issues
= preserve do .file_content.wiki
= markdown File.read(Rails.root.join("doc", "api", "issues.md")) = preserve do
= markdown File.read(Rails.root.join("doc", "api", "issues.md"))
%br .tab-pane#milestones
.file_holder
.file_title
%i.icon-file
Milestones
.file_content.wiki
= preserve do
= markdown File.read(Rails.root.join("doc", "api", "milestones.md"))
.file_holder#milestones .tab-pane#commits
.file_title .file_holder
%i.icon-file .file_title
Milestones %i.icon-file
.file_content.wiki Commits
= preserve do .file_content.wiki
= markdown File.read(Rails.root.join("doc", "api", "milestones.md")) = preserve do
= markdown File.read(Rails.root.join("doc", "api", "commits.md"))
## List Commits
Get a list of project commits.
```
GET /projects/:id/commits
```
Parameters:
+ `id` (required) - The ID or code name of a project
+ `ref_name` (optional) - branch/tag name
+ `page` (optional)
+ `per_page` (optional)
```json
[
{
"id": "ed899a2f4b50b4370feeea94676502b42383c746",
"short_id": "ed899a2f4b5",
"title": "Replace sanitize with escape once",
"author_name": "Dmitriy Zaporozhets",
"author_email": "dzaporozhets@sphereconsultinginc.com",
"created_at": "2012-09-20T11:50:22+03:00"
},
{
"id": "6104942438c14ec7bd21c6cd5bd995272b3faff6",
"short_id": "6104942438c",
"title": "Sanitize for network graph",
"author_name": "randx",
"author_email": "dmitriy.zaporozhets@gmail.com",
"created_at": "2012-09-20T09:06:12+03:00"
}
]
```
...@@ -19,5 +19,6 @@ module Gitlab ...@@ -19,5 +19,6 @@ module Gitlab
mount Milestones mount Milestones
mount Keys mount Keys
mount Session mount Session
mount Commits
end end
end end
module Gitlab
# Commits API
class Commits < Grape::API
before { authenticate! }
resource :projects do
# Get a list of project commits
#
# Parameters:
# id (required) - The ID or code name of a project
# ref_name (optional) - Name of branch or tag
# page (optional) - default is 0
# per_page (optional) - default is 20
# Example Request:
# GET /projects/:id/commits
get ":id/commits" do
authorize! :download_code, user_project
page = params[:page] || 0
per_page = params[:per_page] || 20
ref = params[:ref_name] || user_project.try(:default_branch) || 'master'
commits = user_project.commits(ref, nil, per_page, page * per_page)
present CommitDecorator.decorate(commits), with: Entities::Commit
end
end
end
end
...@@ -17,6 +17,11 @@ module Gitlab ...@@ -17,6 +17,11 @@ module Gitlab
expose :id, :url expose :id, :url
end end
class Commit < Grape::Entity
expose :id, :short_id, :title,
:author_name, :author_email, :created_at
end
class Project < Grape::Entity class Project < Grape::Entity
expose :id, :code, :name, :description, :path, :default_branch expose :id, :code, :name, :description, :path, :default_branch
expose :owner, using: Entities::UserBasic expose :owner, using: Entities::UserBasic
......
...@@ -61,7 +61,7 @@ module Gitlab ...@@ -61,7 +61,7 @@ module Gitlab
error!({'message' => message}, status) error!({'message' => message}, status)
end end
private private
def abilities def abilities
@abilities ||= begin @abilities ||= begin
......
...@@ -11,6 +11,8 @@ module Gitlab ...@@ -11,6 +11,8 @@ module Gitlab
# Example Request: # Example Request:
# GET /projects/:id/milestones # GET /projects/:id/milestones
get ":id/milestones" do get ":id/milestones" do
authorize! :read_milestone, user_project
present paginate(user_project.milestones), with: Entities::Milestone present paginate(user_project.milestones), with: Entities::Milestone
end end
...@@ -22,6 +24,8 @@ module Gitlab ...@@ -22,6 +24,8 @@ module Gitlab
# Example Request: # Example Request:
# GET /projects/:id/milestones/:milestone_id # GET /projects/:id/milestones/:milestone_id
get ":id/milestones/:milestone_id" do get ":id/milestones/:milestone_id" do
authorize! :read_milestone, user_project
@milestone = user_project.milestones.find(params[:milestone_id]) @milestone = user_project.milestones.find(params[:milestone_id])
present @milestone, with: Entities::Milestone present @milestone, with: Entities::Milestone
end end
...@@ -36,6 +40,8 @@ module Gitlab ...@@ -36,6 +40,8 @@ module Gitlab
# Example Request: # Example Request:
# POST /projects/:id/milestones # POST /projects/:id/milestones
post ":id/milestones" do post ":id/milestones" do
authorize! :admin_milestone, user_project
attrs = attributes_for_keys [:title, :description, :due_date] attrs = attributes_for_keys [:title, :description, :due_date]
@milestone = user_project.milestones.new attrs @milestone = user_project.milestones.new attrs
if @milestone.save if @milestone.save
......
...@@ -40,14 +40,14 @@ module Gitlab ...@@ -40,14 +40,14 @@ module Gitlab
post do post do
params[:code] ||= params[:name] params[:code] ||= params[:name]
params[:path] ||= params[:name] params[:path] ||= params[:name]
attrs = attributes_for_keys [:code, attrs = attributes_for_keys [:code,
:path, :path,
:name, :name,
:description, :description,
:default_branch, :default_branch,
:issues_enabled, :issues_enabled,
:wall_enabled, :wall_enabled,
:merge_requests_enabled, :merge_requests_enabled,
:wiki_enabled] :wiki_enabled]
@project = Project.create_by_user(attrs, current_user) @project = Project.create_by_user(attrs, current_user)
if @project.saved? if @project.saved?
...@@ -207,6 +207,8 @@ module Gitlab ...@@ -207,6 +207,8 @@ module Gitlab
# Example Request: # Example Request:
# POST /projects/:id/snippets # POST /projects/:id/snippets
post ":id/snippets" do post ":id/snippets" do
authorize! :write_snippet, user_project
attrs = attributes_for_keys [:title, :file_name] attrs = attributes_for_keys [:title, :file_name]
attrs[:expires_at] = params[:lifetime] if params[:lifetime].present? attrs[:expires_at] = params[:lifetime] if params[:lifetime].present?
attrs[:content] = params[:code] if params[:code].present? attrs[:content] = params[:code] if params[:code].present?
...@@ -282,6 +284,8 @@ module Gitlab ...@@ -282,6 +284,8 @@ module Gitlab
# Example Request: # Example Request:
# GET /projects/:id/repository/commits/:sha/blob # GET /projects/:id/repository/commits/:sha/blob
get ":id/repository/commits/:sha/blob" do get ":id/repository/commits/:sha/blob" do
authorize! :download_code, user_project
ref = params[:sha] ref = params[:sha]
commit = user_project.commit ref commit = user_project.commit ref
......
require 'spec_helper'
describe Gitlab::API do
include ApiHelpers
let(:user) { Factory :user }
let!(:project) { Factory :project, owner: user }
describe "GET /projects/:id/commits" do
context "authorized user" do
before { project.add_access(user, :read) }
it "should return project commits" do
get api("/projects/#{project.code}/commits", user)
response.status.should == 200
json_response.should be_an Array
json_response.first['id'].should == project.commit.id
end
end
context "unauthorized user" do
it "should return project commits" do
get api("/projects/#{project.code}/commits")
response.status.should == 401
end
end
end
end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment