Revision: 1340
                            
                                                            
                                    
                                        
Updated Code
                                    
                                    
                                                    
                        at September 27, 2006 13:05 by gdonald
                            
                            Updated Code
#!/usr/bin/env ruby
curl = `which curl 2>/dev/null`.chomp
validator = 'http://jigsaw.w3.org/css-validator/validator'
# All warnings, CSS2, all mediums
options = 'warning=2&profile=css2&usermedium=all'
base = File.expand_path("#{File.dirname(__FILE__)}/../../public/stylesheets")
# Got curl?
raise "Curl not found" if curl.empty?
# Get path to stylesheets
if ARGV.size > 0
  base = ARGV.shift
end
# All css files or just one?
glob = base =~ /css$/ ? base : "#{base}/*.css"
# Do files
Dir.glob(glob) do |file|
  next unless File.exists?( file )
  errors, warnings = [ ], [ ]
  # Send the css file to the validator
  results = `#{curl} -s -F "file=@#{file}" -F "#{options}" #{validator}`
  # Validator couldn't find the file
  #
  # OR the file didn't have _any_ valid css content before
  # the errors <- little gotcha
  #
  results.grep(/No style sheet found/) do |line|
    STDERR << "#{$&}\n"
    exit
  end
  # Add new lines to <li></li> tags so grep can find them easier
  results.gsub!(/\n/,'').gsub!(/<li>/,"\n<li>").gsub!(/<\/li>/,"</li>\n")
  results.grep(/<li>.*<\/li>/) do |line|
    # collect errors
    line.grep(/<span class='error'>/) do |error|
      errors << error.gsub!(/(<p>|<\/p>)/,"\n").gsub!(/<(.|\n)*?>/, '')
    end
  end
  # collect warnings
  results.grep(/<span class='warning'>/) do |line|
    warnings << line.gsub!(/<(.|\n)*?>/, '')
  end
  # Dump information to STDERR
  STDERR << "CSS File #{file}:\n\n"
  { 'Errors' => errors, 'Warnings' => warnings }.each do |k,v|
    if v.empty?
      STDERR << "No #{k.downcase} found\n---------------\n\n"
    else
      STDERR << "#{k} found:\n-------------\n\n"
      v.each {|line| STDERR << line}
    end
  end
end
                                
                            Revision: 1339
                            
                                                            
                                    
                                        
Initial Code
                                    
                                    
                                                            
                                    
                                        
Initial URL
                                    
                                    
                                
                                                            
                                    
                                        
Initial Description
                                    
                                    
                                
                                                            
                                    
                                        
Initial Title
                                    
                                    
                                                            
                                    
                                        
Initial Tags
                                    
                                    
                                                            
                                    
                                        
Initial Language
                                    
                                    
                                                    
                        at September 27, 2006 13:04 by gdonald
                            
                            Initial Code
#!/usr/bin/env ruby
curl = `which curl 2>/dev/null`.chomp
validator = 'http://jigsaw.w3.org/css-validator/validator'
# All warnings, CSS2, all mediums
options = 'warning=2&profile=css2&usermedium=all'
base = File.expand_path("#{File.dirname(__FILE__)}/../../public/stylesheets")
# Got curl?
raise "Curl not found" if curl.empty?
# Get path to stylesheets
if ARGV.size > 0
  base = ARGV.shift
end
# All css files or just one?
glob = base =~ /css$/ ? base : "#{base}/*.css"
# Do files
Dir.glob(glob) do |file|
  next unless File.exists?( file )
  errors, warnings = [ ], [ ]
  # Send the css file to the validator
  results = `#{curl} -s -F "file=@#{file}" -F "#{options}" #{validator}`
  # Validator couldn't find the file
  #
  # OR the file didn't have _any_ valid css content before
  # the errors <- little gotcha
  #
  results.grep(/No style sheet found/) do |line|
    STDERR << "#{$&}\n"
    exit
  end
  # Add new lines to <li></li> tags so grep can find them easier
  results.gsub!(/\n/,'').gsub!(/<li>/,"\n<li>").gsub!(/<\/li>/,"</li>\n")
  results.grep(/<li>.*<\/li>/) do |line|
    # collect errors
    line.grep(/<span class='error'>/) do |error|
      errors << error.gsub!(/(<p>|<\/p>)/,"\n").gsub!(/<(.|\n)*?>/, '')
    end
  end
  # collect warnings
  results.grep(/<span class='warning'>/) do |line|
    warnings << line.gsub!(/<(.|\n)*?>/, '')
  end
  # Dump information to STDERR
  STDERR << "CSS File #{file}:\n\n"
  { 'Errors' => errors, 'Warnings' => warnings }.each do |k,v|
    if v.empty?
      STDERR << "No #{k.downcase} found\n---------------\n\n"
    else
      STDERR << "#{k} found:\n-------------\n\n"
      v.each {|line| STDERR << line}
    end
  end
end
                                Initial URL
Initial Description
Initial Title
Rails CSS uploader/validator
Initial Tags
css
Initial Language
Ruby