summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNihad Abbasov <narkoz.2008@gmail.com>2012-06-27 04:32:56 -0700
committerNihad Abbasov <narkoz.2008@gmail.com>2012-06-28 03:43:41 -0700
commit4ad91d3c1144c406e50c7b33bae684bd6837faf8 (patch)
tree1e9937f7bb8a2711215cfec4538b9e6b543fe742
parent4aca61e8a60cae56a7cceec7d66fd7aa4138c274 (diff)
downloadgitlab-ce-4ad91d3c1144c406e50c7b33bae684bd6837faf8.tar.gz
add users API
-rw-r--r--lib/api.rb31
-rw-r--r--lib/api/entities.rb8
-rw-r--r--lib/api/helpers.rb11
-rw-r--r--spec/api/users_spec.rb38
-rw-r--r--spec/spec_helper.rb4
5 files changed, 91 insertions, 1 deletions
diff --git a/lib/api.rb b/lib/api.rb
index a3e9e57b5a2..9e38bc496fe 100644
--- a/lib/api.rb
+++ b/lib/api.rb
@@ -1,2 +1,31 @@
-class Gitlab::API < Grape::API
+require 'api/entities'
+require 'api/helpers'
+
+module Gitlab
+ class API < Grape::API
+ format :json
+ helpers APIHelpers
+
+ resource :users do
+ before { authenticate! }
+
+ # GET /users
+ get do
+ @users = User.all
+ present @users, :with => Entities::User
+ end
+
+ # GET /users/:id
+ get ":id" do
+ @user = User.find(params[:id])
+ present @user, :with => Entities::User
+ end
+ end
+
+ # GET /user
+ get "/user" do
+ authenticate!
+ present @current_user, :with => Entities::User
+ end
+ end
end
diff --git a/lib/api/entities.rb b/lib/api/entities.rb
new file mode 100644
index 00000000000..3548e8cc5a9
--- /dev/null
+++ b/lib/api/entities.rb
@@ -0,0 +1,8 @@
+module Gitlab
+ module Entities
+ class User < Grape::Entity
+ expose :id, :email, :name, :bio, :skype, :linkedin, :twitter,
+ :dark_scheme, :theme_id, :blocked, :created_at
+ end
+ end
+end
diff --git a/lib/api/helpers.rb b/lib/api/helpers.rb
new file mode 100644
index 00000000000..cd2e39bf3a7
--- /dev/null
+++ b/lib/api/helpers.rb
@@ -0,0 +1,11 @@
+module Gitlab
+ module APIHelpers
+ def current_user
+ @current_user ||= User.find_by_authentication_token(params[:private_token])
+ end
+
+ def authenticate!
+ error!('401 Unauthorized', 401) unless current_user
+ end
+ end
+end
diff --git a/spec/api/users_spec.rb b/spec/api/users_spec.rb
new file mode 100644
index 00000000000..f142ac637ec
--- /dev/null
+++ b/spec/api/users_spec.rb
@@ -0,0 +1,38 @@
+require 'spec_helper'
+
+describe Gitlab::API do
+ let(:user) { Factory :user }
+
+ describe "GET /users" do
+ it "should return authentication error" do
+ get "/api/users"
+ response.status.should == 401
+ end
+
+ describe "authenticated GET /users" do
+ it "should return an array of users" do
+ get "/api/users?private_token=#{user.private_token}"
+ response.status.should == 200
+ json = JSON.parse(response.body)
+ json.should be_an Array
+ json.first['email'].should == user.email
+ end
+ end
+ end
+
+ describe "GET /users/:id" do
+ it "should return a user by id" do
+ get "/api/users/#{user.id}?private_token=#{user.private_token}"
+ response.status.should == 200
+ JSON.parse(response.body)['email'].should == user.email
+ end
+ end
+
+ describe "GET /user" do
+ it "should return current user" do
+ get "/api/user?private_token=#{user.private_token}"
+ response.status.should == 200
+ JSON.parse(response.body)['email'].should == user.email
+ end
+ end
+end
diff --git a/spec/spec_helper.rb b/spec/spec_helper.rb
index 5556798f511..65e7e529a5b 100644
--- a/spec/spec_helper.rb
+++ b/spec/spec_helper.rb
@@ -58,4 +58,8 @@ RSpec.configure do |config|
config.after do
DatabaseCleaner.clean
end
+
+ config.include RSpec::Rails::RequestExampleGroup, :type => :request, :example_group => {
+ :file_path => /spec\/api/
+ }
end