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
Léo-Paul Géneau
gitlab-ce
Commits
6135eb0a
Commit
6135eb0a
authored
Sep 10, 2014
by
Dmitriy Zaporozhets
Browse files
Options
Browse Files
Download
Plain Diff
Merge pull request #7705 from dblessing/serialize_service_properties
Serialize service properties
parents
4a5719f9
a0dbcd23
Changes
20
Hide whitespace changes
Inline
Side-by-side
Showing
20 changed files
with
84 additions
and
113 deletions
+84
-113
app/models/project_services/assembla_service.rb
app/models/project_services/assembla_service.rb
+2
-6
app/models/project_services/campfire_service.rb
app/models/project_services/campfire_service.rb
+2
-6
app/models/project_services/ci_service.rb
app/models/project_services/ci_service.rb
+1
-6
app/models/project_services/emails_on_push_service.rb
app/models/project_services/emails_on_push_service.rb
+2
-6
app/models/project_services/flowdock_service.rb
app/models/project_services/flowdock_service.rb
+2
-6
app/models/project_services/gemnasium_service.rb
app/models/project_services/gemnasium_service.rb
+2
-6
app/models/project_services/gitlab_ci_service.rb
app/models/project_services/gitlab_ci_service.rb
+2
-6
app/models/project_services/hipchat_service.rb
app/models/project_services/hipchat_service.rb
+2
-6
app/models/project_services/pivotaltracker_service.rb
app/models/project_services/pivotaltracker_service.rb
+2
-6
app/models/project_services/slack_service.rb
app/models/project_services/slack_service.rb
+2
-6
app/models/service.rb
app/models/service.rb
+20
-7
db/migrate/20140907220153_serialize_service_properties.rb
db/migrate/20140907220153_serialize_service_properties.rb
+35
-0
db/schema.rb
db/schema.rb
+4
-9
spec/factories.rb
spec/factories.rb
+0
-1
spec/models/assembla_service_spec.rb
spec/models/assembla_service_spec.rb
+1
-6
spec/models/flowdock_service_spec.rb
spec/models/flowdock_service_spec.rb
+1
-6
spec/models/gemnasium_service_spec.rb
spec/models/gemnasium_service_spec.rb
+1
-6
spec/models/gitlab_ci_service_spec.rb
spec/models/gitlab_ci_service_spec.rb
+1
-6
spec/models/service_spec.rb
spec/models/service_spec.rb
+1
-6
spec/models/slack_service_spec.rb
spec/models/slack_service_spec.rb
+1
-6
No files found.
app/models/project_services/assembla_service.rb
View file @
6135eb0a
...
@@ -5,21 +5,17 @@
...
@@ -5,21 +5,17 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
class
AssemblaService
<
Service
class
AssemblaService
<
Service
include
HTTParty
include
HTTParty
prop_accessor
:token
,
:subdomain
validates
:token
,
presence:
true
,
if: :activated?
validates
:token
,
presence:
true
,
if: :activated?
def
title
def
title
...
...
app/models/project_services/campfire_service.rb
View file @
6135eb0a
...
@@ -5,19 +5,15 @@
...
@@ -5,19 +5,15 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
class
CampfireService
<
Service
class
CampfireService
<
Service
prop_accessor
:token
,
:subdomain
,
:room
validates
:token
,
presence:
true
,
if: :activated?
validates
:token
,
presence:
true
,
if: :activated?
def
title
def
title
...
...
app/models/project_services/ci_service.rb
View file @
6135eb0a
...
@@ -5,16 +5,11 @@
...
@@ -5,16 +5,11 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
# Base class for CI services
# Base class for CI services
...
...
app/models/project_services/emails_on_push_service.rb
View file @
6135eb0a
...
@@ -5,19 +5,15 @@
...
@@ -5,19 +5,15 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
class
EmailsOnPushService
<
Service
class
EmailsOnPushService
<
Service
prop_accessor
:recipients
validates
:recipients
,
presence:
true
,
if: :activated?
validates
:recipients
,
presence:
true
,
if: :activated?
def
title
def
title
...
...
app/models/project_services/flowdock_service.rb
View file @
6135eb0a
...
@@ -5,21 +5,17 @@
...
@@ -5,21 +5,17 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
require
"flowdock-git-hook"
require
"flowdock-git-hook"
class
FlowdockService
<
Service
class
FlowdockService
<
Service
prop_accessor
:token
validates
:token
,
presence:
true
,
if: :activated?
validates
:token
,
presence:
true
,
if: :activated?
def
title
def
title
...
...
app/models/project_services/gemnasium_service.rb
View file @
6135eb0a
...
@@ -5,21 +5,17 @@
...
@@ -5,21 +5,17 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
require
"gemnasium/gitlab_service"
require
"gemnasium/gitlab_service"
class
GemnasiumService
<
Service
class
GemnasiumService
<
Service
prop_accessor
:token
,
:api_key
validates
:token
,
:api_key
,
presence:
true
,
if: :activated?
validates
:token
,
:api_key
,
presence:
true
,
if: :activated?
def
title
def
title
...
...
app/models/project_services/gitlab_ci_service.rb
View file @
6135eb0a
...
@@ -5,19 +5,15 @@
...
@@ -5,19 +5,15 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# property :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
class
GitlabCiService
<
CiService
class
GitlabCiService
<
CiService
prop_accessor
:project_url
,
:token
validates
:project_url
,
presence:
true
,
if: :activated?
validates
:project_url
,
presence:
true
,
if: :activated?
validates
:token
,
presence:
true
,
if: :activated?
validates
:token
,
presence:
true
,
if: :activated?
...
...
app/models/project_services/hipchat_service.rb
View file @
6135eb0a
...
@@ -5,21 +5,17 @@
...
@@ -5,21 +5,17 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
class
HipchatService
<
Service
class
HipchatService
<
Service
MAX_COMMITS
=
3
MAX_COMMITS
=
3
prop_accessor
:token
,
:room
validates
:token
,
presence:
true
,
if: :activated?
validates
:token
,
presence:
true
,
if: :activated?
def
title
def
title
...
...
app/models/project_services/pivotaltracker_service.rb
View file @
6135eb0a
...
@@ -5,21 +5,17 @@
...
@@ -5,21 +5,17 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
class
PivotaltrackerService
<
Service
class
PivotaltrackerService
<
Service
include
HTTParty
include
HTTParty
prop_accessor
:token
validates
:token
,
presence:
true
,
if: :activated?
validates
:token
,
presence:
true
,
if: :activated?
def
title
def
title
...
...
app/models/project_services/slack_service.rb
View file @
6135eb0a
...
@@ -5,19 +5,15 @@
...
@@ -5,19 +5,15 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
class
SlackService
<
Service
class
SlackService
<
Service
prop_accessor
:room
,
:subdomain
,
:token
validates
:room
,
presence:
true
,
if: :activated?
validates
:room
,
presence:
true
,
if: :activated?
validates
:subdomain
,
presence:
true
,
if: :activated?
validates
:subdomain
,
presence:
true
,
if: :activated?
validates
:token
,
presence:
true
,
if: :activated?
validates
:token
,
presence:
true
,
if: :activated?
...
...
app/models/service.rb
View file @
6135eb0a
...
@@ -5,22 +5,19 @@
...
@@ -5,22 +5,19 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
# To add new service you should build a class inherited from Service
# To add new service you should build a class inherited from Service
# and implement a set of methods
# and implement a set of methods
class
Service
<
ActiveRecord
::
Base
class
Service
<
ActiveRecord
::
Base
serialize
:properties
,
JSON
default_value_for
:active
,
false
default_value_for
:active
,
false
default_value_for
:properties
,
{}
belongs_to
:project
belongs_to
:project
has_one
:service_hook
has_one
:service_hook
...
@@ -63,4 +60,20 @@ class Service < ActiveRecord::Base
...
@@ -63,4 +60,20 @@ class Service < ActiveRecord::Base
def
can_test?
def
can_test?
!
project
.
empty_repo?
!
project
.
empty_repo?
end
end
# 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
end
end
db/migrate/20140907220153_serialize_service_properties.rb
0 → 100644
View file @
6135eb0a
class
SerializeServiceProperties
<
ActiveRecord
::
Migration
def
change
add_column
:services
,
:properties
,
:text
associations
=
{
AssemblaService
:
[
:token
,
:subdomain
],
CampfireService
:
[
:token
,
:subdomain
,
:room
],
EmailsOnPushService
:
[
:recipients
],
FlowdockService
:
[
:token
],
GemnasiumService
:
[
:api_key
,
:token
],
GitlabCiService
:
[
:token
,
:project_url
],
HipchatService
:
[
:token
,
:room
],
PivotaltrackerService
:
[
:token
],
SlackService
:
[
:subdomain
,
:token
,
:room
],
JenkinsService
:
[
:token
,
:subdomain
],
JiraService
:
[
:project_url
,
:username
,
:password
,
:api_version
,
:jira_issue_transition_id
],
}
Service
.
all
.
each
do
|
service
|
associations
[
service
.
type
.
to_sym
].
each
do
|
attribute
|
service
.
send
(
"
#{
attribute
}
="
,
service
.
attributes
[
attribute
.
to_s
])
end
service
.
save!
end
remove_column
:services
,
:project_url
,
:string
remove_column
:services
,
:subdomain
,
:string
remove_column
:services
,
:room
,
:string
remove_column
:services
,
:recipients
,
:text
remove_column
:services
,
:api_key
,
:string
remove_column
:services
,
:token
,
:string
end
end
db/schema.rb
View file @
6135eb0a
...
@@ -11,7 +11,7 @@
...
@@ -11,7 +11,7 @@
#
#
# It's strongly recommended that you check this file into your version control system.
# It's strongly recommended that you check this file into your version control system.
ActiveRecord
::
Schema
.
define
(
version:
2014090
3115954
)
do
ActiveRecord
::
Schema
.
define
(
version:
2014090
7220153
)
do
# These are extensions that must be enabled in order to support this database
# These are extensions that must be enabled in order to support this database
enable_extension
"plpgsql"
enable_extension
"plpgsql"
...
@@ -265,16 +265,11 @@ ActiveRecord::Schema.define(version: 20140903115954) do
...
@@ -265,16 +265,11 @@ ActiveRecord::Schema.define(version: 20140903115954) do
create_table
"services"
,
force:
true
do
|
t
|
create_table
"services"
,
force:
true
do
|
t
|
t
.
string
"type"
t
.
string
"type"
t
.
string
"title"
t
.
string
"title"
t
.
string
"token"
t
.
integer
"project_id"
,
null:
false
t
.
integer
"project_id"
,
null:
false
t
.
datetime
"created_at"
t
.
datetime
"created_at"
t
.
datetime
"updated_at"
t
.
datetime
"updated_at"
t
.
boolean
"active"
,
default:
false
,
null:
false
t
.
boolean
"active"
,
default:
false
,
null:
false
t
.
string
"project_url"
t
.
text
"properties"
t
.
string
"subdomain"
t
.
string
"room"
t
.
text
"recipients"
t
.
string
"api_key"
end
end
add_index
"services"
,
[
"project_id"
],
name:
"index_services_on_project_id"
,
using: :btree
add_index
"services"
,
[
"project_id"
],
name:
"index_services_on_project_id"
,
using: :btree
...
...
spec/factories.rb
View file @
6135eb0a
...
@@ -165,7 +165,6 @@ FactoryGirl.define do
...
@@ -165,7 +165,6 @@ FactoryGirl.define do
factory
:service
do
factory
:service
do
type
""
type
""
title
"GitLab CI"
title
"GitLab CI"
token
"x56olispAND34ng"
project
project
end
end
...
...
spec/models/assembla_service_spec.rb
View file @
6135eb0a
...
@@ -5,16 +5,11 @@
...
@@ -5,16 +5,11 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
require
'spec_helper'
require
'spec_helper'
...
...
spec/models/flowdock_service_spec.rb
View file @
6135eb0a
...
@@ -5,16 +5,11 @@
...
@@ -5,16 +5,11 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
require
'spec_helper'
require
'spec_helper'
...
...
spec/models/gemnasium_service_spec.rb
View file @
6135eb0a
...
@@ -5,16 +5,11 @@
...
@@ -5,16 +5,11 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
require
'spec_helper'
require
'spec_helper'
...
...
spec/models/gitlab_ci_service_spec.rb
View file @
6135eb0a
...
@@ -5,16 +5,11 @@
...
@@ -5,16 +5,11 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
require
'spec_helper'
require
'spec_helper'
...
...
spec/models/service_spec.rb
View file @
6135eb0a
...
@@ -5,16 +5,11 @@
...
@@ -5,16 +5,11 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
require
'spec_helper'
require
'spec_helper'
...
...
spec/models/slack_service_spec.rb
View file @
6135eb0a
...
@@ -5,16 +5,11 @@
...
@@ -5,16 +5,11 @@
# id :integer not null, primary key
# id :integer not null, primary key
# type :string(255)
# type :string(255)
# title :string(255)
# title :string(255)
# token :string(255)
# project_id :integer not null
# project_id :integer not null
# created_at :datetime
# created_at :datetime
# updated_at :datetime
# updated_at :datetime
# active :boolean default(FALSE), not null
# active :boolean default(FALSE), not null
# project_url :string(255)
# properties :text
# subdomain :string(255)
# room :string(255)
# recipients :text
# api_key :string(255)
#
#
require
'spec_helper'
require
'spec_helper'
...
...
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