summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorNihad Abbasov <narkoz.2008@gmail.com>2011-11-11 13:29:58 +0400
committerNihad Abbasov <narkoz.2008@gmail.com>2011-11-11 13:29:58 +0400
commitf295ff84d9597b60c985657aa03fc1ef1e087aa8 (patch)
tree4b1e08cf20f3673afa542f12d0f7b294ce7204c0
parent2b04c2a67fb981a1ef3491be4d7775de7f2a221d (diff)
downloadgitlab-ce-f295ff84d9597b60c985657aa03fc1ef1e087aa8.tar.gz
create atom feed for issues
-rw-r--r--app/controllers/issues_controller.rb3
-rw-r--r--app/views/issues/index.atom.builder23
-rw-r--r--app/views/layouts/project.html.haml2
-rw-r--r--spec/requests/issues_spec.rb25
4 files changed, 44 insertions, 9 deletions
diff --git a/app/controllers/issues_controller.rb b/app/controllers/issues_controller.rb
index 508cfc3974a..2ba54f3073d 100644
--- a/app/controllers/issues_controller.rb
+++ b/app/controllers/issues_controller.rb
@@ -22,6 +22,7 @@ class IssuesController < ApplicationController
respond_to do |format|
format.html # index.html.erb
format.js
+ format.atom { render :layout => false }
end
end
@@ -38,7 +39,7 @@ class IssuesController < ApplicationController
@notes = @issue.notes.order("created_at DESC").limit(20)
@note = @project.notes.new(:noteable => @issue)
- respond_to do |format|
+ respond_to do |format|
format.html
format.js { respond_with_notes }
end
diff --git a/app/views/issues/index.atom.builder b/app/views/issues/index.atom.builder
new file mode 100644
index 00000000000..00ddd4bf702
--- /dev/null
+++ b/app/views/issues/index.atom.builder
@@ -0,0 +1,23 @@
+xml.instruct!
+xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do
+ xml.title "#{@project.name} issues"
+ xml.link :href => project_issues_url(@project, :atom), :rel => "self", :type => "application/atom+xml"
+ xml.link :href => project_issues_url(@project), :rel => "alternate", :type => "text/html"
+ xml.id project_issues_url(@project)
+ xml.updated @issues.first.created_at.strftime("%Y-%m-%dT%H:%M:%SZ") if @issues.any?
+
+ @issues.each do |issue|
+ xml.entry do
+ xml.id project_issue_url(@project, issue)
+ xml.link :href => project_issue_url(@project, issue)
+ xml.title truncate(issue.title, :length => 80)
+ xml.updated issue.created_at.strftime("%Y-%m-%dT%H:%M:%SZ")
+ xml.media :thumbnail, :width => "40", :height => "40", :url => gravatar_icon(issue.author_email)
+ xml.author do |author|
+ xml.name issue.author_name
+ xml.email issue.author_email
+ end
+ xml.summary issue.title
+ end
+ end
+end
diff --git a/app/views/layouts/project.html.haml b/app/views/layouts/project.html.haml
index 927d62db295..4fb3354bc02 100644
--- a/app/views/layouts/project.html.haml
+++ b/app/views/layouts/project.html.haml
@@ -7,6 +7,8 @@
= javascript_include_tag "application"
- if current_page?(tree_project_path(@project)) || current_page?(project_commits_path(@project))
= auto_discovery_link_tag(:atom, project_commits_url(@project, :atom, :ref => @ref), :title => "Recent commits to #{@project.name}:#{@ref}")
+ - if request.path == project_issues_path(@project)
+ = auto_discovery_link_tag(:atom, project_issues_url(@project, :atom), :title => "#{@project.name} issues")
= csrf_meta_tags
= javascript_tag do
REQ_URI = "#{request.env["REQUEST_URI"]}";
diff --git a/spec/requests/issues_spec.rb b/spec/requests/issues_spec.rb
index 235b0b22760..c77316d6452 100644
--- a/spec/requests/issues_spec.rb
+++ b/spec/requests/issues_spec.rb
@@ -27,6 +27,15 @@ describe "Issues" do
it { should have_content(@issue.project.name) }
it { should have_content(@issue.assignee.name) }
+ it "should render atom feed" do
+ visit project_issues_path(project, :atom)
+
+ page.response_headers['Content-Type'].should have_content("application/atom+xml")
+ page.body.should have_selector("title", :text => "#{project.name} issues")
+ page.body.should have_selector("author email", :text => @issue.author_email)
+ page.body.should have_selector("entry summary", :text => @issue.title)
+ end
+
describe "Destroy" do
before do
# admin access to remove issue
@@ -81,13 +90,13 @@ describe "Issues" do
end
describe "fill in" do
- describe 'assign to me' do
+ describe 'assign to me' do
before do
fill_in "issue_title", :with => "bug 345"
click_link "Select user"
within "#issue_assignee_id-menu" do
click_link @user.name
- end
+ end
end
it { expect { click_button "Save" }.to change {Issue.count}.by(1) }
@@ -107,13 +116,13 @@ describe "Issues" do
end
end
- describe 'assign to other' do
+ describe 'assign to other' do
before do
fill_in "issue_title", :with => "bug 345"
click_link "Select user"
within "#issue_assignee_id-menu" do
click_link @user2.name
- end
+ end
end
it { expect { click_button "Save" }.to change {Issue.count}.by(1) }
@@ -145,7 +154,7 @@ describe "Issues" do
end
end
- describe "Show issue" do
+ describe "Show issue" do
before do
@issue = Factory :issue,
:author => @user,
@@ -205,7 +214,7 @@ describe "Issues" do
@issue.save
end
end
-
+
it "should be able to search on different statuses" do
@issue = Issue.first
@issue.closed = true
@@ -214,13 +223,13 @@ describe "Issues" do
visit project_issues_path(project)
choose 'closed_issues'
fill_in 'issue_search', :with => 'foobar'
-
+
page.should have_content 'foobar'
page.should_not have_content 'foobar2'
page.should_not have_content 'gitlab'
end
- it "should search for term and return the correct results" do
+ it "should search for term and return the correct results" do
visit project_issues_path(project)
fill_in 'issue_search', :with => 'foobar'