Commit b0a4635b authored by Grzegorz Bizon's avatar Grzegorz Bizon

Simplify implementation of entity serializers

parent e49fb264
class BaseSerializer class BaseSerializer
def initialize(parameters = {}) def initialize(parameters = {})
@entity = self.class.entity_class
@request = EntityRequest.new(parameters) @request = EntityRequest.new(parameters)
@opts = { request: @request }
end
def set(parameters)
@request.merge!(parameters)
self
end end
def represent(resource, opts = {}) def represent(resource, opts = {})
@entity.represent(resource, @opts.reverse_merge(opts)) self.class.entity_class
.represent(resource, opts.merge(request: @request))
end end
def self.entity(entity_class) def self.entity(entity_class)
......
...@@ -19,6 +19,6 @@ class BuildEntity < Grape::Entity ...@@ -19,6 +19,6 @@ class BuildEntity < Grape::Entity
private private
def url_to(route, build) 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
end end
...@@ -4,9 +4,9 @@ class CommitEntity < API::Entities::RepoCommit ...@@ -4,9 +4,9 @@ class CommitEntity < API::Entities::RepoCommit
expose :author, using: UserEntity expose :author, using: UserEntity
expose :commit_url do |commit| expose :commit_url do |commit|
@urls.namespace_project_tree_url( namespace_project_tree_url(
@request.project.namespace, request.project.namespace,
@request.project, request.project,
id: commit.id) id: commit.id)
end end
end end
...@@ -11,7 +11,7 @@ class DeploymentEntity < Grape::Entity ...@@ -11,7 +11,7 @@ class DeploymentEntity < Grape::Entity
end end
expose :ref_url do |deployment| expose :ref_url do |deployment|
@urls.namespace_project_tree_url( namespace_project_tree_url(
deployment.project.namespace, deployment.project.namespace,
deployment.project, deployment.project,
id: deployment.ref) id: deployment.ref)
......
...@@ -5,10 +5,6 @@ class EntityRequest ...@@ -5,10 +5,6 @@ class EntityRequest
# that is present in the controller (see #20045). # that is present in the controller (see #20045).
# #
def initialize(parameters) def initialize(parameters)
merge!(parameters)
end
def merge!(parameters)
parameters.each do |key, value| parameters.each do |key, value|
define_singleton_method(key) { value } define_singleton_method(key) { value }
end end
......
...@@ -10,7 +10,7 @@ class EnvironmentEntity < Grape::Entity ...@@ -10,7 +10,7 @@ class EnvironmentEntity < Grape::Entity
expose :stoppable? expose :stoppable?
expose :environment_url do |environment| expose :environment_url do |environment|
@urls.namespace_project_environment_url( namespace_project_environment_url(
environment.project.namespace, environment.project.namespace,
environment.project, environment.project,
environment) environment)
......
module RequestAwareEntity module RequestAwareEntity
attr_reader :request extend ActiveSupport::Concern
def initialize(object, options = {}) included do
super(object, options) include Gitlab::Routing.url_helpers
end
@request = options.fetch(:request) def request
@urls = Gitlab::Routing.url_helpers @options.fetch(:request)
end end
end end
...@@ -15,12 +15,4 @@ describe EntityRequest do ...@@ -15,12 +15,4 @@ describe EntityRequest do
expect { subject.some_method }.to raise_error NoMethodError expect { subject.some_method }.to raise_error NoMethodError
end end
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 end
Markdown is supported
0%
or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment