rake-minify 0.2.1 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/Gemfile +3 -0
- data/Gemfile.lock +66 -0
- data/README.rdoc +13 -0
- data/Rakefile +2 -1
- data/VERSION +1 -1
- data/features/coffeescript.feature +37 -6
- data/features/js-expected/a.min.js +1 -1
- data/features/js-expected/b.min.js +1 -1
- data/features/js-expected/c-a-bare.min.js +1 -0
- data/features/js-expected/c-a-wrapped.min.js +1 -0
- data/features/js-expected/c-a.min.js +1 -1
- data/features/js-sources/a.js +1 -1
- data/features/js-sources/b.js +1 -1
- data/features/js-sources/c-a-bare.js +2 -0
- data/features/js-sources/c-a-wrapped.js +5 -0
- data/features/js-sources/c-a.coffee +1 -1
- data/features/js-sources/c-a.js +4 -1
- data/features/minify.feature +33 -19
- data/features/rake-interface.feature +1 -1
- data/features/step_definitions/rake-minify_steps.rb +10 -8
- data/features/support/env.rb +3 -0
- data/features/support/generate_rakefiles.rb +11 -7
- data/lib/rake/minify.rb +3 -1
- data/lib/rake/minify/group.rb +3 -2
- data/lib/rake/minify/source.rb +11 -4
- data/rake-minify.gemspec +83 -2
- data/spec/rake/minify/group_spec.rb +3 -3
- data/spec/rake/minify/source_spec.rb +33 -4
- data/spec/rake/minify_spec.rb +28 -1
- data/spec/spec_helper.rb +6 -1
- metadata +412 -29
data/Gemfile
ADDED
data/Gemfile.lock
ADDED
@@ -0,0 +1,66 @@
|
|
1
|
+
PATH
|
2
|
+
remote: .
|
3
|
+
specs:
|
4
|
+
rake-minify (0.2.1)
|
5
|
+
jsmin (~> 1.0.1)
|
6
|
+
rake-minify
|
7
|
+
|
8
|
+
GEM
|
9
|
+
remote: http://rubygems.org/
|
10
|
+
specs:
|
11
|
+
ZenTest (4.5.0)
|
12
|
+
autotest (4.4.6)
|
13
|
+
ZenTest (>= 4.4.1)
|
14
|
+
builder (3.0.0)
|
15
|
+
coffee-script (2.2.0)
|
16
|
+
coffee-script-source
|
17
|
+
execjs
|
18
|
+
coffee-script-source (1.1.0)
|
19
|
+
cucumber (0.10.2)
|
20
|
+
builder (>= 2.1.2)
|
21
|
+
diff-lcs (>= 1.1.2)
|
22
|
+
gherkin (>= 2.3.5)
|
23
|
+
json (>= 1.4.6)
|
24
|
+
term-ansicolor (>= 1.0.5)
|
25
|
+
diff-lcs (1.1.2)
|
26
|
+
execjs (0.3.3)
|
27
|
+
multi_json (~> 1.0)
|
28
|
+
gherkin (2.3.7)
|
29
|
+
json (>= 1.4.6)
|
30
|
+
git (1.2.5)
|
31
|
+
jeweler (1.5.2)
|
32
|
+
bundler (~> 1.0.0)
|
33
|
+
git (>= 1.2.5)
|
34
|
+
rake
|
35
|
+
jsmin (1.0.1)
|
36
|
+
json (1.5.1)
|
37
|
+
multi_json (1.0.1)
|
38
|
+
notifier (0.1.3)
|
39
|
+
rake (0.8.7)
|
40
|
+
rcov (0.9.9)
|
41
|
+
rspec (2.5.0)
|
42
|
+
rspec-core (~> 2.5.0)
|
43
|
+
rspec-expectations (~> 2.5.0)
|
44
|
+
rspec-mocks (~> 2.5.0)
|
45
|
+
rspec-core (2.5.2)
|
46
|
+
rspec-expectations (2.5.0)
|
47
|
+
diff-lcs (~> 1.1.2)
|
48
|
+
rspec-mocks (2.5.0)
|
49
|
+
term-ansicolor (1.0.5)
|
50
|
+
test_notifier (0.3.6)
|
51
|
+
notifier
|
52
|
+
therubyracer (0.8.1)
|
53
|
+
|
54
|
+
PLATFORMS
|
55
|
+
ruby
|
56
|
+
|
57
|
+
DEPENDENCIES
|
58
|
+
autotest (~> 4.4)
|
59
|
+
coffee-script (>= 2.2.0)
|
60
|
+
cucumber
|
61
|
+
jeweler (~> 1.5.2)
|
62
|
+
rake-minify!
|
63
|
+
rcov
|
64
|
+
rspec (~> 2.5.0)
|
65
|
+
test_notifier (~> 0.3.6)
|
66
|
+
therubyracer
|
data/README.rdoc
CHANGED
@@ -76,6 +76,19 @@ Then open your Rakefile and add:
|
|
76
76
|
end
|
77
77
|
end
|
78
78
|
|
79
|
+
=== Bare switch
|
80
|
+
|
81
|
+
Since version 0.3.0 rake-minify support the configuration of the coffee script bare switch
|
82
|
+
(see http://jashkenas.github.com/coffee-script/#installation for details).
|
83
|
+
However in the 0.2.x series that flag defaulted to true, now it defaults to false.
|
84
|
+
|
85
|
+
You can specify it:
|
86
|
+
|
87
|
+
Rake::Minify.new(:minify_single) do
|
88
|
+
# the coffee file is compiled and minified
|
89
|
+
# without the top-level function safety wrapper.
|
90
|
+
add("output.js", "source.coffee", :bare => true)
|
91
|
+
end
|
79
92
|
|
80
93
|
== Contributing to rake-minify
|
81
94
|
|
data/Rakefile
CHANGED
@@ -23,6 +23,7 @@ Jeweler::Tasks.new do |gem|
|
|
23
23
|
gem.add_development_dependency 'autotest', '~> 4.4'
|
24
24
|
gem.add_development_dependency "rcov", ">= 0"
|
25
25
|
gem.add_development_dependency "coffee-script", ">= 2.2.0"
|
26
|
+
gem.add_development_dependency "therubyracer"
|
26
27
|
end
|
27
28
|
Jeweler::RubygemsDotOrgTasks.new
|
28
29
|
|
@@ -43,7 +44,7 @@ end
|
|
43
44
|
require 'cucumber/rake/task'
|
44
45
|
Cucumber::Rake::Task.new(:features)
|
45
46
|
|
46
|
-
task :default => [:
|
47
|
+
task :default => [:features, :spec]
|
47
48
|
|
48
49
|
require 'rake/rdoctask'
|
49
50
|
Rake::RDocTask.new do |rdoc|
|
data/VERSION
CHANGED
@@ -1 +1 @@
|
|
1
|
-
0.
|
1
|
+
0.3.0
|
@@ -3,13 +3,44 @@ Feature: Compile minify and bundle CoffeeScript files
|
|
3
3
|
A ruby programmer
|
4
4
|
Wants to minify its coffeescripts using rake
|
5
5
|
|
6
|
-
Scenario: Minify single
|
7
|
-
Given we want to
|
6
|
+
Scenario: Minify single coffeescript
|
7
|
+
Given we want to add the file "c-a.coffee" into "c-a-wrapped.min.js"
|
8
8
|
When I run rake minify
|
9
|
-
Then "c-a.min.js" should be minified
|
9
|
+
Then "c-a-wrapped.min.js" should be minified
|
10
10
|
|
11
|
-
Scenario: Combine multiple
|
12
|
-
Given we want to
|
13
|
-
|
11
|
+
Scenario: Combine multiple coffeescripts into a single file
|
12
|
+
Given we want to add the file "c-a.coffee" into "app.js" with options:
|
13
|
+
| minify | false |
|
14
|
+
And we want to add the file "b.js" into "app.js" with options:
|
15
|
+
| minify | false |
|
14
16
|
When I run rake minify
|
15
17
|
Then "app.js" should include "c-a.js" and "b.js"
|
18
|
+
|
19
|
+
Scenario: Minify single javascript in bare mode
|
20
|
+
Given we want to add the file "c-a.coffee" into "c-a-bare.min.js" with options:
|
21
|
+
| bare | true |
|
22
|
+
When I run rake minify
|
23
|
+
Then "c-a-bare.min.js" should be minified
|
24
|
+
|
25
|
+
Scenario: Minify single javascript in wrapped mode
|
26
|
+
Given we want to add the file "c-a.coffee" into "c-a-wrapped.min.js" with options:
|
27
|
+
| bare | false |
|
28
|
+
When I run rake minify
|
29
|
+
Then "c-a-wrapped.min.js" should be minified
|
30
|
+
|
31
|
+
Scenario: Combine multiple coffeescripts into a single file in bare mode
|
32
|
+
Given we want to add the file "c-a.coffee" into "app.js" with options:
|
33
|
+
| bare | true |
|
34
|
+
And we want to add the file "b.js" into "app.js" with options:
|
35
|
+
| minify | false |
|
36
|
+
When I run rake minify
|
37
|
+
Then "app.js" should include "c-a-bare.min.js" and "b.js"
|
38
|
+
|
39
|
+
Scenario: Combine multiple coffeescripts into a single file in wrapped mode
|
40
|
+
Given we want to add the file "c-a.coffee" into "app.js" with options:
|
41
|
+
| bare | false |
|
42
|
+
| minify | false |
|
43
|
+
And we want to add the file "b.js" into "app.js" with options:
|
44
|
+
| minify | false |
|
45
|
+
When I run rake minify
|
46
|
+
Then "app.js" should include "c-a-wrapped.js" and "b.js"
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
var a="hello a";
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
var b="hello b";
|
@@ -0,0 +1 @@
|
|
1
|
+
var a;a="hello a";
|
@@ -0,0 +1 @@
|
|
1
|
+
(function(){var a;a="hello a";}).call(this);
|
@@ -1 +1 @@
|
|
1
|
-
|
1
|
+
var a;a="hello a";
|
data/features/js-sources/a.js
CHANGED
data/features/js-sources/b.js
CHANGED
@@ -1,2 +1,2 @@
|
|
1
1
|
|
2
|
-
|
2
|
+
var b = "hello b" ;
|
@@ -1,2 +1,2 @@
|
|
1
1
|
|
2
|
-
|
2
|
+
a = "hello a"
|
data/features/js-sources/c-a.js
CHANGED
data/features/minify.feature
CHANGED
@@ -4,61 +4,75 @@ Feature: Minify Javascripts
|
|
4
4
|
Wants to minify its javascripts using rake
|
5
5
|
|
6
6
|
Scenario: Minify single javascript
|
7
|
-
Given we want to
|
7
|
+
Given we want to add the file "a.js" into "a.min.js" with options:
|
8
|
+
| minify | true |
|
8
9
|
When I run rake minify
|
9
10
|
Then "a.min.js" should be minified
|
10
11
|
|
11
12
|
Scenario: Combine multiple javascripts into a single file
|
12
|
-
Given we want to
|
13
|
-
|
13
|
+
Given we want to add the file "a.js" into "app.js" with options:
|
14
|
+
| minify | false |
|
15
|
+
And we want to add the file "b.js" into "app.js" with options:
|
16
|
+
| minify | false |
|
14
17
|
When I run rake minify
|
15
18
|
Then "app.js" should include "a.js" and "b.js"
|
16
19
|
|
17
20
|
Scenario: Minify multiple javascripts into a single file
|
18
|
-
Given we want to
|
19
|
-
|
21
|
+
Given we want to add the file "a.js" into "app.min.js" with options:
|
22
|
+
| minify | true |
|
23
|
+
And we want to add the file "b.js" into "app.min.js"
|
20
24
|
When I run rake minify
|
21
25
|
Then "app.min.js" should include "a.min.js" and "b.min.js"
|
22
26
|
|
23
27
|
Scenario: Minify multiple javascripts into multiple files
|
24
|
-
Given we want to
|
25
|
-
And we want to
|
26
|
-
And we want to
|
28
|
+
Given we want to add the file "a.js" into "app.min.js"
|
29
|
+
And we want to add the file "b.js" into "app.min.js"
|
30
|
+
And we want to add the file "a.js" into "a.min.js"
|
27
31
|
When I run rake minify
|
28
32
|
Then "app.min.js" should include "a.min.js" and "b.min.js"
|
29
33
|
And "a.min.js" should be minified
|
30
34
|
|
31
|
-
Scenario: Combine and minify only one
|
32
|
-
Given we want to
|
33
|
-
|
35
|
+
Scenario: Combine and minify only one file
|
36
|
+
Given we want to add the file "a.js" into "app.js" with options:
|
37
|
+
| minify | false |
|
38
|
+
And we want to add the file "b.js" into "app.js"
|
34
39
|
When I run rake minify
|
35
40
|
Then "app.js" should include "a.js" and "b.min.js"
|
36
41
|
|
37
42
|
Scenario: Minify single javascript with basedir
|
38
43
|
Given the basedir "public"
|
39
|
-
And we want to
|
44
|
+
And we want to add the file "a.js" into "a.min.js"
|
40
45
|
When I run rake minify
|
41
46
|
Then "a.min.js" should be minified
|
42
47
|
|
43
48
|
Scenario: Minify multiple javascripts with basedir
|
44
49
|
Given the basedir "public"
|
45
|
-
And we want to
|
46
|
-
And we want to
|
50
|
+
And we want to add the file "a.js" into "app.min.js"
|
51
|
+
And we want to add the file "b.js" into "app.min.js"
|
47
52
|
When I run rake minify
|
48
53
|
Then "app.min.js" should include "a.min.js" and "b.min.js"
|
49
54
|
|
50
55
|
Scenario: Minify multiple javascripts with an inner directory
|
51
56
|
Given the inner directory "public"
|
52
|
-
And we want to
|
53
|
-
And we want to
|
57
|
+
And we want to add the file "a.js" into "app.min.js"
|
58
|
+
And we want to add the file "b.js" into "app.min.js"
|
54
59
|
When I run rake minify
|
55
60
|
Then "app.min.js" should include "a.min.js" and "b.min.js"
|
56
61
|
|
57
|
-
@wip
|
58
62
|
Scenario: Minify multiple javascripts with a basedir and an inner directory
|
59
63
|
Given the basedir "base"
|
60
64
|
And the inner directory "in"
|
61
|
-
And we want to
|
62
|
-
And we want to
|
65
|
+
And we want to add the file "a.js" into "app.min.js"
|
66
|
+
And we want to add the file "b.js" into "app.min.js"
|
63
67
|
When I run rake minify
|
64
68
|
Then "app.min.js" should include "a.min.js" and "b.min.js"
|
69
|
+
|
70
|
+
Scenario: Minify single javascript with a destination directory
|
71
|
+
Given we want to add the file "a.js" into "build/a.min.js"
|
72
|
+
When I run rake minify
|
73
|
+
Then "build/a.min.js" should include "a.min.js"
|
74
|
+
|
75
|
+
Scenario: Minify single javascript with a deep destination directory
|
76
|
+
Given we want to add the file "a.js" into "a/dir/a.min.js"
|
77
|
+
When I run rake minify
|
78
|
+
Then "a/dir/a.min.js" should include "a.min.js"
|
@@ -4,7 +4,7 @@ Feature: Rake Interface
|
|
4
4
|
Wants to customize the minify task
|
5
5
|
|
6
6
|
Background:
|
7
|
-
Given we want to
|
7
|
+
Given we want to add the file "a.js" into "a.min.js"
|
8
8
|
|
9
9
|
Scenario: Custom name for the task
|
10
10
|
Given I have configured rake to minify at the ":my_minify" command
|
@@ -2,8 +2,12 @@ require 'fileutils'
|
|
2
2
|
require 'tmpdir'
|
3
3
|
require 'rake'
|
4
4
|
|
5
|
-
Given /^we want to
|
6
|
-
add_to_groups(output,
|
5
|
+
Given /^we want to add the file "([^"]*)" into "([^"]*)"$/ do |file, output|
|
6
|
+
add_to_groups(output, file, nil)
|
7
|
+
end
|
8
|
+
|
9
|
+
Given /^we want to add the file "([^"]*)" into "([^"]*)" with options:$/ do |file, output, options|
|
10
|
+
add_to_groups(output, file, options.rows_hash)
|
7
11
|
end
|
8
12
|
|
9
13
|
When /^I run rake minify$/ do
|
@@ -18,12 +22,10 @@ Then /^"([^"]*)" should be minified$/ do |file|
|
|
18
22
|
end
|
19
23
|
end
|
20
24
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
Then /^"([^"]*)" should include "([^"]*)" and "([^"]*)"$/ do |result, source1, source2|
|
26
|
-
sources = [source1, source2].map do |s|
|
25
|
+
Then /^"([^"]*)" should include "([^"]*)"(?: and "([^"]*)")?$/ do |result, source1, source2|
|
26
|
+
sources = [source1]
|
27
|
+
sources << source2 if source2
|
28
|
+
sources.map! do |s|
|
27
29
|
file = File.join(File.dirname(__FILE__), "..", "js-expected", s)
|
28
30
|
unless File.exists? file
|
29
31
|
file = File.join(File.dirname(__FILE__), "..", "js-sources", s)
|
data/features/support/env.rb
CHANGED
@@ -9,12 +9,12 @@ class Group
|
|
9
9
|
@sources = []
|
10
10
|
end
|
11
11
|
|
12
|
-
def add(source,
|
13
|
-
@sources << GroupElement.new(source,
|
12
|
+
def add(source, options)
|
13
|
+
@sources << GroupElement.new(source, options)
|
14
14
|
end
|
15
15
|
end
|
16
16
|
|
17
|
-
GroupElement = Struct.new(:source, :
|
17
|
+
GroupElement = Struct.new(:source, :options)
|
18
18
|
|
19
19
|
def groups
|
20
20
|
@groups ||= Hash.new do |h, k|
|
@@ -22,8 +22,12 @@ def groups
|
|
22
22
|
end
|
23
23
|
end
|
24
24
|
|
25
|
-
def add_to_groups(output,
|
26
|
-
|
25
|
+
def add_to_groups(output, file, options=nil)
|
26
|
+
options = options.keys.reduce({}) do |hash, key|
|
27
|
+
hash[key.to_sym] = eval(options[key])
|
28
|
+
hash
|
29
|
+
end if options
|
30
|
+
groups[output].add(file, options)
|
27
31
|
end
|
28
32
|
|
29
33
|
def generate_rakefile
|
@@ -36,14 +40,14 @@ Rake::Minify.new(<%= @name_for_generation %>) do
|
|
36
40
|
<% end %>
|
37
41
|
<% groups.values.each do |group| %>
|
38
42
|
<% if group.sources.size == 1 %>
|
39
|
-
add(<%= group.output.inspect %>, <%= group.sources.first.source.inspect %>)
|
43
|
+
add(<%= group.output.inspect %>, <%= group.sources.first.source.inspect %>, <%= group.sources.first.options.inspect %>)
|
40
44
|
<% else %>
|
41
45
|
group(<%= group.output.inspect %>) do |group|
|
42
46
|
<% if indir %>
|
43
47
|
dir(<%= indir.inspect %>) do
|
44
48
|
<% end %>
|
45
49
|
<% group.sources.each do |element| %>
|
46
|
-
add(<%= element.source.inspect %>,
|
50
|
+
add(<%= element.source.inspect %>, <%= element.options.inspect %>)
|
47
51
|
<% end %>
|
48
52
|
<% if indir %>
|
49
53
|
end
|
data/lib/rake/minify.rb
CHANGED
@@ -20,7 +20,7 @@ class Rake::Minify < Rake::TaskLib
|
|
20
20
|
end
|
21
21
|
|
22
22
|
def add(output, source, opts = { :minify => true })
|
23
|
-
add_source(output, Source.new(build_path(source), opts
|
23
|
+
add_source(output, Source.new(build_path(source), opts))
|
24
24
|
end
|
25
25
|
|
26
26
|
def group(output, &block)
|
@@ -39,6 +39,8 @@ class Rake::Minify < Rake::TaskLib
|
|
39
39
|
instance_eval &@config # to be configured like the pros
|
40
40
|
|
41
41
|
@sources.each do |dest, source|
|
42
|
+
FileUtils.mkdir_p(File.dirname(dest))
|
43
|
+
|
42
44
|
Kernel.open(dest, "w") do |output|
|
43
45
|
output << source.build
|
44
46
|
end
|
data/lib/rake/minify/group.rb
CHANGED
@@ -10,8 +10,9 @@ class Rake::Minify
|
|
10
10
|
instance_eval &block if block
|
11
11
|
end
|
12
12
|
|
13
|
-
def add(source, opts=
|
14
|
-
|
13
|
+
def add(source, opts=nil)
|
14
|
+
opts ||= { :minify => true }
|
15
|
+
@sources << Source.new(parent.build_path(source), opts)
|
15
16
|
end
|
16
17
|
|
17
18
|
def build
|
data/lib/rake/minify/source.rb
CHANGED
@@ -1,9 +1,11 @@
|
|
1
1
|
class Rake::Minify::Source
|
2
2
|
attr_reader :source, :minify
|
3
3
|
|
4
|
-
def initialize(source,
|
4
|
+
def initialize(source, options=nil)
|
5
|
+
options ||= {}
|
5
6
|
@source = source
|
6
|
-
@minify = minify
|
7
|
+
@minify = optional_boolean(options[:minify], true)
|
8
|
+
@coffee_bare = optional_boolean(options[:bare], false)
|
7
9
|
end
|
8
10
|
|
9
11
|
def build
|
@@ -11,7 +13,7 @@ class Rake::Minify::Source
|
|
11
13
|
|
12
14
|
Kernel.open(source) do |input|
|
13
15
|
output = input.read
|
14
|
-
output = CoffeeScript.compile(output, :bare =>
|
16
|
+
output = CoffeeScript.compile(output, :bare => @coffee_bare) if coffee?
|
15
17
|
output = JSMin.minify(output).strip if minify
|
16
18
|
output
|
17
19
|
end
|
@@ -27,7 +29,12 @@ class Rake::Minify::Source
|
|
27
29
|
require 'coffee-script'
|
28
30
|
rescue
|
29
31
|
raise "Missing coffee-script gem"
|
30
|
-
exit 1
|
31
32
|
end
|
32
33
|
end
|
34
|
+
|
35
|
+
def optional_boolean(value, default)
|
36
|
+
return true if value
|
37
|
+
return default if value.nil?
|
38
|
+
value
|
39
|
+
end
|
33
40
|
end
|