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