2013-09-26 6 views
0
class Scraper 

def initialize(options = {}) do 
    @options = options 
end 

def scrape 
    Wombat.crawl do 
    base_url @options[:base_url] 
    path @options[:path] 
    some_data css: @options[:css] 
    end 
end 

end 

Пример использования:Рубин Scoping Не удается передать переменную класса

sample = Scraper.new({base_url: "someurl.com", path:"/random", css: ".regular"}) 
sample.scrape 

Я не могу получить доступ к @options в внутри метода соскоба. Его проблема охвата и, вероятно, может быть решена путем определения области, но я не могу ее обойти. Любая помощь будет оценена по достоинству.

+1

Ваг должен быть доступен. Покажите нам использование этого кода. –

+1

Возможно, блок, переданный в метод 'crawl', вычисляется в другом контексте, чем определено. Как в Савоне: https://github.com/savonrb/savon/blob/version2/lib/savon/block_interface.rb –

+0

Я просто добавляю «raise @ options.to_yaml» внутри Wombat.crawl. Он показывает значения внутри def scrape, но не внутри Wombat.crawl –

ответ

3

Возможно, как говорит Марек Липка, контекст изменен instance_eval. Если это так, вы не можете получить доступ к переменным экземпляра экземпляра Scraper, но можете получить доступ к локальным переменным. Сделайте это:

def scrape 
    options = @options 
    Wombat.crawl do 
    base_url options[:base_url] 
    path options[:path] 
    some_data css: options[:css] 
    end 
end 
+2

Похожуй: https://github.com/felipecsl/wombat/blob/master/lib/wombat/crawler.rb –

+0

он работает. Благодаря! –

Смежные вопросы