#!/usr/bin/ruby # example cmd ==> ruby primer.rb HTMLFILE_LOCATION OPTIONAL_FILENAME class Primer def initialize(to_prime, file_location=nil) @my_ids = Array.new @my_classes = Array.new if file_location.nil? @fname = "styles.css" else @fname = file_location end txt = self.read_in_file(File.join(Dir.pwd,to_prime)) self.prime txt end def prime(txt) txt.scan((/(id="\S+"|class="\S+")/)) do |w| if w[0] =~ /^id=/ css_type = "#" else css_type = "." end w[0].scan(/"\S+"/) do |val| self.juggle val.gsub(/"/,""), css_type end end self.save_primed puts "Done. \nSaved to #{@fname}" end def save_primed buffer = String.new to_do = @my_ids.uniq.sort.concat(@my_classes.uniq.sort) to_do.each do |arr| buffer += "#{arr[1]}#{arr[0]}{\n\n}\n\n" end self.save(buffer, @fname) end def juggle(name, type) if type == "#" @my_ids.push [name,type] else @my_classes.push [name,type] end end # Method: save # Purpose: save lines (String) to a file_to_write (String) (overwrites) def save(lines, file_to_write) #write to file (write only, erases file and starts over) "a" starts at end, creates a new one if does not exist File.open(file_to_write, "w") do |aFile| aFile.syswrite lines end end def read_in_file(full_path) data = String.new if !File.directory?(full_path) IO.foreach full_path do |line| data += line end end data end end if ARGV.length > 0 Primer.new ARGV[0], ARGV[1] else puts "nothing to prime.\n" end