2012-02-28 14:09:23 +01:00
|
|
|
class Event < ActiveRecord::Base
|
2012-06-07 14:44:57 +02:00
|
|
|
include PushEvent
|
|
|
|
|
2012-09-26 20:17:17 +02:00
|
|
|
attr_accessible :project, :action, :data, :author_id, :project_id,
|
|
|
|
:target_id, :target_type
|
|
|
|
|
2012-03-07 09:13:43 +01:00
|
|
|
default_scope where("author_id IS NOT NULL")
|
|
|
|
|
2012-02-28 15:01:14 +01:00
|
|
|
Created = 1
|
|
|
|
Updated = 2
|
|
|
|
Closed = 3
|
|
|
|
Reopened = 4
|
|
|
|
Pushed = 5
|
|
|
|
Commented = 6
|
2012-03-14 23:57:43 +01:00
|
|
|
Merged = 7
|
2012-09-09 22:18:28 +02:00
|
|
|
Joined = 8 # User joined project
|
2012-09-09 23:27:47 +02:00
|
|
|
Left = 9 # User left project
|
2012-02-28 15:01:14 +01:00
|
|
|
|
2012-09-27 08:20:36 +02:00
|
|
|
delegate :name, :email, to: :author, prefix: true, allow_nil: true
|
|
|
|
delegate :title, to: :issue, prefix: true, allow_nil: true
|
|
|
|
delegate :title, to: :merge_request, prefix: true, allow_nil: true
|
|
|
|
|
2012-09-27 22:23:11 +02:00
|
|
|
belongs_to :author, class_name: "User"
|
2012-02-28 14:09:23 +01:00
|
|
|
belongs_to :project
|
2012-08-11 00:07:50 +02:00
|
|
|
belongs_to :target, polymorphic: true
|
2012-02-28 15:01:14 +01:00
|
|
|
|
2012-04-04 01:49:58 +02:00
|
|
|
# For Hash only
|
|
|
|
serialize :data
|
2012-02-28 15:01:14 +01:00
|
|
|
|
2012-10-09 02:10:04 +02:00
|
|
|
# Scopes
|
2012-02-29 21:38:24 +01:00
|
|
|
scope :recent, order("created_at DESC")
|
2012-08-11 00:07:50 +02:00
|
|
|
scope :code_push, where(action: Pushed)
|
2012-10-09 21:09:46 +02:00
|
|
|
scope :in_projects, ->(project_ids) { where(project_id: project_ids).recent }
|
2012-02-29 21:38:24 +01:00
|
|
|
|
2012-10-09 02:10:04 +02:00
|
|
|
class << self
|
|
|
|
def determine_action(record)
|
|
|
|
if [Issue, MergeRequest].include? record.class
|
|
|
|
Event::Created
|
|
|
|
elsif record.kind_of? Note
|
|
|
|
Event::Commented
|
|
|
|
end
|
2012-02-28 15:01:14 +01:00
|
|
|
end
|
2012-07-20 07:39:34 +02:00
|
|
|
end
|
|
|
|
|
2012-03-01 21:43:04 +01:00
|
|
|
# Next events currently enabled for system
|
2012-09-14 17:46:40 +02:00
|
|
|
# - push
|
2012-03-01 21:43:04 +01:00
|
|
|
# - new issue
|
|
|
|
# - merge request
|
2012-03-01 19:47:57 +01:00
|
|
|
def allowed?
|
2012-09-09 23:27:47 +02:00
|
|
|
push? || issue? || merge_request? || membership_changed?
|
2012-03-01 19:47:57 +01:00
|
|
|
end
|
|
|
|
|
2012-09-14 17:46:40 +02:00
|
|
|
def project_name
|
|
|
|
if project
|
|
|
|
project.name
|
|
|
|
else
|
2012-09-30 15:04:43 +02:00
|
|
|
"(deleted project)"
|
2012-09-14 17:46:40 +02:00
|
|
|
end
|
|
|
|
end
|
|
|
|
|
2012-10-01 15:39:19 +02:00
|
|
|
def target_title
|
|
|
|
target.try :title
|
|
|
|
end
|
|
|
|
|
2012-02-29 21:38:24 +01:00
|
|
|
def push?
|
2012-04-04 01:25:33 +02:00
|
|
|
action == self.class::Pushed && valid_push?
|
2012-02-29 21:38:24 +01:00
|
|
|
end
|
|
|
|
|
2012-04-01 23:24:45 +02:00
|
|
|
def merged?
|
|
|
|
action == self.class::Merged
|
|
|
|
end
|
|
|
|
|
2012-03-07 09:13:43 +01:00
|
|
|
def closed?
|
|
|
|
action == self.class::Closed
|
|
|
|
end
|
|
|
|
|
|
|
|
def reopened?
|
|
|
|
action == self.class::Reopened
|
|
|
|
end
|
|
|
|
|
2012-09-14 17:46:40 +02:00
|
|
|
def issue?
|
2012-04-01 23:24:45 +02:00
|
|
|
target_type == "Issue"
|
2012-02-29 21:38:24 +01:00
|
|
|
end
|
|
|
|
|
2012-09-14 17:46:40 +02:00
|
|
|
def merge_request?
|
2012-04-01 23:24:45 +02:00
|
|
|
target_type == "MergeRequest"
|
2012-03-05 23:29:40 +01:00
|
|
|
end
|
|
|
|
|
2012-09-14 17:46:40 +02:00
|
|
|
def new_issue?
|
|
|
|
target_type == "Issue" &&
|
2012-03-01 21:43:04 +01:00
|
|
|
action == Created
|
|
|
|
end
|
|
|
|
|
2012-09-14 17:46:40 +02:00
|
|
|
def new_merge_request?
|
|
|
|
target_type == "MergeRequest" &&
|
2012-03-01 21:43:04 +01:00
|
|
|
action == Created
|
|
|
|
end
|
|
|
|
|
2012-09-14 17:46:40 +02:00
|
|
|
def changed_merge_request?
|
|
|
|
target_type == "MergeRequest" &&
|
2012-03-07 09:13:43 +01:00
|
|
|
[Closed, Reopened].include?(action)
|
|
|
|
end
|
|
|
|
|
2012-09-14 17:46:40 +02:00
|
|
|
def changed_issue?
|
|
|
|
target_type == "Issue" &&
|
2012-03-07 09:13:43 +01:00
|
|
|
[Closed, Reopened].include?(action)
|
|
|
|
end
|
|
|
|
|
2012-09-09 22:18:28 +02:00
|
|
|
def joined?
|
2012-09-09 23:27:47 +02:00
|
|
|
action == Joined
|
|
|
|
end
|
|
|
|
|
|
|
|
def left?
|
|
|
|
action == Left
|
|
|
|
end
|
|
|
|
|
|
|
|
def membership_changed?
|
|
|
|
joined? || left?
|
2012-09-09 22:18:28 +02:00
|
|
|
end
|
|
|
|
|
2012-09-14 17:46:40 +02:00
|
|
|
def issue
|
2012-03-01 21:43:04 +01:00
|
|
|
target if target_type == "Issue"
|
|
|
|
end
|
|
|
|
|
|
|
|
def merge_request
|
|
|
|
target if target_type == "MergeRequest"
|
|
|
|
end
|
|
|
|
|
2012-09-14 17:46:40 +02:00
|
|
|
def author
|
2012-03-07 09:13:43 +01:00
|
|
|
@author ||= User.find(author_id)
|
2012-03-01 21:43:04 +01:00
|
|
|
end
|
2012-04-01 23:24:45 +02:00
|
|
|
|
|
|
|
def action_name
|
|
|
|
if closed?
|
|
|
|
"closed"
|
|
|
|
elsif merged?
|
|
|
|
"merged"
|
2012-09-09 22:18:28 +02:00
|
|
|
elsif joined?
|
|
|
|
'joined'
|
2012-09-09 23:27:47 +02:00
|
|
|
elsif left?
|
|
|
|
'left'
|
2012-09-14 17:46:40 +02:00
|
|
|
else
|
2012-04-01 23:24:45 +02:00
|
|
|
"opened"
|
2012-02-29 21:38:24 +01:00
|
|
|
end
|
|
|
|
end
|
2012-02-28 14:09:23 +01:00
|
|
|
end
|
2012-09-27 08:20:36 +02:00
|
|
|
|
2012-02-28 14:09:23 +01:00
|
|
|
# == Schema Information
|
|
|
|
#
|
|
|
|
# Table name: events
|
|
|
|
#
|
2012-09-27 07:36:31 +02:00
|
|
|
# id :integer not null, primary key
|
2012-02-28 15:01:14 +01:00
|
|
|
# target_type :string(255)
|
2012-09-27 07:36:31 +02:00
|
|
|
# target_id :integer
|
2012-02-28 15:01:14 +01:00
|
|
|
# title :string(255)
|
|
|
|
# data :text
|
2012-09-27 07:36:31 +02:00
|
|
|
# project_id :integer
|
2012-02-28 15:01:14 +01:00
|
|
|
# created_at :datetime not null
|
|
|
|
# updated_at :datetime not null
|
2012-09-27 07:36:31 +02:00
|
|
|
# action :integer
|
|
|
|
# author_id :integer
|
2012-02-28 14:09:23 +01:00
|
|
|
#
|
2012-10-09 10:14:17 +02:00
|
|
|
|