Commit b8bcd24b00c2a03c95b4f8b8f22cf617d68580de

Authored by Antonio Terceiro
1 parent be6c3d11

Remove merge artifact added by mistake

Showing 1 changed file with 0 additions and 110 deletions   Show diff stats
lib/feed_handler.rb.orig
... ... @@ -1,110 +0,0 @@
1   -require 'feedparser'
2   -require 'open-uri'
3   -
4   -# This class is responsible for processing feeds and pass the items to the
5   -# respective container.
6   -#
7   -# The <tt>max_errors</tt> attribute controls how many times it will retry in
8   -# case of failure. If a feed fails for <tt>max_errors+1</tt> times, it will be
9   -# disabled and the last error message will be recorder in the container.
10   -# The default value is *6*, if you need to change it you can do that in your
11   -# config/local.rb file like this:
12   -#
13   -# FeedHandler.max_errors = 10
14   -#
15   -# For the update interval, see FeedUpdater.
16   -class FeedHandler
17   -
18   - # The maximum number
19   - cattr_accessor :max_errors
20   - cattr_accessor :disabled_period
21   -
22   - self.max_errors = 6
23   - self.disabled_period = 1.week
24   -
25   - def parse(content)
26   - raise FeedHandler::ParseError, "Content is nil" if content.nil?
27   - begin
28   - return FeedParser::Feed::new(content)
29   - rescue Exception => ex
30   - raise FeedHandler::ParseError, "Invalid feed format."
31   - end
32   - end
33   -
34   - def fetch(address)
35   - begin
36   - content = ""
37   - block = lambda { |s| content = s.read }
38   - content =
39   - if Rails.env == 'test' && File.exists?(address)
40   - File.read(address)
41   - else
42   - if !valid_url?(address)
43   - raise InvalidUrl.new("\"%s\" is not a valid URL" % address)
44   - end
45   - open(address, "User-Agent" => "Noosfero/#{Noosfero::VERSION}", &block)
46   - end
47   - return content
48   - rescue Exception => ex
49   - raise FeedHandler::FetchError, ex.message
50   - end
51   - end
52   -
53   - def process(container)
54   -<<<<<<< HEAD
55   - Rails.logger.info("Processing %s with id = %d" % [container.class.name, container.id])
56   -=======
57   ->>>>>>> rails235
58   - begin
59   - container.class.transaction do
60   - if container.update_errors > FeedHandler.max_errors && container.fetched_at < (Time.now - FeedHandler.disabled_period)
61   - container.enabled = true
62   - container.update_errors = 0
63   - container.save
64   - end
65   - next unless container.enabled
66   - actually_process_container(container)
67   - container.update_errors = 0
68   - container.finish_fetch
69   - end
70   - rescue Exception => exception
71   - Rails.logger.warn("Unknown error from %s ID %d\n%s" % [container.class.name, container.id, exception.to_s])
72   - Rails.logger.warn("Backtrace:\n%s" % exception.backtrace.join("\n"))
73   - container.reload
74   - container.update_errors += 1
75   - container.error_message = exception.to_s
76   - if container.update_errors > FeedHandler.max_errors
77   - container.fetched_at = Time.now
78   - container.enabled = false
79   - end
80   - begin
81   - container.finish_fetch
82   - rescue Exception => finish_fetch_exception
83   - Rails.logger.warn("Unable to finish fetch from %s ID %d\n%s" % [container.class.name, container.id, finish_fetch_exception.to_s])
84   - Rails.logger.warn("Backtrace:\n%s" % finish_fetch_exception.backtrace.join("\n"))
85   - end
86   - end
87   - end
88   -
89   - class InvalidUrl < Exception; end
90   - class ParseError < Exception; end
91   - class FetchError < Exception; end
92   -
93   - protected
94   -
95   - def actually_process_container(container)
96   - container.clear
97   - content = fetch(container.address)
98   - container.fetched_at = Time.now
99   - parsed_feed = parse(content)
100   - container.feed_title = parsed_feed.title
101   - parsed_feed.items[0..container.limit-1].reverse.each do |item|
102   - container.add_item(item.title, item.link, item.date, item.content)
103   - end
104   - end
105   -
106   - def valid_url?(url)
107   - url =~ URI.regexp('http') || url =~ URI.regexp('https')
108   - end
109   -
110   -end