Skip to content

Instantly share code, notes, and snippets.

@mateusvahl
Last active July 7, 2016 19:56
Show Gist options
  • Star 1 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save mateusvahl/56276e6972875e2227ebfb6d454fd677 to your computer and use it in GitHub Desktop.
Save mateusvahl/56276e6972875e2227ebfb6d454fd677 to your computer and use it in GitHub Desktop.
#!/usr/bin/env ruby
#require "./selector_cleaner/version"
require "nokogiri"
module Selector
# Returns a array of elements that match with the css selector
# Params:
# +selector+:: CSS selector to be found
# +html+:: File to be searched
def self.find(selector, html)
begin
doc = Nokogiri::HTML html
query = doc.css(selector)
rescue Exception => e
end
end
# Check if a css selector exists in the html file
# Params:
# +selector+:: CSS selector to be found
# +html+:: File to be searched
def self.exists?(selector, html)
q = self.find selector, html
if q
q.length > 0
end
end
end
module FS
# Reads all files in the path
# Params:
# +path+:: path to files
def self.open path
dirs = Dir[path]
files = dirs.map {|f| File.open f }
files.map(&:read)
end
end
require 'css_parser'
include CssParser
module CSS
def self.init css
parser = CssParser::Parser.new
parser.load_string! css
parser
end
# Take a css and return all selectors
# Params:
# +css+:: CSS file string
def self.take_selectors css
parser = self.init css
selectors = []
parser.each_selector { |selector| selectors.push selector }
selectors
end
end
class Finder
attr_reader :used_rules, :unused_rules
def initialize html_files, css_files
@used_rules = []
@unused_rules = []
@html_files = html_files
@css_files = css_files
@all_selectors = CSS.take_selectors css_files
end
def run!
@html_files.each { |html|
@all_selectors.each {|rule|
process_query rule, html
}
}
end
def process_query rule, html
if is_nescessary_find rule
is_used = Selector.exists? rule, html
save_rule rule, is_used
if not is_used
puts "Not used yet #{rule}"
end
else
puts "Used #{rule}"
end
end
end
def is_nescessary_find rule
not(@used_rules.include? rule)
end
def save_rule rule, is_used
store = is_used ? @used_rules : @unused_rules
@unused_rules.delete rule unless is_used
store.push rule
end
end
class Store
def initialize unused_rules
@unused_rules = unused_rules
end
def save!
out_file = File.new "result.txt", "w"
out_file.puts @unused_rules
out_file.close
end
end
html_files = Dir['./test/patterns/**/*.html'].select {|x| x=~ /^((?!escaped).)*.html$/ }
css_files = FS.open('./test/css/**/*.css').join ""
f = Finder.new(html_files, css_files)
f.run!
Store.new(f.unused_rules).save!
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment