Events improved. Open/close issue, merge request events displayed
This commit is contained in:
parent
98b484b996
commit
94befdd502
13 changed files with 98 additions and 19 deletions
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
||||||
|
|
|
@ -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
|
||||||
|
|
14
app/views/events/_event_changed_issue.html.haml
Normal file
14
app/views/events/_event_changed_issue.html.haml
Normal 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.
|
19
app/views/events/_event_changed_merge_request.html.haml
Normal file
19
app/views/events/_event_changed_merge_request.html.haml
Normal 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
|
||||||
|
→
|
||||||
|
%span.label= event.merge_request.target_branch
|
||||||
|
|
|
@ -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
|
||||||
= render event.commits
|
- if event.commits.size > 4
|
||||||
|
= render event.commits[0..2]
|
||||||
|
%li ... and #{event.commits.size - 3} more commits
|
||||||
|
- else
|
||||||
|
= render event.commits
|
||||||
|
|
||||||
|
|
||||||
|
|
5
db/migrate/20120307095918_add_author_id_to_event.rb
Normal file
5
db/migrate/20120307095918_add_author_id_to_event.rb
Normal file
|
@ -0,0 +1,5 @@
|
||||||
|
class AddAuthorIdToEvent < ActiveRecord::Migration
|
||||||
|
def change
|
||||||
|
add_column :events, :author_id, :integer, :null => true
|
||||||
|
end
|
||||||
|
end
|
|
@ -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|
|
||||||
|
|
Loading…
Reference in a new issue