Simplify implementation of entity serializers

This commit is contained in:
Grzegorz Bizon 2016-11-04 15:00:39 +01:00
parent e49fb264e6
commit b0a4635be3
8 changed files with 14 additions and 31 deletions

View file

@ -1,17 +1,11 @@
class BaseSerializer
def initialize(parameters = {})
@entity = self.class.entity_class
@request = EntityRequest.new(parameters)
@opts = { request: @request }
end
def set(parameters)
@request.merge!(parameters)
self
end
def represent(resource, opts = {})
@entity.represent(resource, @opts.reverse_merge(opts))
self.class.entity_class
.represent(resource, opts.merge(request: @request))
end
def self.entity(entity_class)

View file

@ -19,6 +19,6 @@ class BuildEntity < Grape::Entity
private
def url_to(route, build)
@urls.send("#{route}_url", build.project.namespace, build.project, build)
send("#{route}_url", build.project.namespace, build.project, build)
end
end

View file

@ -4,9 +4,9 @@ class CommitEntity < API::Entities::RepoCommit
expose :author, using: UserEntity
expose :commit_url do |commit|
@urls.namespace_project_tree_url(
@request.project.namespace,
@request.project,
namespace_project_tree_url(
request.project.namespace,
request.project,
id: commit.id)
end
end

View file

@ -11,7 +11,7 @@ class DeploymentEntity < Grape::Entity
end
expose :ref_url do |deployment|
@urls.namespace_project_tree_url(
namespace_project_tree_url(
deployment.project.namespace,
deployment.project,
id: deployment.ref)

View file

@ -5,10 +5,6 @@ class EntityRequest
# that is present in the controller (see #20045).
#
def initialize(parameters)
merge!(parameters)
end
def merge!(parameters)
parameters.each do |key, value|
define_singleton_method(key) { value }
end

View file

@ -10,7 +10,7 @@ class EnvironmentEntity < Grape::Entity
expose :stoppable?
expose :environment_url do |environment|
@urls.namespace_project_environment_url(
namespace_project_environment_url(
environment.project.namespace,
environment.project,
environment)

View file

@ -1,10 +1,11 @@
module RequestAwareEntity
attr_reader :request
extend ActiveSupport::Concern
def initialize(object, options = {})
super(object, options)
included do
include Gitlab::Routing.url_helpers
end
@request = options.fetch(:request)
@urls = Gitlab::Routing.url_helpers
def request
@options.fetch(:request)
end
end

View file

@ -15,12 +15,4 @@ describe EntityRequest do
expect { subject.some_method }.to raise_error NoMethodError
end
end
describe '#merge!' do
before { subject.merge!(build: 'some build') }
it 'appends parameters' do
expect(subject.build).to eq 'some build'
end
end
end