Commit d564902b5f4e408b063cdd42b5bb91168744e433

Added an API to export info about a user.

Commit diff

app/controllers/api_controller.rb

 
1class ApiController < ApplicationController
2
3 def user
4 @user = User.find_by_login!(params[:user])
5 @projects = @user.projects.find(:all, :include => [:tags, { :repositories => :project }])
6 @repositories = @user.repositories.find(:all, :conditions => ["mainline = ?", false])
7 end
8
9end
toggle raw diff

app/helpers/api_helper.rb

 
1module ApiHelper
2end
toggle raw diff

app/views/api/user.xml.builder

 
1xml.instruct! :xml, :version => "1.0"
2xml.user do
3 xml.name(@user.login)
4 xml.login(@user.login)
5 xml.email(@user.email)
6 xml.location('unknown')
7 xml.repositories do
8 @projects.each do |project|
9 xml.repository do
10 xml.name(project.slug)
11 xml.url(url_for(:controller => 'projects', :action => 'show', :id => project, :only_path => false))
12 xml.description(project.description)
13 xml.homepage(project.home_url)
14 end
15 end
16 end
17end
toggle raw diff

config/routes.rb

 
5858 end
5959
6060 map.resource :search
61
62 map.api '/api/:format/:action/:user', :controller => 'api', :requirements => { :id => /.+/ }
6163
6264 map.with_options :controller => 'sessions' do |session|
6365 session.login '/login', :action => 'new'
toggle raw diff

spec/controllers/api_controller_spec.rb

 
1require File.dirname(__FILE__) + '/../spec_helper'
2
3describe ApiController do
4
5 describe "users api" do
6 integrate_views
7
8 it "should render useful user information" do
9 get :user, :format => 'xml', :user => 'johan'
10 response.body.should include(%Q{<login>johan</login>})
11 end
12
13 end
14
15end
toggle raw diff