Welcome to mirror list, hosted at ThFree Co, Russian Federation.

event.rb « models « app - gitlab.com/gitlab-org/gitlab-foss.git - Unnamed repository; edit this file 'description' to name the repository.
summaryrefslogtreecommitdiff
blob: dc76b6fd022e04169c624e7e4f24813b4ce630fd (plain)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
class Event < ActiveRecord::Base
  include PushEvent

  default_scope where("author_id IS NOT NULL")

  Created   = 1
  Updated   = 2
  Closed    = 3
  Reopened  = 4
  Pushed    = 5
  Commented = 6
  Merged    = 7
  Joined    = 8 # User joined project
  Left      = 9 # User left project

  belongs_to :project
  belongs_to :target, polymorphic: true

  # For Hash only
  serialize :data

  scope :recent, order("created_at DESC")
  scope :code_push, where(action: Pushed)

  def self.determine_action(record)
    if [Issue, MergeRequest].include? record.class
      Event::Created
    elsif record.kind_of? Note
      Event::Commented
    end
  end

  def self.recent_for_user user
    where(project_id: user.projects.map(&:id)).recent
  end

  # Next events currently enabled for system
  #  - push
  #  - new issue
  #  - merge request
  def allowed?
    push? || issue? || merge_request? || membership_changed?
  end

  def project_name
    if project
      project.name
    else
      "(deleted)"
    end
  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"
  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

  def joined?
    action == Joined
  end

  def left?
    action == Left
  end

  def membership_changed?
    joined? || left?
  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"
    elsif joined?
      'joined'
    elsif left?
      'left'
    else
      "opened"
    end
  end


  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
end
# == Schema Information
#
# Table name: events
#
#  id          :integer(4)      not null, primary key
#  target_type :string(255)
#  target_id   :integer(4)
#  title       :string(255)
#  data        :text
#  project_id  :integer(4)
#  created_at  :datetime        not null
#  updated_at  :datetime        not null
#  action      :integer(4)
#  author_id   :integer(4)
#