with_status to represent_status

This commit is contained in:
Shinya Maeda 2017-03-11 00:16:48 +09:00
parent 3b63500297
commit a5b96417f3
5 changed files with 31 additions and 34 deletions

View file

@ -18,10 +18,7 @@ class BuildEntity < Grape::Entity
expose :created_at
expose :updated_at
expose :details do
expose :detailed_status, as: :status, with: StatusEntity
end
expose :detailed_status, as: :status, with: StatusEntity
private

View file

@ -1,15 +1,12 @@
class BuildSerializer < BaseSerializer
entity BuildEntity
def only_status
tap { @status_only = { only: [{ details: [:status] }] } }
end
def represent(resource, opts = {})
if @status_only.present?
opts.merge!(@status_only)
end
super(resource, opts)
end
def represent_status(resource)
data = represent(resource, { only: [:status] })
data[:status]
end
end

View file

@ -11,23 +11,20 @@ class PipelineSerializer < BaseSerializer
@paginator.present?
end
def only_status
tap { @status_only = { only: [{ details: [:status] }] } }
end
def represent(resource, opts = {})
if resource.is_a?(ActiveRecord::Relation)
resource = resource.includes(project: :namespace)
end
if @status_only.present?
opts.merge!(@status_only)
end
if paginated?
super(@paginator.paginate(resource), opts)
else
super(resource, opts)
end
end
def represent_status(resource)
data = represent(resource, { only: [{ details: [:status] }] })
data[:details][:status]
end
end

View file

@ -10,16 +10,20 @@ describe BuildSerializer do
subject { serializer.represent(resource) }
describe '#represent' do
context 'when used with status' do
let(:serializer) do
described_class.new(user: user)
.only_status
# TODO:
end
describe '#represent_status' do
context 'when represents only status' do
let(:status) do
Gitlab::Ci::Status::Success.new(double('object'), double('user'))
end
let(:resource) { create(:ci_build) }
let(:resource) { create(:ci_build, status: :success) }
subject { serializer.represent_status(resource) }
it 'serializes only status' do
expect(subject[:details][:status]).not_to be_empty
expect(subject[:details].keys.count).to eq 1
expect(subject[:favicon]).to eq(status.favicon)
end
end
end

View file

@ -93,17 +93,19 @@ describe PipelineSerializer do
end
end
end
end
context 'when used with status' do
let(:serializer) do
described_class.new(user: user)
.only_status
describe '#represent_status' do
context 'when represents only status' do
let(:status) do
Gitlab::Ci::Status::Success.new(double('object'), double('user'))
end
let(:resource) { create(:ci_empty_pipeline) }
let(:resource) { create(:ci_pipeline, status: :success) }
subject { serializer.represent_status(resource) }
it 'serializes only status' do
expect(subject[:details][:status]).not_to be_empty
expect(subject[:details].keys.count).to eq 1
expect(subject[:favicon]).to eq(status.favicon)
end
end
end