diff options
| -rw-r--r-- | lib/gitlab/view/presenter/base.rb | 2 | ||||
| -rw-r--r-- | lib/gitlab/view/presenter/delegated.rb | 6 | ||||
| -rw-r--r-- | spec/lib/gitlab/view/presenter/delegated_spec.rb | 7 | 
3 files changed, 9 insertions, 6 deletions
| diff --git a/lib/gitlab/view/presenter/base.rb b/lib/gitlab/view/presenter/base.rb index 83c8ba5c1cf..dbfe0941e4d 100644 --- a/lib/gitlab/view/presenter/base.rb +++ b/lib/gitlab/view/presenter/base.rb @@ -1,6 +1,8 @@  module Gitlab    module View      module Presenter +      CannotOverrideMethodError = Class.new(StandardError) +        module Base          extend ActiveSupport::Concern diff --git a/lib/gitlab/view/presenter/delegated.rb b/lib/gitlab/view/presenter/delegated.rb index fd90f7c2bad..387ff0f5d43 100644 --- a/lib/gitlab/view/presenter/delegated.rb +++ b/lib/gitlab/view/presenter/delegated.rb @@ -8,9 +8,11 @@ module Gitlab            @subject = subject            attributes.each do |key, value| -            unless subject.respond_to?(key) -              define_singleton_method(key) { value } +            if subject.respond_to?(key) +              raise CannotOverrideMethodError.new("#{subject} already respond to #{key}!")              end + +            define_singleton_method(key) { value }            end            super(subject) diff --git a/spec/lib/gitlab/view/presenter/delegated_spec.rb b/spec/lib/gitlab/view/presenter/delegated_spec.rb index 8390188bfdc..e9d4af54389 100644 --- a/spec/lib/gitlab/view/presenter/delegated_spec.rb +++ b/spec/lib/gitlab/view/presenter/delegated_spec.rb @@ -17,10 +17,9 @@ describe Gitlab::View::Presenter::Delegated do        expect(presenter.current_user).to eq('Jane Doe')      end -    it 'does not override the presentee attributes' do -      presenter = presenter_class.new(project, user: 'Jane Doe') - -      expect(presenter.user).to eq('John Doe') +    it 'raise an error if the presentee already respond to method' do +      expect { presenter_class.new(project, user: 'Jane Doe') }. +        to raise_error Gitlab::View::Presenter::CannotOverrideMethodError      end    end | 
