slinky 0.7.3 → 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +13 -5
- data/.travis.yml +1 -1
- data/Gemfile +2 -0
- data/README.md +119 -8
- data/VERSION +1 -1
- data/lib/slinky.rb +2 -0
- data/lib/slinky/builder.rb +4 -2
- data/lib/slinky/compiled_file.rb +1 -1
- data/lib/slinky/compilers.rb +5 -2
- data/lib/slinky/compilers/clojurescript-compiler.rb +4 -4
- data/lib/slinky/compilers/coffee-compiler.rb +4 -3
- data/lib/slinky/compilers/haml-compiler.rb +4 -3
- data/lib/slinky/compilers/jsx-compiler.rb +13 -0
- data/lib/slinky/compilers/less-compiler.rb +4 -3
- data/lib/slinky/compilers/sass-compiler.rb +4 -3
- data/lib/slinky/config_reader.rb +18 -2
- data/lib/slinky/errors.rb +91 -0
- data/lib/slinky/graph.rb +113 -0
- data/lib/slinky/manifest.rb +290 -123
- data/lib/slinky/proxy_server.rb +1 -1
- data/lib/slinky/runner.rb +1 -1
- data/lib/slinky/server.rb +41 -5
- data/lib/slinky/templates/error.css +32 -0
- data/lib/slinky/templates/error.haml +13 -0
- data/lib/slinky/templates/error.js +26 -0
- data/lib/slinky/templates/inject.css +27 -0
- data/slinky.gemspec +17 -3
- data/spec/compilers_spec.rb +15 -0
- data/spec/manifest_spec.rb +750 -0
- data/spec/slinky_spec.rb +9 -421
- data/spec/spec_helper.rb +22 -7
- metadata +83 -47
data/spec/slinky_spec.rb
CHANGED
@@ -16,426 +16,6 @@ describe "Slinky" do
|
|
16
16
|
end
|
17
17
|
end
|
18
18
|
|
19
|
-
context "Manifest" do
|
20
|
-
before :each do
|
21
|
-
@mprod = Slinky::Manifest.new("/src", @config, :devel => false, :build_to => "/build")
|
22
|
-
@mdevel = Slinky::Manifest.new("/src", @config)
|
23
|
-
@md_prod = @mprod.manifest_dir
|
24
|
-
@md_devel = @mdevel.manifest_dir
|
25
|
-
end
|
26
|
-
|
27
|
-
it "should build manifest dir with all files in current dir" do
|
28
|
-
@md_prod.files.collect{|f| f.source}.should == ["/src/test.haml"]
|
29
|
-
@md_devel.files.collect{|f| f.source}.should == ["/src/test.haml"]
|
30
|
-
end
|
31
|
-
|
32
|
-
it "should build manifest with all files in fs" do
|
33
|
-
@mprod.files.collect{|f|
|
34
|
-
f.source
|
35
|
-
}.sort.should == @files.collect{|x| "/src/" + x}.sort
|
36
|
-
@mdevel.files.collect{|f|
|
37
|
-
f.source
|
38
|
-
}.sort.should == @files.collect{|x| "/src/" + x}.sort
|
39
|
-
end
|
40
|
-
|
41
|
-
it "should not include dot files" do
|
42
|
-
File.open("/src/.index.haml.swp", "w+"){|f| f.write("x")}
|
43
|
-
manifest = Slinky::Manifest.new("/src", @config)
|
44
|
-
manifest.files.map{|x| x.source}.include?("/src/.index.haml.swp").should == false
|
45
|
-
end
|
46
|
-
|
47
|
-
it "should be able to compute a hash for the entire manifest" do
|
48
|
-
m = @mdevel
|
49
|
-
hash1 = m.md5
|
50
|
-
File.open("/src/hello.html", "w+") {|f| f.write("Hell!") }
|
51
|
-
$stdout.should_receive(:puts).with("Compiled /src/test.haml".foreground(:green)).exactly(2).times
|
52
|
-
m.add_all_by_path(["/src/hello.html"])
|
53
|
-
m.md5.should_not == hash1
|
54
|
-
end
|
55
|
-
|
56
|
-
it "should find files in the manifest by path" do
|
57
|
-
@mdevel.find_by_path("test.haml").first.source.should == "/src/test.haml"
|
58
|
-
@mdevel.find_by_path("asdf.haml").first.should == nil
|
59
|
-
@mdevel.find_by_path("l1/l2/test.txt").first.source.should == "/src/l1/l2/test.txt"
|
60
|
-
@mdevel.find_by_path("l1/test.css").first.source.should == "/src/l1/test.sass"
|
61
|
-
l1 = @mdevel.manifest_dir.children.find{|c| c.dir == "/src/l1"}
|
62
|
-
l1.find_by_path("../test.haml").first.source.should == "/src/test.haml"
|
63
|
-
end
|
64
|
-
|
65
|
-
it "should produce the correct scripts string for production" do
|
66
|
-
@mprod.scripts_string.should match \
|
67
|
-
%r!<script type="text/javascript" src="/scripts.js\?\d+"></script>!
|
68
|
-
end
|
69
|
-
|
70
|
-
it "should produce the correct scripts string for devel" do
|
71
|
-
@mdevel.scripts_string.should == [
|
72
|
-
'<script type="text/javascript" src="/l1/test5.js"></script>',
|
73
|
-
'<script type="text/javascript" src="/l1/l2/test6.js"></script>',
|
74
|
-
'<script type="text/javascript" src="/l1/test2.js"></script>',
|
75
|
-
'<script type="text/javascript" src="/l1/l2/test3.js"></script>',
|
76
|
-
'<script type="text/javascript" src="/l1/test.js"></script>'].join("\n")
|
77
|
-
end
|
78
|
-
|
79
|
-
it "should produce the correct styles string for production" do
|
80
|
-
@mprod.styles_string.should match \
|
81
|
-
%r!<link rel="stylesheet" href="/styles.css\?\d+" />!
|
82
|
-
end
|
83
|
-
|
84
|
-
it "should produce the correct styles string for development" do
|
85
|
-
File.open("/src/l1/l2/bad.sass", "w+"){|f|
|
86
|
-
f.write "require('../test.sass')\ncolor: red;"
|
87
|
-
}
|
88
|
-
manifest = Slinky::Manifest.new("/src", @config)
|
89
|
-
@mdevel.styles_string.should == [
|
90
|
-
'<link rel="stylesheet" href="/l1/test.css" />',
|
91
|
-
'<link rel="stylesheet" href="/l1/l2/test2.css" />'].join("\n")
|
92
|
-
end
|
93
|
-
|
94
|
-
it "should allow the creation of ManifestFiles" do
|
95
|
-
mf = Slinky::ManifestFile.new("/src/test.haml", "", @mprod)
|
96
|
-
end
|
97
|
-
|
98
|
-
it "should correctly determine output_path" do
|
99
|
-
mf = Slinky::ManifestFile.new("/src/test.haml", "/src/build", @mprod)
|
100
|
-
mf.output_path.to_s.should == "/src/test.html"
|
101
|
-
mf = Slinky::ManifestFile.new("/src/l1/test.js", "/src/build", @mprod)
|
102
|
-
mf.output_path.to_s.should == "/src/l1/test.js"
|
103
|
-
end
|
104
|
-
|
105
|
-
it "should correctly determine relative_output_path" do
|
106
|
-
mf = Slinky::ManifestFile.new("/src/test.haml", "/src/build", @mprod)
|
107
|
-
mf.relative_output_path.to_s.should == "test.html"
|
108
|
-
mf = Slinky::ManifestFile.new("/src/l1/test.js", "/src/build", @mprod)
|
109
|
-
mf.relative_output_path.to_s.should == "l1/test.js"
|
110
|
-
end
|
111
|
-
|
112
|
-
it "should build tmp file without directives" do
|
113
|
-
original = "/src/test.haml"
|
114
|
-
mf = Slinky::ManifestFile.new("/src/test.haml", "/src/build", @mprod)
|
115
|
-
path = mf.handle_directives mf.source
|
116
|
-
File.read(original).match(/slinky_scripts|slinky_styles/).should_not == nil
|
117
|
-
File.read(path).match(/slinky_scripts|slinky_styles/).should == nil
|
118
|
-
end
|
119
|
-
|
120
|
-
it "should build tmp file without directives for .js" do
|
121
|
-
original = "/src/l1/test.js"
|
122
|
-
mf = Slinky::ManifestFile.new("/src/l1/test.js", "/src/build", @mprod)
|
123
|
-
path = mf.handle_directives mf.source
|
124
|
-
File.read(original).match(/slinky_require/).should_not == nil
|
125
|
-
File.read(path).match(/slinky_require/).should == nil
|
126
|
-
end
|
127
|
-
|
128
|
-
it "should compile files that need it" do
|
129
|
-
$stdout.should_receive(:puts).with("Compiled /src/test.haml".foreground(:green))
|
130
|
-
mf = Slinky::ManifestFile.new("/src/test.haml", "/src/build", @mprod)
|
131
|
-
FileUtils.mkdir("/src/build")
|
132
|
-
build_path = mf.process mf.build_to
|
133
|
-
build_path.to_s.split(".")[-1].should == "html"
|
134
|
-
File.read("/src/test.haml").match("<head>").should == nil
|
135
|
-
File.read(build_path).match("<head>").should_not == nil
|
136
|
-
|
137
|
-
$stdout.should_receive(:puts).with("Compiled /src/test.haml".foreground(:green))
|
138
|
-
mf = Slinky::ManifestFile.new("/src/test.haml", "/src/build", @mprod)
|
139
|
-
build_path = mf.process "/src/build/test.html"
|
140
|
-
File.read("/src/build/test.html").match("<head>").should_not == nil
|
141
|
-
FileUtils.rm_rf("/src/build") rescue nil
|
142
|
-
end
|
143
|
-
|
144
|
-
it "should give the proper error message for compilers with unmet dependencies" do
|
145
|
-
File.open("/src/test.fake", "w+"){|f| f.write("hello, fake data")}
|
146
|
-
$stderr.should_receive(:puts).with(/Missing dependency/)
|
147
|
-
mf = Slinky::ManifestFile.new("/src/test.fake", "/src/build", @mprod)
|
148
|
-
build_path = mf.process
|
149
|
-
end
|
150
|
-
|
151
|
-
it "should report errors for bad files" do
|
152
|
-
File.open("/src/l1/l2/bad.sass", "w+"){|f|
|
153
|
-
f.write "color: red;"
|
154
|
-
}
|
155
|
-
$stderr.should_receive(:puts).with(/Failed on/)
|
156
|
-
mf = Slinky::ManifestFile.new("/src/l1/l2/bad.sass", "/src/build", @mprod)
|
157
|
-
build_path = mf.process
|
158
|
-
build_path.should == nil
|
159
|
-
end
|
160
|
-
|
161
|
-
it "shouldn't crash on syntax errors" do
|
162
|
-
File.open("/src/l1/asdf.haml", "w+"){|f|
|
163
|
-
f.write("%h1{:width => 50px}")
|
164
|
-
}
|
165
|
-
$stderr.should_receive(:puts).with(/Failed on/)
|
166
|
-
mf = Slinky::ManifestFile.new("/src/l1/asdf.haml", "/src/build", @mprod)
|
167
|
-
build_path = mf.process
|
168
|
-
build_path.should == nil
|
169
|
-
end
|
170
|
-
|
171
|
-
it "should properly determine build directives" do
|
172
|
-
mf = Slinky::ManifestFile.new("/src/test.haml", "/src/build", @mprod)
|
173
|
-
mf.find_directives.should == {:slinky_scripts => [], :slinky_styles => []}
|
174
|
-
mf = Slinky::ManifestFile.new("/src/l1/test.js", "/src/build", @mprod)
|
175
|
-
mf.find_directives.should == {:slinky_require => ["test2.js", "l2/test3.js"]}
|
176
|
-
end
|
177
|
-
|
178
|
-
it "should properly determine build_to path" do
|
179
|
-
mf = Slinky::ManifestFile.new("/src/test.haml", "/src/build", @mprod)
|
180
|
-
mf.build_to.should == Pathname.new("/src/build/test.html")
|
181
|
-
mf = Slinky::ManifestFile.new("/src/l1/test.js", "/src/build", @mprod)
|
182
|
-
mf.build_to.should == Pathname.new("/src/build/test.js")
|
183
|
-
end
|
184
|
-
|
185
|
-
it "should build both compiled files and non-compiled files" do
|
186
|
-
$stdout.should_receive(:puts).with("Compiled /src/test.haml".foreground(:green))
|
187
|
-
mf = Slinky::ManifestFile.new("/src/test.haml", "/src/build", @mprod)
|
188
|
-
path = mf.build
|
189
|
-
path.to_s.should == "/src/build/test.html"
|
190
|
-
File.read("/src/test.haml").match("<head>").should == nil
|
191
|
-
File.read(path).match("<head>").should_not == nil
|
192
|
-
|
193
|
-
$stdout.should_not_receive(:puts)
|
194
|
-
mf = Slinky::ManifestFile.new("/src/l1/l2/test.txt", "/src/build/l1/l2", @mprod)
|
195
|
-
path = mf.build
|
196
|
-
path.to_s.should == "/src/build/l1/l2/test.txt"
|
197
|
-
File.read("/src/build/l1/l2/test.txt").should == "hello\n"
|
198
|
-
end
|
199
|
-
|
200
|
-
it "should match files" do
|
201
|
-
mf = Slinky::ManifestFile.new("/src/l1/l2/test.txt", "/src/build/l1/l2", @mprod)
|
202
|
-
mf.matches?("test.txt").should == true
|
203
|
-
mf = Slinky::ManifestFile.new("/src/l1/test.sass", "", @prod)
|
204
|
-
mf.matches?("test.css").should == true
|
205
|
-
mf.matches?("test.sass").should == true
|
206
|
-
end
|
207
|
-
|
208
|
-
it "should should properly determine if in tree" do
|
209
|
-
mf = Slinky::ManifestFile.new("/src/l1/l2/test.txt", "/src/build/l1/l2", @mprod)
|
210
|
-
mf.in_tree?("/l1").should == true
|
211
|
-
mf.in_tree?("/l1/l2").should == true
|
212
|
-
mf.in_tree?("/l1/l2/test.txt").should == true
|
213
|
-
mf.in_tree?("/l1/l3").should == false
|
214
|
-
mf.in_tree?("test.txt").should == false
|
215
|
-
end
|
216
|
-
|
217
|
-
it "should correctly build the dependency graph" do
|
218
|
-
@mprod.build_dependency_graph.collect{|x| x.collect{|y| y.source}}.sort.should ==
|
219
|
-
[["/src/l1/test2.js", "/src/l1/test.js"],
|
220
|
-
["/src/l1/l2/test3.coffee", "/src/l1/test.js"],
|
221
|
-
["/src/l1/test5.js", "/src/l1/test2.js"],
|
222
|
-
["/src/l1/l2/test6.js", "/src/l1/l2/test3.coffee"]].sort
|
223
|
-
end
|
224
|
-
|
225
|
-
it "should fail if a required file isn't in the manifest" do
|
226
|
-
FileUtils.rm("/src/l1/test2.js")
|
227
|
-
manifest = Slinky::Manifest.new("/src", @config, :devel => false, :build_to => "/build")
|
228
|
-
$stderr.should_receive(:puts).with("Could not find file test2.js required by /src/l1/test.js".foreground(:red))
|
229
|
-
proc {
|
230
|
-
manifest.build_dependency_graph
|
231
|
-
}.should raise_error Slinky::FileNotFoundError
|
232
|
-
end
|
233
|
-
|
234
|
-
it "should build a correct dependency list" do
|
235
|
-
@mprod.dependency_list.collect{|x| x.source}.should == ["/src/test.haml", "/src/l1/test.sass", "/src/l1/test5.js", "/src/l1/l2/test.txt", "/src/l1/l2/test2.css", "/src/l1/l2/test6.js", "/src/l1/l2/l3/test2.txt", "/src/l1/test2.js", "/src/l1/l2/test3.coffee", "/src/l1/test.js"]
|
236
|
-
end
|
237
|
-
|
238
|
-
it "should fail if there is a cycle in the dependency graph" do
|
239
|
-
File.open("/src/l1/test5.js", "w+"){|f| f.write("slinky_require('test.js')")}
|
240
|
-
manifest = Slinky::Manifest.new("/src", @config, :devel => false, :build_to => "/build")
|
241
|
-
$stderr.should_receive(:puts).with("Dependencies /src/l1/test2.js -> /src/l1/test.js, /src/l1/test5.js -> /src/l1/test2.js, /src/l1/test.js -> /src/l1/test5.js could not be satisfied".foreground(:red))
|
242
|
-
proc { manifest.dependency_list }.should raise_error Slinky::DependencyError
|
243
|
-
end
|
244
|
-
|
245
|
-
it "should handle depends directives" do
|
246
|
-
File.open("/src/l1/test5.coffee", "w+"){|f| f.write("slinky_depends('test.sass')")}
|
247
|
-
manifest = Slinky::Manifest.new("/src", @config, :devel => true)
|
248
|
-
f = manifest.find_by_path("l1/test5.js").first
|
249
|
-
f.should_not == nil
|
250
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/l1\/test.sass/)
|
251
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/l1\/test5.coffee/)
|
252
|
-
f.process
|
253
|
-
end
|
254
|
-
|
255
|
-
it "should handle depends directives with glob patterns" do
|
256
|
-
File.open("/src/l1/test5.coffee", "w+"){|f| f.write("slinky_depends('*.sass')")}
|
257
|
-
File.open("/src/l1/test2.sass", "w+"){|f| f.write("body\n\tcolor: red")}
|
258
|
-
manifest = Slinky::Manifest.new("/src", @config, :devel => true)
|
259
|
-
f = manifest.find_by_path("l1/test5.js").first
|
260
|
-
f.should_not == nil
|
261
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/l1\/test.sass/)
|
262
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/l1\/test2.sass/)
|
263
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/l1\/test5.coffee/)
|
264
|
-
f.process
|
265
|
-
end
|
266
|
-
|
267
|
-
it "should handle depends directives with infinite loops" do
|
268
|
-
File.open("/src/l1/test5.coffee", "w+"){|f| f.write("slinky_depends('*.sass')")}
|
269
|
-
File.open("/src/l1/test2.sass", "w+"){|f| f.write("/* slinky_depends('*.coffee')")}
|
270
|
-
manifest = Slinky::Manifest.new("/src", @config, :devel => true)
|
271
|
-
f = manifest.find_by_path("l1/test5.js").first
|
272
|
-
f.should_not == nil
|
273
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/l1\/test.sass/)
|
274
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/l1\/test2.sass/)
|
275
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/l1\/test5.coffee/)
|
276
|
-
f.process
|
277
|
-
end
|
278
|
-
|
279
|
-
it "should cache files" do
|
280
|
-
File.open("/src/l1/cache.coffee", "w+"){|f| f.write("() -> 'hello, world!'\n")}
|
281
|
-
manifest = Slinky::Manifest.new("/src", @config, :devel => true)
|
282
|
-
f = manifest.find_by_path("l1/cache.js").first
|
283
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/l1\/cache.coffee/)
|
284
|
-
f.process
|
285
|
-
f.process
|
286
|
-
File.open("/src/l1/cache.coffee", "a"){|f| f.write("() -> 'goodbye, world!'\n")}
|
287
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/l1\/cache.coffee/)
|
288
|
-
f.process
|
289
|
-
end
|
290
|
-
|
291
|
-
it "should handle new directives" do
|
292
|
-
manifest = Slinky::Manifest.new("/src", @config, :devel => true)
|
293
|
-
f = manifest.find_by_path("l1/test.js").first
|
294
|
-
f.process
|
295
|
-
f.directives.should == {:slinky_require=>["test2.js", "l2/test3.js"]}
|
296
|
-
File.open("/src/l1/test.js", "a"){|f| f.write("slinky_require('test5.js')\n")}
|
297
|
-
f.process
|
298
|
-
f.directives.should == {:slinky_require=>["test2.js", "l2/test3.js", "test5.js"]}
|
299
|
-
end
|
300
|
-
|
301
|
-
it "should detect new files" do
|
302
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/test.haml/)
|
303
|
-
manifest = Slinky::Manifest.new("/src", @config, :devel => true)
|
304
|
-
File.open("/src/l1/cache.coffee", "w+"){|f| f.write("console.log 'hello'")}
|
305
|
-
manifest.add_all_by_path(["/src/l1/cache.coffee"])
|
306
|
-
f = manifest.find_by_path("l1/cache.js").first
|
307
|
-
f.should_not == nil
|
308
|
-
manifest.scripts_string.match("cache.js").should_not == nil
|
309
|
-
FileUtils.mkdir("/src/l1/hello")
|
310
|
-
File.open("/src/l1/hello/asdf.sass", "w+"){|f| f.write("hello")}
|
311
|
-
f = manifest.find_by_path("l1/hello/asdf.sass")
|
312
|
-
f.should_not == nil
|
313
|
-
end
|
314
|
-
|
315
|
-
it "should handle deletion of files" do
|
316
|
-
File.open("/src/l1/cache.coffee", "w+"){|f| f.write("console.log 'hello'")}
|
317
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/test.haml/)
|
318
|
-
manifest = Slinky::Manifest.new("/src", @config, :devel => true)
|
319
|
-
f = manifest.find_by_path("l1/cache.coffee").first
|
320
|
-
f.should_not == nil
|
321
|
-
manifest.scripts_string.match("l1/cache.js").should_not == nil
|
322
|
-
|
323
|
-
FileUtils.rm("/src/l1/cache.coffee")
|
324
|
-
File.exists?("/src/l1/cache.coffee").should == false
|
325
|
-
manifest.remove_all_by_path(["/src/l1/cache.coffee"])
|
326
|
-
f = manifest.find_by_path("l1/cache.coffee").first
|
327
|
-
f.should == nil
|
328
|
-
manifest.scripts_string.match("l1/cache.js").should == nil
|
329
|
-
end
|
330
|
-
|
331
|
-
it "should ignore the build directory" do
|
332
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/.+/).exactly(6).times
|
333
|
-
options = {:src_dir => "/src", :build_dir => "/src/build"}
|
334
|
-
Slinky::Builder.build(options, @config)
|
335
|
-
File.exists?("/src/build/build").should_not == true
|
336
|
-
File.exists?("/src/build/test.html").should == true
|
337
|
-
Slinky::Builder.build(options, @config)
|
338
|
-
File.exists?("/src/build/build").should == false
|
339
|
-
end
|
340
|
-
|
341
|
-
it "should combine and compress javascript" do
|
342
|
-
FileUtils.rm_rf("/build") rescue nil
|
343
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/.+/).exactly(3).times
|
344
|
-
@mprod.build
|
345
|
-
File.exists?("/build/scripts.js").should == true
|
346
|
-
File.size("/build/scripts.js").should > 90
|
347
|
-
File.read("/build/scripts.js").match('"Hello, world"').should_not == nil
|
348
|
-
File.exists?("/build/l1/test.js").should == false
|
349
|
-
end
|
350
|
-
|
351
|
-
it "should combine and compress css" do
|
352
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/.+/).exactly(3).times
|
353
|
-
@mprod.build
|
354
|
-
File.exists?("/build/styles.css").should == true
|
355
|
-
File.size("/build/styles.css").should > 25
|
356
|
-
File.read("/build/styles.css").match(/color:\s*red/).should_not == nil
|
357
|
-
File.exists?("/build/l1/test.css").should == false
|
358
|
-
end
|
359
|
-
|
360
|
-
it "should modify css urls to point to correct paths when compiled" do
|
361
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/.+/).exactly(3).times
|
362
|
-
@mprod.build
|
363
|
-
css = File.read("/build/styles.css")
|
364
|
-
css.include?("url('/l1/asdf.png')").should == true
|
365
|
-
css.include?("url('/l1/bg.png')").should == true
|
366
|
-
css.include?("url('/l1/l2/l3/hello.png')").should == true
|
367
|
-
end
|
368
|
-
|
369
|
-
it "should properly filter out ignores in files list" do
|
370
|
-
config = Slinky::ConfigReader.new("ignore:\n - /l1/test2.js")
|
371
|
-
config.ignore.should == ["/l1/test2.js"]
|
372
|
-
mdevel = Slinky::Manifest.new("/src", config)
|
373
|
-
mfiles = mdevel.files(false).map{|x| x.source}.sort
|
374
|
-
files = (@files - ["l1/test2.js"]).map{|x| "/src/" + x}.sort
|
375
|
-
mfiles.should == files
|
376
|
-
# double check
|
377
|
-
mfiles.include?("/src/l1/test2.js").should == false
|
378
|
-
end
|
379
|
-
|
380
|
-
it "should properly filter out relative ignores in files list" do
|
381
|
-
config = Slinky::ConfigReader.new("ignore:\n - l1/test2.js")
|
382
|
-
config.ignore.should == ["l1/test2.js"]
|
383
|
-
mdevel = Slinky::Manifest.new("/src", config)
|
384
|
-
mfiles = mdevel.files(false).map{|x| x.source}.sort
|
385
|
-
files = (@files - ["l1/test2.js"]).map{|x| "/src/" + x}.sort
|
386
|
-
mfiles.should == files
|
387
|
-
# double check
|
388
|
-
mfiles.include?("/src/l1/test2.js").should == false
|
389
|
-
end
|
390
|
-
|
391
|
-
it "should properly filter out directory ignores in files list" do
|
392
|
-
config = Slinky::ConfigReader.new("ignore:\n - /l1/l2")
|
393
|
-
config.ignore.should == ["/l1/l2"]
|
394
|
-
mdevel = Slinky::Manifest.new("/src", config)
|
395
|
-
mfiles = mdevel.files(false).map{|x| x.source}.sort
|
396
|
-
files = (@files.reject{|x| x.start_with?("l1/l2")}).map{|x| "/src/" + x}.sort
|
397
|
-
mfiles.should == files
|
398
|
-
end
|
399
|
-
|
400
|
-
it "should properly handle ignores for scripts" do
|
401
|
-
File.open("/src/l1/l2/ignore.js", "w+"){|f| f.write("IGNORE!!!")}
|
402
|
-
config = Slinky::ConfigReader.new("ignore:\n - /l1/l2/ignore.js")
|
403
|
-
config.ignore.should == ["/l1/l2/ignore.js"]
|
404
|
-
|
405
|
-
mdevel = Slinky::Manifest.new("/src", config)
|
406
|
-
mdevel.scripts_string.scan(/src=\"(.+?)\"/).flatten.
|
407
|
-
include?("/l1/l2/ignore.js").should == false
|
408
|
-
|
409
|
-
mprod = Slinky::Manifest.new("/src", config, :devel => false,
|
410
|
-
:build_to => "/build")
|
411
|
-
|
412
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/.+/).exactly(3).times
|
413
|
-
mprod.build
|
414
|
-
|
415
|
-
File.read("/build/scripts.js").include?("IGNORE!!!").should == false
|
416
|
-
File.exists?("/build/l1/l2/ignore.js").should == true
|
417
|
-
end
|
418
|
-
|
419
|
-
it "should properly handle ignores for styles" do
|
420
|
-
File.open("/src/l1/l2/ignore.css", "w+"){|f| f.write("IGNORE!!!")}
|
421
|
-
config = Slinky::ConfigReader.new("ignore:\n - /l1/l2/ignore.css")
|
422
|
-
config.ignore.should == ["/l1/l2/ignore.css"]
|
423
|
-
|
424
|
-
mdevel = Slinky::Manifest.new("/src", config)
|
425
|
-
mdevel.styles_string.scan(/href=\"(.+?)\"/).flatten.
|
426
|
-
include?("/l1/l2/ignore.css").should == false
|
427
|
-
|
428
|
-
mprod = Slinky::Manifest.new("/src", config, :devel => false,
|
429
|
-
:build_to => "/build")
|
430
|
-
|
431
|
-
$stdout.should_receive(:puts).with(/Compiled \/src\/.+/).exactly(3).times
|
432
|
-
mprod.build
|
433
|
-
|
434
|
-
File.read("/build/styles.css").include?("IGNORE!!!").should == false
|
435
|
-
File.exists?("/build/l1/l2/ignore.css").should == true
|
436
|
-
end
|
437
|
-
end
|
438
|
-
|
439
19
|
context "Server" do
|
440
20
|
before :each do
|
441
21
|
@resp = double("EventMachine::DelegatedHttpResponse")
|
@@ -549,7 +129,7 @@ eos
|
|
549
129
|
it "should not crash for syntax errors" do
|
550
130
|
File.open("/src/bad_file.haml", "w+"){|f| f.write("%head{") }
|
551
131
|
mf = Slinky::ManifestFile.new("/src/bad_file.haml", nil, @mdevel)
|
552
|
-
$stderr.should_receive(:puts).with(/
|
132
|
+
$stderr.should_receive(:puts).with(/Compilation failed/)
|
553
133
|
@resp.should_receive(:status=).with(500)
|
554
134
|
Slinky::Server.handle_file @resp, mf
|
555
135
|
end
|
@@ -593,6 +173,7 @@ eos
|
|
593
173
|
before :each do
|
594
174
|
@compilation_subs = {".sass" => ".css", ".coffee" => ".js", ".haml" => ".html"}
|
595
175
|
end
|
176
|
+
|
596
177
|
it "should build manifest to build directory" do
|
597
178
|
$stdout.should_receive(:puts).with(/Compiled \/src\/.+/).exactly(3).times
|
598
179
|
options = {:src_dir => "/src", :build_dir => "/build"}
|
@@ -622,6 +203,13 @@ dont_minify: true
|
|
622
203
|
pushstate:
|
623
204
|
"/app1": "/index.html"
|
624
205
|
"/app2": "/index2.html"
|
206
|
+
produce:
|
207
|
+
"/scripts.js":
|
208
|
+
include:
|
209
|
+
- "**/src/*.js"
|
210
|
+
"/tests.js":
|
211
|
+
include:
|
212
|
+
- "**/test/*.js "
|
625
213
|
eos
|
626
214
|
File.open("/src/slinky.yaml", "w+"){|f| f.write @config}
|
627
215
|
@proxies = {
|