Class: Feedcellar::Command
- Inherits:
-
Thor
- Object
- Thor
- Feedcellar::Command
- Defined in:
- lib/feedcellar/command.rb
Instance Method Summary collapse
- #collect ⇒ Object
- #export ⇒ Object
- #import(opml_xml) ⇒ Object
-
#initialize(*args) ⇒ Command
constructor
A new instance of Command.
- #latest ⇒ Object
- #list ⇒ Object
- #register(url) ⇒ Object
- #search(*words) ⇒ Object
- #unregister(title_or_url) ⇒ Object
- #version ⇒ Object
Constructor Details
#initialize(*args) ⇒ Command
Returns a new instance of Command.
14 15 16 17 18 |
# File 'lib/feedcellar/command.rb', line 14 def initialize(*args) super @base_dir = File.join(File.("~"), ".feedcellar") @database_dir = File.join(@base_dir, "db") end |
Instance Method Details
#collect ⇒ Object
71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 |
# File 'lib/feedcellar/command.rb', line 71 def collect GroongaDatabase.new.open(@database_dir) do |database| database.resources.each do |record| feed_url = record.xmlUrl next unless feed_url items = Feed.parse(feed_url) next unless items items.each do |item| database.add(record.xmlUrl, item.title, item.link, item.description, item.date) end end end end |
#export ⇒ Object
55 56 57 58 59 |
# File 'lib/feedcellar/command.rb', line 55 def export GroongaDatabase.new.open(@database_dir) do |database| puts Opml.build(database.resources.records) end end |
#import(opml_xml) ⇒ Object
44 45 46 47 48 49 50 51 52 |
# File 'lib/feedcellar/command.rb', line 44 def import(opml_xml) GroongaDatabase.new.open(@database_dir) do |database| Opml.parse(opml_xml).each do |resource| next unless resource["xmlUrl"] # FIXME: better way next if resource["xmlUrl"].empty? database.register(resource["xmlUrl"], resource) end end end |
#latest ⇒ Object
92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 |
# File 'lib/feedcellar/command.rb', line 92 def latest GroongaDatabase.new.open(@database_dir) do |database| feeds = database.feeds # TODO: I want to use the groonga method for grouping. feeds.group_by {|feed| feed.resource.xmlUrl }.each do |url, group| latest_feed = group.sort_by {|feed| feed.date }.last next unless latest_feed title = latest_feed.title.gsub(/\n/, " ") next unless title date = latest_feed.date.strftime("%Y/%m/%d") puts "#{date} #{title} - #{latest_feed.resource.title}" end end end |
#list ⇒ Object
62 63 64 65 66 67 68 |
# File 'lib/feedcellar/command.rb', line 62 def list GroongaDatabase.new.open(@database_dir) do |database| database.resources.each do |record| puts "#{record.title} #{record.xmlUrl}" end end end |
#register(url) ⇒ Object
26 27 28 29 30 31 32 33 34 |
# File 'lib/feedcellar/command.rb', line 26 def register(url) resource = Resource.parse(url) return 1 unless resource return 1 if resource["xmlUrl"].empty? GroongaDatabase.new.open(@database_dir) do |database| database.register(resource["xmlUrl"], resource) end end |
#search(*words) ⇒ Object
114 115 116 117 118 119 120 121 122 123 124 125 126 127 128 129 130 131 132 133 134 135 136 137 138 139 140 141 |
# File 'lib/feedcellar/command.rb', line 114 def search(*words) if words.empty? && (["resource"].nil? || ["resource"].empty?) $stderr.puts "WARNING: required one of word or resource option." return 1 end GroongaDatabase.new.open(@database_dir) do |database| sorted_feeds = GroongaSearcher.search(database, words, ) if [:curses] require "feedcellar/curses_view" CursesView.run(sorted_feeds) else sorted_feeds.each do |feed| title = feed.title.gsub(/\n/, " ") if [:long] date = feed.date.strftime("%Y/%m/%d %H:%M") resource = feed.resource.title puts "#{date} #{title} - #{resource} / #{feed.link}" else date = feed.date.strftime("%Y/%m/%d") puts "#{date} #{title}" end end end end end |
#unregister(title_or_url) ⇒ Object
37 38 39 40 41 |
# File 'lib/feedcellar/command.rb', line 37 def unregister(title_or_url) GroongaDatabase.new.open(@database_dir) do |database| database.unregister(title_or_url) end end |
#version ⇒ Object
21 22 23 |
# File 'lib/feedcellar/command.rb', line 21 def version puts Feedcellar::VERSION end |