Skip to content
Snippets Groups Projects
Commit b0a4635b authored by Grzegorz Bizon's avatar Grzegorz Bizon
Browse files

Simplify implementation of entity serializers

parent e49fb264
No related branches found
No related tags found
No related merge requests found
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)
Loading
Loading
Loading
@@ -19,6 +19,6 @@ class BuildEntity < Grape::Entity
Loading
@@ -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
Loading
@@ -4,9 +4,9 @@ class CommitEntity < API::Entities::RepoCommit
Loading
@@ -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
Loading
@@ -11,7 +11,7 @@ class DeploymentEntity < Grape::Entity
Loading
@@ -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)
Loading
Loading
Loading
@@ -5,10 +5,6 @@ class EntityRequest
Loading
@@ -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
Loading
Loading
Loading
@@ -10,7 +10,7 @@ class EnvironmentEntity < Grape::Entity
Loading
@@ -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)
Loading
Loading
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
Loading
@@ -15,12 +15,4 @@ describe EntityRequest do
Loading
@@ -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
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment