public
Description: RSS/Atom feeds aggregator, powered by Ramaze. Using Sequel for ORM.
Homepage: http://planet.zhekov.net/
Clone URL: git://github.com/zh/tamanegi.git
Click here to lend your support to: tamanegi and make a donation at www.pledgie.com !
tamanegi / tamanegi.rb
100755 88 lines (75 sloc) 2.289 kb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
#!/usr/bin/env ruby
 
# OS X speedup
require 'resolv-replace'
 
require 'rubygems'
require 'sequel'
require 'validatable'
require 'ramaze'
require 'atom/pub'
 
Sequel.use_parse_tree = false
 
DB_FILE = __DIR__/'db/tamanegi.db'
DB = Sequel.connect("sqlite://#{DB_FILE}")
 
acquire __DIR__/:lib/'*'
Kernel.load 'config.rb'
 
# require all controllers and models
acquire __DIR__/:model/'*'
acquire __DIR__/:controller/'*'
 
module Ramaze
  class Pager
    def navigation
      url=Request.current.env['PATH_INFO']
      nav = ""
      unless first_page?
        nav << %{
<a href="#{url}?_page=#{prev_page}">&lt;Prev</a>
<a href="#{url}?_page=#{first_page}">&lt;&lt;First</a>
}
      end
      for i in nav_range()
        if i == @page
          nav << %{<span class="active">#{i}</span>&nbsp;}
        else
          nav << %{<a href="#{url}?_page=#{i}">#{i}</a>&nbsp;}
        end
      end
      unless last_page?
        nav << %{
<a href="#{url}?_page=#{last_page}">Last&gt;&gt;</a>
<a href="#{url}?_page=#{next_page}">Next&gt;</a>
}
      end
      return nav
    end
  end
end
 
module Tamanegi
  def self.sync!(forceUpdate = false, debug = false)
    Feed.all.each { |f|
      status = f.sync!(forceUpdate)
      puts "#{Time.now.iso8601} #{f.url} [#{status}]" if (status && debug)
    }
    Item.vacuum!
  end
 
  def self.to_atom(base_url = Configuration.for('app').base_url)
    cfg = Configuration.for('app')
    @items = Item.order(:created.desc).limit(cfg.rss_page)
    Atom::Feed.new do |feed|
      feed.title = cfg.title
      feed.id = "urn:uuid:"+Digest::SHA1.hexdigest("--#{base_url}--myBIGsecret")
      feed.updated = Item.order(:id).last.created.iso8601
      feed.authors << Atom::Person.new(:name => 'Aggregated Feed')
      feed.links << Atom::Link.new(:rel=>"self",
                                   :href=>"#{base_url}/atom",
                                   :type=>"application/atom+xml")
      feed.links << Atom::Link.new(:rel => 'alternate',
                                   :href => "#{base_url}/")
 
      @items.each do |item|
        feed.entries << item.to_atom(base_url)
      end
    end
  end
end
 
Tamanegi::sync!(true) if Item.empty? && Configuration.for('app').bootstrap
 
if __FILE__ == $0
  Tamanegi::sync!(false,true)
end