diff options
author | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-05-12 09:06:00 +0000 |
---|---|---|
committer | kou <kou@b2dd03c8-39d4-4d8f-98ff-823fe69b080e> | 2018-05-12 09:06:00 +0000 |
commit | 97c07d3487aac92f72469d0f955eda12c851e87f (patch) | |
tree | c983fa577af3ab2c548316cb1631a8838e234615 | |
parent | 961cbe5262946732e47182714ea3b4395a71227d (diff) | |
download | ruby-97c07d3487aac92f72469d0f955eda12c851e87f.tar.gz |
rss: Add option Hash support to RSS::Parser.parse
Available options:
* :validate
* :ignore_unknown_element
* :parser_class
git-svn-id: svn+ssh://ci.ruby-lang.org/ruby/trunk@63407 b2dd03c8-39d4-4d8f-98ff-823fe69b080e
-rw-r--r-- | NEWS | 5 | ||||
-rw-r--r-- | lib/rss/parser.rb | 22 | ||||
-rw-r--r-- | test/rss/test_parser.rb | 56 |
3 files changed, 81 insertions, 2 deletions
@@ -176,6 +176,11 @@ with all sufficient information, see the ChangeLog file or Redmine * "name(#{NODE_SET})" case +* RSS + + * RSS::Parser.parse: Accept options as Hash. :validate, + :ignore_unknown_element, :parser_class options are available. + * Set * Aliased methods: diff --git a/lib/rss/parser.rb b/lib/rss/parser.rb index a9842e6d40..e271dc381c 100644 --- a/lib/rss/parser.rb +++ b/lib/rss/parser.rb @@ -72,13 +72,31 @@ module RSS end end - def parse(rss, do_validate=true, ignore_unknown_element=true, - parser_class=default_parser) + def parse(rss, *args) + if args.last.is_a?(Hash) + options = args.pop + else + options = {} + end + do_validate = boolean_argument(args[0], options[:validate], true) + ignore_unknown_element = + boolean_argument(args[1], options[:ignore_unknown_element], true) + parser_class = args[2] || options[:parser_class] || default_parser parser = new(rss, parser_class) parser.do_validate = do_validate parser.ignore_unknown_element = ignore_unknown_element parser.parse end + + private + def boolean_argument(positioned_value, option_value, default) + value = positioned_value + if value.nil? and not option_value.nil? + value = option_value + end + value = default if value.nil? + value + end end def_delegators(:@parser, :parse, :rss, diff --git a/test/rss/test_parser.rb b/test/rss/test_parser.rb index 7d64657d57..4e7cc1b963 100644 --- a/test/rss/test_parser.rb +++ b/test/rss/test_parser.rb @@ -61,5 +61,61 @@ EOR EOR end end + + def test_parse_option_validate_nil + assert_raise(RSS::MissingTagError) do + RSS::Parser.parse(make_RDF(<<-RDF), :validate => nil) + RDF + end + end + + def test_parse_option_validate_true + assert_raise(RSS::MissingTagError) do + RSS::Parser.parse(make_RDF(<<-RDF), :validate => true) + RDF + end + end + + def test_parse_option_validate_false + rdf = RSS::Parser.parse(make_RDF(<<-RDF), :validate => false) + RDF + assert_nil(rdf.channel) + end + + def test_parse_option_ignore_unknown_element_nil + assert_nothing_raised do + RSS::Parser.parse(make_RDF(<<-RDF), :ignore_unknown_element => nil) +<unknown/> +#{make_channel} +#{make_item} +#{make_textinput} +#{make_image} + RDF + end + end + + def test_parse_option_ignore_unknown_element_true + assert_nothing_raised do + RSS::Parser.parse(make_RDF(<<-RDF), :ignore_unknown_element => true) +<unknown/> +#{make_channel} +#{make_item} +#{make_textinput} +#{make_image} + RDF + end + end + + def test_parse_option_ignore_unknown_element_false + assert_raise(RSS::NotExpectedTagError) do + RSS::Parser.parse(make_RDF(<<-RDF), :ignore_unknown_element => false) +<unknown/> +#{make_channel} +#{make_item} +#{make_textinput} +#{make_image} + RDF + end + end end end |