sinatra-bundles 0.2.0 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
data/README.md CHANGED
@@ -114,8 +114,10 @@ Thanks!
114
114
  -------
115
115
 
116
116
  * [Patrick Hogan](http://github.com/pbhogan)
117
- ** Etag support (with specs!)
118
- ** Wildcard globbing
117
+ * Etag support (with specs!)
118
+ * Wildcard globbing
119
+ * [docunext](http://github.com/docunext)
120
+ * Custom path prefixes for bundles (instead of 'javascripts' and 'stylesheets')
119
121
 
120
122
  Copyright
121
123
  ---------
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.2.0
1
+ 0.3.0
@@ -1,10 +1,11 @@
1
1
  module Sinatra
2
2
  # Main Bundles Module
3
3
  module Bundles
4
- autoload :Helpers, 'sinatra/bundles/helpers'
5
- autoload :Bundle, 'sinatra/bundles/bundle'
6
- autoload :JavascriptBundle, 'sinatra/bundles/javascript_bundle'
7
- autoload :StylesheetBundle, 'sinatra/bundles/stylesheet_bundle'
4
+ mypath = File.dirname(__FILE__)
5
+ autoload :Helpers, "#{mypath}/bundles/helpers"
6
+ autoload :Bundle, "#{mypath}/bundles/bundle"
7
+ autoload :JavascriptBundle, "#{mypath}/bundles/javascript_bundle"
8
+ autoload :StylesheetBundle, "#{mypath}/bundles/stylesheet_bundle"
8
9
 
9
10
  # Set a Javascript bundle
10
11
  # javascript_bundle(:all, %w(jquery lightbox))
@@ -25,43 +26,47 @@ module Sinatra
25
26
  end
26
27
 
27
28
  def self.registered(app)
28
- # Setup empty bundle containers
29
- app.set(:javascript_bundles, {})
30
- app.set(:stylesheet_bundles, {})
31
-
32
29
  # Setup defaults
33
- app.set(:bundle_cache_time, 60 * 60 * 24 * 365)
34
- app.disable(:compress_bundles)
35
- app.disable(:cache_bundles)
36
- app.enable(:stamp_bundles)
37
- app.enable(:warm_bundle_cache)
30
+ app.set({
31
+ :javascript_bundles => {},
32
+ :stylesheet_bundles => {},
33
+ :bundle_cache_time => 60 * 60 * 24 * 365,
34
+ :stylesheets => lambda { app.respond_to?(:css) ? app.css : 'stylesheets' },
35
+ :javascripts => lambda { app.respond_to?(:js) ? app.js : 'javascripts' },
36
+ :compress_bundles => false,
37
+ :cache_bundles => false,
38
+ :stamp_bundles => true,
39
+ :warm_bundle_cache => true
40
+ })
38
41
 
39
42
  # Production defaults
40
43
  app.configure :production do
41
- app.enable(:compress_bundles)
42
- app.enable(:cache_bundles)
44
+ app.set({
45
+ :compress_bundles => true,
46
+ :cache_bundles => true
47
+ })
43
48
  end
44
49
 
45
50
  app.helpers(Helpers)
46
51
 
47
- app.get('/stylesheets/bundles/:bundle.css') do |bundle|
52
+ app.get(%r{/#{Regexp.quote(app.stylesheets)}/bundles/(\w+)(?:/(\d+))?\.css}) do |bundle, stamp| # Don't really care about the stamp.
48
53
  content_type('text/css')
49
54
  headers['Vary'] = 'Accept-Encoding'
50
- if options.cache_bundles
51
- expires(options.bundle_cache_time, :public, :must_revalidate)
52
- etag(options.stylesheet_bundles[bundle.intern].etag)
55
+ if settings.cache_bundles
56
+ expires(settings.bundle_cache_time, :public, :must_revalidate)
57
+ etag(settings.stylesheet_bundles[bundle.intern].etag)
53
58
  end
54
- options.stylesheet_bundles[bundle.intern].content
59
+ settings.stylesheet_bundles[bundle.intern].content
55
60
  end
56
61
 
57
- app.get('/javascripts/bundles/:bundle.js') do |bundle|
62
+ app.get(%r{/#{Regexp.quote(app.javascripts)}/bundles/(\w+)(?:/(\d+))?\.js}) do |bundle, stamp| # Don't really care about the stamp.
58
63
  content_type('text/javascript; charset=utf-8')
59
64
  headers['Vary'] = 'Accept-Encoding'
60
- if options.cache_bundles
61
- expires(options.bundle_cache_time, :public, :must_revalidate)
62
- etag(options.javascript_bundles[bundle.intern].etag)
65
+ if settings.cache_bundles
66
+ expires(settings.bundle_cache_time, :public, :must_revalidate)
67
+ etag(settings.javascript_bundles[bundle.intern].etag)
63
68
  end
64
- options.javascript_bundles[bundle.intern].content
69
+ settings.javascript_bundles[bundle.intern].content
65
70
  end
66
71
  end
67
72
  end
@@ -10,14 +10,13 @@ module Sinatra
10
10
 
11
11
  def initialize(app, files = nil)
12
12
  @app = app
13
- @files = Array.new
13
+ @files = []
14
14
  files ||= ['**/*']
15
15
  files.each do |f|
16
16
  full_path = path(f)
17
17
  if File.file?(full_path)
18
18
  @files << f
19
19
  else
20
- dir = File.dirname(full_path)
21
20
  ext = File.extname(full_path)
22
21
  Dir[full_path].each do |file|
23
22
  if File.exists?(file)
@@ -60,25 +59,30 @@ module Sinatra
60
59
  # Returns true if the content needs to be rebundled
61
60
  def needs_rebundle?
62
61
  # Right now compression is the only option that requires rebundling
63
- @options_hash != @app.compress_bundles
62
+ @options_hash != options_hash.hash
64
63
  end
65
64
 
66
65
  # Clear local variable caches effectively causing rebundling
67
66
  def rebundle
68
67
  @content = nil
69
68
  @etag = nil
70
- @options_hash = @app.compress_bundles
69
+ @options_hash = options_hash.hash
71
70
  end
72
71
 
73
72
  private
73
+ def options_hash
74
+ {
75
+ :compress => @app.compress_bundles,
76
+ :stamp => stamp
77
+ }
78
+ end
79
+
74
80
  # The timestamp of the bundle, which is the newest file in the bundle.
75
81
  #
76
82
  # @return [Integer] The timestamp of the bundle
77
83
  def stamp
78
- @files.map do |f|
79
- File.mtime(path(f))
80
- end.sort.first.to_i
84
+ @files.map { |f| File.mtime(path(f)) }.sort.last.to_i
81
85
  end
82
86
  end
83
87
  end
84
- end
88
+ end
@@ -7,15 +7,15 @@ module Sinatra
7
7
  # @param [Symbol,String] bundle The bundle name
8
8
  # @return [String] HTML script tag
9
9
  def javascript_bundle_include_tag(bundle)
10
- options.javascript_bundles[bundle].to_html(bundle)
10
+ settings.javascript_bundles[bundle].to_html(bundle)
11
11
  end
12
12
 
13
13
  # Emit a script tag for a stylesheet bundle
14
14
  #
15
15
  # @param [Symbol,String] bundle The bundle name
16
16
  # @return [String] HTML link tag
17
- def stylesheet_bundle_link_tag(bundle, media = nil)
18
- options.stylesheet_bundles[bundle].to_html(bundle, media)
17
+ def stylesheet_bundle_link_tag(bundle, media = :all)
18
+ settings.stylesheet_bundles[bundle].to_html(bundle, media)
19
19
  end
20
20
  end
21
21
  end
@@ -1,4 +1,3 @@
1
- require 'sinatra/bundles/bundle'
2
1
  require 'packr'
3
2
 
4
3
  module Sinatra
@@ -10,14 +9,16 @@ module Sinatra
10
9
  # @param [String] name The name of a bundle
11
10
  # @return [String] The HTML that can be inserted into the doc
12
11
  def to_html(name)
13
- "<script type='text/javascript' src='/javascripts/bundles/#{name}.js#{@app.stamp_bundles ? "?#{stamp}" : ''}'></script>"
12
+ prefix = "/#{@app.javascripts}/bundles"
13
+ src = @app.stamp_bundles ? "#{prefix}/#{name}/#{stamp}.js" : "#{prefix}/#{name}.js"
14
+ "<script type='text/javascript' src='#{src}'></script>"
14
15
  end
15
16
 
16
17
  protected
17
18
 
18
19
  # The root of these bundles, for path purposes
19
20
  def root
20
- File.join(@app.public, 'javascripts')
21
+ File.join(@app.public, @app.javascripts)
21
22
  end
22
23
 
23
24
  # Compress Javascript
@@ -1,4 +1,3 @@
1
- require 'sinatra/bundles/bundle'
2
1
  require 'rainpress'
3
2
 
4
3
  module Sinatra
@@ -9,17 +8,18 @@ module Sinatra
9
8
  #
10
9
  # @param [String] name The name of a bundle
11
10
  # @return [String] The HTML that can be inserted into the doc
12
- def to_html(name, media = nil)
13
- media ||= :all
14
- media = media.join(", ") if media.is_a? Array
15
- "<link type='text/css' href='/stylesheets/bundles/#{name}.css#{@app.stamp_bundles ? "?#{stamp}" : ''}' rel='stylesheet' media='#{media}' />"
11
+ def to_html(name, media = :all)
12
+ media = media.join(', ') if media.is_a? Array
13
+ prefix = "/#{@app.stylesheets}/bundles"
14
+ href = @app.stamp_bundles ? "#{prefix}/#{name}/#{stamp}.css" : "#{prefix}/#{name}.css"
15
+ "<link type='text/css' href='#{href}' rel='stylesheet' media='#{media}' />"
16
16
  end
17
17
 
18
18
  protected
19
19
 
20
20
  # The root of these bundles, for path purposes
21
21
  def root
22
- File.join(@app.public, 'stylesheets')
22
+ File.join(@app.public, @app.stylesheets)
23
23
  end
24
24
 
25
25
  # Compress CSS
@@ -36,7 +36,7 @@ module Sinatra
36
36
  # assumed to be in the public directory, under 'stylesheets'
37
37
  # @return [String] The full path to the file
38
38
  def path(filename)
39
- File.join(@app.public, 'stylesheets', "#{filename}.css")
39
+ File.join(root, "#{filename}.css")
40
40
  end
41
41
  end
42
42
  end
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sinatra-bundles}
8
- s.version = "0.2.0"
8
+ s.version = "0.3.0"
9
9
 
10
10
  s.required_rubygems_version = Gem::Requirement.new(">= 0") if s.respond_to? :required_rubygems_version=
11
11
  s.authors = ["Daniel Huckstep"]
12
- s.date = %q{2010-04-02}
12
+ s.date = %q{2010-07-01}
13
13
  s.description = %q{Bundle CSS and Javascript assets to a single file, compress, and cache them for snappier web experiences.}
14
14
  s.email = %q{darkhelmet@darkhelmetlive.com}
15
15
  s.extra_rdoc_files = [
@@ -30,6 +30,7 @@ Gem::Specification.new do |s|
30
30
  "lib/sinatra/bundles/stylesheet_bundle.rb",
31
31
  "sinatra-bundles.gemspec",
32
32
  "spec/app.rb",
33
+ "spec/custom_app.rb",
33
34
  "spec/production_app.rb",
34
35
  "spec/public/javascripts/eval.js",
35
36
  "spec/public/javascripts/splat/splat.js",
@@ -44,10 +45,11 @@ Gem::Specification.new do |s|
44
45
  s.homepage = %q{http://github.com/darkhelmet/sinatra-bundles}
45
46
  s.rdoc_options = ["--charset=UTF-8"]
46
47
  s.require_paths = ["lib"]
47
- s.rubygems_version = %q{1.3.5}
48
+ s.rubygems_version = %q{1.3.7}
48
49
  s.summary = %q{Easy asset bundling for sinatra}
49
50
  s.test_files = [
50
51
  "spec/app.rb",
52
+ "spec/custom_app.rb",
51
53
  "spec/production_app.rb",
52
54
  "spec/sinatra-bundles_spec.rb",
53
55
  "spec/spec_helper.rb"
@@ -57,7 +59,7 @@ Gem::Specification.new do |s|
57
59
  current_version = Gem::Specification::CURRENT_SPECIFICATION_VERSION
58
60
  s.specification_version = 3
59
61
 
60
- if Gem::Version.new(Gem::RubyGemsVersion) >= Gem::Version.new('1.2.0') then
62
+ if Gem::Version.new(Gem::VERSION) >= Gem::Version.new('1.2.0') then
61
63
  s.add_runtime_dependency(%q<rainpress>, [">= 0"])
62
64
  s.add_runtime_dependency(%q<packr>, [">= 0"])
63
65
  s.add_runtime_dependency(%q<rack>, [">= 1.0"])
@@ -0,0 +1,15 @@
1
+ class CustomApp < Sinatra::Base
2
+ configure do
3
+ set(:environment, :test)
4
+ set(:js, 's/js')
5
+ set(:css, 's/css')
6
+ set(:root, File.dirname(__FILE__))
7
+ end
8
+
9
+ register Sinatra::Bundles
10
+
11
+ stylesheet_bundle(:test, %w(test1 test2))
12
+ javascript_bundle(:test, %w(eval test1 test2))
13
+ javascript_bundle(:test2, %w(test*))
14
+ javascript_bundle(:all)
15
+ end
@@ -1,12 +1,16 @@
1
1
  require File.expand_path(File.dirname(__FILE__) + '/spec_helper')
2
+ require 'fileutils'
2
3
  require 'app'
3
4
  require 'production_app'
5
+ require 'custom_app'
4
6
 
5
7
  describe 'sinatra-bundles' do
6
8
  def app(env = :test)
7
9
  case env
8
10
  when :production
9
11
  ProductionApp
12
+ when :custom
13
+ CustomApp
10
14
  else
11
15
  TestApp
12
16
  end
@@ -15,9 +19,7 @@ describe 'sinatra-bundles' do
15
19
  def stamp(type, ext, names)
16
20
  names.map do |name|
17
21
  File.expand_path(File.join(File.dirname(__FILE__), 'public', type, "#{name}.#{ext}"))
18
- end.map do |path|
19
- File.mtime(path)
20
- end.sort.first.to_i
22
+ end.map { |path| File.mtime(path) }.sort.last.to_i
21
23
  end
22
24
 
23
25
  def js_stamp(names)
@@ -88,14 +90,23 @@ describe 'sinatra-bundles' do
88
90
  end.should == "<script type='text/javascript' src='/javascripts/bundles/test.js'></script>"
89
91
  end
90
92
 
93
+ it 'should create cusomized tag if path is CUSTOM' do
94
+ app(:custom).new.instance_eval do
95
+ options.disable(:stamp_bundles)
96
+ javascript_bundle_include_tag(:test)
97
+ end.should == "<script type='text/javascript' src='/s/js/bundles/test.js'></script>"
98
+ end
99
+
91
100
  it 'should stamp bundles with the timestamp of the newest file in the bundle' do
92
101
  app.new.instance_eval do
93
102
  javascript_bundle_include_tag(:test)
94
- end.should == "<script type='text/javascript' src='/javascripts/bundles/test.js?#{js_stamp(%w(test1 test2))}'></script>"
103
+ end.should == "<script type='text/javascript' src='/javascripts/bundles/test/#{js_stamp(%w(eval test1 test2))}.js'></script>"
95
104
  end
96
105
 
97
106
  it 'should serve bundles' do
98
- get "/javascripts/bundles/test.js"
107
+ get '/javascripts/bundles/test.js'
108
+ # Bogus stamp
109
+ get '/javascripts/bundles/test/987654.js'
99
110
  last_response.should be_ok
100
111
  end
101
112
 
@@ -126,13 +137,40 @@ describe 'sinatra-bundles' do
126
137
  get '/javascripts/bundles/test2.js'
127
138
  last_response.should be_ok
128
139
  last_response.body.include?('eval').should be_false
129
- last_response.body.should == @scripts.reject { |s| s.match(/eval|splat/) }.map { |path| File.read(path) }.join("\n") + "\n"
140
+ last_response.body.should == @scripts.reject { |s| s.match(/eval|splat/) }.sort.map { |path| File.read(path) }.join("\n") + "\n"
130
141
  end
131
142
 
132
143
  it 'should handle the all scripts wildcard' do
133
144
  get '/javascripts/bundles/all.js'
134
145
  last_response.should be_ok
135
- last_response.body.should == @scripts.map { |path| File.read(path) }.join("\n") + "\n"
146
+ last_response.body.should == @scripts.sort.map { |path| File.read(path) }.join("\n") + "\n"
147
+ end
148
+
149
+ it 'should handle the all scripts wildcard CUSTOM' do
150
+ def app(env = :custom)
151
+ CustomApp
152
+ end
153
+
154
+ get '/s/js/bundles/all.js'
155
+ last_response.should be_ok
156
+ last_response.body.should == @scripts.sort.map { |path| File.read(path) }.join("\n") + "\n"
157
+ end
158
+
159
+ it 'should need rebundle when the value of compress_bundles changes' do
160
+ app.warm_bundle_cache.should be_true
161
+ app.compress_bundles.should be_false
162
+ app.javascript_bundles.each_value { |bundle| bundle.rebundle }
163
+ app.javascript_bundles[:test].needs_rebundle?.should be_false
164
+ app.compress_bundles = true
165
+ app.javascript_bundles[:test].needs_rebundle?.should be_true
166
+ end
167
+
168
+ it 'should need rebundle when the stamp of the bundle changes' do
169
+ app.warm_bundle_cache.should be_true
170
+ app.javascript_bundles.each_value { |bundle| bundle.rebundle }
171
+ app.javascript_bundles[:test].needs_rebundle?.should be_false
172
+ FileUtils.touch(app.javascript_bundles[:test].instance_eval { path(@files.first) })
173
+ app.javascript_bundles[:test].needs_rebundle?.should be_true
136
174
  end
137
175
  end
138
176
 
@@ -150,10 +188,17 @@ describe 'sinatra-bundles' do
150
188
  end.should == "<link type='text/css' href='/stylesheets/bundles/test.css' rel='stylesheet' media='all' />"
151
189
  end
152
190
 
191
+ it 'should create a tag without a stamp if stamps are disabled CUSTOM' do
192
+ app(:custom).new.instance_eval do
193
+ options.disable(:stamp_bundles)
194
+ stylesheet_bundle_link_tag(:test)
195
+ end.should == "<link type='text/css' href='/s/css/bundles/test.css' rel='stylesheet' media='all' />"
196
+ end
197
+
153
198
  it 'should stamp bundles with the timestamp of the newest file in the bundle' do
154
199
  app.new.instance_eval do
155
200
  stylesheet_bundle_link_tag(:test)
156
- end.should == "<link type='text/css' href='/stylesheets/bundles/test.css?#{css_stamp(%w(test1 test2))}' rel='stylesheet' media='all' />"
201
+ end.should == "<link type='text/css' href='/stylesheets/bundles/test/#{css_stamp(%w(test1 test2))}.css' rel='stylesheet' media='all' />"
157
202
  end
158
203
 
159
204
  it 'should create a tag with default media attribute set to all' do
@@ -178,6 +223,15 @@ describe 'sinatra-bundles' do
178
223
  last_response.body.should == @styles.map { |path| File.read(path) }.join("\n") + "\n"
179
224
  end
180
225
 
226
+ it 'should concat files in order with newlines including one at the end CUSTOM' do
227
+ def app(env = :custom)
228
+ CustomApp
229
+ end
230
+
231
+ get '/s/css/bundles/test.css'
232
+ last_response.body.should == @styles.map { |path| File.read(path) }.join("\n") + "\n"
233
+ end
234
+
181
235
  it 'should set cache headers' do
182
236
  app.enable(:cache_bundles)
183
237
  get '/stylesheets/bundles/test.css'
@@ -186,5 +240,22 @@ describe 'sinatra-bundles' do
186
240
  last_response.headers['Cache-Control'].should == 'public, must-revalidate, max-age=31536000'
187
241
  last_response.headers['Etag'].should == '"6ecd0946412b76dcd1eaa341cdfefa8b"'
188
242
  end
243
+
244
+ it 'should need rebundle when the value of compress_bundles changes' do
245
+ app.warm_bundle_cache.should be_true
246
+ app.compress_bundles.should be_false
247
+ app.stylesheet_bundles.each_value { |bundle| bundle.rebundle }
248
+ app.stylesheet_bundles[:test].needs_rebundle?.should be_false
249
+ app.compress_bundles = true
250
+ app.stylesheet_bundles[:test].needs_rebundle?.should be_true
251
+ end
252
+
253
+ it 'should need rebundle when the stamp of the bundle changes' do
254
+ app.warm_bundle_cache.should be_true
255
+ app.stylesheet_bundles.each_value { |bundle| bundle.rebundle }
256
+ app.stylesheet_bundles[:test].needs_rebundle?.should be_false
257
+ FileUtils.touch(app.stylesheet_bundles[:test].instance_eval { path(@files.first) })
258
+ app.stylesheet_bundles[:test].needs_rebundle?.should be_true
259
+ end
189
260
  end
190
261
  end
metadata CHANGED
@@ -1,7 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-bundles
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.0
4
+ hash: 19
5
+ prerelease: false
6
+ segments:
7
+ - 0
8
+ - 3
9
+ - 0
10
+ version: 0.3.0
5
11
  platform: ruby
6
12
  authors:
7
13
  - Daniel Huckstep
@@ -9,79 +15,113 @@ autorequire:
9
15
  bindir: bin
10
16
  cert_chain: []
11
17
 
12
- date: 2010-04-02 00:00:00 -06:00
18
+ date: 2010-07-01 00:00:00 -06:00
13
19
  default_executable:
14
20
  dependencies:
15
21
  - !ruby/object:Gem::Dependency
16
22
  name: rainpress
17
- type: :runtime
18
- version_requirement:
19
- version_requirements: !ruby/object:Gem::Requirement
23
+ prerelease: false
24
+ requirement: &id001 !ruby/object:Gem::Requirement
25
+ none: false
20
26
  requirements:
21
27
  - - ">="
22
28
  - !ruby/object:Gem::Version
29
+ hash: 3
30
+ segments:
31
+ - 0
23
32
  version: "0"
24
- version:
33
+ type: :runtime
34
+ version_requirements: *id001
25
35
  - !ruby/object:Gem::Dependency
26
36
  name: packr
27
- type: :runtime
28
- version_requirement:
29
- version_requirements: !ruby/object:Gem::Requirement
37
+ prerelease: false
38
+ requirement: &id002 !ruby/object:Gem::Requirement
39
+ none: false
30
40
  requirements:
31
41
  - - ">="
32
42
  - !ruby/object:Gem::Version
43
+ hash: 3
44
+ segments:
45
+ - 0
33
46
  version: "0"
34
- version:
47
+ type: :runtime
48
+ version_requirements: *id002
35
49
  - !ruby/object:Gem::Dependency
36
50
  name: rack
37
- type: :runtime
38
- version_requirement:
39
- version_requirements: !ruby/object:Gem::Requirement
51
+ prerelease: false
52
+ requirement: &id003 !ruby/object:Gem::Requirement
53
+ none: false
40
54
  requirements:
41
55
  - - ">="
42
56
  - !ruby/object:Gem::Version
57
+ hash: 15
58
+ segments:
59
+ - 1
60
+ - 0
43
61
  version: "1.0"
44
- version:
62
+ type: :runtime
63
+ version_requirements: *id003
45
64
  - !ruby/object:Gem::Dependency
46
65
  name: sinatra
47
- type: :runtime
48
- version_requirement:
49
- version_requirements: !ruby/object:Gem::Requirement
66
+ prerelease: false
67
+ requirement: &id004 !ruby/object:Gem::Requirement
68
+ none: false
50
69
  requirements:
51
70
  - - ">="
52
71
  - !ruby/object:Gem::Version
72
+ hash: 15
73
+ segments:
74
+ - 1
75
+ - 0
53
76
  version: "1.0"
54
- version:
77
+ type: :runtime
78
+ version_requirements: *id004
55
79
  - !ruby/object:Gem::Dependency
56
80
  name: rspec
57
- type: :development
58
- version_requirement:
59
- version_requirements: !ruby/object:Gem::Requirement
81
+ prerelease: false
82
+ requirement: &id005 !ruby/object:Gem::Requirement
83
+ none: false
60
84
  requirements:
61
85
  - - ">="
62
86
  - !ruby/object:Gem::Version
87
+ hash: 13
88
+ segments:
89
+ - 1
90
+ - 2
91
+ - 9
63
92
  version: 1.2.9
64
- version:
93
+ type: :development
94
+ version_requirements: *id005
65
95
  - !ruby/object:Gem::Dependency
66
96
  name: rack-test
67
- type: :development
68
- version_requirement:
69
- version_requirements: !ruby/object:Gem::Requirement
97
+ prerelease: false
98
+ requirement: &id006 !ruby/object:Gem::Requirement
99
+ none: false
70
100
  requirements:
71
101
  - - ">="
72
102
  - !ruby/object:Gem::Version
103
+ hash: 13
104
+ segments:
105
+ - 0
106
+ - 5
107
+ - 3
73
108
  version: 0.5.3
74
- version:
109
+ type: :development
110
+ version_requirements: *id006
75
111
  - !ruby/object:Gem::Dependency
76
112
  name: yard
77
- type: :development
78
- version_requirement:
79
- version_requirements: !ruby/object:Gem::Requirement
113
+ prerelease: false
114
+ requirement: &id007 !ruby/object:Gem::Requirement
115
+ none: false
80
116
  requirements:
81
117
  - - ">="
82
118
  - !ruby/object:Gem::Version
119
+ hash: 3
120
+ segments:
121
+ - 0
83
122
  version: "0"
84
- version:
123
+ type: :development
124
+ version_requirements: *id007
85
125
  description: Bundle CSS and Javascript assets to a single file, compress, and cache them for snappier web experiences.
86
126
  email: darkhelmet@darkhelmetlive.com
87
127
  executables: []
@@ -105,6 +145,7 @@ files:
105
145
  - lib/sinatra/bundles/stylesheet_bundle.rb
106
146
  - sinatra-bundles.gemspec
107
147
  - spec/app.rb
148
+ - spec/custom_app.rb
108
149
  - spec/production_app.rb
109
150
  - spec/public/javascripts/eval.js
110
151
  - spec/public/javascripts/splat/splat.js
@@ -125,26 +166,33 @@ rdoc_options:
125
166
  require_paths:
126
167
  - lib
127
168
  required_ruby_version: !ruby/object:Gem::Requirement
169
+ none: false
128
170
  requirements:
129
171
  - - ">="
130
172
  - !ruby/object:Gem::Version
173
+ hash: 3
174
+ segments:
175
+ - 0
131
176
  version: "0"
132
- version:
133
177
  required_rubygems_version: !ruby/object:Gem::Requirement
178
+ none: false
134
179
  requirements:
135
180
  - - ">="
136
181
  - !ruby/object:Gem::Version
182
+ hash: 3
183
+ segments:
184
+ - 0
137
185
  version: "0"
138
- version:
139
186
  requirements: []
140
187
 
141
188
  rubyforge_project:
142
- rubygems_version: 1.3.5
189
+ rubygems_version: 1.3.7
143
190
  signing_key:
144
191
  specification_version: 3
145
192
  summary: Easy asset bundling for sinatra
146
193
  test_files:
147
194
  - spec/app.rb
195
+ - spec/custom_app.rb
148
196
  - spec/production_app.rb
149
197
  - spec/sinatra-bundles_spec.rb
150
198
  - spec/spec_helper.rb