fastladder を読む (2) - app/model/feed.rb

icon メソッドはパスの解決。これはHelperに書くかModelに書くかいつも迷ってしまうんですが、こんなものなのかな?フルパスで書いてあるので、おそらく img src などに使うんだろうけど。

to_json メソッド。これはとりあえずパス。わざわざ上書きしてるのだから、おそらくAjaxで使っているのかと。

    %w(title description).each do |s|
      result[s.to_sym] = (self.send(s) || "").purify_html
    end
    %w(feedlink link image).each do |s|
      result[s.to_sym] = (self.send(s) || "").purify_uri
    end

で、purify_* はいわゆるエスケープ作業。lib/string_utils.rb に定義があって、Stringクラスにメソッドを追加しています。ちなみに、この lib/string_utils.rb で

  def sanitize_uri
    begin
      uri = URI.parse(self)
    rescue URI::Error => e
      return ""
    end
    case uri
    when URI::Generic, URI::HTTP, URI::HTTPS, URI::FTP, URI::MailTo
      return uri.normalize.to_s
    else
      return ""
    end
  end

なのもあるので、URI は場合によっては消える可能性が... feedlink,link,image のどれにもvalidationがついていないので後で動かして確認する。

subscribed は メンバーがそのFeedを購読しているかどうかを確認するメソッド。member.subscribed(feed) に投げるだけ・・・ん、subscribed, -ed? まあいいや。

update_subscribers_count は購読メンバー数を更新するメソッド。

で、メインは crawl メソッド。

  def crawl
    crawl_status = self.crawl_status
    CrawlStatus.transaction do
      if crawl_status.status != Crawler::CRAWL_OK
        return
      end
      crawl_status.update_attribute(:status, Crawler::CRAWL_NOW)
    end
    begin
      Crawler::crawl(self)
    rescue => ex
      logger.error "Crawler error: #{ex}"
    ensure
      crawl_status.update_attribute(:status, Crawler::CRAWL_OK)
    end
  end

ん、、、、transaction? これはあってもなくても、の話で、trunk のほうは 3/7 時点で無くなってます。で、Crawlerをみると。