service.rb 1.8 KB
Newer Older
1 2 3 4
# == Schema Information
#
# Table name: services
#
V
Valery Sizov 已提交
5 6 7 8 9 10 11 12
#  id         :integer          not null, primary key
#  type       :string(255)
#  title      :string(255)
#  project_id :integer          not null
#  created_at :datetime
#  updated_at :datetime
#  active     :boolean          default(FALSE), not null
#  properties :text
13
#  tempalate  :boolean          default(FALSE)
14

15 16
# To add new service you should build a class inherited from Service
# and implement a set of methods
17
class Service < ActiveRecord::Base
18
  include Sortable
D
Drew Blessing 已提交
19 20
  serialize :properties, JSON

D
Dmitriy Zaporozhets 已提交
21
  default_value_for :active, false
22 23

  after_initialize :initialize_properties
D
Dmitriy Zaporozhets 已提交
24

25 26 27 28
  belongs_to :project
  has_one :service_hook

  validates :project_id, presence: true
29

30 31
  scope :visible, -> { where.not(type: 'GitlabIssueTrackerService') }

32 33 34
  def activated?
    active
  end
35

36 37 38 39
  def category
    :common
  end

40 41 42 43
  def initialize_properties
    self.properties = {} if properties.nil?
  end

44
  def title
45
    # implement inside child
46 47 48
  end

  def description
49
    # implement inside child
50 51
  end

52 53 54 55
  def help
    # implement inside child
  end

56
  def to_param
57
    # implement inside child
58 59 60
  end

  def fields
61
    # implement inside child
62 63
    []
  end
64 65 66 67

  def execute
    # implement inside child
  end
68 69 70 71

  def can_test?
    !project.empty_repo?
  end
D
Drew Blessing 已提交
72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87

  # Provide convenient accessor methods
  # for each serialized property.
  def self.prop_accessor(*args)
    args.each do |arg|
      class_eval %{
        def #{arg}
          properties['#{arg}']
        end

        def #{arg}=(value)
          self.properties['#{arg}'] = value
        end
      }
    end
  end
88 89 90 91

  def async_execute(data)
    Sidekiq::Client.enqueue(ProjectServiceWorker, id, data)
  end
92 93 94 95 96 97 98 99

  def issue_tracker?
    self.category == :issue_tracker
  end

  def self.issue_tracker_service_list
    Service.select(&:issue_tracker?).map{ |s| s.to_param }
  end
100
end