OSDN Git Service

Create events on comments and milestone
authorDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Fri, 14 Dec 2012 17:33:33 +0000 (19:33 +0200)
committerDmitriy Zaporozhets <dmitriy.zaporozhets@gmail.com>
Fri, 14 Dec 2012 17:33:33 +0000 (19:33 +0200)
app/controllers/milestones_controller.rb
app/models/event.rb
app/models/milestone.rb
app/models/note.rb
app/observers/activity_observer.rb
app/views/events/_event.html.haml
app/views/events/event/_note.html.haml [new file with mode: 0644]

index 276317d..fb3bdf4 100644 (file)
@@ -43,6 +43,7 @@ class MilestonesController < ProjectResourceController
 
   def create
     @milestone = @project.milestones.new(params[:milestone])
+    @milestone.author_id = current_user.id
 
     if @milestone.save
       redirect_to project_milestone_path(@project, @milestone)
@@ -52,6 +53,7 @@ class MilestonesController < ProjectResourceController
   end
 
   def update
+    @milestone.author_id = current_user.id
     @milestone.update_attributes(params[:milestone])
 
     respond_to do |format|
index 2b92783..ee1998e 100644 (file)
@@ -63,7 +63,7 @@ class Event < ActiveRecord::Base
   #  - new issue
   #  - merge request
   def allowed?
-    push? || issue? || merge_request? || membership_changed?
+    push? || issue? || merge_request? || membership_changed? || note? || milestone?
   end
 
   def project_name
@@ -94,6 +94,14 @@ class Event < ActiveRecord::Base
     action == self.class::Reopened
   end
 
+  def milestone?
+    target_type == "Milestone"
+  end
+
+  def note?
+    target_type == "Note"
+  end
+
   def issue?
     target_type == "Issue"
   end
index e700cc2..9e3c2bb 100644 (file)
@@ -14,6 +14,7 @@
 
 class Milestone < ActiveRecord::Base
   attr_accessible :title, :description, :due_date, :closed
+  attr_accessor :author_id
 
   belongs_to :project
   has_many :issues
index da15a17..219ed9b 100644 (file)
@@ -121,4 +121,12 @@ class Note < ActiveRecord::Base
   def downvote?
     note.start_with?('-1') || note.start_with?(':-1:')
   end
+
+  def noteable_type_name
+    if noteable_type.present?
+      noteable_type.downcase
+    else
+      "wall"
+    end
+  end
 end
index 48351ba..fa39bbf 100644 (file)
@@ -1,5 +1,5 @@
 class ActivityObserver < ActiveRecord::Observer
-  observe :issue, :merge_request
+  observe :issue, :merge_request, :note, :milestone
 
   def after_create(record)
     Event.create(
@@ -12,7 +12,7 @@ class ActivityObserver < ActiveRecord::Observer
   end
 
   def after_save(record)
-    if record.changed.include?("closed") 
+    if record.changed.include?("closed")
       Event.create(
         project: record.project,
         target_id: record.id,
index 2446b76..9625e1e 100644 (file)
@@ -5,6 +5,8 @@
 
     - if event.push?
       = render "events/event/push", event: event
+    - if event.note?
+      = render "events/event/note", event: event
     - else
       = render "events/event/common", event: event
 
diff --git a/app/views/events/event/_note.html.haml b/app/views/events/event/_note.html.haml
new file mode 100644 (file)
index 0000000..5dddef1
--- /dev/null
@@ -0,0 +1,16 @@
+.event-title
+  %span.author_name= link_to_author event
+  %span.event_label commented on #{event.target.noteable_type_name}
+  - if event.target and event.target.noteable_id
+    = link_to [event.project, event.target.noteable] do
+      %strong= truncate event.target.noteable_id
+  - else
+    %strong (deleted)
+  at
+  - if event.project
+    = link_to_project event.project
+  - else
+    = event.project_name
+
+.event-body
+  %p.hint= truncate event.target.note, length: 70