module Docs
  class Parser
    attr_reader :title, :html

    def initialize(content)
      @content = content
      @html = document? ? parse_as_document : parse_as_fragment
    end

    private

    DOCUMENT_RGX = /\A(?:\s|(?:<!--.*?-->))*<(?:\!doctype|html)/i

    def document?
      @content =~ DOCUMENT_RGX
    end

    def parse_as_document
      document = Nokogiri::HTML.parse @content, nil, 'UTF-8'
      @title = document.at_css('title').try(:content)
      document
    end

    def parse_as_fragment
      Nokogiri::HTML.fragment @content, 'UTF-8'
    end
  end
end