class RSS::Parser
公共类方法
default_parser() 点击切换源代码
# File rss-0.3.1/lib/rss/parser.rb, line 61 def default_parser @@default_parser || AVAILABLE_PARSERS.first end
default_parser=(new_value) 点击切换源代码
如果 new_value 是可用的解析器之一,则将 @@default_parser 设置为 new_value。否则,引发 NotValidXMLParser
错误。
# File rss-0.3.1/lib/rss/parser.rb, line 67 def default_parser=(new_value) if AVAILABLE_PARSERS.include?(new_value) @@default_parser = new_value else raise NotValidXMLParser.new(new_value) end end
new(rss, parser_class=self.class.default_parser) 点击切换源代码
# File rss-0.3.1/lib/rss/parser.rb, line 107 def initialize(rss, parser_class=self.class.default_parser) @parser = parser_class.new(normalize_rss(rss)) end
parse(rss, *args) 点击切换源代码
# File rss-0.3.1/lib/rss/parser.rb, line 75 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
私有类方法
boolean_argument(positioned_value, option_value, default) 点击切换源代码
# File rss-0.3.1/lib/rss/parser.rb, line 92 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
私有实例方法
maybe_xml?(source) 点击切换源代码
maybe_xml? 测试 source 是否是看起来像 XML
的字符串。
# File rss-0.3.1/lib/rss/parser.rb, line 131 def maybe_xml?(source) source.is_a?(String) and /</ =~ source end
normalize_rss(rss) 点击切换源代码
尝试获取与 rss
关联的 XML
。如果 rss
看起来已经像 XML
,则返回 rss
,或者将其视为 URI 或文件来获取 XML
。
# File rss-0.3.1/lib/rss/parser.rb, line 116 def normalize_rss(rss) return rss if maybe_xml?(rss) uri = to_uri(rss) if uri.respond_to?(:read) uri.read elsif (RUBY_VERSION >= '2.7' || !rss.tainted?) and File.readable?(rss) File.open(rss) {|f| f.read} else rss end end
to_uri(rss) 点击切换源代码
尝试将 rss 转换为 URI,但如果出现 ::URI::Error,则直接返回它。
# File rss-0.3.1/lib/rss/parser.rb, line 137 def to_uri(rss) return rss if rss.is_a?(::URI::Generic) begin ::URI.parse(rss) rescue ::URI::Error rss end end