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