DEV: Expose a way to extend a method that returns a list

DEV: Expose a way to extend a method that returns a list

diff --git a/lib/plugin/instance.rb b/lib/plugin/instance.rb
index 4a4d81a..2611f55 100644
--- a/lib/plugin/instance.rb
+++ b/lib/plugin/instance.rb
@@ -605,11 +605,15 @@ class Plugin::Instance
   end
 
   def register_reviewable_type(reviewable_type_class)
-    types = Reviewable.types
-    types << reviewable_type_class.name
+    extend_list_method Reviewable, :types, [reviewable_type_class.name]
+  end
+
+  def extend_list_method(klass, method, new_attributes)
+    current_list = klass.send(method)
+    current_list.concat(new_attributes)
 
     reloadable_patch do
-      Reviewable.send(:define_singleton_method, :types) { types }
+      klass.send(:define_singleton_method, method) { current_list }
     end
   end
 
diff --git a/spec/components/plugin/instance_spec.rb b/spec/components/plugin/instance_spec.rb
index 0257633..52cb47e 100644
--- a/spec/components/plugin/instance_spec.rb
+++ b/spec/components/plugin/instance_spec.rb
@@ -465,11 +465,22 @@ describe Plugin::Instance do
   describe '#register_reviewable_types' do
     it 'Overrides the existing Reviewable types adding new ones' do
       current_types = Reviewable.types
-      new_type_class = Class
+       new_type_class = Class
 
-      Plugin::Instance.new.register_reviewable_type new_type_class
+       Plugin::Instance.new.register_reviewable_type new_type_class
 
-      expect(Reviewable.types).to match_array(current_types << new_type_class.name)
+       expect(Reviewable.types).to match_array(current_types << new_type_class.name)
+    end
+  end
+
+  describe '#extend_list_method' do
+    it 'Overrides the existing list appending new elements' do
+      current_list = Reviewable.types
+      new_element = Class.name
+
+      Plugin::Instance.new.extend_list_method Reviewable, :types, [new_element]
+
+      expect(Reviewable.types).to match_array(current_list << new_element)
     end
   end
 end

GitHub sha: aec457e0