diff --git a/app/serializers/environment_entity.rb b/app/serializers/environment_entity.rb index 9415f1dd450..006b2841e8f 100644 --- a/app/serializers/environment_entity.rb +++ b/app/serializers/environment_entity.rb @@ -9,9 +9,17 @@ class EnvironmentEntity < Grape::Entity as: :deployment, using: API::Entities::Deployment - expose :environment_path + expose :gitlab_path do |environment| + namespace_project_environment_path( + environment.project.namespace, + environment.project, + environment + ) + end - def environment_path - request.path + expose :can_read? + + def can_read? + Ability.allowed?(request.user, :read_environment, @object) end end diff --git a/app/serializers/project_entity.rb b/app/serializers/project_entity.rb index b8e23db470b..047366eb687 100644 --- a/app/serializers/project_entity.rb +++ b/app/serializers/project_entity.rb @@ -1,8 +1,10 @@ class ProjectEntity < Grape::Entity + include RequestAwareEntity + expose :id expose :name expose :test do |project| - 'something' + request.user.email end end diff --git a/app/serializers/request_aware_entity.rb b/app/serializers/request_aware_entity.rb index f6b6f64d0f8..fc7d1698b1a 100644 --- a/app/serializers/request_aware_entity.rb +++ b/app/serializers/request_aware_entity.rb @@ -1,9 +1,4 @@ module RequestAwareEntity - # We use SerializableRequest class to collect parameters and variables - # from the controller. Because options that are being passed to the entity - # are appear in each entity in the chain, we need a way to access data - # that is present in the controller (see #20045). - # def request options[:request] || raise(StandardError, 'Request not set!!') diff --git a/spec/serializers/environment_serializer_spec.rb b/spec/serializers/environment_serializer_spec.rb index 3470863681c..cd9486111f1 100644 --- a/spec/serializers/environment_serializer_spec.rb +++ b/spec/serializers/environment_serializer_spec.rb @@ -2,18 +2,21 @@ require 'spec_helper' describe EnvironmentSerializer do let(:serializer) do - described_class.new(path: 'some path').represent(resource) + described_class.new(path: 'some path', user: user) + .represent(resource) end + let(:user) { create(:user) } + context 'when there is a single object provided' do let(:resource) { create(:environment) } it 'shows json' do - puts serializer.to_json + puts serializer.as_json end it 'it generates payload for single object' do - expect(parsed_json).to be_an_instance_of Hash + expect(serializer.as_json).to be_an_instance_of Hash end end @@ -21,15 +24,11 @@ describe EnvironmentSerializer do let(:resource) { create_list(:environment, 2) } it 'shows json' do - puts serializer.to_json + puts serializer.as_json end it 'generates payload for collection' do - expect(parsed_json).to be_an_instance_of Array + expect(serializer.as_json).to be_an_instance_of Array end end - - def parsed_json - JSON.parse(serializer.to_json) - end end