Sha256: f6ff6855ff759d855f4fc719cbe2a46afa755ec371ee91ffd2a114b217cc63d7

Contents?: true

Size: 1.21 KB

Versions: 6

Compression:

Stored size: 1.21 KB

Contents

module Nori

  # = Nori::Parser
  #
  # Manages the parser classes. Currently supports:
  #
  # * REXML
  # * Nokogiri
  module Parser

    # The default parser.
    DEFAULT = :rexml

    # List of available parsers.
    PARSERS = { :rexml => "REXML", :nokogiri => "Nokogiri" }

    # Returns the parser to use. Defaults to <tt>Nori::Parser::REXML</tt>.
    def self.use
      @use ||= DEFAULT
    end

    # Sets the +parser+ to use. Raises an +ArgumentError+ unless the +parser+ exists.
    def self.use=(parser)
      validate_parser! parser
      @use = parser
    end

    # Returns the parsed +xml+ using the parser to use. Raises an +ArgumentError+
    # unless the optional or default +parser+ exists.
    def self.parse(xml, parser = nil, nori = Nori)
      load_parser(parser).parse(xml, nori)
    end

  private

    # Raises an +ArgumentError+ unless the +parser+ exists.
    def self.validate_parser!(parser)
      raise ArgumentError, "Invalid Nori parser: #{parser}" unless PARSERS[parser]
    end

    # Requires and returns the +parser+ to use.
    def self.load_parser(parser)
      parser ||= use
      validate_parser! parser

      require "nori/parser/#{parser}"
      const_get PARSERS[parser]
    end

  end
end

Version data entries

6 entries across 6 versions & 2 rubygems

Version Path
vagrant-tiktalik-0.0.3 vendor/bundle/ruby/2.0.0/gems/nori-1.1.5/lib/nori/parser.rb
nori-1.1.5 lib/nori/parser.rb
nori-1.1.4 lib/nori/parser.rb
nori-1.1.3 lib/nori/parser.rb
nori-1.1.2 lib/nori/parser.rb
nori-1.1.0 lib/nori/parser.rb