Handle presenters in BasePolicy

Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
Rémy Coutable 2017-01-09 21:43:15 +01:00
parent b4f67cc229
commit fd72c0f4c7
2 changed files with 21 additions and 0 deletions

View File

@ -53,6 +53,10 @@ class BasePolicy
def self.class_for(subject)
return GlobalPolicy if subject.nil?
if subject.class.ancestors.include?(Gitlab::View::Presenter::Base)
subject = subject.subject
end
subject.class.ancestors.each do |klass|
next unless klass.name

View File

@ -0,0 +1,17 @@
require 'spec_helper'
describe BasePolicy, models: true do
let(:build) { create(:ci_build) }
describe '.class_for' do
it 'detects policy class based on the subject ancestors' do
expect(described_class.class_for(build)).to eq(Ci::BuildPolicy)
end
it 'detects policy class for a presented subject' do
presentee = Ci::Build::Presenter.new(build)
expect(described_class.class_for(presentee)).to eq(Ci::BuildPolicy)
end
end
end