Sha256: 1683a684bff1430a5fde49680bbf7028ccb4812277934277983b7b1bf4f1d64b

Contents?: true

Size: 1.18 KB

Versions: 9

Compression:

Stored size: 1.18 KB

Contents

require 'nokogiri'
require 'nokogumbo'

module Polymer
  module Rails
    module XmlAdapters
      class Nokogiri < Base

        # XML options for to_xml method
        XML_OPTIONS = { save_with: ::Nokogiri::XML::Node::SaveOptions::NO_EMPTY_TAGS }

        # Nodes that should be parsed as XML nodes
        XML_NODES = ['*[selected]', '*[checked]', '*[src]:not(script)']

        def parse_document data
          ::Nokogiri::HTML5 data
        end

        def create_node doc, name, content
          node = ::Nokogiri::XML::Node.new(name, doc)
          node.content = content
          node
        end

        def replace_node old_node, new_node
          old_node.replace new_node
        end

        def stringify doc
          xml_nodes(doc).reduce(to_html(doc)) do |output, node|
            output.gsub(node.to_html, node.to_xml(XML_OPTIONS)).encode(ENCODING)
          end
        end

        def css_select doc, selector
          doc.css selector
        end

        private
        def xml_nodes doc
          doc.css(XML_NODES.join(','))
        end
        def to_html doc
          doc.css("head,body").children.to_html(encoding: ENCODING).lstrip
        end
      end
    end
  end
end

Version data entries

9 entries across 9 versions & 1 rubygems

Version Path
polymer-rails-1.2.4.1 lib/polymer-rails/xml_adapters/nokogiri.rb
polymer-rails-1.2.4 lib/polymer-rails/xml_adapters/nokogiri.rb
polymer-rails-1.2.3 lib/polymer-rails/xml_adapters/nokogiri.rb
polymer-rails-1.2.2 lib/polymer-rails/xml_adapters/nokogiri.rb
polymer-rails-1.2.1 lib/polymer-rails/xml_adapters/nokogiri.rb
polymer-rails-1.2.0 lib/polymer-rails/xml_adapters/nokogiri.rb
polymer-rails-1.1.5 lib/polymer-rails/xml_adapters/nokogiri.rb
polymer-rails-1.1.2 lib/polymer-rails/xml_adapters/nokogiri.rb
polymer-rails-1.1.1 lib/polymer-rails/xml_adapters/nokogiri.rb