smart_asset 0.5.4 → 0.5.5

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.
Files changed (36) hide show
  1. data/.gitignore +10 -0
  2. data/Gemfile +3 -0
  3. data/LICENSE +2 -2
  4. data/Rakefile +1 -0
  5. data/bin/smart_asset +1 -1
  6. data/lib/smart_asset.rb +2 -6
  7. data/lib/smart_asset/adapters/stasis.rb +43 -0
  8. data/smart_asset.gemspec +25 -0
  9. data/spec/fixtures/all_frameworks/assets.yml +20 -0
  10. data/spec/fixtures/all_frameworks/test.html.erb +3 -0
  11. data/spec/fixtures/assets.yml +27 -0
  12. data/spec/fixtures/assets/javascripts/jquery/jquery.js +7179 -0
  13. data/spec/fixtures/assets/javascripts/underscore.js +722 -0
  14. data/spec/fixtures/assets/stylesheets/960.css +648 -0
  15. data/spec/fixtures/assets/stylesheets/blueprint/blueprint.css +265 -0
  16. data/spec/fixtures/development_output.txt +5 -0
  17. data/spec/fixtures/frameworks.yml +32 -0
  18. data/spec/fixtures/production_output.txt +3 -0
  19. data/spec/fixtures/rails2/application_controller.rb +17 -0
  20. data/spec/fixtures/rails2/environment.rb +42 -0
  21. data/spec/fixtures/rails2/init.rb +1 -0
  22. data/spec/fixtures/rails2/routes.rb +47 -0
  23. data/spec/fixtures/rails3/Gemfile +34 -0
  24. data/spec/fixtures/rails3/application.rb +47 -0
  25. data/spec/fixtures/rails3/application_controller.rb +11 -0
  26. data/spec/fixtures/rails3/routes.rb +61 -0
  27. data/spec/fixtures/sinatra/application.rb +19 -0
  28. data/spec/run +39 -0
  29. data/spec/smart_asset/adapters/rails2_spec.rb +46 -0
  30. data/spec/smart_asset/adapters/rails3_spec.rb +46 -0
  31. data/spec/smart_asset/adapters/sinatra_spec.rb +47 -0
  32. data/spec/smart_asset_spec.rb +403 -0
  33. data/spec/spec_helper.rb +27 -0
  34. metadata +113 -59
  35. data/lib/smart_asset/gems.rb +0 -45
  36. data/lib/smart_asset/version.rb +0 -3
@@ -0,0 +1,47 @@
1
+ require File.expand_path('../boot', __FILE__)
2
+
3
+ # Pick the frameworks you want:
4
+ # require "active_record/railtie"
5
+ require "action_controller/railtie"
6
+ require "action_mailer/railtie"
7
+ require "active_resource/railtie"
8
+ require "rails/test_unit/railtie"
9
+
10
+ # If you have a Gemfile, require the gems listed there, including any gems
11
+ # you've limited to :test, :development, or :production.
12
+ Bundler.require(:default, Rails.env) if defined?(Bundler)
13
+
14
+ module Rails3
15
+ class Application < Rails::Application
16
+ # Settings in config/environments/* take precedence over those specified here.
17
+ # Application configuration should go into files in config/initializers
18
+ # -- all .rb files in that directory are automatically loaded.
19
+
20
+ # Custom directories with classes and modules you want to be autoloadable.
21
+ # config.autoload_paths += %W(#{config.root}/extras)
22
+
23
+ # Only load the plugins named here, in the order given (default is alphabetical).
24
+ # :all can be used as a placeholder for all plugins not explicitly named.
25
+ # config.plugins = [ :exception_notification, :ssl_requirement, :all ]
26
+
27
+ # Activate observers that should always be running.
28
+ # config.active_record.observers = :cacher, :garbage_collector, :forum_observer
29
+
30
+ # Set Time.zone default to the specified zone and make Active Record auto-convert to this zone.
31
+ # Run "rake -D time" for a list of tasks for finding time zone names. Default is UTC.
32
+ # config.time_zone = 'Central Time (US & Canada)'
33
+
34
+ # The default locale is :en and all translations from config/locales/*.rb,yml are auto loaded.
35
+ # config.i18n.load_path += Dir[Rails.root.join('my', 'locales', '*.{rb,yml}').to_s]
36
+ # config.i18n.default_locale = :de
37
+
38
+ # JavaScript files you want as :defaults (application.js is always included).
39
+ # config.action_view.javascript_expansions[:defaults] = %w(jquery rails)
40
+
41
+ # Configure the default encoding used in templates for Ruby 1.9.
42
+ config.encoding = "utf-8"
43
+
44
+ # Configure sensitive parameters which will be filtered from the log file.
45
+ config.filter_parameters += [:password]
46
+ end
47
+ end
@@ -0,0 +1,11 @@
1
+ class ApplicationController < ActionController::Base
2
+ protect_from_forgery
3
+
4
+ def pulse
5
+ render :text => '1'
6
+ end
7
+
8
+ def test
9
+ render :layout => false
10
+ end
11
+ end
@@ -0,0 +1,61 @@
1
+ Rails3::Application.routes.draw do
2
+ # The priority is based upon order of creation:
3
+ # first created -> highest priority.
4
+
5
+ # Sample of regular route:
6
+ # match 'products/:id' => 'catalog#view'
7
+ # Keep in mind you can assign values other than :controller and :action
8
+
9
+ # Sample of named route:
10
+ # match 'products/:id/purchase' => 'catalog#purchase', :as => :purchase
11
+ # This route can be invoked with purchase_url(:id => product.id)
12
+
13
+ # Sample resource route (maps HTTP verbs to controller actions automatically):
14
+ # resources :products
15
+
16
+ # Sample resource route with options:
17
+ # resources :products do
18
+ # member do
19
+ # get 'short'
20
+ # post 'toggle'
21
+ # end
22
+ #
23
+ # collection do
24
+ # get 'sold'
25
+ # end
26
+ # end
27
+
28
+ # Sample resource route with sub-resources:
29
+ # resources :products do
30
+ # resources :comments, :sales
31
+ # resource :seller
32
+ # end
33
+
34
+ # Sample resource route with more complex sub-resources
35
+ # resources :products do
36
+ # resources :comments
37
+ # resources :sales do
38
+ # get 'recent', :on => :collection
39
+ # end
40
+ # end
41
+
42
+ # Sample resource route within a namespace:
43
+ # namespace :admin do
44
+ # # Directs /admin/products/* to Admin::ProductsController
45
+ # # (app/controllers/admin/products_controller.rb)
46
+ # resources :products
47
+ # end
48
+
49
+ # You can have the root of your site routed with "root"
50
+ # just remember to delete public/index.html.
51
+ # root :to => "welcome#index"
52
+
53
+ # See how all your routes lay out with "rake routes"
54
+
55
+ # This is a legacy wild controller route that's not recommended for RESTful applications.
56
+ # Note: This route will make all actions in every controller accessible via GET requests.
57
+ # match ':controller(/:action(/:id(.:format)))'
58
+
59
+ match 'pulse' => 'application#pulse'
60
+ match 'test' => 'application#test'
61
+ end
@@ -0,0 +1,19 @@
1
+ require 'erb'
2
+ require 'sinatra/base'
3
+ require 'smart_asset'
4
+
5
+ class Application < Sinatra::Base
6
+
7
+ set :app_file, __FILE__
8
+ set :views, File.dirname(__FILE__)
9
+
10
+ include SmartAsset::Adapters::Sinatra
11
+
12
+ get '/pulse' do
13
+ '1'
14
+ end
15
+
16
+ get '/test' do
17
+ erb :'test.html'
18
+ end
19
+ end
data/spec/run ADDED
@@ -0,0 +1,39 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ system "spec -f n -c spec"
4
+
5
+ puts "\n"
6
+
7
+ ENV['RAILS'] = '2'
8
+ ENV['RAILS_ENV'] = 'development'
9
+ system "spec -f n -c spec"
10
+
11
+ puts "\n"
12
+
13
+ ENV['RAILS_ENV'] = 'production'
14
+ system "spec -f n -c spec"
15
+
16
+ puts "\n"
17
+
18
+ ENV['RAILS'] = '3'
19
+ ENV['RAILS_ENV'] = 'development'
20
+ system "spec -f n -c spec"
21
+
22
+ puts "\n"
23
+
24
+ ENV['RAILS_ENV'] = 'production'
25
+ system "spec -f n -c spec"
26
+
27
+ ENV.delete 'RAILS'
28
+ ENV.delete 'RAILS_ENV'
29
+
30
+ puts "\n"
31
+
32
+ ENV['SINATRA'] = '1'
33
+ ENV['RACK_ENV'] = 'development'
34
+ system "spec -f n -c spec"
35
+
36
+ puts "\n"
37
+
38
+ ENV['RACK_ENV'] = 'production'
39
+ system "spec -f n -c spec"
@@ -0,0 +1,46 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
+
3
+ if FrameworkFixture.rails == '<3'
4
+ describe 'Rails 2' do
5
+
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ FrameworkFixture.app.call
10
+ end
11
+
12
+ before(:all) do
13
+ assets = "#{$root}/spec/fixtures/assets"
14
+ pub = "#{$root}/spec/fixtures/builds/rails2/public"
15
+ FileUtils.rm_rf "#{pub}/packaged"
16
+ FileUtils.cp_r "#{assets}/compressed", "#{pub}/packaged"
17
+ FileUtils.rm_rf "#{pub}/javascripts"
18
+ FileUtils.cp_r "#{assets}/javascripts", "#{pub}/javascripts"
19
+ FileUtils.rm_rf "#{pub}/stylesheets"
20
+ FileUtils.cp_r "#{assets}/stylesheets", "#{pub}/stylesheets"
21
+ end
22
+
23
+ it "should have a pulse" do
24
+ get "/pulse"
25
+ last_response.body.should == '1'
26
+ end
27
+
28
+ if Rails.env == 'development'
29
+ describe :development do
30
+ it "should execute helpers correctly" do
31
+ get "/test"
32
+ last_response.body.should == File.read("#{$root}/spec/fixtures/development_output.txt")
33
+ end
34
+ end
35
+ end
36
+
37
+ if Rails.env == 'production'
38
+ describe :production do
39
+ it "should execute helpers correctly" do
40
+ get "/test"
41
+ last_response.body.should == File.read("#{$root}/spec/fixtures/production_output.txt")
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,46 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
+
3
+ if FrameworkFixture.rails == '<4'
4
+ describe 'Rails 3' do
5
+
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ FrameworkFixture.app.call
10
+ end
11
+
12
+ before(:all) do
13
+ assets = "#{$root}/spec/fixtures/assets"
14
+ pub = "#{$root}/spec/fixtures/builds/rails3/public"
15
+ FileUtils.rm_rf "#{pub}/packaged"
16
+ FileUtils.cp_r "#{assets}/compressed", "#{pub}/packaged"
17
+ FileUtils.rm_rf "#{pub}/javascripts"
18
+ FileUtils.cp_r "#{assets}/javascripts", "#{pub}/javascripts"
19
+ FileUtils.rm_rf "#{pub}/stylesheets"
20
+ FileUtils.cp_r "#{assets}/stylesheets", "#{pub}/stylesheets"
21
+ end
22
+
23
+ it "should have a pulse" do
24
+ get "/pulse"
25
+ last_response.body.should == '1'
26
+ end
27
+
28
+ if Rails.env == 'development'
29
+ describe :development do
30
+ it "should execute helpers correctly" do
31
+ get "/test"
32
+ last_response.body.should == File.read("#{$root}/spec/fixtures/development_output.txt")
33
+ end
34
+ end
35
+ end
36
+
37
+ if Rails.env == 'production'
38
+ describe :production do
39
+ it "should execute helpers correctly" do
40
+ get "/test"
41
+ last_response.body.should == File.read("#{$root}/spec/fixtures/production_output.txt")
42
+ end
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,47 @@
1
+ require File.expand_path("#{File.dirname(__FILE__)}/../../spec_helper")
2
+
3
+ if FrameworkFixture.sinatra
4
+ describe 'Sinatra' do
5
+
6
+ include Rack::Test::Methods
7
+
8
+ def app
9
+ FrameworkFixture.app.call
10
+ end
11
+
12
+ before(:all) do
13
+ assets = "#{$root}/spec/fixtures/assets"
14
+ pub = "#{$root}/spec/fixtures/builds/sinatra#{FrameworkFixture.exact_version[0..0]}/public"
15
+ FileUtils.mkdir_p pub
16
+ FileUtils.rm_rf "#{pub}/packaged"
17
+ FileUtils.cp_r "#{assets}/compressed", "#{pub}/packaged"
18
+ FileUtils.rm_rf "#{pub}/javascripts"
19
+ FileUtils.cp_r "#{assets}/javascripts", "#{pub}/javascripts"
20
+ FileUtils.rm_rf "#{pub}/stylesheets"
21
+ FileUtils.cp_r "#{assets}/stylesheets", "#{pub}/stylesheets"
22
+ end
23
+
24
+ it "should have a pulse" do
25
+ get "/pulse"
26
+ last_response.body.should == '1'
27
+ end
28
+
29
+ if Sinatra::Base.environment == :development
30
+ describe :development do
31
+ it "should execute helpers correctly" do
32
+ get "/test"
33
+ last_response.body.should == File.read("#{$root}/spec/fixtures/development_output.txt")
34
+ end
35
+ end
36
+ end
37
+
38
+ if Sinatra::Base.environment == :production
39
+ describe :production do
40
+ it "should execute helpers correctly" do
41
+ get "/test"
42
+ last_response.body.should == File.read("#{$root}/spec/fixtures/production_output.txt")
43
+ end
44
+ end
45
+ end
46
+ end
47
+ end
@@ -0,0 +1,403 @@
1
+ require 'spec_helper'
2
+
3
+ unless FrameworkFixture.framework
4
+ describe SmartAsset do
5
+
6
+ include SmartAsset::Helper
7
+
8
+ before(:all) do
9
+ @config = "spec/fixtures/assets.yml"
10
+ @dest = "#{$root}/spec/fixtures/assets/compressed"
11
+ @files = %w(
12
+ package.css
13
+ package.js
14
+ )
15
+ @versions = %w(
16
+ 4c0f7deb
17
+ 1042e864
18
+ )
19
+ end
20
+
21
+ describe :load_config do
22
+
23
+ before(:all) do
24
+ SmartAsset.env = 'development'
25
+ SmartAsset.load_config($root, @config)
26
+ end
27
+
28
+ it "should populate @root" do
29
+ SmartAsset.root.should == $root
30
+ end
31
+
32
+ it "should populate @config" do
33
+ SmartAsset.config.should == {
34
+ "append_random"=>{"development"=>true},
35
+ "asset_host_count"=>2,
36
+ "asset_host"=>{"production"=>"http://assets%d.host.com"},
37
+ "destination"=>{"javascripts"=>"compressed", "stylesheets"=>"compressed"},
38
+ "environments"=>["production"],
39
+ "public"=>"spec/fixtures/assets",
40
+ "sources"=>{"javascripts"=>"javascripts", "stylesheets"=>"stylesheets"},
41
+ "javascripts"=>
42
+ {"package"=>["jquery/jquery", "underscore", "does_not_exist"],
43
+ "empty_package"=>nil,
44
+ "non_existent_package"=>["does_not_exist"]},
45
+ "stylesheets"=>
46
+ {"package"=>["blueprint/blueprint", 960, "does_not_exist"],
47
+ "empty_package"=>nil,
48
+ "non_existent_package"=>["does_not_exist"]}}
49
+ end
50
+
51
+ it "should populate @append_random" do
52
+ SmartAsset.append_random.should == true
53
+ end
54
+
55
+ it "should populate @asset_host" do
56
+ SmartAsset.asset_host.should == {"production"=>"http://assets%d.host.com"}
57
+ end
58
+
59
+ it "should populate @dest" do
60
+ SmartAsset.dest.should == {
61
+ 'javascripts' => "#{$root}/spec/fixtures/assets/compressed",
62
+ 'stylesheets' => "#{$root}/spec/fixtures/assets/compressed"
63
+ }
64
+ end
65
+
66
+ it "should populate @envs" do
67
+ SmartAsset.envs.should == ["production"]
68
+ end
69
+
70
+ it "should populate @pub" do
71
+ SmartAsset.pub.should == "#{$root}/spec/fixtures/assets"
72
+ end
73
+
74
+ it "should populate @root" do
75
+ SmartAsset.root.should == $root
76
+ end
77
+
78
+ it "should populate @sources" do
79
+ SmartAsset.sources.should == {"javascripts"=>"javascripts", "stylesheets"=>"stylesheets"}
80
+ end
81
+ end
82
+
83
+ describe :binary do
84
+ describe 'no compressed assets' do
85
+
86
+ before(:all) do
87
+ FileUtils.rm_rf(@dest) unless ENV['FAST']
88
+ @output = capture_stdout do
89
+ SmartAsset.binary $root, @config
90
+ end
91
+ end
92
+
93
+ it "should generate correct filenames" do
94
+ @files.each_with_index do |file, i|
95
+ File.exists?("#{@dest}/#{@versions[i]}_#{file}").should == true
96
+ end
97
+ Dir["#{@dest}/*.{js,css}"].length.should == @files.length
98
+ end
99
+
100
+ it "should create package files with content" do
101
+ @files.each_with_index do |file, i|
102
+ File.size(path = "#{@dest}/#{@versions[i]}_#{file}").should > 0
103
+ if i == 0
104
+ css = File.read(path)
105
+ css.index('.error').should < css.index('.container_12')
106
+ css.include?('.error').should == true
107
+ css.include?('.container_12').should == true
108
+ else
109
+ js = File.read(path)
110
+ js.index('jQuery').should < js.index('VERSION')
111
+ js.include?('jQuery').should == true
112
+ js.include?('VERSION').should == true
113
+ end
114
+ end
115
+ end
116
+
117
+ unless ENV['FAST']
118
+ it "should run all files through the compressor" do
119
+ @files.each do |file|
120
+ @output.string.include?(file).should == true
121
+ end
122
+ end
123
+ end
124
+
125
+ it "should fix YUI compression issue" do
126
+ File.read("#{@dest}/#{@versions[0]}_#{@files[0]}").include?("screen and (").should == true
127
+ end
128
+ end
129
+
130
+ describe 'one version out of date' do
131
+
132
+ before(:all) do
133
+ unless ENV['FAST']
134
+ FileUtils.mv "#{@dest}/#{@versions[0]}_#{@files[0]}", "#{@dest}/00000000_#{@files[0]}"
135
+ end
136
+ @output = capture_stdout do
137
+ SmartAsset.binary $root, @config
138
+ end
139
+ end
140
+
141
+ it "should generate correct filenames" do
142
+ @files.each_with_index do |file, i|
143
+ File.exists?("#{@dest}/#{@versions[i]}_#{file}").should == true
144
+ end
145
+ Dir["#{@dest}/*.{js,css}"].length.should == @files.length
146
+ end
147
+
148
+ it "should create package files with content" do
149
+ @files.each_with_index do |file, i|
150
+ File.size(path = "#{@dest}/#{@versions[i]}_#{file}").should > 0
151
+ if i == 0
152
+ css = File.read(path)
153
+ css.index('.error').should < css.index('.container_12')
154
+ css.include?('.error').should == true
155
+ css.include?('.container_12').should == true
156
+ else
157
+ js = File.read(path)
158
+ js.index('jQuery').should < js.index('VERSION')
159
+ js.include?('jQuery').should == true
160
+ js.include?('VERSION').should == true
161
+ end
162
+ end
163
+ end
164
+
165
+ it "should remove old version" do
166
+ Dir["#{@dest}/*.css"].length.should == 1
167
+ end
168
+
169
+ unless ENV['FAST']
170
+ it "should run updated file through the compressor" do
171
+ @files.each_with_index do |file, i|
172
+ @output.string.include?(file).should == (i == 0 ? true : false)
173
+ end
174
+ end
175
+ end
176
+ end
177
+
178
+ unless ENV['FAST']
179
+ describe 'package changed' do
180
+
181
+ before(:all) do
182
+ @package_config = SmartAsset.config['javascripts']['package']
183
+ @old_package_path = "#{@dest}/#{@versions[1]}_#{@files[1]}"
184
+ @old_package = File.read(@old_package_path)
185
+ end
186
+
187
+ after(:all) do
188
+ File.open(@old_package_path, 'w') { |f| f.write(@old_package) }
189
+ end
190
+
191
+ after(:each) do
192
+ SmartAsset.config['javascripts']['package'] = @package_config
193
+ end
194
+
195
+ describe 'package order changed' do
196
+
197
+ before(:all) do
198
+ SmartAsset.config['javascripts']['package'].delete 'underscore'
199
+ SmartAsset.config['javascripts']['package'].unshift 'underscore'
200
+ @output = capture_stdout do
201
+ SmartAsset.compress 'javascripts'
202
+ end
203
+ end
204
+
205
+ it "should rewrite javascript package with underscore code first" do
206
+ File.size(path = "#{@dest}/91d1e5c5_#{@files[1]}").should > 0
207
+ js = File.read(path)
208
+ js.index('jQuery').should > js.index('VERSION')
209
+ js.include?('jQuery').should == true
210
+ js.include?('VERSION').should == true
211
+ end
212
+
213
+ it "should run updated file through the compressor" do
214
+ @files.each_with_index do |file, i|
215
+ @output.string.include?(file).should == (i == 1 ? true : false)
216
+ end
217
+ end
218
+
219
+ it "should remove old version" do
220
+ Dir["#{@dest}/*.js"].length.should == 1
221
+ end
222
+ end
223
+
224
+ describe 'package child removed' do
225
+
226
+ before(:all) do
227
+ SmartAsset.config['javascripts']['package'].delete 'underscore'
228
+ @output = capture_stdout do
229
+ SmartAsset.compress 'javascripts'
230
+ end
231
+ end
232
+
233
+ it "should rewrite javascript package with only jquery" do
234
+ File.size(path = "#{@dest}/b00ce510_#{@files[1]}").should > 0
235
+ js = File.read(path)
236
+ js.include?('jQuery').should == true
237
+ js.include?('VERSION').should == false
238
+ end
239
+
240
+ it "should run updated file through the compressor" do
241
+ @files.each_with_index do |file, i|
242
+ @output.string.include?(file).should == (i == 1 ? true : false)
243
+ end
244
+ end
245
+
246
+ it "should remove old version" do
247
+ Dir["#{@dest}/*.js"].length.should == 1
248
+ end
249
+ end
250
+
251
+ describe 'package removed' do
252
+
253
+ before(:all) do
254
+ SmartAsset.config['javascripts'].delete 'package'
255
+ @output = capture_stdout do
256
+ SmartAsset.compress 'javascripts'
257
+ end
258
+ end
259
+
260
+ it "should delete the javascript package" do
261
+ Dir["#{@dest}/*.js"].length.should == 0
262
+ end
263
+ end
264
+
265
+ describe 'untracked file' do
266
+
267
+ before(:all) do
268
+ @modified = Time.parse('12-01-2010').utc
269
+ ENV['MODIFIED'] = @modified.to_s
270
+ @package = "#{@dest}/0fabe271_#{@files[1]}"
271
+ @untracked = "#{$root}/spec/fixtures/assets/javascripts/untracked.js"
272
+
273
+ File.open(@untracked, 'w') { |f| f.write("var untracked = true;") }
274
+ SmartAsset.config['javascripts']['package'] << 'untracked'
275
+
276
+ @output = capture_stdout do
277
+ SmartAsset.compress 'javascripts'
278
+ end
279
+ end
280
+
281
+ after(:all) do
282
+ ENV.delete 'MODIFIED'
283
+ FileUtils.rm @untracked
284
+ FileUtils.rm @package
285
+ end
286
+
287
+ it "should create package with default modified time" do
288
+ File.exists?(@package).should == true
289
+ end
290
+
291
+ it "should create package with untracked file" do
292
+ File.read(@package).include?('var untracked').should == true
293
+ end
294
+
295
+ it "should remove old version" do
296
+ Dir["#{@dest}/*.js"].length.should == 1
297
+ end
298
+ end
299
+ end
300
+ end
301
+ end
302
+
303
+ describe :path do
304
+
305
+ describe "development" do
306
+
307
+ before(:all) do
308
+ SmartAsset.env = 'development'
309
+ SmartAsset.load_config($root, @config)
310
+ end
311
+
312
+ it "should return development paths" do
313
+ SmartAsset.paths('javascripts', :package).should == [
314
+ "/javascripts/jquery/jquery.js",
315
+ "/javascripts/underscore.js"
316
+ ]
317
+ SmartAsset.paths('stylesheets', :package).should == [
318
+ "/stylesheets/blueprint/blueprint.css",
319
+ "/stylesheets/960.css"
320
+ ]
321
+ end
322
+
323
+ it "should leave @cache empty" do
324
+ SmartAsset.cache.should == {"javascripts"=>{}, "stylesheets"=>{}}
325
+ end
326
+ end
327
+
328
+ describe "production" do
329
+
330
+ before(:all) do
331
+ SmartAsset.env = 'production'
332
+ end
333
+
334
+ it "should return compressed paths" do
335
+ SmartAsset.paths('javascripts', :package).should == [
336
+ "/compressed/#{@versions[1]}_#{@files[1]}"
337
+ ]
338
+ SmartAsset.paths('stylesheets', :package).should == [
339
+ "/compressed/#{@versions[0]}_#{@files[0]}"
340
+ ]
341
+ end
342
+
343
+ it "should populate @cache" do
344
+ SmartAsset.cache.should == {"javascripts"=>
345
+ {"package"=>["/compressed/#{@versions[1]}_#{@files[1]}"]},
346
+ "stylesheets"=>
347
+ {"package"=>["/compressed/#{@versions[0]}_#{@files[0]}"]}}
348
+ end
349
+ end
350
+ end
351
+
352
+ describe :helper do
353
+ describe "production" do
354
+
355
+ before(:all) do
356
+ SmartAsset.env = 'production'
357
+ SmartAsset.asset_counter = nil
358
+ SmartAsset.load_config($root, @config)
359
+ end
360
+
361
+ before(:each) do
362
+ SmartAsset.cache = nil
363
+ end
364
+
365
+ it "should output correct script tags" do
366
+ javascript_include_merged(:package, :unknown).split("\n").should == [
367
+ "<script src=\"http://assets0.host.com/compressed/#{@versions[1]}_#{@files[1]}\"></script>"
368
+ ]
369
+ end
370
+
371
+ it "should output correct style tags" do
372
+ stylesheet_link_merged(:package, :unknown).split("\n").should == [
373
+ "<link href=\"http://assets1.host.com/compressed/#{@versions[0]}_#{@files[0]}\" media=\"screen\" rel=\"stylesheet\" />"
374
+ ]
375
+ end
376
+ end
377
+
378
+ describe "development" do
379
+
380
+ before(:all) do
381
+ SmartAsset.env = 'development'
382
+ SmartAsset.load_config($root, @config)
383
+ end
384
+
385
+ before(:each) do
386
+ SmartAsset.cache = nil
387
+ end
388
+
389
+ it "should output correct script tags for a package" do
390
+ js = javascript_include_merged(:package, :unknown).split("\n")
391
+ js[0].should =~ /<script src="\/javascripts\/jquery\/jquery\.js\?\d+"><\/script>/
392
+ js[1].should =~ /<script src="\/javascripts\/underscore\.js\?\d+"><\/script>/
393
+ end
394
+
395
+ it "should output correct style tags" do
396
+ css = stylesheet_link_merged(:package, :unknown, :media => 'print').split("\n")
397
+ css[0].should =~ /<link href="\/stylesheets\/blueprint\/blueprint\.css\?\d+" media="print" rel="stylesheet" \/>/
398
+ css[1].should =~ /<link href="\/stylesheets\/960\.css\?\d+" media="print" rel="stylesheet" \/>/
399
+ end
400
+ end
401
+ end
402
+ end
403
+ end