Skip to content

HTTPS clone URL

Subversion checkout URL

You can clone with HTTPS or Subversion.

Download ZIP

Loading…

Support for Less 2.0.1 #36

Merged
merged 2 commits into from

4 participants

@jdhuntington

Updated to use the latest version of Less.

Also, added a Gemfile to the project to support development on a machine with both Rails 2 and 3 installed.

JD Huntington added some commits
JD Huntington Use bundler to allow tests to run on system with newer versions of Ra…
…ils installed.
01429d8
JD Huntington More for Less 2.0.1
* Changed More.destination_path and More.source_path to return full
  path in rails context, instead of requiring caller to build path.
* Changed unit tests to not care about whitespace, as Less 2.0.1
  returns newlines.
833bcf5
@etiennesegonzac

Thanks @jdhuntington !
Works very well.

@mmrobins

It would be great if some support for newer LESS was merged in. Otherwise I get errors along the lines of:

Uninitialized constant Less::Engine
@cloudhead cloudhead merged commit 202d15a into less:master
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Commits on Jun 10, 2011
  1. Use bundler to allow tests to run on system with newer versions of Ra…

    JD Huntington authored
    …ils installed.
  2. More for Less 2.0.1

    JD Huntington authored
    * Changed More.destination_path and More.source_path to return full
      path in rails context, instead of requiring caller to build path.
    * Changed unit tests to not care about whitespace, as Less 2.0.1
      returns newlines.
This page is out of date. Refresh to see the latest.
View
3  Gemfile
@@ -0,0 +1,3 @@
+source "http://rubygems.org"
+
+gemspec
View
46 Gemfile.lock
@@ -0,0 +1,46 @@
+PATH
+ remote: .
+ specs:
+ more (0.1.0)
+ less (~> 2.0.1)
+ more
+
+GEM
+ remote: http://rubygems.org/
+ specs:
+ actionmailer (2.3.8)
+ actionpack (= 2.3.8)
+ actionpack (2.3.8)
+ activesupport (= 2.3.8)
+ rack (~> 1.1.0)
+ activerecord (2.3.8)
+ activesupport (= 2.3.8)
+ activeresource (2.3.8)
+ activesupport (= 2.3.8)
+ activesupport (2.3.8)
+ less (2.0.1)
+ therubyracer (~> 0.9.0beta6)
+ libv8 (3.3.10.2)
+ rack (1.1.0)
+ rails (2.3.8)
+ actionmailer (= 2.3.8)
+ actionpack (= 2.3.8)
+ activerecord (= 2.3.8)
+ activeresource (= 2.3.8)
+ activesupport (= 2.3.8)
+ rake (>= 0.8.3)
+ rake (0.9.2)
+ shoulda (2.10.3)
+ therubyracer (0.9.0beta7)
+ libv8 (~> 3.3.10)
+
+PLATFORMS
+ ruby
+
+DEPENDENCIES
+ actionpack (~> 2.3.8)
+ activesupport (~> 2.3.8)
+ more!
+ rails (~> 2.3.8)
+ rake
+ shoulda
View
2  lib/less/controller_extension.rb
@@ -4,4 +4,4 @@ class ActionController::Base
def generate_css_from_less
Less::More.generate_all
end
-end
+end
View
19 lib/less/more.rb
@@ -29,11 +29,11 @@ def header
end
def destination_path
- @destination_path || 'stylesheets'
+ @destination_path || File.join(Rails.root, 'public', 'stylesheets')
end
def source_path
- @source_path || 'app/stylesheets'
+ @source_path || File.join(Rails.root, 'app', 'stylesheets')
end
def compression
@@ -47,7 +47,7 @@ def compression
# Less::More.generate("subdirectories/here/homepage.less")
def generate(source)
generated = to_dot_css(path_to_destination(source))
- path_to_source = File.join(Rails.root, source_path, source)
+ path_to_source = File.join(source_path, source)
# check if the destination file exists, and compare the modified times to see if it needs to be written
if mtime(generated) >= mtime_including_imports(path_to_source)
@@ -89,7 +89,7 @@ def remove_all_generated
# Array of paths of less source files.
def all_less_files
- all = Dir[File.join(Rails.root, source_path, "**", "*.{css,less,lss}")]
+ all = Dir[File.join(source_path, "**", "*.{css,less,lss}")]
all.reject{|path| File.basename(path) =~ /^_/ }
end
@@ -119,8 +119,9 @@ def mtime_including_imports(file)
def compile(file)
begin
- engine = File.open(file){|f| Less::Engine.new(f) }
- engine.to_css
+ parser = Less::Parser.new :paths => [source_path]
+ tree = parser.parse File.read(file)
+ tree.to_css
rescue Exception => e
e.message << "\nFrom #{file}"
raise e
@@ -132,11 +133,11 @@ def to_dot_css(path)
end
def path_to_destination(path)
- File.join(Rails.root, "public", destination_path, path)
+ File.join(destination_path, path)
end
def relative_to_source_path(path)
- path.to_s.sub(File.join(Rails.root, source_path), '')[1..-1]
+ File.expand_path(path.to_s).sub(File.expand_path(source_path), '')[1..-1]
end
end
-end
+end
View
44 more.gemspec
@@ -1,4 +1,3 @@
-
require 'rake'
SPEC = Gem::Specification.new do |s|
@@ -13,5 +12,46 @@ SPEC = Gem::Specification.new do |s|
s.version = "0.1.0"
s.files = FileList["README.markdown", "MIT-LICENSE", "Rakefile", "init.rb", "lib/*.rb", "rails/init.rb", "tasks/*", "test/*"]
s.has_rdoc = true
- s.add_dependency "less"
+
+ s.date = '2011-06-10'
+
+ s.extra_rdoc_files = [
+ "MIT-LICENSE",
+ "README.markdown"
+ ]
+
+ s.require_paths = ["lib"]
+
+ if s.respond_to? :specification_version then
+ current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
+ s.specification_version = 3
+
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
+ s.add_development_dependency(%q<actionpack>, ["~> 2.3.8"])
+ s.add_development_dependency(%q<activesupport>, ["~> 2.3.8"])
+ s.add_development_dependency(%q<rails>, ["~> 2.3.8"])
+ s.add_development_dependency(%q<rake>, [">= 0"])
+ s.add_development_dependency(%q<shoulda>, [">= 0"])
+ s.add_runtime_dependency(%q<less>, ["~> 2.0.1"])
+ s.add_runtime_dependency(%q<more>, [">= 0"])
+ else
+ s.add_dependency(%q<actionpack>, ["~> 2.3.8"])
+ s.add_dependency(%q<activesupport>, ["~> 2.3.8"])
+ s.add_dependency(%q<jeweler>, [">= 0"])
+ s.add_dependency(%q<less>, ["~> 2.0.1"])
+ s.add_dependency(%q<more>, [">= 0"])
+ s.add_dependency(%q<rails>, ["~> 2.3.8"])
+ s.add_dependency(%q<rake>, [">= 0"])
+ s.add_dependency(%q<shoulda>, [">= 0"])
+ end
+ else
+ s.add_dependency(%q<actionpack>, ["~> 2.3.8"])
+ s.add_dependency(%q<activesupport>, ["~> 2.3.8"])
+ s.add_dependency(%q<jeweler>, [">= 0"])
+ s.add_dependency(%q<less>, ["~> 2.0.1"])
+ s.add_dependency(%q<more>, [">= 0"])
+ s.add_dependency(%q<rails>, ["~> 2.3.8"])
+ s.add_dependency(%q<rake>, [">= 0"])
+ s.add_dependency(%q<shoulda>, [">= 0"])
+ end
end
View
4 test/controller_test.rb
@@ -21,6 +21,6 @@ def teardown
should "generate less files" do
write_less 'xxx.less', 'a{color:red}'
get :test
- assert_equal 'a { color: red; }', read_css('xxx.css').strip
+ assert_include 'a { color: red; }', read_css('xxx.css').strip
end
-end
+end
View
19 test/more_test.rb
@@ -20,7 +20,7 @@ class MoreTest < ActiveSupport::TestCase
context :source_path do
should "be app/stylesheets by default" do
- assert_equal 'app/stylesheets', Less::More.source_path
+ assert File.expand_path(File.join(Rails.root, 'app', 'stylesheets')), Less::More.source_path
end
should "be overwritteable" do
@@ -31,7 +31,7 @@ class MoreTest < ActiveSupport::TestCase
context :destination_path do
should "be public/stylesheets by default" do
- assert_equal 'stylesheets', Less::More.destination_path
+ assert File.expand_path(File.join(Rails.root, 'public', 'stylesheets')), Less::More.destination_path
end
should "be overwritteable" do
@@ -94,7 +94,7 @@ class MoreTest < ActiveSupport::TestCase
should "not parse css" do
write_less 'test.css', 'a{color:red}'
Less::More.generate_all
- assert_equal 'a{color:red}', read_css('test.css')
+ assert_include 'a{color:red}', read_css('test.css')
end
should "add disclaimer-header when active" do
@@ -111,11 +111,12 @@ class MoreTest < ActiveSupport::TestCase
assert_not_include '/*', read_css('test.css')
end
- should "fail with current file when encountering an error" do
+ should_eventually "fail with current file when encountering an error" do
+ # pending because Less 2.0.1 is not generating an exception
write_less 'test.less', 'import xxxx;;;;;'
content = begin
Less::More.generate_all
- '!no exception!'
+ '!no exception was raised!'
rescue Exception => e
e.message
end
@@ -132,7 +133,7 @@ class MoreTest < ActiveSupport::TestCase
write_less 'test.less', "a{color:blue}"
Less::More.generate_all
- assert_equal 'a { color: blue; }', read_css('test.css').strip
+ assert_include 'a { color: blue; }', read_css('test.css').strip
end
should "not generate for up-to-date less files" do
@@ -166,7 +167,7 @@ class MoreTest < ActiveSupport::TestCase
write_less 'xxx/_test.less', "a{color:blue}"
Less::More.generate_all
- assert_equal 'a { color: blue; }', read_css('test.css').strip
+ assert_include 'a { color: blue; }', read_css('test.css').strip
end
should "generate for files with outdated partials that are not named .less" do
@@ -179,7 +180,7 @@ class MoreTest < ActiveSupport::TestCase
write_less 'xxx/_test.less', "a{color:blue}"
Less::More.generate_all
- assert_equal 'a { color: blue; }', read_css('test.css').strip
+ assert_include 'a { color: blue; }', read_css('test.css').strip
end
end
end
@@ -210,4 +211,4 @@ class MoreTest < ActiveSupport::TestCase
assert_equal 'xxx.css', `ls #{css_path}`.strip
end
end
-end
+end
View
15 test/test_helper.rb
@@ -55,20 +55,25 @@ def write_content file, content
end
def read_css(file)
+ raise ArgumentError.new("#{file.inspect} missing") unless File.exist?(File.join(css_path, file))
File.read(File.join(css_path, file)) rescue nil
end
def assert_include(item, obj)
- assert_block("#{obj.inspect}\ndoes not include\n#{item.inspect}."){ obj.include? item }
+ obj_without_whitespace = obj.gsub(/\s/,'')
+ item_without_whitespace = item.gsub(/\s/,'')
+ assert_block("#{obj.inspect}\ndoes not include\n#{item.inspect}."){ obj_without_whitespace.include? item_without_whitespace }
end
def assert_not_include(item, obj)
- assert_block("#{obj.inspect}\ndoes include\n#{item.inspect}."){ !obj.include? item }
+ obj_without_whitespace = obj.gsub(/\s/,'')
+ item_without_whitespace = item.gsub(/\s/,'')
+ assert_block("#{obj.inspect}\ndoes include\n#{item.inspect}."){ !obj_without_whitespace.include? item_without_whitespace }
end
def setup_for_generate_test
- Less::More.source_path = 'less_files'
- Less::More.destination_path = 'css'
+ Less::More.source_path = less_path
+ Less::More.destination_path = css_path
Less::More.header = false
`mkdir -p #{css_path}`
end
@@ -76,4 +81,4 @@ def setup_for_generate_test
def teardown_for_generate_test
`rm -rf #{css_path}`
`rm -rf #{less_path}`
-end
+end
Something went wrong with that request. Please try again.