From a8ea8d98a4f88a292289ddfedef4358033b68ec0 Mon Sep 17 00:00:00 2001 From: Robert Speicher Date: Thu, 20 Sep 2012 13:25:28 -0400 Subject: [PATCH] Update RefExtractor to handle atom feeds --- app/controllers/tree_controller.rb | 3 --- lib/ref_extractor.rb | 8 +++++++- spec/routing/project_routing_spec.rb | 16 +++++----------- 3 files changed, 12 insertions(+), 15 deletions(-) diff --git a/app/controllers/tree_controller.rb b/app/controllers/tree_controller.rb index e0dd8f8b..43087664 100644 --- a/app/controllers/tree_controller.rb +++ b/app/controllers/tree_controller.rb @@ -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" diff --git a/lib/ref_extractor.rb b/lib/ref_extractor.rb index b9c02917..1db74b95 100644 --- a/lib/ref_extractor.rb +++ b/lib/ref_extractor.rb @@ -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) diff --git a/spec/routing/project_routing_spec.rb b/spec/routing/project_routing_spec.rb index 01bc303d..04164d5d 100644 --- a/spec/routing/project_routing_spec.rb +++ b/spec/routing/project_routing_spec.rb @@ -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')