From 74be4482004f88d4e533bb52234f1846c174292b Mon Sep 17 00:00:00 2001 From: Mekka Date: Tue, 9 Apr 2013 23:32:46 -0700 Subject: [PATCH 1/4] adding less to Gemspec --- Gemfile | 1 + 1 file changed, 1 insertion(+) diff --git a/Gemfile b/Gemfile index fa46110..ab67689 100644 --- a/Gemfile +++ b/Gemfile @@ -6,6 +6,7 @@ gemspec # optional runtime dependencies gem "sass" gem "compass" +gem "less" gem "rake", :require => false gem "debugger" From be38ef01be90608500d34c65a87b900687179d9e Mon Sep 17 00:00:00 2001 From: Mekka Date: Tue, 9 Apr 2013 23:32:56 -0700 Subject: [PATCH 2/4] minor commit --- lib/csscss/cli.rb | 61 +++++++++++++++++++++++++++++++---------------- 1 file changed, 41 insertions(+), 20 deletions(-) diff --git a/lib/csscss/cli.rb b/lib/csscss/cli.rb index 0dae221..c6234f3 100644 --- a/lib/csscss/cli.rb +++ b/lib/csscss/cli.rb @@ -15,30 +15,51 @@ def run execute end - def execute + def load_sass_file(filename) + begin + require "sass" + rescue LoadError + puts "Must install sass gem before parsing sass/scss files" + exit 1 + end - all_redundancies = @argv.map do |filename| - contents = if %w(.scss .sass).include?(File.extname(filename).downcase) && !(filename =~ URI.regexp) - begin - require "sass" - rescue LoadError - puts "Must install sass gem before parsing sass/scss files" + sass_options = {cache:false} + sass_options[:load_paths] = Compass.configuration.sass_load_paths if @compass + begin + Sass::Engine.for_file(filename, sass_options).render + rescue Sass::SyntaxError => e + if e.message =~ /compass/ && !@compass + puts "Enable --compass option to use compass's extensions" exit 1 + else + raise e end + end + end - sass_options = {cache:false} - sass_options[:load_paths] = Compass.configuration.sass_load_paths if @compass - begin - Sass::Engine.for_file(filename, sass_options).render - rescue Sass::SyntaxError => e - if e.message =~ /compass/ && !@compass - puts "Enable --compass option to use compass's extensions" - exit 1 - else - raise e - end - end - else + def load_less_file(filename) + begin + require "less" + rescue LoadError + puts "Must install less gem before parsing less files" + exit 1 + end + + begin + Less::Parser.new.parse.to_css(filename) + rescue ParseError + puts "Less parse error" + exit 1 + end + end + + def execute + all_redundancies = @argv.map do |filename| + contents = if %w(.scss .sass).include?(File.extname(filename).downcase) && !(filename =~ URI.regexp) + load_sass_file(filename) + elsif %w(.less).include?(File.extname(filename).downcase) && !(filename =~ URI.regexp) + load_less_file(filename) + else open(filename) {|f| f.read } end From d57fd31cfca3e1035ada45cb633d0f58eaa93a87 Mon Sep 17 00:00:00 2001 From: Mekka Date: Sat, 13 Apr 2013 21:15:02 -0700 Subject: [PATCH 3/4] Adding less support --- Gemfile | 3 +- lib/csscss/cli.rb | 58 +++++++++++++++----------- test/csscss/cli_test.rb | 41 ++++++++++++++++++ test/csscss/test_input_files/test.css | 2 + test/csscss/test_input_files/test.less | 14 +++++++ test/csscss/test_input_files/test.sass | 13 ++++++ 6 files changed, 106 insertions(+), 25 deletions(-) create mode 100644 test/csscss/cli_test.rb create mode 100644 test/csscss/test_input_files/test.css create mode 100644 test/csscss/test_input_files/test.less create mode 100644 test/csscss/test_input_files/test.sass diff --git a/Gemfile b/Gemfile index ab67689..6509c70 100644 --- a/Gemfile +++ b/Gemfile @@ -6,7 +6,8 @@ gemspec # optional runtime dependencies gem "sass" gem "compass" -gem "less" +gem "therubyracer" +gem "less", :require => false gem "rake", :require => false gem "debugger" diff --git a/lib/csscss/cli.rb b/lib/csscss/cli.rb index c6234f3..b387e74 100644 --- a/lib/csscss/cli.rb +++ b/lib/csscss/cli.rb @@ -15,52 +15,62 @@ def run execute end + def gem_installed?(gem_name) + begin + require gem_name + rescue LoadError + return false + end + true + end + def load_sass_file(filename) + if !gem_installed?('sass') then + puts "Must install sass gem before parsing sass/scss files" + exit 1 + end + + sass_options = {cache:false} + sass_options[:load_paths] = Compass.configuration.sass_load_paths if @compass begin - require "sass" - rescue LoadError - puts "Must install sass gem before parsing sass/scss files" + Sass::Engine.for_file(filename, sass_options).render + rescue Sass::SyntaxError => e + if e.message =~ /compass/ && !@compass + puts "Enable --compass option to use compass's extensions" exit 1 + else + raise e end - - sass_options = {cache:false} - sass_options[:load_paths] = Compass.configuration.sass_load_paths if @compass - begin - Sass::Engine.for_file(filename, sass_options).render - rescue Sass::SyntaxError => e - if e.message =~ /compass/ && !@compass - puts "Enable --compass option to use compass's extensions" - exit 1 - else - raise e - end - end + end end def load_less_file(filename) - begin - require "less" - rescue LoadError - puts "Must install less gem before parsing less files" + if !gem_installed?('less') then + puts "Must install less gem before parsing less files (try \"gem install less\", or add less to your Gemfile)" exit 1 end begin - Less::Parser.new.parse.to_css(filename) - rescue ParseError + contents = open(filename) {|f| f.read } + Less::Parser.new.parse(contents).to_css + rescue Less::ParseError => e puts "Less parse error" exit 1 end end + def load_css_file(filename) + open(filename) {|f| f.read } + end + def execute all_redundancies = @argv.map do |filename| contents = if %w(.scss .sass).include?(File.extname(filename).downcase) && !(filename =~ URI.regexp) load_sass_file(filename) elsif %w(.less).include?(File.extname(filename).downcase) && !(filename =~ URI.regexp) load_less_file(filename) - else - open(filename) {|f| f.read } + else + load_css_file(filename) end RedundancyAnalyzer.new(contents).redundancies(minimum: @minimum, diff --git a/test/csscss/cli_test.rb b/test/csscss/cli_test.rb new file mode 100644 index 0000000..7fbcd77 --- /dev/null +++ b/test/csscss/cli_test.rb @@ -0,0 +1,41 @@ +require "test_helper.rb" + +module Csscss + + def less_gem_installed + begin + require "less" + rescue LoadError + puts "Less Gem does not appear to be installed. Skipping Less tests" + false + end + true + end + + describe CLI do + it "parses valid less and sass files the same as css files" do + css_types = [] + + css_check = Csscss::CLI.new("filename") + css_file = css_check.load_css_file("test/csscss/test_input_files/test.css") + #css_types.push css_file + + if (css_check.gem_installed?('less')) then + less_check = Csscss::CLI.new("filename") + less_file = less_check.load_less_file("test/csscss/test_input_files/test.less") + css_types.push less_file + else + puts "Less not installed, skipping less parsing tests..." + end + + if (css_check.gem_installed?('sass')) then + sass_check = Csscss::CLI.new("filename") + sass_file = sass_check.load_sass_file("test/csscss/test_input_files/test.sass") + css_types.push sass_file + else + puts "Sass not installed, skipping sass parsing tests..." + end + + end + end +end diff --git a/test/csscss/test_input_files/test.css b/test/csscss/test_input_files/test.css new file mode 100644 index 0000000..de89b33 --- /dev/null +++ b/test/csscss/test_input_files/test.css @@ -0,0 +1,2 @@ +.me { border: 1px solid; } +.me2 { border: 1px solid; } diff --git a/test/csscss/test_input_files/test.less b/test/csscss/test_input_files/test.less new file mode 100644 index 0000000..0275dd2 --- /dev/null +++ b/test/csscss/test_input_files/test.less @@ -0,0 +1,14 @@ +.me { + border: 1px solid; + font-family: Arial; + background: #005555; +} + +.me2 +{ + border: 1px solid; + font-family: Arial; + background: #005555; +} + + diff --git a/test/csscss/test_input_files/test.sass b/test/csscss/test_input_files/test.sass new file mode 100644 index 0000000..fd0bc52 --- /dev/null +++ b/test/csscss/test_input_files/test.sass @@ -0,0 +1,13 @@ +.me + border: 1px solid + font-family: Arial + background: #005555 + + +.me2 + border: 1px solid + font-family: Arial + background: #005555 + + + From 73d4a07d673a420b6d1de14f3545c14d26850e7d Mon Sep 17 00:00:00 2001 From: Mekka Date: Sat, 13 Apr 2013 21:46:55 -0700 Subject: [PATCH 4/4] added to contribs --- CONTRIBUTORS.md | 1 + 1 file changed, 1 insertion(+) diff --git a/CONTRIBUTORS.md b/CONTRIBUTORS.md index 2cb044a..f8d09ee 100644 --- a/CONTRIBUTORS.md +++ b/CONTRIBUTORS.md @@ -3,3 +3,4 @@ * Martin Kuckert @MKuckert * Ivan Lazarevic @kopipejst * Matt DuVall @mduvall twitter:@mduvall_ +* Mekka Okereke @mekka @mekkaokereke