pantsu/anifier

View on GitHub
lib/api/grabber.rb

Summary

Maintainability
A
35 mins
Test Coverage
class API::Grabber

  def initialize(url)
    @url = url
    @parser = StandardParser.new
  end

  def reset!
    @releases = nil
  end

  def releases
    return @releases unless @releases.nil?
    @releases = []

    feed = Feedzirra::Feed.fetch_and_parse(@url)
    if feed.respond_to?(:entries)
      @releases = feed.entries.map { |entry| parse_release(entry) }.compact
      logger.info "Grabbed: #{@releases.size} / #{feed.entries.count} from #{@url}"
    else
      logger.error "Feed #{@url} is empty"
    end

    @releases
  end

  private

  def logger
    @logger ||= begin
      log = Logger.new(Rails.root.join("log/grabber.#{Rails.env}.log"))
      log.level = Logger::DEBUG
      log.formatter = lambda do |severity, datetime, progname, message|
        "[#{datetime.strftime("%Y-%m-%d %H:%M:%S")}] #{message}\n"
      end
      log
    end
  end

  def parse_release(entry)
    return unless release = API::Release.build(entry.title, @parser)
    release.details_url = entry.entry_id
    release.valid? ? release : nil
  rescue Exception => e
    nil
  end

end

ActiveSupport.run_load_hooks(:grabber, self)