rake-pipeline-web-filters-fork 0.6.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- data/.gitignore +19 -0
- data/.rspec +1 -0
- data/.travis.yml +11 -0
- data/.yardopts +2 -0
- data/Gemfile +6 -0
- data/README.markdown +58 -0
- data/README.yard +25 -0
- data/Rakefile +10 -0
- data/lib/rake-pipeline-web-filters.rb +31 -0
- data/lib/rake-pipeline-web-filters/cache_buster_filter.rb +42 -0
- data/lib/rake-pipeline-web-filters/chained_filter.rb +116 -0
- data/lib/rake-pipeline-web-filters/coffee_script_filter.rb +41 -0
- data/lib/rake-pipeline-web-filters/filter_with_dependencies.rb +27 -0
- data/lib/rake-pipeline-web-filters/gzip_filter.rb +59 -0
- data/lib/rake-pipeline-web-filters/handlebars_filter.rb +62 -0
- data/lib/rake-pipeline-web-filters/helpers.rb +138 -0
- data/lib/rake-pipeline-web-filters/iife_filter.rb +38 -0
- data/lib/rake-pipeline-web-filters/jade_filter.rb +61 -0
- data/lib/rake-pipeline-web-filters/less_filter.rb +55 -0
- data/lib/rake-pipeline-web-filters/markdown_filter.rb +70 -0
- data/lib/rake-pipeline-web-filters/minispade_filter.rb +63 -0
- data/lib/rake-pipeline-web-filters/neuter_filter.rb +110 -0
- data/lib/rake-pipeline-web-filters/sass_filter.rb +87 -0
- data/lib/rake-pipeline-web-filters/stylus_filter.rb +59 -0
- data/lib/rake-pipeline-web-filters/tilt_filter.rb +70 -0
- data/lib/rake-pipeline-web-filters/uglify_filter.rb +82 -0
- data/lib/rake-pipeline-web-filters/version.rb +9 -0
- data/lib/rake-pipeline-web-filters/yui_css_filter.rb +70 -0
- data/lib/rake-pipeline-web-filters/yui_javascript_filter.rb +59 -0
- data/rake-pipeline-web-filters.gemspec +33 -0
- data/spec/cache_buster_filter_spec.rb +108 -0
- data/spec/chained_filter_spec.rb +79 -0
- data/spec/coffee_script_filter_spec.rb +113 -0
- data/spec/gzip_filter_spec.rb +52 -0
- data/spec/handlebars_filter_spec.rb +73 -0
- data/spec/helpers_spec.rb +146 -0
- data/spec/iife_filter_spec.rb +58 -0
- data/spec/jade_filter_spec.rb +92 -0
- data/spec/less_filter_spec.rb +62 -0
- data/spec/markdown_filter_spec.rb +89 -0
- data/spec/minispade_filter_spec.rb +82 -0
- data/spec/neuter_filter_spec.rb +216 -0
- data/spec/sass_filter_spec.rb +152 -0
- data/spec/spec_helper.rb +28 -0
- data/spec/stylus_filter_spec.rb +72 -0
- data/spec/support/spec_helpers/file_utils.rb +33 -0
- data/spec/support/spec_helpers/filters.rb +37 -0
- data/spec/support/spec_helpers/input_helpers.rb +23 -0
- data/spec/support/spec_helpers/memory_file_wrapper.rb +38 -0
- data/spec/support/spec_helpers/memory_manifest.rb +19 -0
- data/spec/tilt_filter_spec.rb +82 -0
- data/spec/uglify_filter_spec.rb +128 -0
- data/spec/yui_css_filter_spec.rb +91 -0
- data/spec/yui_javascript_filter_spec.rb +71 -0
- metadata +308 -0
@@ -0,0 +1,82 @@
|
|
1
|
+
require "json"
|
2
|
+
|
3
|
+
describe "MinispadeFilter" do
|
4
|
+
MemoryFileWrapper ||= Rake::Pipeline::SpecHelpers::MemoryFileWrapper
|
5
|
+
MemoryManifest ||= Rake::Pipeline::SpecHelpers::MemoryManifest
|
6
|
+
|
7
|
+
def input_file(contents="var foo = 'bar'; // last-line comment", path="/path/to/input", name="foo.js")
|
8
|
+
MemoryFileWrapper.new(path, name, "UTF-8", contents)
|
9
|
+
end
|
10
|
+
|
11
|
+
let(:output_files) {
|
12
|
+
[
|
13
|
+
MemoryFileWrapper.new("/path/to/output", "foo.js", "UTF-8")
|
14
|
+
]
|
15
|
+
}
|
16
|
+
|
17
|
+
let(:output_file) {
|
18
|
+
MemoryFileWrapper.files["/path/to/output/foo.js"]
|
19
|
+
}
|
20
|
+
|
21
|
+
def make_filter(input_file, *args)
|
22
|
+
filter = Rake::Pipeline::Web::Filters::MinispadeFilter.new(*args)
|
23
|
+
filter.file_wrapper_class = MemoryFileWrapper
|
24
|
+
filter.manifest = MemoryManifest.new
|
25
|
+
filter.last_manifest = MemoryManifest.new
|
26
|
+
filter.input_files = [input_file]
|
27
|
+
filter.output_root = "/path/to/output"
|
28
|
+
filter.rake_application = Rake::Application.new
|
29
|
+
filter.generate_rake_tasks.each(&:invoke)
|
30
|
+
filter
|
31
|
+
end
|
32
|
+
|
33
|
+
it "generates output" do
|
34
|
+
filter = make_filter(input_file)
|
35
|
+
filter.output_files.should == output_files
|
36
|
+
output_file.encoding.should == "UTF-8"
|
37
|
+
output_file.body.should ==
|
38
|
+
"minispade.register('/path/to/input/foo.js', function() {var foo = 'bar'; // last-line comment\n});"
|
39
|
+
end
|
40
|
+
|
41
|
+
it "uses strict if asked" do
|
42
|
+
filter = make_filter(input_file, :use_strict => true)
|
43
|
+
output_file.body.should ==
|
44
|
+
"minispade.register('/path/to/input/foo.js', function() {\"use strict\";\nvar foo = 'bar'; // last-line comment\n});"
|
45
|
+
end
|
46
|
+
|
47
|
+
it "compiles a string if asked" do
|
48
|
+
filter = make_filter(input_file, :string => true)
|
49
|
+
output_file.body.should ==
|
50
|
+
%{minispade.register('/path/to/input/foo.js', "(function() {var foo = 'bar'; // last-line comment\\n})();\\n/*@if (@_jscript) @else @*/\\n//@ sourceURL=/path/to/input/foo.js\\n/*@end@*/");}
|
51
|
+
end
|
52
|
+
|
53
|
+
it "takes a proc to name the module" do
|
54
|
+
filter = make_filter(input_file, :module_id_generator => proc { |input| "octopus" })
|
55
|
+
output_file.body.should ==
|
56
|
+
"minispade.register('octopus', function() {var foo = 'bar'; // last-line comment\n});"
|
57
|
+
end
|
58
|
+
|
59
|
+
it "rewrites requires if asked" do
|
60
|
+
filter = make_filter(input_file("require('octopus');"), :rewrite_requires => true)
|
61
|
+
output_file.body.should ==
|
62
|
+
"minispade.register('/path/to/input/foo.js', function() {minispade.require('octopus');\n});"
|
63
|
+
end
|
64
|
+
|
65
|
+
it "rewrites requires if asked even spaces wrap tokens in the require statement" do
|
66
|
+
filter = make_filter(input_file("require ( 'octopus');"), :rewrite_requires => true)
|
67
|
+
output_file.body.should ==
|
68
|
+
"minispade.register('/path/to/input/foo.js', function() {minispade.require('octopus');\n});"
|
69
|
+
end
|
70
|
+
|
71
|
+
it "rewrites requireAll if asked" do
|
72
|
+
filter = make_filter(input_file("requireAll('octopus');"), :rewrite_requires => true)
|
73
|
+
output_file.body.should ==
|
74
|
+
"minispade.register('/path/to/input/foo.js', function() {minispade.requireAll('octopus');\n});"
|
75
|
+
end
|
76
|
+
|
77
|
+
it "rewrites requireAll if asked even spaces wrap tokens in the require statement" do
|
78
|
+
filter = make_filter(input_file("requireAll ( 'octopus');"), :rewrite_requires => true)
|
79
|
+
output_file.body.should ==
|
80
|
+
"minispade.register('/path/to/input/foo.js', function() {minispade.requireAll('octopus');\n});"
|
81
|
+
end
|
82
|
+
end
|
@@ -0,0 +1,216 @@
|
|
1
|
+
require 'stringio'
|
2
|
+
|
3
|
+
describe "NeuterFilter" do
|
4
|
+
MemoryFileWrapper ||= Rake::Pipeline::SpecHelpers::MemoryFileWrapper
|
5
|
+
MemoryManifest ||= Rake::Pipeline::SpecHelpers::MemoryManifest
|
6
|
+
|
7
|
+
def make_input(name, data)
|
8
|
+
make_data(name, data)
|
9
|
+
MemoryFileWrapper.new("/path/to/input", name, "UTF-8")
|
10
|
+
end
|
11
|
+
|
12
|
+
def make_data(name, data)
|
13
|
+
MemoryFileWrapper.data["/path/to/input/#{name}"] = data
|
14
|
+
end
|
15
|
+
|
16
|
+
def make_filter(input_files, *args)
|
17
|
+
opts = args.last.is_a?(Hash) ? args.pop : {}
|
18
|
+
opts[:additional_dependencies] ||= proc{|input| %w(b c) }
|
19
|
+
args.push(opts)
|
20
|
+
|
21
|
+
filter = Rake::Pipeline::Web::Filters::NeuterFilter.new(*args)
|
22
|
+
filter.file_wrapper_class = MemoryFileWrapper
|
23
|
+
filter.manifest = MemoryManifest.new
|
24
|
+
filter.last_manifest = MemoryManifest.new
|
25
|
+
filter.input_files = input_files
|
26
|
+
filter.output_root = "/path/to/output"
|
27
|
+
filter.rake_application = Rake::Application.new
|
28
|
+
|
29
|
+
tasks = filter.generate_rake_tasks
|
30
|
+
|
31
|
+
# TODO work around a bug in rakep THIS IS TEMPORARY
|
32
|
+
filter.rake_application.tasks.each do |task|
|
33
|
+
task.dynamic_prerequisites.each do |prereq|
|
34
|
+
filter.send :create_file_task, prereq
|
35
|
+
end
|
36
|
+
end
|
37
|
+
tasks.each(&:invoke)
|
38
|
+
filter
|
39
|
+
end
|
40
|
+
|
41
|
+
def make_filter_with_inputs(inputs, options={})
|
42
|
+
input_file = make_input(inputs[0][0], inputs[0][1])
|
43
|
+
inputs[1..-1].each{|input| make_data(input[0], input[1]) }
|
44
|
+
make_filter([input_file], "processed", options)
|
45
|
+
end
|
46
|
+
|
47
|
+
def capture(*streams)
|
48
|
+
streams.map! { |stream| stream.to_s }
|
49
|
+
begin
|
50
|
+
result = StringIO.new
|
51
|
+
streams.each { |stream| eval "$#{stream} = result" }
|
52
|
+
yield
|
53
|
+
ensure
|
54
|
+
streams.each { |stream| eval("$#{stream} = #{stream.upcase}") }
|
55
|
+
end
|
56
|
+
result.string
|
57
|
+
end
|
58
|
+
|
59
|
+
after(:each) do
|
60
|
+
MemoryFileWrapper.data.clear
|
61
|
+
end
|
62
|
+
|
63
|
+
let(:output_files) {
|
64
|
+
[
|
65
|
+
MemoryFileWrapper.new("/path/to/output", "processed", "BINARY")
|
66
|
+
]
|
67
|
+
}
|
68
|
+
|
69
|
+
let(:output_file) {
|
70
|
+
MemoryFileWrapper.files["/path/to/output/processed"]
|
71
|
+
}
|
72
|
+
|
73
|
+
it "generates basic output" do
|
74
|
+
input_file = make_input("contents", "data")
|
75
|
+
filter = make_filter([input_file], "processed")
|
76
|
+
|
77
|
+
filter.output_files.should == output_files
|
78
|
+
# ConcatFilter forces Binary, not sure if this is right in this case
|
79
|
+
output_file.encoding.should == "BINARY"
|
80
|
+
output_file.body.should == "data"
|
81
|
+
end
|
82
|
+
|
83
|
+
it "orders required files" do
|
84
|
+
make_filter_with_inputs([
|
85
|
+
["a", "require('b');\nA"],
|
86
|
+
["b", "require('c');\nB"],
|
87
|
+
["c", "C"]
|
88
|
+
])
|
89
|
+
|
90
|
+
output_file.body.should == "C\n\nB\n\nA"
|
91
|
+
end
|
92
|
+
|
93
|
+
it "works with paths" do
|
94
|
+
make_filter_with_inputs([
|
95
|
+
["lib/a", "require('lib/b');\nA"],
|
96
|
+
["lib/b", "require('lib/c');\nB"],
|
97
|
+
["lib/c", "C"]
|
98
|
+
], :additional_dependencies => proc{ %w(lib/b lib/c) })
|
99
|
+
|
100
|
+
output_file.body.should == "C\n\nB\n\nA"
|
101
|
+
end
|
102
|
+
|
103
|
+
it "should handle circular requires" do
|
104
|
+
make_filter_with_inputs([
|
105
|
+
["a", "require('b');\nA"],
|
106
|
+
["b", "require('c');\nB"],
|
107
|
+
["c", "require('a');\nC"]
|
108
|
+
])
|
109
|
+
|
110
|
+
output_file.body.should == "C\n\nB\n\nA"
|
111
|
+
end
|
112
|
+
|
113
|
+
it "should not require the same file twice" do
|
114
|
+
make_filter_with_inputs([
|
115
|
+
["a", "require('b');\nrequire('c');\nA"],
|
116
|
+
["b", "require('c');\nB"],
|
117
|
+
["c", "require('a');\nC"]
|
118
|
+
])
|
119
|
+
|
120
|
+
output_file.body.should == "C\n\nB\n\nA"
|
121
|
+
end
|
122
|
+
|
123
|
+
# Feature not yet supported
|
124
|
+
it "does not duplicate files both matched and required"
|
125
|
+
|
126
|
+
describe "config" do
|
127
|
+
describe "require_regexp" do
|
128
|
+
it "works with minispade format" do
|
129
|
+
make_filter_with_inputs([
|
130
|
+
["a", "minispade.require('b');\nA"],
|
131
|
+
["b", "minispade.require('c');\nB"],
|
132
|
+
["c", "C"]
|
133
|
+
], :require_regexp => %r{^\s*minispade\.require\(['"]([^'"]*)['"]\);?\s*})
|
134
|
+
|
135
|
+
output_file.body.should == "C\n\nB\n\nA"
|
136
|
+
end
|
137
|
+
|
138
|
+
it "works with sprockets format" do
|
139
|
+
make_filter_with_inputs([
|
140
|
+
["a", "//= require b\nA"],
|
141
|
+
["b", "//= require c\nB"],
|
142
|
+
["c", "C"]
|
143
|
+
], :require_regexp => %r{^//= require (\S+)\s*})
|
144
|
+
|
145
|
+
output_file.body.should == "C\n\nB\n\nA"
|
146
|
+
end
|
147
|
+
end
|
148
|
+
|
149
|
+
describe "path_transform" do
|
150
|
+
it "converts paths" do
|
151
|
+
make_filter_with_inputs([
|
152
|
+
["lib/a.js", "require('b');\nA"],
|
153
|
+
["lib/b.js", "require('c');\nB"],
|
154
|
+
["lib/c.js", "C"]
|
155
|
+
], :path_transform => proc{|path| "lib/#{path}.js" },
|
156
|
+
:additional_dependencies => proc{ %w(lib/b.js lib/c.js) })
|
157
|
+
|
158
|
+
output_file.body.should == "C\n\nB\n\nA"
|
159
|
+
end
|
160
|
+
end
|
161
|
+
|
162
|
+
describe "closure_wrap" do
|
163
|
+
it "wraps in a javascript closure" do
|
164
|
+
make_filter_with_inputs([
|
165
|
+
["a", "require('b');\nA"],
|
166
|
+
["b", "require('c');\nB"],
|
167
|
+
["c", "C"]
|
168
|
+
], :closure_wrap => true)
|
169
|
+
|
170
|
+
output_file.body.should == "(function() {\nC\n})();\n\n\n\n(function() {\nB\n})();\n\n\n\n(function() {\nA\n})();\n\n"
|
171
|
+
end
|
172
|
+
|
173
|
+
# Not yet supported
|
174
|
+
it "allows other wrapper types"
|
175
|
+
end
|
176
|
+
|
177
|
+
describe "filename_comment" do
|
178
|
+
it "shows a comment with the filename" do
|
179
|
+
make_filter_with_inputs([
|
180
|
+
["a", "require('b');\nA"],
|
181
|
+
["b", "require('c');\nB"],
|
182
|
+
["c", "C"],
|
183
|
+
], :filename_comment => proc{|input| "/* #{input.fullpath} */" })
|
184
|
+
|
185
|
+
output_file.body.should == "/* /path/to/input/c */\nC\n\n/* /path/to/input/b */\nB\n\n/* /path/to/input/a */\nA"
|
186
|
+
end
|
187
|
+
end
|
188
|
+
|
189
|
+
describe "additional_dependencies" do
|
190
|
+
it "warns if required file is not contained" do
|
191
|
+
output = capture(:stderr) do
|
192
|
+
make_filter_with_inputs([
|
193
|
+
["d", "require('e');\nD"],
|
194
|
+
["e", "require('f');\nE"],
|
195
|
+
["f", "F"]
|
196
|
+
])
|
197
|
+
end
|
198
|
+
|
199
|
+
output.should include("Included '/path/to/input/e', which is not listed in :additional_dependencies. The pipeline may not invalidate properly.")
|
200
|
+
output.should include("Included '/path/to/input/f', which is not listed in :additional_dependencies. The pipeline may not invalidate properly.")
|
201
|
+
end
|
202
|
+
|
203
|
+
it "does not warn if full paths are provided" do
|
204
|
+
output = capture(:stderr) do
|
205
|
+
make_filter_with_inputs([
|
206
|
+
["d", "require('e');\nD"],
|
207
|
+
["e", "require('f');\nE"],
|
208
|
+
["f", "F"]
|
209
|
+
], :additional_dependencies => proc{ %w(/path/to/input/e /path/to/input/f) })
|
210
|
+
end
|
211
|
+
|
212
|
+
output.should == ""
|
213
|
+
end
|
214
|
+
end
|
215
|
+
end
|
216
|
+
end
|
@@ -0,0 +1,152 @@
|
|
1
|
+
describe "SassFilter" do
|
2
|
+
SassFilter ||= Rake::Pipeline::Web::Filters::SassFilter
|
3
|
+
MemoryFileWrapper ||= Rake::Pipeline::SpecHelpers::MemoryFileWrapper
|
4
|
+
MemoryManifest ||= Rake::Pipeline::SpecHelpers::MemoryManifest
|
5
|
+
|
6
|
+
let(:scss_input) { <<-SCSS }
|
7
|
+
$blue: #3bbfce;
|
8
|
+
|
9
|
+
.border {
|
10
|
+
border-color: $blue;
|
11
|
+
}
|
12
|
+
SCSS
|
13
|
+
|
14
|
+
let(:sass_input) { <<-SASS }
|
15
|
+
$blue: #3bbfce
|
16
|
+
|
17
|
+
.border
|
18
|
+
border-color: $blue
|
19
|
+
SASS
|
20
|
+
|
21
|
+
def expected_css_output(filename)
|
22
|
+
<<-CSS
|
23
|
+
/* line 3, /path/to/input/#{filename} */
|
24
|
+
.border {
|
25
|
+
border-color: #3bbfce;
|
26
|
+
}
|
27
|
+
CSS
|
28
|
+
end
|
29
|
+
|
30
|
+
def input_file(name, content)
|
31
|
+
MemoryFileWrapper.new("/path/to/input", name, "UTF-8", content)
|
32
|
+
end
|
33
|
+
|
34
|
+
def output_file(name)
|
35
|
+
MemoryFileWrapper.new("/path/to/output", name, "UTF-8")
|
36
|
+
end
|
37
|
+
|
38
|
+
def setup_filter(filter, input_files=nil)
|
39
|
+
filter.file_wrapper_class = MemoryFileWrapper
|
40
|
+
filter.manifest = MemoryManifest.new
|
41
|
+
filter.last_manifest = MemoryManifest.new
|
42
|
+
filter.input_files = input_files || [input_file("border.scss", scss_input)]
|
43
|
+
filter.output_root = "/path/to/output"
|
44
|
+
filter.rake_application = Rake::Application.new
|
45
|
+
filter
|
46
|
+
end
|
47
|
+
|
48
|
+
it "generates output" do
|
49
|
+
filter = setup_filter SassFilter.new
|
50
|
+
filter.output_files.should == [output_file("border.css")]
|
51
|
+
|
52
|
+
tasks = filter.generate_rake_tasks
|
53
|
+
tasks.each(&:invoke)
|
54
|
+
|
55
|
+
file = MemoryFileWrapper.files["/path/to/output/border.css"]
|
56
|
+
file.body.should == expected_css_output("border.scss")
|
57
|
+
file.encoding.should == "UTF-8"
|
58
|
+
end
|
59
|
+
|
60
|
+
describe "naming output files" do
|
61
|
+
it "translates .scss extensions to .css by default" do
|
62
|
+
filter = setup_filter SassFilter.new
|
63
|
+
filter.output_files.first.path.should == "border.css"
|
64
|
+
end
|
65
|
+
|
66
|
+
it "accepts a block to customize output file names" do
|
67
|
+
filter = setup_filter(SassFilter.new { |input| "octopus" })
|
68
|
+
filter.output_files.first.path.should == "octopus"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
|
72
|
+
it "accepts options to pass to the Sass compiler" do
|
73
|
+
input_files = [input_file("border.sass_file", sass_input)]
|
74
|
+
filter = setup_filter(SassFilter.new(:syntax => :sass), input_files)
|
75
|
+
tasks = filter.generate_rake_tasks
|
76
|
+
tasks.each(&:invoke)
|
77
|
+
file = MemoryFileWrapper.files["/path/to/output/border.sass_file"]
|
78
|
+
file.body.should == expected_css_output("border.sass_file")
|
79
|
+
end
|
80
|
+
|
81
|
+
it "compiles files with a .sass extension as sass" do
|
82
|
+
input_files = [input_file("border.sass", sass_input)]
|
83
|
+
filter = setup_filter(SassFilter.new, input_files)
|
84
|
+
tasks = filter.generate_rake_tasks
|
85
|
+
tasks.each(&:invoke)
|
86
|
+
file = MemoryFileWrapper.files["/path/to/output/border.css"]
|
87
|
+
file.body.should == expected_css_output("border.sass")
|
88
|
+
end
|
89
|
+
|
90
|
+
it "passes Compass's options to the Sass compiler" do
|
91
|
+
Compass.configuration do |c|
|
92
|
+
c.preferred_syntax = :sass
|
93
|
+
end
|
94
|
+
|
95
|
+
input_files = [input_file("border.css", scss_input)]
|
96
|
+
filter = setup_filter(SassFilter.new, input_files)
|
97
|
+
tasks = filter.generate_rake_tasks
|
98
|
+
tasks.each(&:invoke)
|
99
|
+
file = MemoryFileWrapper.files["/path/to/output/border.css"]
|
100
|
+
file.body.should == expected_css_output("border.css")
|
101
|
+
end
|
102
|
+
|
103
|
+
describe "additional load paths" do
|
104
|
+
it "is empty by default" do
|
105
|
+
filter = setup_filter(SassFilter.new)
|
106
|
+
filter.additional_load_paths == []
|
107
|
+
end
|
108
|
+
|
109
|
+
it "transforms to array" do
|
110
|
+
filter = setup_filter(SassFilter.new(:additional_load_paths => "additional"))
|
111
|
+
filter.additional_load_paths == ["additional"]
|
112
|
+
end
|
113
|
+
|
114
|
+
it "accepts array" do
|
115
|
+
filter = setup_filter(SassFilter.new(:additional_load_paths => ["additional", "extra"]))
|
116
|
+
filter.additional_load_paths == ["additional", "extra"]
|
117
|
+
end
|
118
|
+
end
|
119
|
+
|
120
|
+
describe "additional dependencies" do
|
121
|
+
def write_input_file(filename, contents='', root=tmp)
|
122
|
+
mkdir_p root
|
123
|
+
File.open(File.join(root, filename), 'w') { |f| f.puts contents }
|
124
|
+
Rake::Pipeline::FileWrapper.new(root, filename)
|
125
|
+
end
|
126
|
+
|
127
|
+
let(:main_scss) { '@import "blue";' }
|
128
|
+
let(:blue_scss) { '$blue: #3bbfce;' }
|
129
|
+
let!(:main) { write_input_file('main.scss', main_scss) }
|
130
|
+
let!(:blue) { write_input_file('blue.scss', blue_scss) }
|
131
|
+
|
132
|
+
before do
|
133
|
+
File.open(main.fullpath, "w") { |f| f.puts main_scss }
|
134
|
+
File.open(blue.fullpath, "w") { |f| f.puts blue_scss }
|
135
|
+
end
|
136
|
+
|
137
|
+
it "includes @imported files" do
|
138
|
+
filter = SassFilter.new
|
139
|
+
filter.last_manifest = MemoryManifest.new
|
140
|
+
filter.manifest = MemoryManifest.new
|
141
|
+
filter.input_files = [main]
|
142
|
+
filter.output_root = "#{tmp}/output"
|
143
|
+
filter.rake_application = Rake::Application.new
|
144
|
+
|
145
|
+
filter.additional_dependencies(main).should include(blue.fullpath)
|
146
|
+
|
147
|
+
tasks = filter.generate_rake_tasks
|
148
|
+
tasks.each(&:invoke)
|
149
|
+
end
|
150
|
+
end
|
151
|
+
|
152
|
+
end
|