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

This commit is contained in:
Roman Rizzi 2019-04-08 14:42:36 -03:00 committed by GitHub
parent df1ab9259b
commit aec457e09a
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 21 additions and 6 deletions

View File

@ -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

View File

@ -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