event.rb 2.1 KB
Newer Older
D
Dmitriy Zaporozhets 已提交
1
class Event < ActiveRecord::Base
2 3 4 5 6 7 8
  Created   = 1
  Updated   = 2
  Closed    = 3
  Reopened  = 4
  Pushed    = 5
  Commented = 6

D
Dmitriy Zaporozhets 已提交
9
  belongs_to :project
10 11
  belongs_to :target, :polymorphic => true

D
Dmitriy Zaporozhets 已提交
12
  serialize :data
13

14 15
  scope :recent, order("created_at DESC")

16 17 18 19 20 21 22
  def self.determine_action(record)
    if [Issue, MergeRequest].include? record.class
      Event::Created
    elsif record.kind_of? Note
      Event::Commented
    end
  end
23

24 25 26 27
  # Next events currently enabled for system
  #  - push 
  #  - new issue
  #  - merge request
D
Dmitriy Zaporozhets 已提交
28
  def allowed?
29
    push? || new_issue? || new_merge_request?
D
Dmitriy Zaporozhets 已提交
30 31
  end

32 33 34 35
  def push?
    action == self.class::Pushed
  end

36 37 38 39
  def new_tag? 
    data[:ref]["refs/tags"]
  end

40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
  def new_branch?
    data[:before] =~ /^00000/
  end

  def commit_from
    data[:before]
  end

  def commit_to
    data[:after]
  end

  def branch_name
    @branch_name ||= data[:ref].gsub("refs/heads/", "")
  end

56 57 58 59
  def tag_name
    @tag_name ||= data[:ref].gsub("refs/tags/", "")
  end

60 61 62
  def pusher
    User.find_by_id(data[:user_id])
  end
63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84

  def new_issue? 
    target_type == "Issue" && 
      action == Created
  end

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

  def issue 
    target if target_type == "Issue"
  end

  def merge_request
    target if target_type == "MergeRequest"
  end

  def author 
    target.author
  end
85 86 87 88 89 90 91 92
  
  def commits
    @commits ||= data[:commits].map do |commit|
      project.commit(commit[:id])
    end
  end

  delegate :id, :name, :email, :to => :pusher, :prefix => true, :allow_nil => true
93 94 95
  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 已提交
96 97 98 99 100
end
# == Schema Information
#
# Table name: events
#
101 102 103 104 105 106 107 108 109
#  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
D
Dmitriy Zaporozhets 已提交
110
#
111