Class: HTMLProofer::Middleware
- Inherits:
-
Object
- Object
- HTMLProofer::Middleware
- Includes:
- Utils
- Defined in:
- lib/html-proofer/middleware.rb
Defined Under Namespace
Classes: InvalidHtmlError
Constant Summary collapse
- HTML_SIGNATURE =
[ '<!DOCTYPE HTML', '<HTML', '<HEAD', '<SCRIPT', '<IFRAME', '<H1', '<DIV', '<FONT', '<TABLE', '<A', '<STYLE', '<TITLE', '<B', '<BODY', '<BR', '<P', '<!--' ].freeze
Class Method Summary collapse
Instance Method Summary collapse
- #call(env) ⇒ Object
-
#initialize(app) ⇒ Middleware
constructor
A new instance of Middleware.
Methods included from Utils
#create_nokogiri, #pluralize, #swap
Constructor Details
#initialize(app) ⇒ Middleware
Returns a new instance of Middleware.
29 30 31 |
# File 'lib/html-proofer/middleware.rb', line 29 def initialize(app) @app = app end |
Class Method Details
.options ⇒ Object
17 18 19 20 21 22 23 24 25 26 27 |
# File 'lib/html-proofer/middleware.rb', line 17 def self. @options ||= { type: :file, allow_missing_href: true, # Permitted in html5 allow_hash_href: true, check_external_hash: true, check_html: true, url_ignore: [/.*/], # Don't try to check if local files exist validation: { report_eof_tags: true } } end |
Instance Method Details
#call(env) ⇒ Object
53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 |
# File 'lib/html-proofer/middleware.rb', line 53 def call(env) result = @app.call(env) return result if env['REQUEST_METHOD'] != 'GET' return result if env['QUERY_STRING'] =~ /proofer-ignore/ return result if result.first != 200 body = [] result.last.each { |e| body << e } body = body.join('') begin html = body.lstrip rescue StandardError return result # Invalid encoding; it's not gonna be html. end if HTML_SIGNATURE.any? { |sig| html.upcase.start_with? sig } parsed = HTMLProofer::Runner.new( 'response', Middleware. ).check_parsed( Nokogiri::HTML5(html, max_errors: -1), 'response' ) raise InvalidHtmlError, parsed[:failures] unless parsed[:failures].empty? end result end |