Ответ 1
Насколько я понимаю ваш вопрос, что-то вроде этого - то, что вы ищете:
class Class
def mixin_ancestors(include_ancestors=true)
ancestors.take_while {|a| include_ancestors || a != superclass }.
select {|ancestor| ancestor.instance_of?(Module) }
end
end
Однако я не совсем понимаю ваши тестовые индексы: почему SomeModule
указан в качестве включенного модуля ChildModel
, хотя он фактически не включен в ChildModel
, а в ParentModel
? И наоборот, почему Kernel
не указан в качестве включенного модуля, хотя он так же велик в цепочке предков как SomeModule
? А что означает логический аргумент метода?
(Обратите внимание, что логические аргументы всегда являются плохим дизайном: метод должен делать только одно: если он принимает логический аргумент, он по определению имеет две вещи: одну, если аргумент истинен, другой - аргумент false., если он делает только одно, то это может означать только то, что он игнорирует свой аргумент, и в этом случае он не должен начинать с него.)