Feature: atom feed for user activity
Signed-off-by: Dmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
This commit is contained in:
parent
05d713be19
commit
a46fe875c6
|
@ -20,7 +20,7 @@ v 7.6.0
|
|||
- In the docker directory is a container template based on the Omnibus packages.
|
||||
- Update Sidekiq to version 2.17.8
|
||||
-
|
||||
-
|
||||
- Atom feed for user activity
|
||||
|
||||
v 7.5.2
|
||||
- Don't log Sidekiq arguments by default
|
||||
|
|
|
@ -20,9 +20,14 @@ class UsersController < ApplicationController
|
|||
|
||||
# Get user activity feed for projects common for both users
|
||||
@events = @user.recent_events.
|
||||
where(project_id: authorized_projects_ids).limit(20)
|
||||
where(project_id: authorized_projects_ids).limit(30)
|
||||
|
||||
@title = @user.name
|
||||
|
||||
respond_to do |format|
|
||||
format.html
|
||||
format.atom { render layout: false }
|
||||
end
|
||||
end
|
||||
|
||||
def determine_layout
|
||||
|
|
|
@ -0,0 +1,29 @@
|
|||
xml.instruct!
|
||||
xml.feed "xmlns" => "http://www.w3.org/2005/Atom", "xmlns:media" => "http://search.yahoo.com/mrss/" do
|
||||
xml.title "Activity feed for #{@user.name}"
|
||||
xml.link :href => user_url(@user, :atom), :rel => "self", :type => "application/atom+xml"
|
||||
xml.link :href => user_url(@user), :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.proper?
|
||||
xml.entry do
|
||||
event_link = event_feed_url(event)
|
||||
event_title = event_feed_title(event)
|
||||
event_summary = event_feed_summary(event)
|
||||
|
||||
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 => avatar_icon(event.author_email)
|
||||
xml.author do |author|
|
||||
xml.name event.author_name
|
||||
xml.email event.author_email
|
||||
end
|
||||
xml.summary(:type => "xhtml") { |x| x << event_summary unless event_summary.nil? }
|
||||
end
|
||||
end
|
||||
end
|
||||
end
|
|
@ -18,7 +18,15 @@
|
|||
%h4 Groups:
|
||||
= render 'groups', groups: @groups
|
||||
%hr
|
||||
%h4 User Activity:
|
||||
%h4
|
||||
User Activity:
|
||||
|
||||
- if current_user
|
||||
%span.rss-icon.pull-right
|
||||
= link_to user_path(@user, :atom, { private_token: current_user.private_token }) do
|
||||
%strong
|
||||
%i.fa.fa-rss
|
||||
|
||||
= render @events
|
||||
.col-md-4
|
||||
= render 'profile', user: @user
|
||||
|
|
|
@ -137,7 +137,8 @@ Gitlab::Application.routes.draw do
|
|||
end
|
||||
end
|
||||
|
||||
match "/u/:username" => "users#show", as: :user, constraints: { username: /.*/ }, via: :get
|
||||
match "/u/:username" => "users#show", as: :user,
|
||||
constraints: {username: /(?:[^.]|\.(?!atom$))+/, format: /atom/}, via: :get
|
||||
|
||||
#
|
||||
# Dashboard Area
|
||||
|
|
|
@ -0,0 +1,43 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe "User Feed", feature: true do
|
||||
describe "GET /" do
|
||||
let!(:user) { create(:user) }
|
||||
|
||||
context "user atom feed via private token" do
|
||||
it "should render user atom feed" do
|
||||
visit user_path(user, :atom, private_token: user.private_token)
|
||||
body.should have_selector("feed title")
|
||||
end
|
||||
end
|
||||
|
||||
context 'feed content' do
|
||||
let(:project) { create(:project) }
|
||||
let(:issue) { create(:issue, project: project, author: user, description: '') }
|
||||
let(:note) { create(:note, noteable: issue, author: user, note: 'Bug confirmed', project: project) }
|
||||
|
||||
before do
|
||||
project.team << [user, :master]
|
||||
issue_event(issue, user)
|
||||
note_event(note, user)
|
||||
visit user_path(user, :atom, private_token: user.private_token)
|
||||
end
|
||||
|
||||
it "should have issue opened event" do
|
||||
body.should have_content("#{user.name} opened issue ##{issue.iid}")
|
||||
end
|
||||
|
||||
it "should have issue comment event" do
|
||||
body.should have_content("#{user.name} commented on issue ##{issue.iid}")
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
def issue_event(issue, user)
|
||||
EventCreateService.new.open_issue(issue, user)
|
||||
end
|
||||
|
||||
def note_event(note, user)
|
||||
EventCreateService.new.leave_note(note, user)
|
||||
end
|
||||
end
|
Loading…
Reference in New Issue