Skip to content
Snippets Groups Projects
Commit 3a22631d authored by Dmitriy Zaporozhets's avatar Dmitriy Zaporozhets
Browse files

Make service code more abstract

parent 576ad445
No related branches found
No related tags found
No related merge requests found
class ServicesController < ProjectResourceController
# Authorize
before_filter :authorize_admin_project!
before_filter :service, only: [:edit, :update, :test]
 
respond_to :html
 
def index
@gitlab_ci_service = @project.gitlab_ci_service
@project.build_missing_services
@services = @project.services
end
 
def edit
@service = @project.gitlab_ci_service
# Create if missing
@service = @project.create_gitlab_ci_service unless @service
end
 
def update
@service = @project.gitlab_ci_service
if @service.update_attributes(params[:service])
redirect_to edit_project_service_path(@project, :gitlab_ci)
redirect_to edit_project_service_path(@project, @service.to_param)
else
render 'edit'
end
Loading
Loading
@@ -28,9 +24,14 @@ class ServicesController < ProjectResourceController
def test
data = GitPushService.new.sample_data(project, current_user)
 
@service = project.gitlab_ci_service
@service.execute(data)
 
redirect_to :back
end
private
def service
@service ||= @project.services.find { |service| service.to_param == params[:id] }
end
end
Loading
Loading
@@ -54,4 +54,23 @@ class GitlabCiService < Service
def status_img_path
project_url + "/status.png?ref=" + project.default_branch
end
def title
'GitLab CI'
end
def description
'Continuous integration server from GitLab'
end
def to_param
'gitlab_ci'
end
def fields
[
{ type: 'text', name: 'token', placeholder: 'GitLab CI project specific token' },
{ type: 'text', name: 'project_url', placeholder: 'http://ci.gitlabhq.com/projects/3'}
]
end
end
Loading
Loading
@@ -48,6 +48,7 @@ class Project < ActiveRecord::Base
has_one :forked_project_link, dependent: :destroy, foreign_key: "forked_to_project_id"
has_one :forked_from_project, through: :forked_project_link
 
has_many :services, dependent: :destroy
has_many :events, dependent: :destroy
has_many :merge_requests, dependent: :destroy
has_many :issues, dependent: :destroy, order: "state DESC, created_at DESC"
Loading
Loading
@@ -223,8 +224,18 @@ class Project < ActiveRecord::Base
self.issues_enabled && !self.used_default_issues_tracker?
end
 
def services
[gitlab_ci_service].compact
def build_missing_services
available_services_names.each do |service_name|
service = services.find { |service| service.to_param == service_name }
# If service is available but missing in db
# we should create an instance. Ex `create_gitlab_ci_service`
service = self.send :"create_#{service_name}_service" if service.nil?
end
end
def available_services_names
%w(gitlab_ci)
end
 
def gitlab_ci?
Loading
Loading
Loading
Loading
@@ -13,6 +13,8 @@
# project_url :string(255)
#
 
# To add new service you should build a class inherited from Service
# and implement a set of methods
class Service < ActiveRecord::Base
attr_accessible :title, :token, :type, :active
 
Loading
Loading
@@ -24,4 +26,17 @@ class Service < ActiveRecord::Base
def activated?
active
end
def title
end
def description
end
def to_param
end
def fields
[]
end
end
%h3.page_title
GitLab CI
%small Continuous integration server from GitLab
.pull-right
- if @service.active
%small.cgreen Enabled
- else
%small.cgray Disabled
- if @service.activated?
%span.cgreen
%i.icon-circle
- else
%span.cgray
%i.icon-circle-blank
= @service.title
 
%p= @service.description
 
.back_link
= link_to project_services_path(@project) do
&larr; to services
 
%hr
= form_for(@service, :as => :service, :url => project_service_path(@project, :gitlab_ci), :method => :put) do |f|
= form_for(@service, as: :service, url: project_service_path(@project, @service.to_param), method: :put) do |f|
- if @service.errors.any?
.alert.alert-error
%ul
Loading
Loading
@@ -27,20 +28,21 @@
.controls
= f.check_box :active
 
.control-group
= f.label :project_url, "Project URL", class: "control-label"
.controls
= f.text_field :project_url, class: "input-xlarge", placeholder: "http://ci.gitlabhq.com/projects/3"
.control-group
= f.label :token, class: "control-label" do
CI Project token
.controls
= f.text_field :token, class: "input-xlarge", placeholder: "GitLab CI project specific token"
- @service.fields.each do |field|
- name = field[:name]
- type = field[:type]
- placeholder = field[:placeholder]
 
.control-group
= f.label name, class: "control-label"
.controls
- if type == 'text'
= f.text_field name, class: "input-xlarge", placeholder: placeholder
- elsif type == 'checkbox'
= f.check_box name
 
.form-actions
= f.submit 'Save', class: 'btn btn-save'
&nbsp;
- if @service.valid? && @service.active
= link_to 'Test settings', test_project_service_path(@project), class: 'btn btn-small'
- if @service.valid? && @service.activated?
= link_to 'Test settings', test_project_service_path(@project, @service.to_param), class: 'btn btn-small'
= render "projects/settings_nav"
 
= render 'gitlab_ci'
= render 'form'
Loading
Loading
@@ -3,30 +3,16 @@
%h3.page_title Services
%br
 
%ul.ui-box.well-list
%li
%h4.cgreen
= link_to edit_project_service_path(@project, :gitlab_ci) do
GitLab CI
%small Continuous integration server from GitLab
.pull-right
- if @gitlab_ci_service.try(:active)
%small.cgreen
%i.icon-ok
Enabled
%ul.bordered-list
- @services.each do |service|
%li
%h4
- if service.activated?
%span.cgreen
%i.icon-circle
- else
%small.cgray
%i.icon-off
Disabled
%li.disabled
%h4
Jenkins CI
%small An extendable open source continuous integration server
.pull-right
%small Not implemented yet
%li.disabled
%h4
Campfire
%small Web-based group chat tool
.pull-right
%small Not implemented yet
%span.cgray
%i.icon-circle-blank
= link_to edit_project_service_path(@project, service.to_param) do
= service.title
%p= service.description
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment