sinatra-assetpack 0.1.7 → 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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