diff --git a/lib/feed_handler.rb b/lib/feed_handler.rb index aa17e1c..d6ac291 100644 --- a/lib/feed_handler.rb +++ b/lib/feed_handler.rb @@ -15,7 +15,12 @@ class FeedHandler def fetch(address) begin content = "" - open(address) do |s| content = s.read end + block = lambda { |s| content = s.read } + content = if is_web_address?(address) + open( address, "User-Agent" => "Noosfero/#{Noosfero::VERSION}", &block ) + else + open_uri_original_open(address, &block) + end return content rescue Exception => ex raise FeedHandler::FetchError, ex.to_s @@ -39,4 +44,14 @@ class FeedHandler class ParseError < Exception; end class FetchError < Exception; end + protected + + # extracted from the open implementation in the open-uri library + def is_web_address?(address) + address.respond_to?(:open) || + address.respond_to?(:to_str) && + (%r{\A[A-Za-z][A-Za-z0-9+\-\.]*://} =~ address) && + URI.parse(address).respond_to?(:open) + end + end diff --git a/test/unit/feed_handler_test.rb b/test/unit/feed_handler_test.rb index ea1b3e6..62ec222 100644 --- a/test/unit/feed_handler_test.rb +++ b/test/unit/feed_handler_test.rb @@ -73,4 +73,10 @@ class FeedHandlerTest < Test::Unit::TestCase handler.process(container) end + should 'identifies itself as noosfero user agent' do + handler = FeedHandler.new + handler.expects(:open).with('http://site.org/feed.xml', {"User-Agent" => "Noosfero/#{Noosfero::VERSION}"}, anything).returns('bli content') + assert_equal 'bli content', handler.fetch('http://site.org/feed.xml') + end + end -- libgit2 0.21.2