lib/webmention/verification/verifiers/html_verifier.rb in webmention-verification-0.1.2 vs lib/webmention/verification/verifiers/html_verifier.rb in webmention-verification-1.0.0

- old
+ new

@@ -1,48 +1,44 @@ module Webmention module Verification - class HtmlVerifier < Verifier - HTML_ATTRIBUTE_MAPPINGS = { - cite: %w[blockquote del ins q], - data: %w[object], - href: %w[a area], - poster: %w[video], - src: %w[audio embed img source track video], - srcset: %w[img source] - }.freeze + module Verifiers + class HtmlVerifier < BaseVerifier + def self.mime_types + ['text/html'] + end - def self.mime_types - ['text/html'] - end + Verifiers.register(self) - private + HTML_ATTRIBUTE_MAP = { + cite: %w[blockquote del ins q], + data: %w[object], + href: %w[a area], + poster: %w[video], + src: %w[audio embed img source track video], + srcset: %w[img source] + }.freeze - def doc - @doc ||= Nokogiri::HTML(response_body) - end + private - def parse_response_body - matches = [] + def doc + @doc ||= Nokogiri::HTML(response_body) + end - HTML_ATTRIBUTE_MAPPINGS.each do |attribute, elements| - elements.each { |element| matches << search_doc(element, attribute) } + def parse_response_body + HTML_ATTRIBUTE_MAP.each_with_object([]) { |(*args), matches| matches << search_doc(*args) }.flatten end - matches.flatten - end + def search_doc(attribute, elements) + regexp = attribute == :srcset ? srcset_attribute_regexp : target_regexp - def search_doc(element, attribute) - regexp = attribute == :srcset ? srcset_attribute_regexp : target_regexp + doc.css(*elements.map { |element| "#{element}[#{attribute}]" }).find_all do |node| + node[attribute].match?(regexp) + end + end - doc.css("#{element}[#{attribute}]").find_all { |node| node[attribute].match?(regexp) } - end - - def srcset_attribute_regexp - @srcset_attribute_regexp ||= /(?:^|\b)#{target_regexp_str}\s/ - end - - def target_regexp - @target_regexp ||= /^#{target_regexp_str}$/ + def srcset_attribute_regexp + @srcset_attribute_regexp ||= /(?:^|\b)#{target_regexp_str}\s/ + end end end end end