Raise Gitlab::View::Presenter::CannotOverrideMethodError if presentee already respond to method
Signed-off-by: Rémy Coutable <remy@rymai.me>
This commit is contained in:
parent
0ac65b6cc3
commit
68e94450a0
3 changed files with 9 additions and 6 deletions
|
@ -1,6 +1,8 @@
|
|||
module Gitlab
|
||||
module View
|
||||
module Presenter
|
||||
CannotOverrideMethodError = Class.new(StandardError)
|
||||
|
||||
module Base
|
||||
extend ActiveSupport::Concern
|
||||
|
||||
|
|
|
@ -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)
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
Loading…
Reference in a new issue