summaryrefslogtreecommitdiff
path: root/lib/gitlab/view/presenter/delegated.rb
diff options
context:
space:
mode:
Diffstat (limited to 'lib/gitlab/view/presenter/delegated.rb')
-rw-r--r--lib/gitlab/view/presenter/delegated.rb23
1 files changed, 23 insertions, 0 deletions
diff --git a/lib/gitlab/view/presenter/delegated.rb b/lib/gitlab/view/presenter/delegated.rb
new file mode 100644
index 00000000000..387ff0f5d43
--- /dev/null
+++ b/lib/gitlab/view/presenter/delegated.rb
@@ -0,0 +1,23 @@
+module Gitlab
+ module View
+ module Presenter
+ class Delegated < SimpleDelegator
+ include Gitlab::View::Presenter::Base
+
+ def initialize(subject, **attributes)
+ @subject = subject
+
+ attributes.each do |key, value|
+ if subject.respond_to?(key)
+ raise CannotOverrideMethodError.new("#{subject} already respond to #{key}!")
+ end
+
+ define_singleton_method(key) { value }
+ end
+
+ super(subject)
+ end
+ end
+ end
+ end
+end