2012-04-28 3 views
1
task('google:rankings' => :environment) do 
    def find_item uri, query 
    search = Google::Search::Web.new do |search| 
     search.query = query 
     search.size = :large 
     search.each_response { print '.'; $stdout.flush } 
    end 
    search.find { |item| item.uri.downcase.include?(uri.downcase) } 
    end 

    def rank_for query, domain 
    print "%35s " % query 
    if item = find_item(domain, query) 
     puts " #%d" % (item.index + 1) 
    else 
     puts " Not found" 
    end 
    end 

    Campaign.all.each do |campaign| 
    campaign.keywords.each do |keyword| 
     rank_for keyword.set, Domain.find(campaign.domain_id).name if (keyword.set) 
    end 
    end 
end 

Этот лакомый кусочек находится внутри задачи грабли. Когда задача рейка запускает обновления окна консоли в режиме реального времени следующим образом:Что означает синтаксис рубина?

ключевое слово.

ключевое слово ...

ключевое слово ..... не найдено

Я не совсем ясно, о том, что происходит с #%d? Как это происходит, когда печать точки происходит несколько раз?

ответ

7

Точки не печатаются по строке 4 (или любой строке) rank_for. Они печатаются блоком, переданным до search.each_response несколькими строками ранее.

В #%d, то # просто # и %d является C-иш формат кода означает «интерполировать целое значение здесь».

+0

Дангит едва видел сам. что в этом случае 35%? – Jake

+2

@Jake% s означает взять строку, а 35 - выровнять по правому краю до 35 символов. – sepp2k

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