less-rails 2.0.3 → 2.1.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -3,4 +3,5 @@
3
3
  Gemfile.lock
4
4
  pkg/*
5
5
  *.log
6
- tmp/*
6
+ tmp/*
7
+ test/dummy_app/tmp/cache/assets/*
data/CHANGELOG.md CHANGED
@@ -1,6 +1,13 @@
1
1
  CHANGELOG
2
2
  =========
3
3
 
4
+ 2.1.0 - 11/18/2011
5
+ ------------------
6
+ * Remove our basic CssCompressor since it can not handle real world general purpose JS
7
+ compression. Instead set parse compression and recommend final YUI Compressor. Fixes #7.
8
+ * Import preprocessor so @import'ed less files are automatic asset dependencies. Fixes #3.
9
+
10
+
4
11
  2.0.3 - 11/13/2011
5
12
  ------------------
6
13
  * Add generator support. Fixes #8.
data/README.md CHANGED
@@ -25,7 +25,7 @@ end
25
25
 
26
26
  #### About Compression
27
27
 
28
- If `config.assets.compress` is set to true, we will set the `config.assets.css_compressor` to `Less::Rails::CssCompressor.new` for you automatically. Feel free to set the `css_compressor` to something more stronger like `:yui` in your `config/environments/production.rb` file.
28
+ If `config.assets.compress` is set to true, we will set the `config.less.compress` to true as well. Less has real basic compression and it is recommended that you set the rails `config.assets.css_compressor` to something more stronger like `:yui` in your `config/environments/production.rb` file. Note, this requires the [yui-compressor](https://rubygems.org/gems/yui-compressor) gem but does an excellent job of compressing assets.
29
29
 
30
30
 
31
31
 
@@ -82,7 +82,7 @@ We also have a generator for rails scaffold CSS. Just like the Sass gem, we simp
82
82
 
83
83
  ## Testing
84
84
 
85
- Simply just run `bundle install` and `bundle exec rake` and the tests will will. We also use Travis CI to run our tests too. Current build status is:
85
+ Simple! Just clone the repo, then run `bundle install` and `bundle exec rake`. The tests will begin to run. We also use Travis CI to run our tests too. Current build status is:
86
86
 
87
87
  [![Build Status](https://secure.travis-ci.org/metaskills/less-rails.png)](http://travis-ci.org/metaskills/less-rails)
88
88
 
data/less-rails.gemspec CHANGED
@@ -9,7 +9,7 @@ Gem::Specification.new do |s|
9
9
  s.email = ["ken@metaskills.net"]
10
10
  s.homepage = "http://github.com/metaskills/less-rails"
11
11
  s.summary = %q{The dynamic stylesheet language for the Rails asset pipeline.}
12
- s.description = %q{The dynamic stylesheet language for the Rails asset pipeline.}
12
+ s.description = %q{The dynamic stylesheet language for the Rails asset pipeline. Allows other gems to extend Less load path.}
13
13
  s.files = `git ls-files`.split("\n")
14
14
  s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
15
15
  s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
data/lib/less/rails.rb CHANGED
@@ -12,5 +12,5 @@ require 'sprockets/railtie'
12
12
  require 'less/rails/version'
13
13
  require 'less/rails/helpers'
14
14
  require 'less/rails/template_handlers'
15
- require 'less/rails/css_compressor'
15
+ require 'less/rails/import_processor'
16
16
  require 'less/rails/railtie'
@@ -0,0 +1,23 @@
1
+ module Less
2
+ module Rails
3
+ class ImportProcessor < Tilt::Template
4
+
5
+ IMPORT_SCANNER = /@import\s*['"]([^'"]+)['"]\s*;/.freeze
6
+
7
+ def prepare
8
+ end
9
+
10
+ def evaluate(context, locals, &block)
11
+ import_paths = data.scan(IMPORT_SCANNER).flatten.compact.uniq
12
+ import_paths.each do |path|
13
+ asset = context.environment[path]
14
+ if asset && asset.pathname.to_s.ends_with?('.less')
15
+ context.depend_on_asset(asset.pathname)
16
+ end
17
+ end
18
+ data
19
+ end
20
+
21
+ end
22
+ end
23
+ end
@@ -20,6 +20,7 @@ module Less
20
20
 
21
21
  initializer 'less-rails.before.load_config_initializers', :before => 'load_config_initializers', :group => :all do |app|
22
22
  raise 'The less-rails plugin requires the asset pipeline to be enabled.' unless app.config.assets.enabled
23
+ app.assets.register_preprocessor 'text/css', ImportProcessor
23
24
  end
24
25
 
25
26
  initializer 'less-rails.after.load_config_initializers', :after => 'load_config_initializers', :group => :all do |app|
@@ -28,9 +29,7 @@ module Less
28
29
  end
29
30
 
30
31
  initializer 'less-rails.setup_compression', :group => :all do |app|
31
- if app.config.assets.compress
32
- app.config.assets.css_compressor = CssCompressor.new
33
- end
32
+ config.less.compress = app.config.assets.compress
34
33
  end
35
34
 
36
35
  end
@@ -1,5 +1,5 @@
1
1
  module Less
2
2
  module Rails
3
- VERSION = "2.0.3"
3
+ VERSION = "2.1.0"
4
4
  end
5
5
  end
@@ -2,8 +2,6 @@ require 'spec_helper'
2
2
 
3
3
  class BasicsSpec < Less::Rails::Spec
4
4
 
5
- let(:basics) { dummy_asset('basics') }
6
-
7
5
  it 'must render variables' do
8
6
  basics.must_match %r{#test-variable\{color:#4d926f;\}}
9
7
  end
@@ -11,9 +9,32 @@ class BasicsSpec < Less::Rails::Spec
11
9
  it 'must render mixins' do
12
10
  basics.must_match %r{#test-mixin span\{border:1px solid black;\}}
13
11
  end
14
-
15
- it 'must have a CSSCompressor' do
16
- Less::Rails::CssCompressor.new.compress('.class {width: 1+1}').must_equal '.class{width:2;}'
12
+
13
+ it 'must hook into less import so that imported paths are declared as sprocket dependencies of the source file' do
14
+ basics.must_match %r{#test-radiused\{border-radius:5px;\}}, 'default is 5px'
15
+ safely_edit_mixins do |d|
16
+ d.gsub! '5px', '10px'
17
+ File.open(mixins_asset.pathname,'w') { |f| f.write(d) }
18
+ basics.must_match %r{#test-radiused\{border-radius:10px;\}}, 'mixins.less should be a sprockets context dependency'
19
+ end
17
20
  end
18
21
 
22
+ protected
23
+
24
+ def basics
25
+ dummy_asset 'basics'
26
+ end
27
+
28
+ def mixins_asset
29
+ dummy_assets['frameworks/bootstrap/mixins.less']
30
+ end
31
+
32
+ def safely_edit_mixins
33
+ data = File.read(mixins_asset.pathname)
34
+ begin
35
+ yield data.dup
36
+ ensure
37
+ File.open(mixins_asset.pathname,'w') { |f| f.write(data) }
38
+ end
39
+ end
19
40
  end
@@ -34,6 +34,10 @@ class RailtieSpec < Less::Rails::Spec
34
34
  dummy_assets.context_class.less_config.must_equal dummy_config.less
35
35
  end
36
36
 
37
+ it 'must register our import pre processor' do
38
+ dummy_assets.preprocessors['text/css'].must_include Less::Rails::ImportProcessor
39
+ end
40
+
37
41
  end
38
42
 
39
43
 
@@ -9,3 +9,6 @@
9
9
  .bordered { border: 1px solid black; }
10
10
  #test-mixin span { .bordered; }
11
11
 
12
+ // Frameworks
13
+ @import "frameworks/bootstrap/mixins";
14
+ #test-radiused { .radiused; }
@@ -0,0 +1,4 @@
1
+
2
+ .radiused(@radius: 5px) {
3
+ border-radius: @radius;
4
+ }
@@ -13,7 +13,7 @@ module Dummy
13
13
  config.consider_all_requests_local = true
14
14
 
15
15
  config.assets.enabled = true
16
- config.assets.cache_store = config.cache_store
16
+ config.assets.cache_store = [:file_store, "#{config.root}/tmp/cache/assets/"]
17
17
 
18
18
  end
19
19
  end
File without changes
File without changes
data/test/spec_helper.rb CHANGED
@@ -12,18 +12,31 @@ module Less
12
12
  module Rails
13
13
 
14
14
  class Spec < MiniTest::Spec
15
-
15
+
16
+ include FileUtils
17
+
18
+ class << self
19
+
20
+ def dummy_app
21
+ Dummy::Application
22
+ end
23
+
24
+ def dummy_tmp
25
+ "#{dummy_app.root}/tmp"
26
+ end
27
+
28
+ end
29
+
16
30
  before do
31
+ prepare_cache_dir
17
32
  reset_config_options
18
33
  reset_caches
19
34
  end
20
35
 
21
36
  protected
22
37
 
23
- def dummy_app
24
- Dummy::Application
25
- end
26
-
38
+ delegate :dummy_app, :dummy_tmp, :to => :'self.class'
39
+
27
40
  def dummy_config
28
41
  dummy_app.config
29
42
  end
@@ -46,21 +59,23 @@ module Less
46
59
  dummy_assets.cache.clear
47
60
  end
48
61
 
62
+ def prepare_cache_dir
63
+ mkdir_p "#{dummy_tmp}/cache/assets"
64
+ end
65
+
49
66
  end
50
67
 
51
68
  # Heavily inspired by Rails::Generators::TestCase.
52
69
  class GeneratorSpec < Spec
53
70
 
54
- include FileUtils
55
-
56
71
  class_attribute :destination_root, :current_path, :generator_class, :default_arguments
57
72
  delegate :destination_root, :current_path, :generator_class, :default_arguments, :to => :'self.class'
58
73
 
59
74
  self.current_path = File.expand_path(Dir.pwd)
60
75
  self.default_arguments = []
61
- self.destination_root = "#{Dummy::Application.root}/tmp"
76
+ self.destination_root = "#{dummy_tmp}/destination_root"
62
77
 
63
- before { destination_root_is_set? ; ensure_current_path ; prepare_destination ; no_color! ; setup_generator_class }
78
+ before { ensure_current_path ; prepare_destination ; no_color! ; setup_generator_class }
64
79
  after { remove_destination ; ensure_current_path }
65
80
 
66
81
  protected
@@ -69,10 +84,6 @@ module Less
69
84
  Thor::Base.shell = Thor::Shell::Basic
70
85
  end
71
86
 
72
- def destination_root_is_set?
73
- raise "You need to configure your Less::Rails::GeneratorSpec destination root." unless destination_root
74
- end
75
-
76
87
  def ensure_current_path
77
88
  cd current_path
78
89
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: less-rails
3
3
  version: !ruby/object:Gem::Version
4
- hash: 9
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 2
8
+ - 1
8
9
  - 0
9
- - 3
10
- version: 2.0.3
10
+ version: 2.1.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Ken Collins
@@ -15,8 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-13 00:00:00 -05:00
19
- default_executable:
18
+ date: 2011-11-18 00:00:00 Z
20
19
  dependencies:
21
20
  - !ruby/object:Gem::Dependency
22
21
  name: less
@@ -94,7 +93,7 @@ dependencies:
94
93
  version: 3.1.1
95
94
  type: :development
96
95
  version_requirements: *id005
97
- description: The dynamic stylesheet language for the Rails asset pipeline.
96
+ description: The dynamic stylesheet language for the Rails asset pipeline. Allows other gems to extend Less load path.
98
97
  email:
99
98
  - ken@metaskills.net
100
99
  executables: []
@@ -115,8 +114,8 @@ files:
115
114
  - less-rails.gemspec
116
115
  - lib/less-rails.rb
117
116
  - lib/less/rails.rb
118
- - lib/less/rails/css_compressor.rb
119
117
  - lib/less/rails/helpers.rb
118
+ - lib/less/rails/import_processor.rb
120
119
  - lib/less/rails/railtie.rb
121
120
  - lib/less/rails/template_handlers.rb
122
121
  - lib/less/rails/version.rb
@@ -130,10 +129,12 @@ files:
130
129
  - test/dummy_app/app/assets/images/1x1.png
131
130
  - test/dummy_app/app/assets/images/rails.png
132
131
  - test/dummy_app/app/assets/stylesheets/basics.css.less
132
+ - test/dummy_app/app/assets/stylesheets/frameworks/bootstrap/mixins.less
133
133
  - test/dummy_app/app/assets/stylesheets/helpers.css.less
134
134
  - test/dummy_app/init.rb
135
+ - test/dummy_app/tmp/.gitkeep
136
+ - test/dummy_app/tmp/cache/.gitkeep
135
137
  - test/spec_helper.rb
136
- has_rdoc: true
137
138
  homepage: http://github.com/metaskills/less-rails
138
139
  licenses: []
139
140
 
@@ -163,7 +164,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
163
164
  requirements: []
164
165
 
165
166
  rubyforge_project:
166
- rubygems_version: 1.6.2
167
+ rubygems_version: 1.8.11
167
168
  signing_key:
168
169
  specification_version: 3
169
170
  summary: The dynamic stylesheet language for the Rails asset pipeline.
@@ -175,6 +176,9 @@ test_files:
175
176
  - test/dummy_app/app/assets/images/1x1.png
176
177
  - test/dummy_app/app/assets/images/rails.png
177
178
  - test/dummy_app/app/assets/stylesheets/basics.css.less
179
+ - test/dummy_app/app/assets/stylesheets/frameworks/bootstrap/mixins.less
178
180
  - test/dummy_app/app/assets/stylesheets/helpers.css.less
179
181
  - test/dummy_app/init.rb
182
+ - test/dummy_app/tmp/.gitkeep
183
+ - test/dummy_app/tmp/cache/.gitkeep
180
184
  - test/spec_helper.rb
@@ -1,11 +0,0 @@
1
- module Less
2
- module Rails
3
- class CssCompressor
4
-
5
- def compress(css)
6
- ::Less::Parser.new.parse(css).to_css(:compress => true).strip
7
- end
8
-
9
- end
10
- end
11
- end