diff options
| author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-07-22 05:41:33 +0000 |
|---|---|---|
| committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2005-07-22 05:41:33 +0000 |
| commit | ee9762968be0a56328733fead3938659ed30b4d5 (patch) | |
| tree | 3e2486e8434f30b7281f1a61322c732f7b01c05f /lib/rss/parser.rb | |
| parent | e3344184b11fa45e30ff18d853c06cc826e5fd2d (diff) | |
| download | ruby-ee9762968be0a56328733fead3938659ed30b4d5.tar.gz ruby-ee9762968be0a56328733fead3938659ed30b4d5.tar.xz ruby-ee9762968be0a56328733fead3938659ed30b4d5.zip | |
* lib/rss/parser.rb (RSS::Parser#initialize): accept HTTP/FTP
URI and local file path too.
* test/rss/test_parser.rb (RSS::TestParser#test_parse): test
for the above.
git-svn-id: http://svn.ruby-lang.org/repos/ruby/trunk@8819 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
Diffstat (limited to 'lib/rss/parser.rb')
| -rw-r--r-- | lib/rss/parser.rb | 32 |
1 files changed, 31 insertions, 1 deletions
diff --git a/lib/rss/parser.rb b/lib/rss/parser.rb index 7e93c62f6..df268da1e 100644 --- a/lib/rss/parser.rb +++ b/lib/rss/parser.rb @@ -1,4 +1,5 @@ require "forwardable" +require "open-uri" require "rss/rss" @@ -77,7 +78,36 @@ module RSS :do_validate=) def initialize(rss, parser_class=self.class.default_parser) - @parser = parser_class.new(rss) + @parser = parser_class.new(normalize_rss(rss)) + end + + private + def normalize_rss(rss) + return rss if maybe_xml?(rss) + + uri = to_uri(rss) + + if uri.respond_to?(:read) + uri.read + elsif !rss.tainted? and File.readable?(rss) + File.open(rss) {|f| f.read} + else + rss + end + end + + def maybe_xml?(source) + source.is_a?(String) and /</ =~ source + end + + def to_uri(rss) + return rss if rss.is_a?(::URI::Generic) + + begin + URI(rss) + rescue ::URI::Error + rss + end end end |
