Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
李少辉-开发者
gitlab-foss
提交
0d7d7c10
G
gitlab-foss
项目概览
李少辉-开发者
/
gitlab-foss
通知
15
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
G
gitlab-foss
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
0d7d7c10
编写于
8月 24, 2017
作者:
G
Grzegorz Bizon
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
Use aspect-oriented design in CI/CD config entries
上级
5ced2d8d
变更
6
隐藏空白更改
内联
并排
Showing
6 changed file
with
36 addition
and
37 deletion
+36
-37
lib/gitlab/ci/config/entry/configurable.rb
lib/gitlab/ci/config/entry/configurable.rb
+2
-1
lib/gitlab/ci/config/entry/node.rb
lib/gitlab/ci/config/entry/node.rb
+6
-5
lib/gitlab/ci/config/entry/validatable.rb
lib/gitlab/ci/config/entry/validatable.rb
+11
-0
lib/gitlab/ci/config/entry/validator.rb
lib/gitlab/ci/config/entry/validator.rb
+1
-1
spec/lib/gitlab/ci/config/entry/configurable_spec.rb
spec/lib/gitlab/ci/config/entry/configurable_spec.rb
+11
-25
spec/lib/gitlab/ci/config/entry/validatable_spec.rb
spec/lib/gitlab/ci/config/entry/validatable_spec.rb
+5
-5
未找到文件。
lib/gitlab/ci/config/entry/configurable.rb
浏览文件 @
0d7d7c10
...
...
@@ -15,9 +15,10 @@ module Gitlab
#
module
Configurable
extend
ActiveSupport
::
Concern
include
Validatable
included
do
include
Validatable
validations
do
validates
:config
,
type:
Hash
end
...
...
lib/gitlab/ci/config/entry/node.rb
浏览文件 @
0d7d7c10
...
...
@@ -16,8 +16,9 @@ module Gitlab
@metadata
=
metadata
@entries
=
{}
@validator
=
self
.
class
.
validator
.
new
(
self
)
@validator
.
validate
(
:new
)
self
.
class
.
aspects
.
to_a
.
each
do
|
aspect
|
instance_exec
(
&
aspect
)
end
end
def
[]
(
key
)
...
...
@@ -47,7 +48,7 @@ module Gitlab
end
def
errors
@validator
.
messages
+
descendants
.
flat_map
(
&
:errors
)
[]
end
def
value
...
...
@@ -79,8 +80,8 @@ module Gitlab
def
self
.
default
end
def
self
.
validator
Validator
def
self
.
aspects
@aspects
||=
[]
end
end
end
...
...
lib/gitlab/ci/config/entry/validatable.rb
浏览文件 @
0d7d7c10
...
...
@@ -5,6 +5,17 @@ module Gitlab
module
Validatable
extend
ActiveSupport
::
Concern
def
self
.
included
(
node
)
node
.
aspects
.
append
->
do
@validator
=
self
.
class
.
validator
.
new
(
self
)
@validator
.
validate
(
:new
)
end
end
def
errors
@validator
.
messages
+
descendants
.
flat_map
(
&
:errors
)
end
class_methods
do
def
validator
@validator
||=
Class
.
new
(
Entry
::
Validator
).
tap
do
|
validator
|
...
...
lib/gitlab/ci/config/entry/validator.rb
浏览文件 @
0d7d7c10
...
...
@@ -30,7 +30,7 @@ module Gitlab
def
key_name
if
key
.
blank?
@entry
.
class
.
name
.
demodulize
.
underscore
.
humanize
@entry
.
class
.
name
.
to_s
.
demodulize
.
underscore
.
humanize
else
key
end
...
...
spec/lib/gitlab/ci/config/entry/configurable_spec.rb
浏览文件 @
0d7d7c10
require
'spec_helper'
describe
Gitlab
::
Ci
::
Config
::
Entry
::
Configurable
do
let
(
:entry
)
{
Class
.
new
}
before
do
en
try
.
include
(
described_class
)
let
(
:entry
)
do
Class
.
new
(
Gitlab
::
Ci
::
Config
::
Entry
::
Node
)
do
include
Gitlab
::
Ci
::
Config
::
Entry
::
Configurable
en
d
end
describe
'validations'
do
let
(
:validator
)
{
entry
.
validator
.
new
(
instance
)
}
before
do
entry
.
class_eval
do
attr_reader
:config
context
'when entry is a hash'
do
let
(
:instance
)
{
entry
.
new
(
key:
'value'
)
}
def
initialize
(
config
)
@config
=
config
end
it
'correctly validates an instance'
do
expect
(
instance
).
to
be_valid
end
validator
.
validate
end
context
'when entry
validator is invalid
'
do
context
'when entry
is not a hash
'
do
let
(
:instance
)
{
entry
.
new
(
'ls'
)
}
it
'returns invalid validator'
do
expect
(
validator
).
to
be_invalid
end
end
context
'when entry instance is valid'
do
let
(
:instance
)
{
entry
.
new
(
key:
'value'
)
}
it
'returns valid validator'
do
expect
(
validator
).
to
be_valid
it
'invalidates the instance'
do
expect
(
instance
).
not_to
be_valid
end
end
end
...
...
spec/lib/gitlab/ci/config/entry/validatable_spec.rb
浏览文件 @
0d7d7c10
require
'spec_helper'
describe
Gitlab
::
Ci
::
Config
::
Entry
::
Validatable
do
let
(
:entry
)
{
Class
.
new
}
before
do
en
try
.
include
(
described_class
)
let
(
:entry
)
do
Class
.
new
(
Gitlab
::
Ci
::
Config
::
Entry
::
Node
)
do
include
Gitlab
::
Ci
::
Config
::
Entry
::
Validatable
en
d
end
describe
'.validator'
do
...
...
@@ -28,7 +28,7 @@ describe Gitlab::Ci::Config::Entry::Validatable do
end
context
'when validating entry instance'
do
let
(
:entry_instance
)
{
entry
.
new
}
let
(
:entry_instance
)
{
entry
.
new
(
'something'
)
}
context
'when attribute is valid'
do
before
do
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录