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

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

D
Dmitriy Zaporozhets 已提交
19
  default_value_for :active, false
20 21

  after_initialize :initialize_properties
D
Dmitriy Zaporozhets 已提交
22

23 24 25 26
  belongs_to :project
  has_one :service_hook

  validates :project_id, presence: true
27 28 29 30

  def activated?
    active
  end
31

32 33 34 35
  def category
    :common
  end

36 37 38 39
  def initialize_properties
    self.properties = {} if properties.nil?
  end

40
  def title
41
    # implement inside child
42 43 44
  end

  def description
45
    # implement inside child
46 47
  end

48 49 50 51
  def help
    # implement inside child
  end

52
  def to_param
53
    # implement inside child
54 55 56
  end

  def fields
57
    # implement inside child
58 59
    []
  end
60 61 62 63

  def execute
    # implement inside child
  end
64 65 66 67

  def can_test?
    !project.empty_repo?
  end
D
Drew Blessing 已提交
68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83

  # 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
84
end