public
Description: Yet Another Planet Refactoring
Homepage: http://intertwingly.net/blog/2007/12/19/Yet-Another-Planet-Refactoring
Clone URL: git://github.com/rubys/mars.git
mars / planet / formatter.rb
100755 65 lines (54 sloc) 1.792 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
require 'planet/config'
require 'html5/tokenizer'
 
class PlanetFormatter
 
  def process( stylesheet, feed )
    raise 'Abstract method called'
  end
 
  def plain(value)
    #TODO add HTML stripper
    tokenizer = HTML5::HTMLTokenizer.new(value)
    line = ""
    tokenizer.each { |t|
# puts "PLAIN: token, type=#{t[:type]}, data=#{t[:data]}, name=#{t[:name]}\n"
 
                    case t[:type]
                    when :StartTag, :EndTag, :EmptyTag, :Comment
                      next
                    when :SpaceCharacters
                      line << t[:data]
                    when :Characters
                      line << t[:data]
                    when :ParseError
                      puts "PLAIN: parse error, data=#{t[:data]}, name=#{t[:name]}\n"
                      puts "PLAIN: parse error, value=#{value}\n"
                      line << value
                    else
                      puts "PLAIN: uncaught type #{t[:type]}\n"
                    end
                  }
    return line
  end
  
  def string(value)
    #TODO deal with encoding issues
    return value
  end
  
  def planet_date(value)
      df = Planet.config['Planet']['date_format']
      df ||= "%B %d, %Y %I:%M %p"
      t = value ? Time.parse(value).gmtime.strftime(df): nil
      t.gsub!('"', '')
      return t
  end
  
  def new_date(value)
      ndf = Planet.config['Planet']['new_date_format']
      ndf ||= "%B %d, %Y %I:%M %p"
      t = value ? Time.parse(value).gmtime.strftime(ndf): nil
      t.gsub!('"', '')
      return t
  end
 
  def rfc822(value)
      return value ? Time.parse(value).gmtime.strftime("%a, %d %b %Y %H:%M:%S +0000"): nil
  end
  
  def rfc3399(value)
    return value ? Time.parse(value).gmtime.strftime("%Y-%m-%dT%H:%M:%S+00:00"): nil
  end
 
end