gitlabhq/app/models/event.rb

163 lines
3 KiB
Ruby
Raw Normal View History

2012-11-19 19:24:05 +01:00
# == Schema Information
#
# Table name: events
#
# id :integer not null, primary key
# target_type :string(255)
# target_id :integer
# title :string(255)
# data :text
# project_id :integer
# created_at :datetime not null
# updated_at :datetime not null
# action :integer
# author_id :integer
#
2012-02-28 14:09:23 +01:00
class Event < ActiveRecord::Base
include PushEvent
attr_accessible :project, :action, :data, :author_id, :project_id,
:target_id, :target_type
default_scope where("author_id IS NOT NULL")
Created = 1
Updated = 2
Closed = 3
Reopened = 4
Pushed = 5
Commented = 6
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-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
belongs_to :target, polymorphic: true
2012-04-04 01:49:58 +02:00
# For Hash only
serialize :data
2012-10-09 02:10:04 +02:00
# Scopes
scope :recent, order("created_at DESC")
scope :code_push, where(action: Pushed)
scope :in_projects, ->(project_ids) { where(project_id: project_ids).recent }
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
end
end
# Next events currently enabled for system
# - push
# - 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
def project_name
if project
project.name
else
2012-09-30 15:04:43 +02:00
"(deleted project)"
end
end
def target_title
target.try :title
end
def push?
action == self.class::Pushed && valid_push?
end
def merged?
action == self.class::Merged
end
def closed?
action == self.class::Closed
end
def reopened?
action == self.class::Reopened
end
def issue?
target_type == "Issue"
end
def merge_request?
target_type == "MergeRequest"
2012-03-05 23:29:40 +01:00
end
def new_issue?
target_type == "Issue" &&
action == Created
end
def new_merge_request?
target_type == "MergeRequest" &&
action == Created
end
def changed_merge_request?
target_type == "MergeRequest" &&
[Closed, Reopened].include?(action)
end
def changed_issue?
target_type == "Issue" &&
[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
def issue
target if target_type == "Issue"
end
def merge_request
target if target_type == "MergeRequest"
end
def author
@author ||= User.find(author_id)
end
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'
else
"opened"
end
end
2012-02-28 14:09:23 +01:00
end