class Feed2Email::Cli

Public Instance Methods

add(uri) click to toggle source
# File lib/feed2email/cli.rb, line 12
def add(uri)
  uri = autodiscover_feeds(uri)

  if feed = Feed[uri: uri]
    abort "Feed already exists: #{feed}"
  end

  feed = Feed.new(uri: uri)

  if feed.save(raise_on_failure: false)
    puts "Added feed: #{feed}"
  else
    abort 'Failed to add feed'
  end
end
autodiscover_feeds(uri) click to toggle source
# File lib/feed2email/cli.rb, line 150
def autodiscover_feeds(uri)
  discoverer = FeedAutodiscoverer.new(uri)

  # Exclude already subscribed feeds from results
  subscribed_feed_uris = Feed.select_map(:uri)
  discovered_feeds = discoverer.feeds.reject {|feed|
    subscribed_feed_uris.include?(feed[:uri])
  }

  if discovered_feeds.empty?
    if discoverer.content_type == 'text/html'
      puts 'Could not find any new feeds'
      exit
    end

    return uri
  end

  justify = discovered_feeds.size.to_s.size

  discovered_feeds.each_with_index do |feed, i|
    puts '%{index}: %{uri} %{title}(%{content_type})' % {
      index:        i.to_s.rjust(justify),
      uri:          feed[:uri],
      title:        feed[:title] ? "\"#{feed[:title]}\" " : '',
      content_type: feed[:content_type]
    }
  end

  begin
    response = ask(
      'Please enter a feed to subscribe to (or Ctrl-C to abort):',
      limited_to: (0...discovered_feeds.size).to_a.map(&:to_s)
    )
  rescue Interrupt # Ctrl-C
    puts
    exit
  end

  unless response.numeric? &&
      (0...discovered_feeds.size).include?(response.to_i)
    abort 'Invalid index'
  end

  feed = discovered_feeds[response.to_i]

  abort 'Invalid index' unless feed && feed[:uri]

  feed[:uri]
end
backend() click to toggle source
# File lib/feed2email/cli.rb, line 29
def backend
  exec('sqlite3', Feed2Email.database_path)
end
config() click to toggle source
# File lib/feed2email/cli.rb, line 34
def config
  if ENV['EDITOR']
    exec(ENV['EDITOR'], Feed2Email.config_path)
  else
    abort 'EDITOR environmental variable not set'
  end
end
export(path) click to toggle source
# File lib/feed2email/cli.rb, line 43
def export(path)
  if Feed.empty?
    abort 'No feeds to export'
  end

  unless File.exist?(path)
    puts 'This may take a while. Please wait...'

    if n = OPMLExporter.export(path)
      puts "Exported #{'feed subscription'.pluralize(n)} to #{path}"
    else
      abort 'Failed to export feed subscriptions'
    end
  else
    abort 'File already exists'
  end
end
import(path) click to toggle source
# File lib/feed2email/cli.rb, line 64
def import(path)
  if File.exist?(path)
    puts 'Importing...'

    if n = OPMLImporter.import(path, options[:remove])
      if n > 0
        puts "Imported #{'feed subscription'.pluralize(n)} from #{path}"
      end
    else
      abort 'Failed to import feed subscriptions'
    end
  else
    abort 'File does not exist'
  end
end
list() click to toggle source
# File lib/feed2email/cli.rb, line 81
def list
  if Feed.any?
    puts Feed.by_smallest_id.to_a
    print "\nSubscribed to #{'feed'.pluralize(Feed.count)}"

    if Feed.where(enabled: false).count > 0
      print " (#{Feed.enabled.count} enabled)"
    end

    puts
  else
    puts 'No feeds'
  end
end
process() click to toggle source
# File lib/feed2email/cli.rb, line 97
def process
  Feed.enabled.by_smallest_id.each(&:process)
end
remove(id) click to toggle source
# File lib/feed2email/cli.rb, line 102
def remove(id)
  feed = Feed[id]

  if feed
    puts "Remove feed: #{feed}"

    if ask('Are you sure?', limited_to: %w{y n}) == 'y'
      if feed.delete
        puts 'Removed'
      else
        abort 'Failed to remove feed'
      end
    else
      puts 'Not removed'
    end
  else
    abort "Feed not found. Is #{id} a valid id?"
  end
end
toggle(id) click to toggle source
# File lib/feed2email/cli.rb, line 123
def toggle(id)
  feed = Feed[id]

  if feed && feed.toggle
    puts "Toggled feed: #{feed}"
  else
    abort "Failed to toggle feed. Is #{id} a valid id?"
  end
end
uncache(id) click to toggle source
# File lib/feed2email/cli.rb, line 134
def uncache(id)
  feed = Feed[id]

  if feed && feed.uncache
    puts "Uncached feed: #{feed}"
  else
    abort "Failed to uncache feed. Is #{id} a valid id?"
  end
end
version() click to toggle source
# File lib/feed2email/cli.rb, line 145
def version
  puts "feed2email #{Feed2Email::VERSION}"
end