add projects atom feed
This commit is contained in:
parent
2cf8010792
commit
f8f6ff065e
4 changed files with 53 additions and 4 deletions
|
@ -14,6 +14,11 @@ class ProjectsController < ApplicationController
|
||||||
@projects = current_user.projects.includes(:events).order("events.created_at DESC")
|
@projects = current_user.projects.includes(:events).order("events.created_at DESC")
|
||||||
@projects = @projects.page(params[:page]).per(40)
|
@projects = @projects.page(params[:page]).per(40)
|
||||||
@events = Event.where(:project_id => current_user.projects.map(&:id)).recent.limit(20)
|
@events = Event.where(:project_id => current_user.projects.map(&:id)).recent.limit(20)
|
||||||
|
|
||||||
|
respond_to do |format|
|
||||||
|
format.html
|
||||||
|
format.atom { render :layout => false }
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
def new
|
def new
|
||||||
|
@ -31,7 +36,7 @@ class ProjectsController < ApplicationController
|
||||||
@project.save!
|
@project.save!
|
||||||
@project.users_projects.create!(:project_access => UsersProject::MASTER, :user => current_user)
|
@project.users_projects.create!(:project_access => UsersProject::MASTER, :user => current_user)
|
||||||
|
|
||||||
# when project saved no team member exist so
|
# when project saved no team member exist so
|
||||||
# project repository should be updated after first user add
|
# project repository should be updated after first user add
|
||||||
@project.update_repository
|
@project.update_repository
|
||||||
end
|
end
|
||||||
|
@ -72,7 +77,7 @@ class ProjectsController < ApplicationController
|
||||||
@events = @project.events.recent.limit(limit)
|
@events = @project.events.recent.limit(limit)
|
||||||
|
|
||||||
respond_to do |format|
|
respond_to do |format|
|
||||||
format.html do
|
format.html do
|
||||||
if @project.repo_exists? && @project.has_commits?
|
if @project.repo_exists? && @project.has_commits?
|
||||||
render :show
|
render :show
|
||||||
else
|
else
|
||||||
|
|
|
@ -8,10 +8,11 @@
|
||||||
= javascript_include_tag "application"
|
= javascript_include_tag "application"
|
||||||
|
|
||||||
-# Atom feed
|
-# Atom feed
|
||||||
|
- if controller_name == 'projects' && action_name == 'index'
|
||||||
|
= auto_discovery_link_tag :atom, projects_url(:atom, :private_token => current_user.private_token), :title => "Dashboard feed"
|
||||||
- if @project && !@project.new_record?
|
- if @project && !@project.new_record?
|
||||||
- if current_page?(tree_project_ref_path(@project, @project.root_ref)) || current_page?(project_commits_path(@project))
|
- if current_page?(tree_project_ref_path(@project, @project.root_ref)) || current_page?(project_commits_path(@project))
|
||||||
= auto_discovery_link_tag(:atom, project_commits_url(@project, :atom, :ref => @ref, :private_token => current_user.private_token), :title => "Recent commits to #{@project.name}:#{@ref}")
|
= auto_discovery_link_tag(:atom, project_commits_url(@project, :atom, :ref => @ref, :private_token => current_user.private_token), :title => "Recent commits to #{@project.name}:#{@ref}")
|
||||||
- if request.path == project_issues_path(@project)
|
- if request.path == project_issues_path(@project)
|
||||||
= auto_discovery_link_tag(:atom, project_issues_url(@project, :atom, :private_token => current_user.private_token), :title => "#{@project.name} issues")
|
= auto_discovery_link_tag(:atom, project_issues_url(@project, :atom, :private_token => current_user.private_token), :title => "#{@project.name} issues")
|
||||||
= csrf_meta_tags
|
= csrf_meta_tags
|
||||||
|
|
||||||
|
|
36
app/views/projects/index.atom.builder
Normal file
36
app/views/projects/index.atom.builder
Normal file
|
@ -0,0 +1,36 @@
|
||||||
|
xml.instruct!
|
||||||
|
xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do
|
||||||
|
xml.title "Dashboard feed#{" - #{current_user.name}" if current_user.name.present?}"
|
||||||
|
xml.link :href => projects_url(:atom), :rel => "self", :type => "application/atom+xml"
|
||||||
|
xml.link :href => projects_url, :rel => "alternate", :type => "text/html"
|
||||||
|
xml.id projects_url
|
||||||
|
xml.updated @events.maximum(:updated_at).strftime("%Y-%m-%dT%H:%M:%SZ") if @events.any?
|
||||||
|
|
||||||
|
@events.each do |event|
|
||||||
|
if event.allowed?
|
||||||
|
xml.entry do
|
||||||
|
if event.issue?
|
||||||
|
event_link = project_issue_url(event.project, event.issue)
|
||||||
|
event_title = event.issue_title
|
||||||
|
elsif event.merge_request?
|
||||||
|
event_link = project_merge_request_url(event.project, event.merge_request)
|
||||||
|
event_title = event.merge_request_title
|
||||||
|
elsif event.push?
|
||||||
|
event_link = project_commits_url(event.project, :ref => event.ref_name)
|
||||||
|
event_title = event.ref_name
|
||||||
|
end
|
||||||
|
|
||||||
|
xml.id "tag:#{request.host},#{event.created_at.strftime("%Y-%m-%d")}:#{event.id}"
|
||||||
|
xml.link :href => event_link
|
||||||
|
xml.title truncate(event_title, :length => 80)
|
||||||
|
xml.updated event.created_at.strftime("%Y-%m-%dT%H:%M:%SZ")
|
||||||
|
xml.media :thumbnail, :width => "40", :height => "40", :url => gravatar_icon(event.author_email)
|
||||||
|
xml.author do |author|
|
||||||
|
xml.name event.author_name
|
||||||
|
xml.email event.author_email
|
||||||
|
end
|
||||||
|
xml.summary event_title
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
||||||
|
end
|
|
@ -18,9 +18,16 @@ describe "Projects" do
|
||||||
page.should have_content("New Project")
|
page.should have_content("New Project")
|
||||||
end
|
end
|
||||||
|
|
||||||
it "should have project" do
|
it "should have project" do
|
||||||
page.should have_content(@project.name)
|
page.should have_content(@project.name)
|
||||||
end
|
end
|
||||||
|
|
||||||
|
it "should render projects atom feed via private token" do
|
||||||
|
logout
|
||||||
|
|
||||||
|
visit projects_path(:atom, :private_token => @user.private_token)
|
||||||
|
page.body.should have_selector("feed title")
|
||||||
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
describe "GET /projects/new" do
|
describe "GET /projects/new" do
|
||||||
|
|
Loading…
Reference in a new issue