Skip to content
Projects
Groups
Snippets
Help
Loading...
Help
Support
Keyboard shortcuts
?
Submit feedback
Contribute to GitLab
Sign in / Register
Toggle navigation
G
gitlab-ce
Project overview
Project overview
Details
Activity
Releases
Repository
Repository
Files
Commits
Branches
Tags
Contributors
Graph
Compare
Issues
0
Issues
0
List
Boards
Labels
Milestones
Merge Requests
0
Merge Requests
0
Analytics
Analytics
Repository
Value Stream
Wiki
Wiki
Snippets
Snippets
Members
Members
Collapse sidebar
Close sidebar
Activity
Graph
Create a new issue
Commits
Issue Boards
Open sidebar
Kazuhiko Shiozaki
gitlab-ce
Commits
3a22631d
Commit
3a22631d
authored
11 years ago
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Make service code more abstract
parent
576ad445
No related merge requests found
Changes
7
Show whitespace changes
Inline
Side-by-side
Showing
7 changed files
with
118 additions
and
38 deletions
+118
-38
app/controllers/services_controller.rb
app/controllers/services_controller.rb
+10
-9
app/models/gitlab_ci_service.rb
app/models/gitlab_ci_service.rb
+19
-0
app/models/project.rb
app/models/project.rb
+13
-2
app/models/service.rb
app/models/service.rb
+15
-0
app/views/services/_form.html.haml
app/views/services/_form.html.haml
+48
-0
app/views/services/edit.html.haml
app/views/services/edit.html.haml
+1
-1
app/views/services/index.html.haml
app/views/services/index.html.haml
+12
-26
No files found.
app/controllers/services_controller.rb
View file @
3a22631d
class
ServicesController
<
ProjectResourceController
class
ServicesController
<
ProjectResourceController
# Authorize
# Authorize
before_filter
:authorize_admin_project!
before_filter
:authorize_admin_project!
before_filter
:service
,
only:
[
:edit
,
:update
,
:test
]
respond_to
:html
respond_to
:html
def
index
def
index
@gitlab_ci_service
=
@project
.
gitlab_ci_service
@project
.
build_missing_services
@services
=
@project
.
services
end
end
def
edit
def
edit
@service
=
@project
.
gitlab_ci_service
# Create if missing
@service
=
@project
.
create_gitlab_ci_service
unless
@service
end
end
def
update
def
update
@service
=
@project
.
gitlab_ci_service
if
@service
.
update_attributes
(
params
[
: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
else
render
'edit'
render
'edit'
end
end
...
@@ -28,9 +24,14 @@ class ServicesController < ProjectResourceController
...
@@ -28,9 +24,14 @@ class ServicesController < ProjectResourceController
def
test
def
test
data
=
GitPushService
.
new
.
sample_data
(
project
,
current_user
)
data
=
GitPushService
.
new
.
sample_data
(
project
,
current_user
)
@service
=
project
.
gitlab_ci_service
@service
.
execute
(
data
)
@service
.
execute
(
data
)
redirect_to
:back
redirect_to
:back
end
end
private
def
service
@service
||=
@project
.
services
.
find
{
|
service
|
service
.
to_param
==
params
[
:id
]
}
end
end
end
This diff is collapsed.
Click to expand it.
app/models/gitlab_ci_service.rb
View file @
3a22631d
...
@@ -54,4 +54,23 @@ class GitlabCiService < Service
...
@@ -54,4 +54,23 @@ class GitlabCiService < Service
def
status_img_path
def
status_img_path
project_url
+
"/status.png?ref="
+
project
.
default_branch
project_url
+
"/status.png?ref="
+
project
.
default_branch
end
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
end
This diff is collapsed.
Click to expand it.
app/models/project.rb
View file @
3a22631d
...
@@ -48,6 +48,7 @@ class Project < ActiveRecord::Base
...
@@ -48,6 +48,7 @@ class Project < ActiveRecord::Base
has_one
:forked_project_link
,
dependent: :destroy
,
foreign_key:
"forked_to_project_id"
has_one
:forked_project_link
,
dependent: :destroy
,
foreign_key:
"forked_to_project_id"
has_one
:forked_from_project
,
through: :forked_project_link
has_one
:forked_from_project
,
through: :forked_project_link
has_many
:services
,
dependent: :destroy
has_many
:events
,
dependent: :destroy
has_many
:events
,
dependent: :destroy
has_many
:merge_requests
,
dependent: :destroy
has_many
:merge_requests
,
dependent: :destroy
has_many
:issues
,
dependent: :destroy
,
order:
"state DESC, created_at DESC"
has_many
:issues
,
dependent: :destroy
,
order:
"state DESC, created_at DESC"
...
@@ -223,8 +224,18 @@ class Project < ActiveRecord::Base
...
@@ -223,8 +224,18 @@ class Project < ActiveRecord::Base
self
.
issues_enabled
&&
!
self
.
used_default_issues_tracker?
self
.
issues_enabled
&&
!
self
.
used_default_issues_tracker?
end
end
def
services
def
build_missing_services
[
gitlab_ci_service
].
compact
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
end
def
gitlab_ci?
def
gitlab_ci?
...
...
This diff is collapsed.
Click to expand it.
app/models/service.rb
View file @
3a22631d
...
@@ -13,6 +13,8 @@
...
@@ -13,6 +13,8 @@
# project_url :string(255)
# 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
class
Service
<
ActiveRecord
::
Base
attr_accessible
:title
,
:token
,
:type
,
:active
attr_accessible
:title
,
:token
,
:type
,
:active
...
@@ -24,4 +26,17 @@ class Service < ActiveRecord::Base
...
@@ -24,4 +26,17 @@ class Service < ActiveRecord::Base
def
activated?
def
activated?
active
active
end
end
def
title
end
def
description
end
def
to_param
end
def
fields
[]
end
end
end
This diff is collapsed.
Click to expand it.
app/views/services/_
gitlab_ci
.html.haml
→
app/views/services/_
form
.html.haml
View file @
3a22631d
%h3
.page_title
%h3
.page_title
GitLab CI
-
if
@service
.
activated?
%small
Continuous integration server from GitLab
%span
.cgreen
.pull-right
%i
.icon-circle
-
if
@service
.
active
%small
.cgreen
Enabled
-
else
-
else
%small
.cgray
Disabled
%span
.cgray
%i
.icon-circle-blank
=
@service
.
title
%p
=
@service
.
description
.back_link
.back_link
=
link_to
project_services_path
(
@project
)
do
=
link_to
project_services_path
(
@project
)
do
←
to services
←
to services
%hr
%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?
-
if
@service
.
errors
.
any?
.alert.alert-error
.alert.alert-error
%ul
%ul
...
@@ -27,20 +28,21 @@
...
@@ -27,20 +28,21 @@
.controls
.controls
=
f
.
check_box
:active
=
f
.
check_box
:active
.control-group
-
@service
.
fields
.
each
do
|
field
|
=
f
.
label
:project_url
,
"Project URL"
,
class:
"control-label"
-
name
=
field
[
:name
]
.controls
-
type
=
field
[
:type
]
=
f
.
text_field
:project_url
,
class:
"input-xlarge"
,
placeholder:
"http://ci.gitlabhq.com/projects/3"
-
placeholder
=
field
[
:placeholder
]
.control-group
.control-group
=
f
.
label
:token
,
class:
"control-label"
do
=
f
.
label
name
,
class:
"control-label"
CI Project token
.controls
.controls
=
f
.
text_field
:token
,
class:
"input-xlarge"
,
placeholder:
"GitLab CI project specific token"
-
if
type
==
'text'
=
f
.
text_field
name
,
class:
"input-xlarge"
,
placeholder:
placeholder
-
elsif
type
==
'checkbox'
=
f
.
check_box
name
.form-actions
.form-actions
=
f
.
submit
'Save'
,
class:
'btn btn-save'
=
f
.
submit
'Save'
,
class:
'btn btn-save'
-
if
@service
.
valid?
&&
@service
.
activ
e
-
if
@service
.
valid?
&&
@service
.
activ
ated?
=
link_to
'Test settings'
,
test_project_service_path
(
@project
),
class:
'btn btn-small'
=
link_to
'Test settings'
,
test_project_service_path
(
@project
,
@service
.
to_param
),
class:
'btn btn-small'
This diff is collapsed.
Click to expand it.
app/views/services/edit.html.haml
View file @
3a22631d
=
render
"projects/settings_nav"
=
render
"projects/settings_nav"
=
render
'
gitlab_ci
'
=
render
'
form
'
This diff is collapsed.
Click to expand it.
app/views/services/index.html.haml
View file @
3a22631d
...
@@ -3,30 +3,16 @@
...
@@ -3,30 +3,16 @@
%h3
.page_title
Services
%h3
.page_title
Services
%br
%br
%ul
.ui-box.well-list
%ul
.bordered-list
-
@services
.
each
do
|
service
|
%li
%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
-
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
%h4
Campfire
-
if
service
.
activated?
%small
Web-based group chat tool
%span
.cgreen
.pull-right
%i
.icon-circle
%small
Not implemented yet
-
else
%span
.cgray
%i
.icon-circle-blank
=
link_to
edit_project_service_path
(
@project
,
service
.
to_param
)
do
=
service
.
title
%p
=
service
.
description
This diff is collapsed.
Click to expand it.
Write
Preview
Markdown
is supported
0%
Try again
or
attach a new file
Attach a file
Cancel
You are about to add
0
people
to the discussion. Proceed with caution.
Finish editing this message first!
Cancel
Please
register
or
sign in
to comment