Skip to content

Instantly share code, notes, and snippets.

@eanakashima
Created August 15, 2012 04:23
Show Gist options
  • Select an option

  • Save eanakashima/3355868 to your computer and use it in GitHub Desktop.

Select an option

Save eanakashima/3355868 to your computer and use it in GitHub Desktop.
selecta finda
#!/usr/bin/env ruby
require 'rubygems'
require 'bundler/setup'
# require 'broom'
require 'tempfile'
require 'fileutils'
@result_name = 'result_' + Time.now.strftime("%Y%m%d-%H%M") + '.txt'
@selectors_path = File.expand_path('~/Desktop/sweep/selectors.txt', __FILE__)
@proj_path = File.expand_path('~/workspace/e-comm/app/views', __FILE__)
@selectors = []
def find_selectors(css_path)
source = File.expand_path(css_path, __FILE__)
temp_file = Tempfile.new('selectors.tmp')
File.foreach(source) { |line| find_selectors_by_line(line, temp_file) }
FileUtils.mv(temp_file.path, @selectors_path)
end
def find_selectors_by_line(line, selectors_file)
# check for multiple matches per line
while m = line.match(/(\.|\#)[_a-zA-Z]+[_a-zA-Z0-9-]*/)
@selectors << m.to_s
# selectors_file.puts m # UNCOMMENT if you want to write selectors to a file
line.gsub!(m.to_s, '')
end
end
def check_selectors(selectors)
# UNCOMMENT if you want to write selectors to a file
# File.foreach(@selectors_path) do |line|
# append_result(line) unless selector_found_in_any_file?(line)
# end
selectors.each do |selector|
append_result(selector) unless selector_found_in_any_file?(selector) || selector == '.scss'
end
end
def selector_found_in_any_file?(selector)
selector = strip_selector_chars(selector)
# @project_files = # array of all files in project
Dir.glob(@proj_path + "/**/*") .each do |file|
unless File.directory?(file)
return true if selector_found_in_file?(selector, file)
end
end
false
end
def selector_found_in_file?(selector,file)
File.foreach(file) do |line|
return true if line.match(/(class|id|\.|\#)(\S| )*\b(#{selector})\b/)
end
end
def strip_selector_chars(selector)
selector.gsub('.','').gsub('#','')
end
def append_result(selector)
print '.'
unless File.exist?(@result_name)
File.open(@result_name, 'w') { |f| f.puts "Selectors with no matches in #{@proj_path}: \n======================================================================== \n\n" }
end
File.open(@result_name, 'a+') { |f| f.puts(selector) }
end
# ---------------------------------------------------------------------------
# script starts here
# ---------------------------------------------------------------------------
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/pdp.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/views/customers/referrals/base.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/views/customers/gifts/index.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/patches/storefront_pdp_widget_width_override.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/patches/storefront_main_content_width_override.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/mobile.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/storefront.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/transitional.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/legacy.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/catalog.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/storefront/promotional_pairing.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/storefront/all_storefront.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/cms.css')
# find_selectors('~/workspace/e-comm/public/stylesheets/compiled/base.css')
find_selectors('~/workspace/e-comm/public/stylesheets/compiled/error.css')
check_selectors(@selectors)
#result should be:
# .happy .sad #saddest .dude-wheres-my-car #bo3op .also-a-class .thang
# ---------------------------------------------------------------------------
# some post-processing stuff to do in shell
# ---------------------------------------------------------------------------
# sort [FILE] | uniq > uniq_[FILE].txt
# cat uniq* | sort | uniq > FINAL_RESULT.txt
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment