Events improved. Open/close issue, merge request events displayed

This commit is contained in:
Dmitriy Zaporozhets 2012-03-07 00:13:43 -08:00
parent 98b484b996
commit 94befdd502
13 changed files with 98 additions and 19 deletions

View file

@ -76,7 +76,7 @@ class IssuesController < ApplicationController
end end
def update def update
@issue.update_attributes(params[:issue]) @issue.update_attributes(params[:issue].merge(:author_id_of_changes => current_user.id))
respond_to do |format| respond_to do |format|
format.js format.js

View file

@ -87,7 +87,7 @@ class MergeRequestsController < ApplicationController
def update def update
respond_to do |format| respond_to do |format|
if @merge_request.update_attributes(params[:merge_request]) if @merge_request.update_attributes(params[:merge_request].merge(:author_id_of_changes => current_user.id))
format.html { redirect_to [@project, @merge_request], notice: 'Merge request was successfully updated.' } format.html { redirect_to [@project, @merge_request], notice: 'Merge request was successfully updated.' }
format.json { head :ok } format.json { head :ok }
else else

View file

@ -1,12 +1,25 @@
class ActivityObserver < ActiveRecord::Observer class ActivityObserver < ActiveRecord::Observer
observe :issue, :merge_request, :note observe :issue, :merge_request
def after_create(record) def after_create(record)
Event.create( Event.create(
:project => record.project, :project => record.project,
:target_id => record.id, :target_id => record.id,
:target_type => record.class.name, :target_type => record.class.name,
:action => Event.determine_action(record) :action => Event.determine_action(record),
:author_id => record.author_id
)
end
def after_save(record)
if record.changed.include?("closed")
Event.create(
:project => record.project,
:target_id => record.id,
:target_type => record.class.name,
:action => (record.closed ? Event::Closed : Event::Reopened),
:author_id => record.author_id_of_changes
) )
end end
end end
end

View file

@ -1,4 +1,6 @@
class Event < ActiveRecord::Base class Event < ActiveRecord::Base
default_scope where("author_id IS NOT NULL")
Created = 1 Created = 1
Updated = 2 Updated = 2
Closed = 3 Closed = 3
@ -26,13 +28,22 @@ class Event < ActiveRecord::Base
# - new issue # - new issue
# - merge request # - merge request
def allowed? def allowed?
push? || new_issue? || new_merge_request? push? || new_issue? || new_merge_request? ||
changed_merge_request? || changed_issue?
end end
def push? def push?
action == self.class::Pushed action == self.class::Pushed
end end
def closed?
action == self.class::Closed
end
def reopened?
action == self.class::Reopened
end
def new_tag? def new_tag?
data[:ref]["refs/tags"] data[:ref]["refs/tags"]
end end
@ -57,10 +68,6 @@ class Event < ActiveRecord::Base
@tag_name ||= data[:ref].gsub("refs/tags/", "") @tag_name ||= data[:ref].gsub("refs/tags/", "")
end end
def pusher
User.find_by_id(data[:user_id])
end
def new_issue? def new_issue?
target_type == "Issue" && target_type == "Issue" &&
action == Created action == Created
@ -71,6 +78,16 @@ class Event < ActiveRecord::Base
action == Created action == Created
end end
def changed_merge_request?
target_type == "MergeRequest" &&
[Closed, Reopened].include?(action)
end
def changed_issue?
target_type == "Issue" &&
[Closed, Reopened].include?(action)
end
def issue def issue
target if target_type == "Issue" target if target_type == "Issue"
end end
@ -80,7 +97,7 @@ class Event < ActiveRecord::Base
end end
def author def author
target.author @author ||= User.find(author_id)
end end
def commits def commits
@ -89,7 +106,6 @@ class Event < ActiveRecord::Base
end end
end end
delegate :id, :name, :email, :to => :pusher, :prefix => true, :allow_nil => true
delegate :name, :email, :to => :author, :prefix => true, :allow_nil => true delegate :name, :email, :to => :author, :prefix => true, :allow_nil => true
delegate :title, :to => :issue, :prefix => true, :allow_nil => true delegate :title, :to => :issue, :prefix => true, :allow_nil => true
delegate :title, :to => :merge_request, :prefix => true, :allow_nil => true delegate :title, :to => :merge_request, :prefix => true, :allow_nil => true

View file

@ -5,6 +5,7 @@ class Issue < ActiveRecord::Base
has_many :notes, :as => :noteable, :dependent => :destroy has_many :notes, :as => :noteable, :dependent => :destroy
attr_protected :author, :author_id, :project, :project_id attr_protected :author, :author_id, :project, :project_id
attr_accessor :author_id_of_changes
validates_presence_of :project_id validates_presence_of :project_id
validates_presence_of :assignee_id validates_presence_of :assignee_id

View file

@ -5,6 +5,7 @@ class MergeRequest < ActiveRecord::Base
has_many :notes, :as => :noteable, :dependent => :destroy has_many :notes, :as => :noteable, :dependent => :destroy
attr_protected :author, :author_id, :project, :project_id attr_protected :author, :author_id, :project, :project_id
attr_accessor :author_id_of_changes
validates_presence_of :project_id validates_presence_of :project_id
validates_presence_of :assignee_id validates_presence_of :assignee_id

View file

@ -68,7 +68,8 @@ class Project < ActiveRecord::Base
Event.create( Event.create(
:project => self, :project => self,
:action => Event::Pushed, :action => Event::Pushed,
:data => data :data => data,
:author_id => Key.find_by_identifier(author_key_id).user.id
) )
end end

View file

@ -2,7 +2,11 @@
.event_feed .event_feed
- if event.new_issue? - if event.new_issue?
= render "events/event_new_issue", :event => event = render "events/event_new_issue", :event => event
- if event.new_merge_request? - elsif event.new_merge_request?
= render "events/event_new_merge_request", :event => event = render "events/event_new_merge_request", :event => event
- elsif event.changed_merge_request?
= render "events/event_changed_merge_request", :event => event
- elsif event.changed_issue?
= render "events/event_changed_issue", :event => event
- elsif event.push? - elsif event.push?
= render "events/event_push", :event => event = render "events/event_push", :event => event

View file

@ -0,0 +1,14 @@
= image_tag gravatar_icon(event.author_email), :class => "avatar"
%strong #{event.author_name}
- if event.closed?
closed
- else
reopened
issue
= link_to project_issue_path(event.project, event.issue) do
%strong= truncate event.issue_title
at
%strong= link_to event.project.name, event.project
%span.cgray
= time_ago_in_words(event.created_at)
ago.

View file

@ -0,0 +1,19 @@
= image_tag gravatar_icon(event.author_email), :class => "avatar"
%strong #{event.author_name}
- if event.closed?
closed
- else
reopened
merge request
= link_to project_merge_request_path(event.project, event.merge_request) do
%strong= truncate event.merge_request_title
at
%strong= link_to event.project.name, event.project
%span.cgray
= time_ago_in_words(event.created_at)
ago.
%br
%span.label= event.merge_request.source_branch
&rarr;
%span.label= event.merge_request.target_branch

View file

@ -1,6 +1,6 @@
- if event.new_branch? || event.new_tag? - if event.new_branch? || event.new_tag?
= image_tag gravatar_icon(event.pusher_email), :class => "avatar" = image_tag gravatar_icon(event.author_email), :class => "avatar"
%strong #{event.pusher_name} %strong #{event.author_name}
pushed new pushed new
- if event.new_tag? - if event.new_tag?
tag tag
@ -16,8 +16,8 @@
= time_ago_in_words(event.created_at) = time_ago_in_words(event.created_at)
ago. ago.
- else - else
= image_tag gravatar_icon(event.pusher_email), :class => "avatar" = image_tag gravatar_icon(event.author_email), :class => "avatar"
%strong #{event.pusher_name} %strong #{event.author_name}
pushed to pushed to
= link_to project_commits_path(event.project, :ref => event.branch_name) do = link_to project_commits_path(event.project, :ref => event.branch_name) do
%strong= event.branch_name %strong= event.branch_name
@ -31,6 +31,10 @@
Compare #{event.commits.first.commit.id[0..8]}...#{event.commits.last.id[0..8]} Compare #{event.commits.first.commit.id[0..8]}...#{event.commits.last.id[0..8]}
- @project = event.project - @project = event.project
%ul.unstyled %ul.unstyled
- if event.commits.size > 4
= render event.commits[0..2]
%li ... and #{event.commits.size - 3} more commits
- else
= render event.commits = render event.commits

View file

@ -0,0 +1,5 @@
class AddAuthorIdToEvent < ActiveRecord::Migration
def change
add_column :events, :author_id, :integer, :null => true
end
end

View file

@ -11,7 +11,7 @@
# #
# It's strongly recommended to check this file into your version control system. # It's strongly recommended to check this file into your version control system.
ActiveRecord::Schema.define(:version => 20120301185805) do ActiveRecord::Schema.define(:version => 20120307095918) do
create_table "events", :force => true do |t| create_table "events", :force => true do |t|
t.string "target_type" t.string "target_type"
@ -22,6 +22,7 @@ ActiveRecord::Schema.define(:version => 20120301185805) do
t.datetime "created_at", :null => false t.datetime "created_at", :null => false
t.datetime "updated_at", :null => false t.datetime "updated_at", :null => false
t.integer "action" t.integer "action"
t.integer "author_id"
end end
create_table "issues", :force => true do |t| create_table "issues", :force => true do |t|