class HatebloMixedContentsFinder::ElementValidator

Attributes

attr[R]
root[R]
tag[R]

Public Class Methods

new(tag, attr, root) click to toggle source
# File lib/hateblo_mixed_contents_finder/element_validator.rb, line 5
def initialize(tag, attr, root)
  @tag = tag
  @attr = attr
  @root = root
end

Public Instance Methods

validate(page) click to toggle source
# File lib/hateblo_mixed_contents_finder/element_validator.rb, line 11
def validate(page)
  entry_title = find_entry_title(page)
  entry_id = find_entry_id(page)
  nodes = page.search("#{root} #{tag}")
  nodes.map { |node|
    link_url = node[attr].to_s
    if link_url.include?('http:') && target?(tag, node)
      InvalidContent.new(page.uri, entry_id, entry_title, tag, attr, link_url)
    end
  }.compact
end

Private Instance Methods

find_entry_id(page) click to toggle source
# File lib/hateblo_mixed_contents_finder/element_validator.rb, line 33
def find_entry_id(page)
  page.search('article.entry')[0]['data-uuid']
end
find_entry_title(page) click to toggle source
# File lib/hateblo_mixed_contents_finder/element_validator.rb, line 29
def find_entry_title(page)
  page.search('.entry-title')[0].text.strip
end
target?(tag, node) click to toggle source
# File lib/hateblo_mixed_contents_finder/element_validator.rb, line 25
def target?(tag, node)
  tag != 'link' || (tag == 'link' && node['rel'] == 'stylesheet')
end