ymdp 0.1.6 → 0.1.7
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/History.txt +21 -0
- data/Rakefile +1 -1
- data/VERSION +1 -1
- data/lib/ymdp/application_view.rb +153 -116
- data/lib/ymdp/base.rb +22 -1
- data/lib/ymdp/compiler/domains.rb +1 -1
- data/lib/ymdp/compiler/git_helper.rb +18 -15
- data/lib/ymdp/compiler/template.rb +46 -40
- data/lib/ymdp/configuration/config.rb +3 -3
- data/lib/ymdp/processor/compressor.rb +66 -13
- data/lib/ymdp/processor/form_post.rb +2 -2
- data/lib/ymdp/processor/validator.rb +36 -16
- data/lib/ymdp/processor/w3c.rb +20 -18
- data/lib/ymdp/support/file.rb +45 -78
- data/lib/ymdp/translator/base.rb +39 -38
- data/spec/application_view_spec.rb +376 -0
- data/spec/compiler_spec.rb +49 -7
- data/spec/compiler_template_spec.rb +243 -11
- data/spec/compressor_spec.rb +123 -0
- data/spec/configuration_spec.rb +116 -3
- data/spec/file_spec.rb +103 -0
- data/spec/git_helper_spec.rb +53 -0
- data/spec/spec_helper.rb +4 -0
- data/spec/stubs.rb +42 -2
- data/spec/translator_spec.rb +317 -1
- data/spec/validator_spec.rb +171 -0
- data/spec/ymdp_base_spec.rb +40 -0
- data/ymdp.gemspec +11 -4
- metadata +11 -4
- data/lib/ymdp/helpers.rb +0 -4
- data/lib/ymdp/support/blank.rb +0 -58
data/spec/compiler_spec.rb
CHANGED
@@ -34,16 +34,22 @@ describe "Compiler" do
|
|
34
34
|
end
|
35
35
|
end
|
36
36
|
|
37
|
+
describe "log" do
|
38
|
+
it "should return output formatted with time" do
|
39
|
+
@compiler.log("Hello").should match(/Hello$/)
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
37
43
|
describe "process" do
|
38
44
|
before(:each) do
|
39
45
|
YMDP::ApplicationView.stub!(:supported_languages).and_return([])
|
40
|
-
|
41
|
-
@view_template = mock('view_template').as_null_object
|
42
|
-
YMDP::Compiler::Template::View.stub!(:new).and_return(@view_template)
|
43
|
-
@js_template = mock('js_template').as_null_object
|
44
|
-
YMDP::Compiler::Template::JavaScript.stub!(:new).and_return(@js_template)
|
45
|
-
@yrb_template = mock('yrb_template').as_null_object
|
46
|
-
YMDP::Compiler::Template::YRB.stub!(:new).and_return(@yrb_template)
|
46
|
+
|
47
|
+
# @view_template = mock('view_template').as_null_object
|
48
|
+
# YMDP::Compiler::Template::View.stub!(:new).and_return(@view_template)
|
49
|
+
# @js_template = mock('js_template').as_null_object
|
50
|
+
# YMDP::Compiler::Template::JavaScript.stub!(:new).and_return(@js_template)
|
51
|
+
# @yrb_template = mock('yrb_template').as_null_object
|
52
|
+
# YMDP::Compiler::Template::YRB.stub!(:new).and_return(@yrb_template)
|
47
53
|
|
48
54
|
Dir.stub!(:[]).and_return([])
|
49
55
|
end
|
@@ -52,9 +58,36 @@ describe "Compiler" do
|
|
52
58
|
File.should_receive(:exists?).with("#{@base_path}/servers/#{@domain}")
|
53
59
|
@compiler.process_all
|
54
60
|
end
|
61
|
+
|
62
|
+
describe "copy_images" do
|
63
|
+
it "should remove images folder" do
|
64
|
+
FileUtils.should_receive(:rm_rf).with("./app/servers/#{@domain}/assets/images")
|
65
|
+
@compiler.process_all
|
66
|
+
end
|
67
|
+
|
68
|
+
it "should create images folder" do
|
69
|
+
FileUtils.should_receive(:mkdir_p).with("./app/servers/#{@domain}/assets")
|
70
|
+
@compiler.process_all
|
71
|
+
end
|
72
|
+
|
73
|
+
it "should copy images from app to server" do
|
74
|
+
FileUtils.should_receive(:cp_r).with("./app/assets/images/", "./app/servers/#{@domain}/assets")
|
75
|
+
@compiler.process_all
|
76
|
+
end
|
77
|
+
|
78
|
+
it "should log in verbose mode" do
|
79
|
+
@compiler = YMDP::Compiler::Base.new(@domain, @git_hash, :base_path => @base_path, :server => "staging", :verbose => true)
|
80
|
+
$stdout.should_receive(:puts).with(/Moving images/)
|
81
|
+
@compiler.process_all
|
82
|
+
end
|
83
|
+
end
|
55
84
|
|
56
85
|
describe "translations" do
|
57
86
|
before(:each) do
|
87
|
+
|
88
|
+
@yrb_template = mock('yrb_template').as_null_object
|
89
|
+
YMDP::Compiler::Template::YRB.stub!(:new).and_return(@yrb_template)
|
90
|
+
|
58
91
|
@supported_languages = ["en-US", "de-DE"]
|
59
92
|
YMDP::ApplicationView.stub!(:supported_languages).and_return(@supported_languages)
|
60
93
|
end
|
@@ -102,6 +135,9 @@ describe "Compiler" do
|
|
102
135
|
before(:each) do
|
103
136
|
@files = ["./app/views/view.html.haml"]
|
104
137
|
Dir.stub!(:[]).with("./app/views/**/*").and_return(@files)
|
138
|
+
|
139
|
+
@view_template = mock('view_template').as_null_object
|
140
|
+
YMDP::Compiler::Template::View.stub!(:new).and_return(@view_template)
|
105
141
|
end
|
106
142
|
|
107
143
|
it "should run on all views in the path" do
|
@@ -125,6 +161,9 @@ describe "Compiler" do
|
|
125
161
|
before(:each) do
|
126
162
|
@files = ["./app/views/view.html.erb"]
|
127
163
|
Dir.stub!(:[]).with("./app/views/**/*").and_return(@files)
|
164
|
+
|
165
|
+
@view_template = mock('view_template').as_null_object
|
166
|
+
YMDP::Compiler::Template::View.stub!(:new).and_return(@view_template)
|
128
167
|
end
|
129
168
|
|
130
169
|
it "should run on all views in the path" do
|
@@ -146,6 +185,9 @@ describe "Compiler" do
|
|
146
185
|
end
|
147
186
|
|
148
187
|
it "should run on all views in the path" do
|
188
|
+
@js_template = mock('js_template').as_null_object
|
189
|
+
YMDP::Compiler::Template::JavaScript.stub!(:new).and_return(@js_template)
|
190
|
+
|
149
191
|
files = ["./app/assets/javascripts/view.js"]
|
150
192
|
Dir.should_receive(:[]).with("./app/assets/**/*").and_return(files)
|
151
193
|
@compiler.process_all
|
@@ -3,23 +3,99 @@ require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
|
3
3
|
require 'compiler/base'
|
4
4
|
require 'compiler/template'
|
5
5
|
|
6
|
-
|
7
|
-
describe "Compiler" do
|
6
|
+
describe "Template" do
|
8
7
|
before(:each) do
|
8
|
+
stub_screen_io
|
9
|
+
|
9
10
|
reset_constant(:YMDP_ENV, "build")
|
10
|
-
reset_constant(:CONFIG, mock('config').as_null_object)
|
11
11
|
|
12
12
|
Application.stub!(:current_view=)
|
13
13
|
|
14
|
-
|
14
|
+
@domain = "staging"
|
15
|
+
@filename = "filename.html.haml"
|
16
|
+
@git_hash = "asjkhfasjkfhjk"
|
17
|
+
@message = "This is a commit message."
|
18
|
+
|
19
|
+
stub_yrb_configuration
|
20
|
+
|
21
|
+
stub_config
|
15
22
|
end
|
16
23
|
|
17
|
-
describe "
|
24
|
+
describe "javascript" do
|
25
|
+
before(:each) do
|
26
|
+
stub_file_utils
|
27
|
+
|
28
|
+
@filename = "filename.pres"
|
29
|
+
|
30
|
+
@params = {
|
31
|
+
:verbose => false,
|
32
|
+
:domain => @domain,
|
33
|
+
:file => @filename,
|
34
|
+
:git_hash => @git_hash,
|
35
|
+
:message => @message
|
36
|
+
}
|
37
|
+
|
38
|
+
@js_template = YMDP::Compiler::Template::YRB.new(@params)
|
39
|
+
end
|
40
|
+
|
41
|
+
it "should instantiate" do
|
42
|
+
@js_template.should_not be_nil
|
43
|
+
end
|
44
|
+
|
45
|
+
describe "build" do
|
46
|
+
before(:each) do
|
47
|
+
@file = mock('file', :write => true)
|
48
|
+
File.stub!(:open).with(/filename.json/, "w").and_return(@file)
|
49
|
+
F.stub!(:save_to_file)
|
50
|
+
end
|
51
|
+
|
52
|
+
it "should save json" do
|
53
|
+
File.stub!(:read).with("filename.pres").and_return("KEY=value")
|
54
|
+
@js_template.build.should == "{\"KEY\":\"value\"}"
|
55
|
+
end
|
56
|
+
|
57
|
+
it "should skip lines that aren't keys" do
|
58
|
+
File.stub!(:read).with("filename.pres").and_return("KEY=value\nnot a key\n")
|
59
|
+
@js_template.build.should == "{\"KEY\":\"value\"}"
|
60
|
+
end
|
61
|
+
|
62
|
+
it "should raise error for duplicate keys" do
|
63
|
+
File.stub!(:read).with("filename.pres").and_return("KEY=value\nKEY=value\n")
|
64
|
+
lambda {
|
65
|
+
@js_template.build
|
66
|
+
}.should raise_error("Duplicate key error")
|
67
|
+
end
|
68
|
+
|
69
|
+
describe "methods" do
|
70
|
+
before(:each) do
|
71
|
+
@file = mock('file', :write => true)
|
72
|
+
File.stub!(:open).with(/filename.json/, "w").and_return(@file)
|
73
|
+
F.stub!(:save_to_file)
|
74
|
+
File.stub!(:read).with("filename.pres").and_return("KEY=value")
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should return json" do
|
78
|
+
@js_template.to_json.should == "{\"KEY\":\"value\"}"
|
79
|
+
end
|
80
|
+
|
81
|
+
it "should return yaml" do
|
82
|
+
@js_template.to_yaml.should == "--- \nkey: value\n"
|
83
|
+
end
|
84
|
+
|
85
|
+
it "should validate" do
|
86
|
+
YMDP::Validator::JSON.should_receive(:validate)
|
87
|
+
@js_template.validate
|
88
|
+
end
|
89
|
+
end
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
|
94
|
+
describe "javascript" do
|
18
95
|
before(:each) do
|
19
|
-
|
20
|
-
|
21
|
-
@
|
22
|
-
@message = "This is a commit message."
|
96
|
+
stub_file_utils
|
97
|
+
|
98
|
+
@filename = "filename.js"
|
23
99
|
|
24
100
|
@params = {
|
25
101
|
:verbose => false,
|
@@ -28,12 +104,76 @@ describe "Compiler" do
|
|
28
104
|
:git_hash => @git_hash,
|
29
105
|
:message => @message
|
30
106
|
}
|
31
|
-
stub_yrb_configuration
|
32
107
|
|
108
|
+
@js_template = YMDP::Compiler::Template::JavaScript.new(@params)
|
109
|
+
end
|
110
|
+
|
111
|
+
it "should instantiate" do
|
112
|
+
@js_template.should_not be_nil
|
113
|
+
end
|
114
|
+
|
115
|
+
it "should build" do
|
116
|
+
File.stub!(:read).with("filename.js").and_return("unprocessed")
|
117
|
+
|
118
|
+
# process the contents of filename.html.erb through ERB
|
119
|
+
#
|
120
|
+
@erb = mock('erb', :result => "processed template output")
|
121
|
+
ERB.should_receive(:new).with("unprocessed", anything, anything).and_return(@erb)
|
122
|
+
|
123
|
+
F.stub!(:save_to_file).with("processed template output")
|
124
|
+
|
125
|
+
@js_template.build.should == "processed template output"
|
126
|
+
end
|
127
|
+
|
128
|
+
it "should compress" do
|
129
|
+
@config.stub!(:compress_embedded_js?).and_return(true)
|
130
|
+
|
131
|
+
# process the contents of filename.html.erb through ERB
|
132
|
+
#
|
133
|
+
@erb = mock('erb', :result => "processed template output")
|
134
|
+
ERB.should_receive(:new).with("unprocessed", anything, anything).and_return(@erb)
|
135
|
+
|
136
|
+
YMDP::Compressor::JavaScript.stub!(:compress).and_return("compressed template")
|
137
|
+
File.stub!(:read).with("filename.js").and_return("unprocessed")
|
138
|
+
|
139
|
+
F.stub!(:save_to_file)
|
140
|
+
|
141
|
+
@js_template.build.should == "compressed template"
|
142
|
+
end
|
143
|
+
end
|
144
|
+
|
145
|
+
describe "view" do
|
146
|
+
before(:each) do
|
147
|
+
@params = {
|
148
|
+
:verbose => false,
|
149
|
+
:domain => @domain,
|
150
|
+
:file => @filename,
|
151
|
+
:git_hash => @git_hash,
|
152
|
+
:message => @message
|
153
|
+
}
|
33
154
|
@view_template = YMDP::Compiler::Template::View.new(@params)
|
34
155
|
end
|
35
156
|
|
36
157
|
describe "instantiation" do
|
158
|
+
it "should raise an error if called on base" do
|
159
|
+
lambda {
|
160
|
+
@view_template = YMDP::Compiler::Template::Base.new(@params)
|
161
|
+
}.should raise_error("Define in child")
|
162
|
+
end
|
163
|
+
|
164
|
+
it "should raise an error if process_template is called from base" do
|
165
|
+
class Thing < YMDP::Compiler::Template::Base
|
166
|
+
def base_filename(filename)
|
167
|
+
filename
|
168
|
+
end
|
169
|
+
end
|
170
|
+
|
171
|
+
@thing = Thing.new(@params)
|
172
|
+
lambda {
|
173
|
+
@thing.process_template("template")
|
174
|
+
}.should raise_error("Define in child")
|
175
|
+
end
|
176
|
+
|
37
177
|
it "should instantiate" do
|
38
178
|
@view_template.should_not be_nil
|
39
179
|
end
|
@@ -65,11 +205,103 @@ describe "Compiler" do
|
|
65
205
|
end
|
66
206
|
end
|
67
207
|
|
208
|
+
describe "build" do
|
209
|
+
before(:each) do
|
210
|
+
@processed_haml = "processed haml"
|
211
|
+
stub_haml_class
|
212
|
+
|
213
|
+
YMDP::Validator::HTML.stub!(:validate)
|
214
|
+
end
|
215
|
+
|
216
|
+
it "should not build if it's a partial" do
|
217
|
+
@view_template = YMDP::Compiler::Template::View.new(@params.merge({:file => "_partial.html.haml"}))
|
218
|
+
@view_template.build.should be_nil
|
219
|
+
end
|
220
|
+
|
221
|
+
it "should get Haml when no layout exists" do
|
222
|
+
stub_file_utils
|
223
|
+
|
224
|
+
# File.exists? will return false, so no layouts exist
|
225
|
+
|
226
|
+
# read the contents of filename.html.haml
|
227
|
+
#
|
228
|
+
File.stub!(:read).with("filename.html.haml").and_return("unprocessed")
|
229
|
+
|
230
|
+
# process the contents of filename.html.haml through Haml::Engine
|
231
|
+
#
|
232
|
+
@haml = mock('haml', :render => "processed_template output")
|
233
|
+
Haml::Engine.stub!(:new).with("unprocessed", :filename=>"filename.html.haml").and_return(@haml)
|
234
|
+
|
235
|
+
@view_template.build.should == "processed_template output"
|
236
|
+
end
|
237
|
+
|
238
|
+
it "should get ERB when no layout exists" do
|
239
|
+
stub_file_utils
|
240
|
+
|
241
|
+
# File.exists? will return false, so no layouts exist
|
242
|
+
|
243
|
+
# read the contents of filename.html.haml
|
244
|
+
#
|
245
|
+
File.stub!(:read).with("filename.html.erb").and_return("unprocessed")
|
246
|
+
|
247
|
+
# process the contents of filename.html.erb through ERB
|
248
|
+
#
|
249
|
+
@erb = mock('erb', :result => "processed_template output")
|
250
|
+
ERB.should_receive(:new).with("unprocessed", anything, anything).and_return(@erb)
|
251
|
+
|
252
|
+
@view_template = YMDP::Compiler::Template::View.new(@params.merge({:file => "filename.html.erb"}))
|
253
|
+
@view_template.build.should == "processed_template output"
|
254
|
+
end
|
255
|
+
|
256
|
+
describe "haml template exists" do
|
257
|
+
it "should return processed layout" do
|
258
|
+
stub_file_utils
|
259
|
+
|
260
|
+
File.stub!(:exists?).with(/application.html.haml/).and_return(true)
|
261
|
+
|
262
|
+
# read the contents of application.html.haml
|
263
|
+
#
|
264
|
+
File.stub!(:read).with(/application.html.haml/).and_return("unprocessed layout")
|
265
|
+
|
266
|
+
# process the contents of application.html.haml through Haml::Engine
|
267
|
+
#
|
268
|
+
@layout_haml = mock('layout_haml', :render => "processed layout")
|
269
|
+
Haml::Engine.stub!(:new).with("unprocessed layout", :filename=>"./base_path//app/views/layouts/application.html.haml").and_return(@layout_haml)
|
270
|
+
|
271
|
+
# read the contents of filename.html.haml
|
272
|
+
#
|
273
|
+
File.stub!(:read).with("filename.html.haml").and_return("unprocessed")
|
274
|
+
|
275
|
+
# process the contents of filename.html.haml through Haml::Engine
|
276
|
+
#
|
277
|
+
@haml = mock('haml', :render => "processed template output")
|
278
|
+
Haml::Engine.stub!(:new).with("unprocessed", :filename=>"filename.html.haml").and_return(@haml)
|
279
|
+
|
280
|
+
@view_template.build.should == "processed layout"
|
281
|
+
end
|
282
|
+
end
|
283
|
+
end
|
284
|
+
|
68
285
|
describe "validation" do
|
69
286
|
it "should raise an error without a server" do
|
70
287
|
lambda {
|
71
288
|
@view_template = YMDP::Compiler::Template::View.new(@params.merge({:domain => "nowhere"}))
|
72
|
-
}.should raise_error
|
289
|
+
}.should raise_error("Server settings are required.")
|
290
|
+
end
|
291
|
+
|
292
|
+
it "should raise an error without a server" do
|
293
|
+
@invalid_servers = {
|
294
|
+
"staging" => {
|
295
|
+
"application_id" => "abcdefg_1"
|
296
|
+
}
|
297
|
+
}
|
298
|
+
YMDP::Base.configure do |config|
|
299
|
+
config.servers = @invalid_servers
|
300
|
+
end
|
301
|
+
|
302
|
+
lambda {
|
303
|
+
@view_template = YMDP::Compiler::Template::View.new(@params)
|
304
|
+
}.should raise_error("Server name does not exist in server settings.")
|
73
305
|
end
|
74
306
|
end
|
75
307
|
end
|
@@ -0,0 +1,123 @@
|
|
1
|
+
require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
|
2
|
+
|
3
|
+
describe "Compressor" do
|
4
|
+
before(:each) do
|
5
|
+
stub_io
|
6
|
+
end
|
7
|
+
|
8
|
+
describe "Base" do
|
9
|
+
it "should use the compressed file if it already exists" do
|
10
|
+
File.stub(:exists?).and_return(true)
|
11
|
+
@file = "compressed file"
|
12
|
+
File.stub(:read).and_return(@file)
|
13
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js").should == @file
|
14
|
+
end
|
15
|
+
|
16
|
+
describe "generate a compressed file if one doesn't exist" do
|
17
|
+
before(:each) do
|
18
|
+
File.stub!(:exists?).and_return(false, true)
|
19
|
+
end
|
20
|
+
|
21
|
+
it "should log what it's doing" do
|
22
|
+
$stdout.should_receive(:print).with(/file.js compressing . . ./)
|
23
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js")
|
24
|
+
end
|
25
|
+
|
26
|
+
it "should run the compressor" do
|
27
|
+
F.should_receive(:execute).with(/yuicompressor/, :return => true).and_return("")
|
28
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js")
|
29
|
+
end
|
30
|
+
|
31
|
+
describe "options" do
|
32
|
+
it "should set nomunge" do
|
33
|
+
F.should_receive(:execute).with(/nomunge/, :return => true).and_return("")
|
34
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js", "obfuscate" => true)
|
35
|
+
end
|
36
|
+
|
37
|
+
it "should not set nomunge" do
|
38
|
+
F.stub!(:execute).with(/yuicompressor/, :return => true).and_return("")
|
39
|
+
F.should_not_receive(:execute).with(/nomunge/, :return => true).and_return("")
|
40
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js", "obfuscate" => false)
|
41
|
+
end
|
42
|
+
|
43
|
+
it "should set verbose" do
|
44
|
+
F.should_receive(:execute).with(/verbose/, :return => true).and_return("")
|
45
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js", "verbose" => true)
|
46
|
+
end
|
47
|
+
|
48
|
+
it "should not set verbose" do
|
49
|
+
F.stub!(:execute).with(/yuicompressor/, :return => true).and_return("")
|
50
|
+
F.should_not_receive(:execute).with(/verbose/, :return => true).and_return("")
|
51
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js", "verbose" => false)
|
52
|
+
end
|
53
|
+
|
54
|
+
it "should set preserve-semi on javascript" do
|
55
|
+
F.should_receive(:execute).with(/preserve-semi/, :return => true).and_return("")
|
56
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js")
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should not set preserve-semi on css" do
|
60
|
+
F.stub!(:execute).with(/yuicompressor/, :return => true).and_return("")
|
61
|
+
F.should_not_receive(:execute).with(/preserve-semi/, :return => true).and_return("")
|
62
|
+
YMDP::Compressor::Base.compress("file.css", "type" => "css")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
|
66
|
+
describe "on errors" do
|
67
|
+
before(:each) do
|
68
|
+
F.stub!(:execute).with(/yuicompressor/, :return => true).and_return("[ERROR] 12:13: Too much fruzzlegump")
|
69
|
+
end
|
70
|
+
|
71
|
+
it "should raise an exception" do
|
72
|
+
lambda {
|
73
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js")
|
74
|
+
}.should raise_error(/JavaScript errors/)
|
75
|
+
end
|
76
|
+
|
77
|
+
it "should growl" do
|
78
|
+
@g.should_receive(:notify)
|
79
|
+
lambda {
|
80
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js")
|
81
|
+
}.should raise_error(/JavaScript errors/)
|
82
|
+
end
|
83
|
+
|
84
|
+
it "should show the source code" do
|
85
|
+
F.should_receive(:get_line_from_file).with("file.js", 12).and_return("")
|
86
|
+
lambda {
|
87
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js")
|
88
|
+
}.should raise_error(/JavaScript errors/)
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
it "should report OK" do
|
93
|
+
$stdout.should_receive(:puts).with("OK")
|
94
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js")
|
95
|
+
end
|
96
|
+
|
97
|
+
it "should raise an error if the compressed file doesn't exist" do
|
98
|
+
File.stub!(:exists?).and_return(false)
|
99
|
+
lambda {
|
100
|
+
YMDP::Compressor::Base.compress("file.js", "type" => "js")
|
101
|
+
}.should raise_error(/File does not exist/)
|
102
|
+
end
|
103
|
+
end
|
104
|
+
end
|
105
|
+
|
106
|
+
describe "JavaScript" do
|
107
|
+
it "should call Base with type js" do
|
108
|
+
File.stub(:exists?).and_return(true)
|
109
|
+
@file = "compressed file"
|
110
|
+
File.stub(:read).and_return(@file)
|
111
|
+
YMDP::Compressor::JavaScript.compress("file.js").should == @file
|
112
|
+
end
|
113
|
+
end
|
114
|
+
|
115
|
+
describe "Stylesheet" do
|
116
|
+
it "should call Base with type css" do
|
117
|
+
File.stub(:exists?).and_return(true)
|
118
|
+
@file = "compressed file"
|
119
|
+
File.stub(:read).and_return(@file)
|
120
|
+
YMDP::Compressor::Stylesheet.compress("file.css").should == @file
|
121
|
+
end
|
122
|
+
end
|
123
|
+
end
|