event.rb 2.3 KB
Newer Older
D
Dmitriy Zaporozhets 已提交
1
class Event < ActiveRecord::Base
2 3
  include PushEvent

4 5
  default_scope where("author_id IS NOT NULL")

6 7 8 9 10 11
  Created   = 1
  Updated   = 2
  Closed    = 3
  Reopened  = 4
  Pushed    = 5
  Commented = 6
12
  Merged    = 7
13

D
Dmitriy Zaporozhets 已提交
14
  belongs_to :project
15 16
  belongs_to :target, :polymorphic => true

R
randx 已提交
17 18
  # For Hash only
  serialize :data
19

20
  scope :recent, order("created_at DESC")
21
  scope :code_push, where(:action => Pushed)
22

23 24 25 26 27 28 29
  def self.determine_action(record)
    if [Issue, MergeRequest].include? record.class
      Event::Created
    elsif record.kind_of? Note
      Event::Commented
    end
  end
30

31 32 33 34
  # Next events currently enabled for system
  #  - push 
  #  - new issue
  #  - merge request
D
Dmitriy Zaporozhets 已提交
35
  def allowed?
36
    push? || issue? || merge_request?
D
Dmitriy Zaporozhets 已提交
37 38
  end

39
  def push?
40
    action == self.class::Pushed && valid_push?
41 42
  end

43 44 45 46
  def merged?
    action == self.class::Merged
  end

47 48 49 50 51 52 53 54
  def closed?
    action == self.class::Closed
  end

  def reopened?
    action == self.class::Reopened
  end

55 56
  def issue? 
    target_type == "Issue"
57 58
  end

59 60
  def merge_request? 
    target_type == "MergeRequest"
61 62
  end

63 64 65 66 67 68 69 70 71 72
  def new_issue? 
    target_type == "Issue" && 
      action == Created
  end

  def new_merge_request? 
    target_type == "MergeRequest" && 
      action == Created
  end

73 74 75 76 77 78 79 80 81 82
  def changed_merge_request? 
    target_type == "MergeRequest" && 
      [Closed, Reopened].include?(action)
  end

  def changed_issue? 
    target_type == "Issue" && 
      [Closed, Reopened].include?(action)
  end

83 84 85 86 87 88 89 90 91
  def issue 
    target if target_type == "Issue"
  end

  def merge_request
    target if target_type == "MergeRequest"
  end

  def author 
92
    @author ||= User.find(author_id)
93
  end
94 95 96 97 98 99 100 101

  def action_name
    if closed?
      "closed"
    elsif merged?
      "merged"
    else 
      "opened"
102 103 104
    end
  end

105 106 107
  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
D
Dmitriy Zaporozhets 已提交
108 109 110 111 112
end
# == Schema Information
#
# Table name: events
#
R
randx 已提交
113
#  id          :integer(4)      not null, primary key
114
#  target_type :string(255)
R
randx 已提交
115
#  target_id   :integer(4)
116 117
#  title       :string(255)
#  data        :text
R
randx 已提交
118
#  project_id  :integer(4)
119 120
#  created_at  :datetime        not null
#  updated_at  :datetime        not null
R
randx 已提交
121 122
#  action      :integer(4)
#  author_id   :integer(4)
D
Dmitriy Zaporozhets 已提交
123
#
124