sinatra-assetpack 0.1.7 → 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml ADDED
@@ -0,0 +1,15 @@
1
+ ---
2
+ !binary "U0hBMQ==":
3
+ metadata.gz: !binary |-
4
+ ZmU3MmU3YTlhMzhjZDYzZGZhMzRjMTY3YTA1MjUxNTFkYzVjMGQ1Yg==
5
+ data.tar.gz: !binary |-
6
+ NTBlNDcyMGJlMzc5MmFkZjc4NzAxMTljODI1OThkMGJjOTliOWY5Nw==
7
+ !binary "U0hBNTEy":
8
+ metadata.gz: !binary |-
9
+ MjIxZWJlMzQzMmFlOGI4MTdhNmJhNDhkYTkxMjU3YWM1NzdjOTQxZTc2ZjVh
10
+ YjEzMTMyZTAyNmFhNDIzMTRhZjIyYWRiYmQ3OWIwNDZhMDljMjg1MWVhYjE0
11
+ M2UyNTRkY2U2NzQ4YWUyOWEyZmM2YmY2MjdkNWY2NTc1YTdjMmI=
12
+ data.tar.gz: !binary |-
13
+ MjFjN2EyZmQ4YjY0MWM1ZWI4OWIyMjlhNzY5MzJlNjEzMzhiOTNhNmEzM2Zl
14
+ NGY5NzBjYTgwZGI3ZTY0OTgxNDI3MzY1NDFmYWUzYTE0YTgyNWZjMDI1MDll
15
+ OTQyZDIxMWZiZjMxYTk1NWUyYmVhMTU5NGMwNTAzYTA1MjcyN2M=
checksums.yaml.gz.sig ADDED
@@ -0,0 +1 @@
1
+ v��o�������-n�eS�d��|����Fa��= g>��:Z�%���(�Z���^r�s�#�y����{�S�cr-/A�C�߯/�[J���`B��{D�YZ~M���W-':F�^���<���~؎�\nnn3�/��9MC �iTy���:}T�Qz�x}Oj�p�]*+�=����bC��J&���@�O �v)0��ɾ^�Ly���+,�-;7E�t%�_!��[_�"@���y��V�ڭ%�
data.tar.gz.sig CHANGED
@@ -1,2 +1,2 @@
1
- a(��a���xk���׭<Dr+=jӦ��|H�'{��^�v���Sz7���d<'((��[bs�:��H3�e�@,q��UZD��Π�owD���
2
- \#��D��vL䆛E��kW��7x����jʁ�����&�(��#qWcIƸ%i���[���I�?Q�!� ��}@��*@9�i��:FD�����F`6��Ha�[�|�ȿ%I�^蔝��f���&wX�� y�$��)�L��H)�*:1�?�(�v��_0
1
+ �?�g�y, ㉾�q|����U��96[�g����,�%%B�I\�?��e��?}�� �;^������5m����M�����^�ɧ�q���v�&xA�<$��*��)zK<��m���al<��@���>}�J+���Ic百ڀ-jY�
2
+ �7ɐ5�%��=�+[�-<bYM��T����GjS�����i��'2��!�
data/CONTRIBUTING.md CHANGED
@@ -18,7 +18,7 @@ Please follow theses simples steps to contribute to this project :
18
18
 
19
19
  ## Running the tests
20
20
 
21
- As simple as running the `rake` command.
21
+ As simple as running `bundle exec rake` command.
22
22
 
23
23
  The default `rake` task is `rake test`.
24
24
 
data/Gemfile.lock CHANGED
@@ -1,7 +1,8 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- sinatra-assetpack (0.1.6)
4
+ sinatra-assetpack (0.2.0)
5
+ backports
5
6
  jsmin
6
7
  rack-test
7
8
  sinatra
@@ -14,6 +15,7 @@ GEM
14
15
  Platform (>= 0.4.0)
15
16
  open4
16
17
  Platform (0.4.0)
18
+ backports (3.3.0)
17
19
  coffee-script (2.2.0)
18
20
  coffee-script-source
19
21
  execjs
@@ -30,19 +32,19 @@ GEM
30
32
  metaclass (0.0.1)
31
33
  mocha (0.13.3)
32
34
  metaclass (~> 0.0.1)
33
- multi_json (1.6.1)
35
+ multi_json (1.7.0)
34
36
  open4 (1.3.0)
35
37
  rack (1.5.2)
36
- rack-protection (1.4.0)
38
+ rack-protection (1.5.0)
37
39
  rack
38
40
  rack-test (0.6.2)
39
41
  rack (>= 1.0)
40
42
  rake (10.0.3)
41
43
  sass (3.2.7)
42
- sinatra (1.3.5)
43
- rack (~> 1.4)
44
- rack-protection (~> 1.3)
45
- tilt (~> 1.3, >= 1.3.3)
44
+ sinatra (1.4.2)
45
+ rack (~> 1.5, >= 1.5.2)
46
+ rack-protection (~> 1.4)
47
+ tilt (~> 1.3, >= 1.3.4)
46
48
  stylus (0.7.1)
47
49
  execjs
48
50
  stylus-source
data/HISTORY.md CHANGED
@@ -1,3 +1,15 @@
1
+ v0.2.0 - April 20, 2013
2
+ ----------------------
3
+
4
+ ### Changed
5
+ * Using MD5 for cache busting URI. (#91, #71)
6
+
7
+ ### Added
8
+ * Add :simple compression for javascript. (#87)
9
+
10
+ ### Fixed
11
+ * Added backports correctly for 1.8.7 support.
12
+
1
13
  v0.1.7 - March 11, 2013
2
14
  ----------------------
3
15
 
data/README.md CHANGED
@@ -26,14 +26,7 @@ render Sass or whatever. No-siree!
26
26
  Installation
27
27
  ------------
28
28
 
29
- Sinatra AssetPack is a simple Ruby gem. You can install it via `gem install`.
30
-
31
- ``` console
32
- $ gem install sinatra-assetpack
33
- ```
34
-
35
- #### Bundler users
36
- If you use Bundler, you will need to add it to your *Gemfile*.
29
+ Add to your `Gemfile` :
37
30
 
38
31
  ``` ruby
39
32
  gem 'sinatra-assetpack', :require => 'sinatra/assetpack'
@@ -35,6 +35,12 @@ module Sinatra
35
35
  out
36
36
  end
37
37
 
38
+ # Clear Tilt::Cache (used for primarily for tests)
39
+ def self.clear_tilt_cache!(cache, app)
40
+ cache.clear
41
+ #app.clear_tilt_cache = false # Maybe it can be an option on app we can enable/disable?
42
+ end
43
+
38
44
  PREFIX = File.dirname(__FILE__)
39
45
 
40
46
  autoload :ClassMethods, "#{PREFIX}/assetpack/class_methods"
@@ -2,11 +2,10 @@ module Sinatra
2
2
  module AssetPack
3
3
  module BusterHelpers
4
4
  extend self
5
- # Returns the cache buster suffix for given file(s).
6
- # This implementation somewhat obfuscates the mtime to not reveal deployment dates.
5
+ # Returns the MD5 for all of the files concatenated together
7
6
  def cache_buster_hash(*files)
8
- i = mtime_for(files)
9
- (i * 4567).to_s.reverse[0...6] if i
7
+ content = files.sort.map { |f| File.read(f).to_s if f.is_a?(String) && File.file?(f) }.compact
8
+ Digest::MD5.hexdigest(content.join) if content.any?
10
9
  end
11
10
 
12
11
  # Returns the maximum mtime for a given list of files.
@@ -24,6 +24,10 @@ module Sinatra
24
24
  def add_compressed_routes!
25
25
  assets.packages.each do |name, package|
26
26
  get package.route_regex do
27
+ if defined?(settings.assets.app.clear_tilt_cache) && settings.assets.app.clear_tilt_cache
28
+ AssetPack.clear_tilt_cache!(@template_cache, settings.assets.app)
29
+ end
30
+
27
31
  mtime, contents = @template_cache.fetch(package.path) {
28
32
  [ package.mtime, package.minify ]
29
33
  }
@@ -42,11 +46,19 @@ module Sinatra
42
46
  get %r{#{"^/#{path}/".squeeze('/')}(.*)$} do |file|
43
47
  fmt = File.extname(file)[1..-1]
44
48
 
49
+ if file =~ /(.*)\.([a-f0-9]{32})\.(.*)/
50
+ clean_file = "#{$1}.#{$3}"
51
+ requested_hash = $2
52
+ else
53
+ clean_file = file
54
+ end
55
+
45
56
  # Sanity checks
46
57
  pass unless AssetPack.supported_formats.include?(fmt)
47
- fn = asset_path_for(file, from) or pass
48
58
 
49
- pass if settings.assets.ignored?("#{path}/#{file}")
59
+ fn = asset_path_for(clean_file, from) or pass
60
+
61
+ pass if settings.assets.ignored?("#{path}/#{clean_file}")
50
62
 
51
63
  # Send headers
52
64
  content_type fmt.to_sym
@@ -55,6 +67,10 @@ module Sinatra
55
67
 
56
68
  format = File.extname(fn)[1..-1]
57
69
 
70
+ if defined?(settings.assets.app.clear_tilt_cache) && settings.assets.app.clear_tilt_cache
71
+ AssetPack.clear_tilt_cache!(@template_cache, settings.assets.app)
72
+ end
73
+
58
74
  if AssetPack.supported_formats.include?(format)
59
75
  # Static file
60
76
  if fmt == 'css'
@@ -77,7 +93,6 @@ module Sinatra
77
93
  end
78
94
  end
79
95
  end
80
-
81
96
  end
82
97
  end
83
98
  end
@@ -5,7 +5,12 @@ module Sinatra::AssetPack
5
5
  str.gsub! %r{ *([;\{\},:]) *}, '\1'
6
6
  str
7
7
  end
8
+
9
+ def js(str, options={})
10
+ str
11
+ end
8
12
  end
9
13
 
10
14
  Compressor.register :css, :simple, SimpleEngine
15
+ Compressor.register :js, :simple, SimpleEngine
11
16
  end
@@ -18,10 +18,14 @@ module Sinatra
18
18
 
19
19
  local = assets.local_file_for file
20
20
 
21
- if assets.asset_hosts.nil?
22
- BusterHelpers.add_cache_buster(file, local)
21
+ hosts = assets.asset_hosts
22
+ dev = assets.app.settings.development?
23
+ file = dev ? file : BusterHelpers.add_cache_buster(file, local)
24
+
25
+ if assets.asset_hosts.nil? || dev
26
+ file
23
27
  else
24
- assets.asset_hosts[Digest::MD5.hexdigest(file).to_i(16) % assets.asset_hosts.length]+BusterHelpers.add_cache_buster(file, local)
28
+ hosts[Digest::MD5.hexdigest(file).to_i(16) % hosts.length]+file
25
29
  end
26
30
  end
27
31
  end
@@ -252,7 +252,7 @@ module Sinatra
252
252
  # Remove extension
253
253
  file.gsub!(/#{extension}$/, "")
254
254
  # Remove cache-buster (/js/app.28389 => /js/app)
255
- file.gsub!(/\.[0-9]+$/, "")
255
+ file.gsub!(/\.[a-f0-9]{32}$/, "")
256
256
  matches = Dir[File.join(app.root, from, "#{file}.*")]
257
257
 
258
258
  # Fix for filenames with dots (can't do this with glob)
@@ -54,15 +54,15 @@ module Sinatra
54
54
  BusterHelpers.mtime_for(files)
55
55
  end
56
56
 
57
- # Returns the regex for the route, including cache buster crap.
57
+ # Returns the regex for the route, including cache buster.
58
58
  def route_regex
59
- re = @path.gsub(/(.[^.]+)$/) { |ext| "(?:\.[0-9]+)?#{ext}" }
59
+ re = @path.gsub(/(.[^.]+)$/) { |ext| "(?:\.[a-f0-9]{32})?#{ext}" }
60
60
  /^#{re}$/
61
61
  end
62
62
 
63
63
  def to_development_html(options={})
64
64
  paths_and_files.map { |path, file|
65
- path = add_cache_buster(path, file) # app.css => app.829378.css
65
+ path = add_cache_buster(path, file)
66
66
  link_tag(path, options)
67
67
  }.join("\n")
68
68
  end
@@ -1,7 +1,7 @@
1
1
  module Sinatra
2
2
  module AssetPack
3
3
  def self.version
4
- "0.1.7"
4
+ "0.2.0"
5
5
  end
6
6
  end
7
7
  end
@@ -17,9 +17,8 @@ Gem::Specification.new do |s|
17
17
  s.add_dependency "sinatra"
18
18
  s.add_dependency "jsmin"
19
19
  s.add_dependency "rack-test"
20
- if RUBY_VERSION < "1.9"
21
- s.add_runtime_dependency "backports"
22
- end
20
+ s.add_dependency "backports"
21
+
23
22
  s.add_development_dependency "yui-compressor"
24
23
  s.add_development_dependency "sass"
25
24
  s.add_development_dependency "haml"
@@ -0,0 +1 @@
1
+ $(function() { alert("Hello"); });
@@ -0,0 +1,77 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ class AssetHostTest < UnitTest
4
+ class TestApp < UnitTest::App
5
+ register Sinatra::AssetPack
6
+
7
+ set :root, File.join(File.dirname(__FILE__), "app")
8
+
9
+ assets {
10
+ serve '/css', :from => 'app/css'
11
+ serve '/js', :from => 'app/js'
12
+ serve '/images', :from => 'app/images'
13
+
14
+ asset_hosts [
15
+ '//cdn-0.example.org',
16
+ '//cdn-1.example.org'
17
+ ]
18
+
19
+ css :a, ["/css/style.css"]
20
+ js :b, ["/js/hello.js"]
21
+ }
22
+
23
+ get('/helper/img') { img '/images/background.jpg' }
24
+ end
25
+
26
+ def app
27
+ TestApp
28
+ end
29
+
30
+ test "hosts sets option" do
31
+ assert app.assets.asset_hosts.include? '//cdn-0.example.org'
32
+ assert app.assets.asset_hosts.include? '//cdn-1.example.org'
33
+ end
34
+
35
+ test "host gets added to css source path" do
36
+ app.stubs(:development?).returns(false)
37
+ assert TestApp.assets.packages['a.css'].to_production_html =~ %r{href='//cdn-[0|1].example.org/assets/a.[a-f0-9]{32}.css'}
38
+ end
39
+
40
+ test "host gets added to js source path" do
41
+ app.stubs(:development?).returns(false)
42
+ assert TestApp.assets.packages['b.js'].to_production_html =~ %r{src='//cdn-[0|1].example.org/assets/b.[a-f0-9]{32}.js'}
43
+ end
44
+
45
+ test "host gets added to image helper path in production" do
46
+ app.stubs(:development?).returns(false)
47
+ get '/helper/img'
48
+ assert body =~ /<img src='\/\/cdn-[0|1].example.org\/images\/background.[a-f0-9]{32}.jpg' \/>/
49
+ end
50
+
51
+ test "host doesn't get added to image helper path in development" do
52
+ app.stubs(:development?).returns(true)
53
+ get '/helper/img'
54
+ assert body =~ /<img src='\/images\/background.jpg' \/>/
55
+ end
56
+
57
+ test "host gets added to css image path in production" do
58
+ app.stubs(:development?).returns(false)
59
+ get '/css/style.css'
60
+ assert body.include?('background: url(//cdn-1.example.org/images/background.b1946ac92492d2347c6235b4d2611184.jpg)')
61
+
62
+ # does not alter non-existing files (design or flaw???)
63
+ assert body.include?('background: url(/images/404.png)')
64
+ end
65
+
66
+ test "do not add asset host to filename in dev mode" do
67
+ app.stubs(:development?).returns(true)
68
+ file = '/js/hello.js'
69
+ assert !(Sinatra::AssetPack::HtmlHelpers.get_file_uri(file, TestApp.assets) =~ /cdn-[0|1].example.org/)
70
+ end
71
+
72
+ test "add asset host to filename in production/qa mode" do
73
+ app.stubs(:development?).returns(false)
74
+ file = '/js/hello.js'
75
+ assert Sinatra::AssetPack::HtmlHelpers.get_file_uri(file, TestApp.assets) =~ /cdn-[0|1].example.org/
76
+ end
77
+ end
@@ -0,0 +1,27 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ class BusterHelpersTest < UnitTest
4
+ include Sinatra::AssetPack
5
+
6
+ test "adds md5 to name for one file" do
7
+ filename = BusterHelpers.add_cache_buster '/css/style.css', asset('css/style.css')
8
+ assert_equal '/css/style.7a1b92c3f56ab5cfa73c1aa8222961cf.css', filename
9
+ end
10
+
11
+
12
+ test "adds md5 to name for multiple files" do
13
+ filename = BusterHelpers.add_cache_buster '/css/style.css', asset('css/style.css'), asset('css/js2c.css')
14
+ assert_equal '/css/style.4400cb67aeffa49b8fe18bc4e0187f86.css', filename
15
+ end
16
+
17
+ test "doesn't add md5 for non-existent file" do
18
+ assert_equal '/css/style.css', BusterHelpers.add_cache_buster('/css/style.css', 'asdf')
19
+ end
20
+
21
+ private
22
+
23
+ def asset(file)
24
+ File.expand_path(File.dirname(__FILE__)) + '/app/app/' + file
25
+ end
26
+
27
+ end
data/test/cache_test.rb CHANGED
@@ -19,6 +19,10 @@ class CacheTest < UnitTest
19
19
  def app() App; end
20
20
 
21
21
  test "Compressed js caching" do
22
+ app.set :reload_templates, false
23
+ app.stubs(:clear_tilt_cache).returns(false) # return false each time it calls after the first time.
24
+ app.expects(:clear_tilt_cache).returns(true).times(1) # clear cache one time.
25
+
22
26
  JSMin.expects(:minify).times(1).returns ""
23
27
  3.times { get '/js/app.js' }
24
28
  end
@@ -24,7 +24,7 @@ class CompressedTest < UnitTest
24
24
  end
25
25
 
26
26
  test "lol" do
27
- get '/app.4872837.js'
27
+ get '/app.b1946ac92492d2347c6235b4d2611184.js'
28
28
  assert last_response.status == 200
29
29
  end
30
30
  end
data/test/helpers_test.rb CHANGED
@@ -12,9 +12,20 @@ class HelpersTest < UnitTest
12
12
  assert body == "<img src='/images/foo.jpg' />"
13
13
  end
14
14
 
15
- test "img existing" do
15
+ test "img existing (development)" do
16
+ app.stubs(:development?).returns(true)
16
17
  get '/helper/email'
17
- assert body =~ %r{src='/images/email.[0-9]+.png'}
18
+
19
+ assert body =~ %r{src='/images/email.png'}
20
+ assert body =~ %r{width='16'}
21
+ assert body =~ %r{height='16'}
22
+ end
23
+
24
+ test "img existing (production)" do
25
+ app.stubs(:development?).returns(false)
26
+ get '/helper/email'
27
+
28
+ assert body =~ %r{src='/images/email.[a-f0-9]{32}.png'}
18
29
  assert body =~ %r{width='16'}
19
30
  assert body =~ %r{height='16'}
20
31
  end
data/test/img_test.rb CHANGED
@@ -9,7 +9,7 @@ class ImgTest < UnitTest
9
9
  end
10
10
 
11
11
  test "get img with cache buster" do
12
- get '/images/email.893748.png'
12
+ get '/images/email.7a1b92c3f56ab5cfa73c1aa8222961cf.png'
13
13
  assert_equal last_response.headers['Content-Length'], File.size(r("/app/images/email.png")).to_s
14
14
  end
15
15
 
@@ -42,4 +42,10 @@ class NonExistentTest < UnitTest
42
42
  get '/script.min.js'
43
43
  assert body.include?('Spin spin sugar')
44
44
  end
45
+
46
+ test "non-existant asset hosts" do
47
+ file = File.join(app.root, 'app/js/hello.js')
48
+
49
+ assert_equal(app.root + '/app/js/hello.js', Sinatra::AssetPack::HtmlHelpers.get_file_uri(file, App.assets))
50
+ end
45
51
  end
data/test/preproc_test.rb CHANGED
@@ -2,26 +2,35 @@ require File.expand_path('../test_helper', __FILE__)
2
2
 
3
3
  class PreprocTest < UnitTest
4
4
  test "preproc" do
5
+ app.stubs(:clear_tilt_cache).returns(true)
6
+ app.stubs(:development?).returns(false)
5
7
  get '/css/screen.css'
6
- assert body =~ %r{email.[0-9]+.png}
8
+ assert body =~ %r{email.[a-f0-9]{32}.png}
7
9
  end
8
10
 
9
11
  test "preproc static files" do
12
+ app.stubs(:clear_cache).returns(true)
13
+ app.stubs(:development?).returns(false)
10
14
  get '/css/style.css'
11
- assert body =~ %r{background.[0-9]+.jpg}
15
+ assert body =~ %r{background.[a-f0-9]{32}.jpg}
12
16
  end
13
17
 
14
18
  test "no cache-busting number for non-existent images" do
19
+ app.stubs(:development?).returns(false)
15
20
  get '/css/style.css'
16
21
  assert body.include?('background: url(/images/404.png)')
17
22
  end
18
23
 
19
24
  test "preproc on minify" do
25
+ app.stubs(:clear_cache).returns(true)
26
+ app.stubs(:development?).returns(false)
20
27
  get '/css/application.css'
21
- assert body =~ %r{email.[0-9]+.png}
28
+ assert body =~ %r{email.[a-f0-9]{32}.png}
22
29
  end
23
30
 
24
31
  test "embed" do
32
+ app.stubs(:clear_cache).returns(true)
33
+ app.stubs(:development?).returns(false)
25
34
  get '/css/screen.css'
26
35
  assert body =~ %r{data:image/png;base64,[A-Za-z0-9=/]{100,}}
27
36
  end
@@ -0,0 +1,17 @@
1
+ require File.expand_path('../test_helper', __FILE__)
2
+
3
+ class SimplejsTest < UnitTest
4
+ setup do
5
+ app.set :reload_templates, true
6
+ app.assets.js_compression = :simple
7
+ end
8
+
9
+ teardown do
10
+ app.assets.js_compression = :jsmin
11
+ end
12
+
13
+ test "build" do
14
+ get '/js/app.js'
15
+ assert body.include? ");\n\n$(function("
16
+ end
17
+ end
data/test/unit_test.rb CHANGED
@@ -17,19 +17,15 @@ class AppTest < UnitTest
17
17
  assert last_response.status == 404
18
18
  end
19
19
 
20
- test '/js/hello.2834987.js (with cache buster)' do
21
- get '/js/hello.283947.js'
20
+ test '/js/hello.b1946ac92492d2347c6235b4d2611184.js (with cache buster)' do
21
+ get '/js/hello.b1946ac92492d2347c6235b4d2611184.js'
22
+ assert_equal 200, last_response.status
22
23
  assert body == '$(function() { alert("Hello"); });'
23
24
  end
24
25
 
25
- test '/js/hello.2.2834987.js (with cache buster)' do
26
- get '/js/hello.2.283947.js'
27
- assert body == '$(function() { alert("Hello.2"); });'
28
- end
29
-
30
- test '/js/hi.2834987.js (coffeescript with cache buster)' do
31
- get '/js/hi.283947.js'
32
- assert last_response.status == 200
26
+ test '/js/hi.24dcf1d7835ed64640370d52967631f8.js (coffeescript with cache buster)' do
27
+ get '/js/hi.24dcf1d7835ed64640370d52967631f8.js'
28
+ assert_equal 200, last_response.status
33
29
  assert body.include? 'yo'
34
30
  assert body.include? 'x = function'
35
31
  end
@@ -50,7 +46,7 @@ class AppTest < UnitTest
50
46
  end
51
47
 
52
48
  test 'returns file of requested type when mixed type assets of varying extension are present' do
53
- get '/packages/a_package.010101.js'
49
+ get '/packages/a_package.b1946ac92492d2347c6235b4d2611184.js'
54
50
  assert body.include? 'function(){alert("Hello");'
55
51
  end
56
52
 
@@ -71,24 +67,30 @@ class AppTest < UnitTest
71
67
  end
72
68
 
73
69
  test "helpers" do
70
+ app.settings.stubs(:environment).returns(:development)
74
71
  get '/index.html'
75
- assert body =~ /<script src='\/js\/hello.[0-9]+.js'><\/script>/
76
- assert body =~ /<script src='\/js\/hi.[0-9]+.js'><\/script>/
72
+ assert body =~ /<script src='\/js\/hello.8ac1b67adf7fa68c1c3b81791b3e116c.js'><\/script>/
73
+ assert body =~ /<script src='\/js\/hi.24dcf1d7835ed64640370d52967631f8.js'><\/script>/
77
74
  end
78
75
 
79
76
  test "helpers in production (compressed html thingie)" do
80
- app.expects(:environment).returns(:production)
77
+ app.settings.stubs(:environment).returns(:production)
81
78
  get '/index.html'
82
- assert body =~ /<script src='\/js\/app.[0-9]+.js'><\/script>/
79
+ assert body =~ /<script src='\/js\/app.[a-f0-9]{32}.js'><\/script>/
83
80
  end
84
81
 
85
82
  test "file with multiple dots in name" do
86
- get '/js/jquery-1.8.0.min.js'
83
+ get '/js/lib-3.2.1.min.js'
84
+ assert body.include? '$(function() { alert("Hello"); });'
85
+ end
86
+
87
+ test "file in folder glob" do
88
+ get '/js/vendor/jquery-1.8.0.min.js'
87
89
  assert body.include? '$(function() { alert("Hello"); });'
88
90
  end
89
91
 
90
92
  test "compressed js with cache bust" do
91
- get '/js/app.38987.js'
93
+ get '/js/app.b1946ac92492d2347c6235b4d2611184.js'
92
94
  assert body.include? 'function(){alert("Hello");'
93
95
  assert_includes body, "var x;x=function(){"
94
96
  end
@@ -99,13 +101,20 @@ class AppTest < UnitTest
99
101
  end
100
102
 
101
103
  test "compressed css with cache bust" do
102
- get '/css/application.388783.css'
104
+ get '/css/application.b1946ac92492d2347c6235b4d2611184.css'
103
105
  assert_includes body, "rgba(0,0,255,0.3)"
104
106
  end
105
107
 
106
- test "helpers css" do
108
+ test "helpers css (development)" do
109
+ app.settings.stubs(:environment).returns(:development)
110
+ get '/helpers/css'
111
+ assert body =~ %r{link rel='stylesheet' href='/css/screen.efa279aa02235f0a587791c1ac5d99b9.css' media='screen'}
112
+ end
113
+
114
+ test "helpers css (production)" do
115
+ app.settings.stubs(:environment).returns(:production)
107
116
  get '/helpers/css'
108
- assert body =~ %r{link rel='stylesheet' href='/css/screen.[0-9]+.css' media='screen'}
117
+ assert body =~ %r{link rel='stylesheet' href='/css/application.[a-f0-9]{32}.css' media='screen'}
109
118
  end
110
119
 
111
120
  test 'default expiration of single assets' do
metadata CHANGED
@@ -1,8 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-assetpack
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.7
5
- prerelease:
4
+ version: 0.2.0
6
5
  platform: ruby
7
6
  authors:
8
7
  - Rico Sta. Cruz
@@ -37,12 +36,11 @@ cert_chain:
37
36
  MjN3ZTRFMUx2ZlJuNWdWNzdEaWo2czlWNEhIek1CdUx3bk5iOFQrNmxPblVX
38
37
  YnRpSWRkRAplOGM4aTdQbHJ6aFZKLzhzWFVKc0NreUU4ZDJNeVJ5amx4TT0K
39
38
  LS0tLS1FTkQgQ0VSVElGSUNBVEUtLS0tLQo=
40
- date: 2013-03-12 00:00:00.000000000 Z
39
+ date: 2013-04-20 00:00:00.000000000 Z
41
40
  dependencies:
42
41
  - !ruby/object:Gem::Dependency
43
42
  name: tilt
44
43
  requirement: !ruby/object:Gem::Requirement
45
- none: false
46
44
  requirements:
47
45
  - - ! '>='
48
46
  - !ruby/object:Gem::Version
@@ -50,7 +48,6 @@ dependencies:
50
48
  type: :runtime
51
49
  prerelease: false
52
50
  version_requirements: !ruby/object:Gem::Requirement
53
- none: false
54
51
  requirements:
55
52
  - - ! '>='
56
53
  - !ruby/object:Gem::Version
@@ -58,7 +55,6 @@ dependencies:
58
55
  - !ruby/object:Gem::Dependency
59
56
  name: sinatra
60
57
  requirement: !ruby/object:Gem::Requirement
61
- none: false
62
58
  requirements:
63
59
  - - ! '>='
64
60
  - !ruby/object:Gem::Version
@@ -66,7 +62,6 @@ dependencies:
66
62
  type: :runtime
67
63
  prerelease: false
68
64
  version_requirements: !ruby/object:Gem::Requirement
69
- none: false
70
65
  requirements:
71
66
  - - ! '>='
72
67
  - !ruby/object:Gem::Version
@@ -74,7 +69,6 @@ dependencies:
74
69
  - !ruby/object:Gem::Dependency
75
70
  name: jsmin
76
71
  requirement: !ruby/object:Gem::Requirement
77
- none: false
78
72
  requirements:
79
73
  - - ! '>='
80
74
  - !ruby/object:Gem::Version
@@ -82,7 +76,6 @@ dependencies:
82
76
  type: :runtime
83
77
  prerelease: false
84
78
  version_requirements: !ruby/object:Gem::Requirement
85
- none: false
86
79
  requirements:
87
80
  - - ! '>='
88
81
  - !ruby/object:Gem::Version
@@ -90,7 +83,6 @@ dependencies:
90
83
  - !ruby/object:Gem::Dependency
91
84
  name: rack-test
92
85
  requirement: !ruby/object:Gem::Requirement
93
- none: false
94
86
  requirements:
95
87
  - - ! '>='
96
88
  - !ruby/object:Gem::Version
@@ -98,7 +90,20 @@ dependencies:
98
90
  type: :runtime
99
91
  prerelease: false
100
92
  version_requirements: !ruby/object:Gem::Requirement
101
- none: false
93
+ requirements:
94
+ - - ! '>='
95
+ - !ruby/object:Gem::Version
96
+ version: '0'
97
+ - !ruby/object:Gem::Dependency
98
+ name: backports
99
+ requirement: !ruby/object:Gem::Requirement
100
+ requirements:
101
+ - - ! '>='
102
+ - !ruby/object:Gem::Version
103
+ version: '0'
104
+ type: :runtime
105
+ prerelease: false
106
+ version_requirements: !ruby/object:Gem::Requirement
102
107
  requirements:
103
108
  - - ! '>='
104
109
  - !ruby/object:Gem::Version
@@ -106,7 +111,6 @@ dependencies:
106
111
  - !ruby/object:Gem::Dependency
107
112
  name: yui-compressor
108
113
  requirement: !ruby/object:Gem::Requirement
109
- none: false
110
114
  requirements:
111
115
  - - ! '>='
112
116
  - !ruby/object:Gem::Version
@@ -114,7 +118,6 @@ dependencies:
114
118
  type: :development
115
119
  prerelease: false
116
120
  version_requirements: !ruby/object:Gem::Requirement
117
- none: false
118
121
  requirements:
119
122
  - - ! '>='
120
123
  - !ruby/object:Gem::Version
@@ -122,7 +125,6 @@ dependencies:
122
125
  - !ruby/object:Gem::Dependency
123
126
  name: sass
124
127
  requirement: !ruby/object:Gem::Requirement
125
- none: false
126
128
  requirements:
127
129
  - - ! '>='
128
130
  - !ruby/object:Gem::Version
@@ -130,7 +132,6 @@ dependencies:
130
132
  type: :development
131
133
  prerelease: false
132
134
  version_requirements: !ruby/object:Gem::Requirement
133
- none: false
134
135
  requirements:
135
136
  - - ! '>='
136
137
  - !ruby/object:Gem::Version
@@ -138,7 +139,6 @@ dependencies:
138
139
  - !ruby/object:Gem::Dependency
139
140
  name: haml
140
141
  requirement: !ruby/object:Gem::Requirement
141
- none: false
142
142
  requirements:
143
143
  - - ! '>='
144
144
  - !ruby/object:Gem::Version
@@ -146,7 +146,6 @@ dependencies:
146
146
  type: :development
147
147
  prerelease: false
148
148
  version_requirements: !ruby/object:Gem::Requirement
149
- none: false
150
149
  requirements:
151
150
  - - ! '>='
152
151
  - !ruby/object:Gem::Version
@@ -154,7 +153,6 @@ dependencies:
154
153
  - !ruby/object:Gem::Dependency
155
154
  name: coffee-script
156
155
  requirement: !ruby/object:Gem::Requirement
157
- none: false
158
156
  requirements:
159
157
  - - ! '>='
160
158
  - !ruby/object:Gem::Version
@@ -162,7 +160,6 @@ dependencies:
162
160
  type: :development
163
161
  prerelease: false
164
162
  version_requirements: !ruby/object:Gem::Requirement
165
- none: false
166
163
  requirements:
167
164
  - - ! '>='
168
165
  - !ruby/object:Gem::Version
@@ -170,7 +167,6 @@ dependencies:
170
167
  - !ruby/object:Gem::Dependency
171
168
  name: contest
172
169
  requirement: !ruby/object:Gem::Requirement
173
- none: false
174
170
  requirements:
175
171
  - - ! '>='
176
172
  - !ruby/object:Gem::Version
@@ -178,7 +174,6 @@ dependencies:
178
174
  type: :development
179
175
  prerelease: false
180
176
  version_requirements: !ruby/object:Gem::Requirement
181
- none: false
182
177
  requirements:
183
178
  - - ! '>='
184
179
  - !ruby/object:Gem::Version
@@ -186,7 +181,6 @@ dependencies:
186
181
  - !ruby/object:Gem::Dependency
187
182
  name: mocha
188
183
  requirement: !ruby/object:Gem::Requirement
189
- none: false
190
184
  requirements:
191
185
  - - ! '>='
192
186
  - !ruby/object:Gem::Version
@@ -194,7 +188,6 @@ dependencies:
194
188
  type: :development
195
189
  prerelease: false
196
190
  version_requirements: !ruby/object:Gem::Requirement
197
- none: false
198
191
  requirements:
199
192
  - - ! '>='
200
193
  - !ruby/object:Gem::Version
@@ -202,7 +195,6 @@ dependencies:
202
195
  - !ruby/object:Gem::Dependency
203
196
  name: stylus
204
197
  requirement: !ruby/object:Gem::Requirement
205
- none: false
206
198
  requirements:
207
199
  - - ! '>='
208
200
  - !ruby/object:Gem::Version
@@ -210,7 +202,6 @@ dependencies:
210
202
  type: :development
211
203
  prerelease: false
212
204
  version_requirements: !ruby/object:Gem::Requirement
213
- none: false
214
205
  requirements:
215
206
  - - ! '>='
216
207
  - !ruby/object:Gem::Version
@@ -218,7 +209,6 @@ dependencies:
218
209
  - !ruby/object:Gem::Dependency
219
210
  name: uglifier
220
211
  requirement: !ruby/object:Gem::Requirement
221
- none: false
222
212
  requirements:
223
213
  - - ! '>='
224
214
  - !ruby/object:Gem::Version
@@ -226,7 +216,6 @@ dependencies:
226
216
  type: :development
227
217
  prerelease: false
228
218
  version_requirements: !ruby/object:Gem::Requirement
229
- none: false
230
219
  requirements:
231
220
  - - ! '>='
232
221
  - !ruby/object:Gem::Version
@@ -234,7 +223,6 @@ dependencies:
234
223
  - !ruby/object:Gem::Dependency
235
224
  name: rake
236
225
  requirement: !ruby/object:Gem::Requirement
237
- none: false
238
226
  requirements:
239
227
  - - ! '>='
240
228
  - !ruby/object:Gem::Version
@@ -242,7 +230,6 @@ dependencies:
242
230
  type: :development
243
231
  prerelease: false
244
232
  version_requirements: !ruby/object:Gem::Requirement
245
- none: false
246
233
  requirements:
247
234
  - - ! '>='
248
235
  - !ruby/object:Gem::Version
@@ -250,7 +237,6 @@ dependencies:
250
237
  - !ruby/object:Gem::Dependency
251
238
  name: less
252
239
  requirement: !ruby/object:Gem::Requirement
253
- none: false
254
240
  requirements:
255
241
  - - ! '>='
256
242
  - !ruby/object:Gem::Version
@@ -258,7 +244,6 @@ dependencies:
258
244
  type: :development
259
245
  prerelease: false
260
246
  version_requirements: !ruby/object:Gem::Requirement
261
- none: false
262
247
  requirements:
263
248
  - - ! '>='
264
249
  - !ruby/object:Gem::Version
@@ -351,8 +336,9 @@ files:
351
336
  - test/app/app/js/hello.js
352
337
  - test/app/app/js/helloe.js
353
338
  - test/app/app/js/hi.coffee
354
- - test/app/app/js/jquery-1.8.0.min.js
339
+ - test/app/app/js/lib-3.2.1.min.js
355
340
  - test/app/app/js/ugly.js
341
+ - test/app/app/js/vendor/jquery-1.8.0.min.js
356
342
  - test/app/app/js/yoe.coffee
357
343
  - test/app/app/js_glob/a/b/c1/hello.js
358
344
  - test/app/app/js_glob/a/b/c2/hi.js
@@ -363,7 +349,9 @@ files:
363
349
  - test/app/app/views/index.haml
364
350
  - test/app/config.ru
365
351
  - test/arity_test.rb
352
+ - test/asset_host_test.rb
366
353
  - test/build_test.rb
354
+ - test/buster_helpers_test.rb
367
355
  - test/cache_test.rb
368
356
  - test/combined_test.rb
369
357
  - test/compressed_test.rb
@@ -379,6 +367,7 @@ files:
379
367
  - test/preproc_test.rb
380
368
  - test/redundant_test.rb
381
369
  - test/simplecss_test.rb
370
+ - test/simplejs_test.rb
382
371
  - test/sqwish_test.rb
383
372
  - test/stylus_test.rb
384
373
  - test/template_cache_test.rb
@@ -389,26 +378,25 @@ files:
389
378
  - test/yui_test.rb
390
379
  homepage: http://github.com/rstacruz/sinatra-assetpack
391
380
  licenses: []
381
+ metadata: {}
392
382
  post_install_message:
393
383
  rdoc_options: []
394
384
  require_paths:
395
385
  - lib
396
386
  required_ruby_version: !ruby/object:Gem::Requirement
397
- none: false
398
387
  requirements:
399
388
  - - ! '>='
400
389
  - !ruby/object:Gem::Version
401
390
  version: '0'
402
391
  required_rubygems_version: !ruby/object:Gem::Requirement
403
- none: false
404
392
  requirements:
405
393
  - - ! '>='
406
394
  - !ruby/object:Gem::Version
407
395
  version: '0'
408
396
  requirements: []
409
397
  rubyforge_project:
410
- rubygems_version: 1.8.25
398
+ rubygems_version: 2.0.3
411
399
  signing_key:
412
- specification_version: 3
400
+ specification_version: 4
413
401
  summary: Asset packager for Sinatra.
414
402
  test_files: []
metadata.gz.sig CHANGED
Binary file