Update RefExtractor to handle atom feeds

This commit is contained in:
Robert Speicher 2012-09-20 13:25:28 -04:00
parent 398ba6f1bb
commit a8ea8d98a4
3 changed files with 12 additions and 15 deletions

View file

@ -1,8 +1,5 @@
# Controller for viewing a repository's file structure
class TreeController < ApplicationController
# Thrown when given an invalid path
class InvalidPathError < StandardError; end
include RefExtractor
layout "project"

View file

@ -1,7 +1,7 @@
# Module providing an extract_ref method for controllers working with Git
# tree-ish + path params
module RefExtractor
# Thrown when given an invalid path
# Raised when given an invalid path
class InvalidPathError < StandardError; end
# Given a string containing both a Git ref - such as a branch or tag - and a
@ -81,6 +81,12 @@ module RefExtractor
# Automatically renders `not_found!` if a valid tree could not be resolved
# (e.g., when a user inserts an invalid path or ref).
def assign_ref_vars
# Handle formats embedded in the id
if params[:id].ends_with?('.atom')
params[:id].gsub!(/\.atom$/, '')
request.format = :atom
end
@ref, @path = extract_ref(params[:id])
@id = File.join(@ref, @path)

View file

@ -293,11 +293,7 @@ end
# patch_project_commit GET /:project_id/commits/:id/patch(.:format) commits#patch
# project_commits GET /:project_id/commits(.:format) commits#index
# POST /:project_id/commits(.:format) commits#create
# new_project_commit GET /:project_id/commits/new(.:format) commits#new
# edit_project_commit GET /:project_id/commits/:id/edit(.:format) commits#edit
# project_commit GET /:project_id/commits/:id(.:format) commits#show
# PUT /:project_id/commits/:id(.:format) commits#update
# DELETE /:project_id/commits/:id(.:format) commits#destroy
describe CommitsController, "routing" do
it "to #compare" do
get("/gitlabhq/commits/compare").should route_to('commits#compare', project_id: 'gitlabhq')
@ -307,6 +303,10 @@ describe CommitsController, "routing" do
get("/gitlabhq/commits/1/patch").should route_to('commits#patch', project_id: 'gitlabhq', id: '1')
end
it "does something with atom feeds" do
get("/gitlabhq/commits/master.atom").should route_to('commits#show', project_id: 'gitlabhq', id: 'master.atom')
end
it_behaves_like "RESTful project resources" do
let(:actions) { [:index, :show] }
let(:controller) { 'commits' }
@ -425,6 +425,7 @@ end
# /:project_id/commits/*path
# /gitlabhq/commits/master/app/contexts/base_context.rb
# /gitlabhq/commits/test/branch/name/app/contexts/base_context.rb
# /gitlabhq/commits/master.atom
#
# /:project_id/raw/*path
# /gitlabhq/raw/master/app/contexts/base_context.rb
@ -436,13 +437,6 @@ end
describe "pending routing" do
before { pending }
describe "/:project_id/commit/:id" do
it "routes to a specific commit" do
get("/gitlabhq/commit/f4b1449").should route_to('commit#show', project_id: 'gitlabhq', id: 'f4b1449')
get("/gitlabhq/commit/f4b14494ef6abf3d144c28e4af0c20143383e062").should route_to('commit#show', project_id: 'gitlabhq', id: 'f4b14494ef6abf3d144c28e4af0c20143383e062')
end
end
describe "/:project_id/raw/:id" do
it "routes to a ref with a path" do
get("/gitlabhq/raw/master/app/models/project.rb").should route_to('raw#show', project_id: 'gitlabhq', id: 'master/app/models/project.rb')