Simplify implementation of entity serializers
This commit is contained in:
parent
e49fb264e6
commit
b0a4635be3
8 changed files with 14 additions and 31 deletions
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
|
|
@ -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
|
||||
|
|
Loading…
Reference in a new issue