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
Jérome Perrin
gitlab-ce
Commits
6b52adc6
Commit
6b52adc6
authored
Nov 10, 2016
by
Grzegorz Bizon
Browse files
Options
Browse Files
Download
Email Patches
Plain Diff
Refine incremental pipeline serializer
parent
f41c3c02
Changes
4
Hide whitespace changes
Inline
Side-by-side
Showing
4 changed files
with
77 additions
and
20 deletions
+77
-20
app/controllers/projects/pipelines_controller.rb
app/controllers/projects/pipelines_controller.rb
+3
-2
app/serializers/pipeline_entity.rb
app/serializers/pipeline_entity.rb
+33
-18
app/serializers/pipeline_serializer.rb
app/serializers/pipeline_serializer.rb
+5
-0
spec/serializers/pipeline_serializer_spec.rb
spec/serializers/pipeline_serializer_spec.rb
+36
-0
No files found.
app/controllers/projects/pipelines_controller.rb
View file @
6b52adc6
...
...
@@ -17,8 +17,9 @@ class Projects::PipelinesController < Projects::ApplicationController
format
.
html
format
.
json
do
render
json:
{
pipelines:
PipelineSerializer
.
new
(
project:
@project
).
represent
(
@pipelines
,
current_user:
current_user
,
last_updated:
@last_updated
),
pipelines:
PipelineSerializer
.
new
(
project:
@project
,
user:
@current_user
)
.
incremental
(
@pipelines
,
@last_updated
),
updated_at:
Time
.
now
,
count:
{
all:
@pipelines_count
,
...
...
app/serializers/pipeline_entity.rb
View file @
6b52adc6
...
...
@@ -2,7 +2,8 @@ class PipelineEntity < Grape::Entity
include
RequestAwareEntity
expose
:id
expose
:user
,
if:
->
(
pipeline
,
opts
)
{
created?
(
pipeline
,
opts
)
},
using:
UserEntity
expose
:user
,
if:
proc
{
created_exposure?
},
using:
UserEntity
expose
:url
do
|
pipeline
|
namespace_project_pipeline_path
(
pipeline
.
project
.
namespace
,
...
...
@@ -10,7 +11,7 @@ class PipelineEntity < Grape::Entity
pipeline
)
end
expose
:details
,
if:
->
(
pipeline
,
opts
)
{
updated?
(
pipeline
,
opts
)
}
do
expose
:details
,
if:
proc
{
updated_exposure?
}
do
expose
:status
expose
:duration
expose
:finished_at
...
...
@@ -19,18 +20,20 @@ class PipelineEntity < Grape::Entity
expose
:manual_actions
,
using:
PipelineActionEntity
end
expose
:flags
,
if:
->
(
pipeline
,
opts
)
{
created?
(
pipeline
,
opts
)
}
do
expose
:flags
,
if:
proc
{
created_exposure?
}
do
expose
:latest?
,
as: :latest
expose
:triggered?
,
as: :triggered
expose
:yaml_errors?
,
as: :yaml_errors
do
|
pipeline
|
pipeline
.
yaml_errors
.
present?
end
expose
:stuck?
,
as: :stuck
do
|
pipeline
|
pipeline
.
builds
.
any?
(
&
:stuck?
)
end
end
expose
:ref
,
if:
->
(
pipeline
,
opts
)
{
created?
(
pipeline
,
opts
)
}
do
expose
:ref
,
if:
proc
{
updated_exposure?
}
do
expose
:name
do
|
pipeline
|
pipeline
.
ref
end
...
...
@@ -45,31 +48,43 @@ class PipelineEntity < Grape::Entity
expose
:tag?
end
expose
:commit
,
if:
->
(
pipeline
,
opts
)
{
created?
(
pipeline
,
opts
)
},
using:
CommitEntity
expose
:commit
,
if:
proc
{
created_exposure?
},
using:
CommitEntity
expose
:retry_url
,
if:
->
(
pipeline
,
opts
)
{
updated?
(
pipeline
,
opts
)
}
do
|
pipeline
|
can?
(
current_
user
,
:update_pipeline
,
pipeline
.
project
)
&&
expose
:retry_url
,
if:
proc
{
updated_exposure?
}
do
|
pipeline
|
can?
(
request
.
user
,
:update_pipeline
,
pipeline
.
project
)
&&
pipeline
.
retryable?
&&
retry_namespace_project_pipeline_path
(
pipeline
.
project
.
namespace
,
pipeline
.
project
,
pipeline
.
id
)
retry_namespace_project_pipeline_path
(
pipeline
.
project
.
namespace
,
pipeline
.
project
,
pipeline
.
id
)
end
expose
:cancel_url
,
if:
->
(
pipeline
,
opts
)
{
updated?
(
pipeline
,
opts
)
}
do
|
pipeline
|
can?
(
current_
user
,
:update_pipeline
,
pipeline
.
project
)
&&
expose
:cancel_url
,
if:
proc
{
updated_exposure?
}
do
|
pipeline
|
can?
(
request
.
user
,
:update_pipeline
,
pipeline
.
project
)
&&
pipeline
.
cancelable?
&&
cancel_namespace_project_pipeline_path
(
pipeline
.
project
.
namespace
,
pipeline
.
project
,
pipeline
.
id
)
cancel_namespace_project_pipeline_path
(
pipeline
.
project
.
namespace
,
pipeline
.
project
,
pipeline
.
id
)
end
def
created_exposure?
!
incremental?
||
created?
end
def
updated_exposure?
!
incremental?
||
updated?
end
private
def
incremental?
options
[
:incremental
]
end
def
last_updated
(
opts
)
opts
.
fetch
(
:last_updated
)
def
last_updated
opt
ion
s
.
fetch
(
:last_updated
)
end
def
created?
(
pipeline
,
opts
)
!
last_updated
(
opts
)
||
pipeline
.
created_at
>
last_updated
(
opts
)
def
updated?
@object
.
updated_at
>
last_updated
end
def
updated?
(
pipeline
,
opts
)
!
last_updated
(
opts
)
||
pipeline
.
updated_at
>
last_updated
(
opts
)
def
created?
@object
.
created_at
>
last_updated
end
end
app/serializers/pipeline_serializer.rb
View file @
6b52adc6
class
PipelineSerializer
<
BaseSerializer
entity
PipelineEntity
def
incremental
(
resource
,
last_updated
)
represent
(
resource
,
incremental:
true
,
last_updated:
last_updated
)
end
end
spec/serializers/pipeline_serializer_spec.rb
0 → 100644
View file @
6b52adc6
require
'spec_helper'
describe
PipelineSerializer
do
let
(
:serializer
)
do
described_class
.
new
(
user:
user
)
end
let
(
:pipelines
)
do
create_list
(
:ci_pipeline
,
2
)
end
let
(
:user
)
{
create
(
:user
)
}
context
'when using incremental serializer'
do
let
(
:json
)
do
serializer
.
incremental
(
pipelines
,
time
).
as_json
end
context
'when pipeline has been already updated'
do
let
(
:time
)
{
Time
.
now
}
it
'exposes only minimal information'
do
expect
(
json
.
first
.
keys
).
to
contain_exactly
(
:id
,
:url
)
expect
(
json
.
second
.
keys
).
to
contain_exactly
(
:id
,
:url
)
end
end
context
'when pipeline updated in the meantime'
do
let
(
:time
)
{
Time
.
now
-
10
.
minutes
}
it
'exposes new data incrementally'
do
expect
(
json
.
first
.
keys
.
count
).
to
eq
9
end
end
end
end
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