class Feed2Email::OPMLImporter

Public Class Methods

import(path, remove = false) click to toggle source
# File lib/feed2email/opml_importer.rb, line 5
def self.import(path, remove = false)
  require 'feed2email/feed'

  feeds = open(path) {|f| new(f).feeds }

  imported = 0

  feeds.each do |uri|
    if feed = Feed[uri: uri]
      warn "Feed already exists: #{feed}"
    else
      feed = Feed.new(uri: uri)

      if feed.save(raise_on_failure: false)
        puts "Imported feed: #{feed}"
        imported += 1
      else
        warn "Failed to import feed: #{feed}"
      end
    end
  end

  if remove
    Feed.exclude(uri: feeds).each do |feed|
      if feed.delete
        puts "Removed feed: #{feed}"
      else
        warn "Failed to remove feed: #{feed}"
      end
    end
  end

  imported
end
new(io) click to toggle source
# File lib/feed2email/opml_importer.rb, line 40
def initialize(io)
  @io = io
end

Public Instance Methods

feeds() click to toggle source
# File lib/feed2email/opml_importer.rb, line 44
def feeds
  Nokogiri::XML(data).css('opml body outline').map {|outline|
    outline['xmlUrl']
  }.compact
end

Private Instance Methods

data() click to toggle source
# File lib/feed2email/opml_importer.rb, line 52
def data
  io.read
end
io() click to toggle source
# File lib/feed2email/opml_importer.rb, line 56
def io; @io end