2015-01-09 7 views
0

я классы с пространствами имен, как например:Рубиновые методы имен Смешение

module SocialSearch 
    module Scrapers 
    class TwitterScraper 
     # ... 
    end 
    end 
end 

Я хотел бы создать метод в Scrapers, что будет распространена среди всех классов в пространстве имен, но не вручную делать include Scrapers в каждом классов, если они находятся в пространстве имен Scrapers.

Спасибо!

+0

Там нет пространства имен в любом месте в этом вопросе, или в Ruby. Модули не являются пространствами имен. Эти два условия не могут использоваться взаимозаменяемо. – meagar

ответ

1
SocialSearch::Scrapers.constants.each do 
    |k| k = SocialSearch::Scrapers.const_get(k) 
    k.extend(SocialSearch::Scrapers)if k.instance_of?(Class) 
end 

или

SocialSearch::Scrapers.constants.each do 
    |k| k = SocialSearch::Scrapers.const_get(k) 
    k.include(SocialSearch::Scrapers)if k.instance_of?(Class) 
end 
0

Попробуйте использовать наследование:

class Scrapers 
    # your common methods for all scrapers 
end 

class TwitterScraper < Scrapers 
    # your twitter-related scraper setup; methods from Scrapers are visible here 
end 

class FacebookScraper < Scrapers 
    # your twitter-related scraper setup; methods from Scrapers are visible here 
end