class ValidateWebsite::Utils

Utils class for CSS helpers

Public Class Methods

extract_urls_from_css(page) click to toggle source

Extract urls from CSS page

@param [Spidr::Page] a Spidr::Page object @return [Set] Lists of urls

# File lib/validate_website/utils.rb, line 12
def self.extract_urls_from_css(page)
  return Set[] unless page
  return Set[] if page.body.nil?

  nodes = Crass::Parser.parse_stylesheet(page.body)
  extract_urls_from_nodes nodes, page
end
extract_urls_from_nodes(nodes, page, memo = Set[]) click to toggle source

Extract urls from Crass nodes @param [Array] Array of nodes from Crass @param [Spidr::Page] a Spidr::Page object @param [Set] memo for recursivity @return [Set] list of urls

# File lib/validate_website/utils.rb, line 41
def self.extract_urls_from_nodes(nodes, page, memo = Set[])
  nodes.each_with_object(memo) do |node, result|
    result.merge urls_to_absolute(node, page)
    if node[:children]
      extract_urls_from_nodes node.delete(:children), page, result
    end
    result
  end
end
urls_to_absolute(node, page) click to toggle source

Return urls as absolute from Crass nodes

@param [Hash] node from Crass @param [Spidr::Page] a Spidr::Page object @return [Set] list of obsolute urls

# File lib/validate_website/utils.rb, line 25
def self.urls_to_absolute(node, page)
  if node[:node] == :function && node[:name] == 'url' || node[:node] == :url
    Array(node[:value]).map do |v|
      url = v.is_a?(String) ? v : v[:value]
      page.to_absolute(url).to_s
    end
  else
    Set.new
  end
end