Ruby: получить список расширенных модулей? - PullRequest
16 голосов
/ 04 марта 2011

Когда вы включаете модули в класс или другой модуль, вы можете вызвать

@mymod.included_modules

чтобы получить список включенных модулей.

Есть ли эквивалент для перечисления модулей, на которые был расширен модуль?

module Feature1
end

module Feature2
  extend Feature1
end

Feature2.extended_modules #=> [Feature1]

Ответы [ 3 ]

23 голосов
/ 22 января 2015
Feature2.singleton_class.included_modules # => [Feature1, ...]
19 голосов
/ 04 марта 2011

Они там, вам просто нужно посмотреть в правильном месте:

(class << Feature2; self end).included_modules   # [Feature1, Kernel]

Мы можем обобщить так:

class Module
  # Return any modules we +extend+
  def extended_modules
    (class << self; self end).included_modules
  end
end

# Now get those extended modules peculiar to Feature2
Feature2.extended_modules - Module.extended_modules # [Feature1]
2 голосов
/ 24 января 2017

Все модули Ruby могут быть перечислены из CLI (Командная строка) , сам по себе следующим образом:

ruby -e 'puts Gem::Specification.all().map{|g| [g.name, g.version.to_s] }'

ИЛИ

ruby -rubygems -e 'puts Gem::Specification.all().map{|g| [g.name, g.version.to_s] }'

Надеюсь, это поможет некоторымстепень !!!

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...