Class: Feedcellar::Command

Inherits:
Thor
  • Object
show all
Defined in:
lib/feedcellar/command.rb

Instance Method Summary collapse

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.expand_path("~"), ".feedcellar")
  @database_dir = File.join(@base_dir, "db")
end

Instance Method Details

#collectObject



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

#exportObject



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

#latestObject



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

#listObject



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? &&
     (options["resource"].nil? || options["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, options)

    if options[:curses]
      require "feedcellar/curses_view"
      CursesView.run(sorted_feeds)
    else
      sorted_feeds.each do |feed|
        title = feed.title.gsub(/\n/, " ")
        if options[: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

#versionObject



21
22
23
# File 'lib/feedcellar/command.rb', line 21

def version
  puts Feedcellar::VERSION
end