Last active
July 7, 2016 19:56
-
-
Save mateusvahl/56276e6972875e2227ebfb6d454fd677 to your computer and use it in GitHub Desktop.
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/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