sinatra-bundles 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
data/.gitignore CHANGED
@@ -21,3 +21,4 @@ doc
21
21
  .yardoc
22
22
 
23
23
  ## PROJECT::SPECIFIC
24
+ .bundle/
data/.rvmrc ADDED
@@ -0,0 +1 @@
1
+ rvm use ree@bundles
data/Gemfile ADDED
@@ -0,0 +1,14 @@
1
+ source 'http://rubygems.org'
2
+
3
+ gem 'rainpress'
4
+ gem 'packr'
5
+ gem 'rack', '>= 1.0'
6
+ gem 'sinatra', '>= 1.0'
7
+
8
+ group :development do
9
+ gem 'rspec', '>= 1.2.9'
10
+ gem 'rack-test', '>= 0.5.3'
11
+ gem 'yard'
12
+ gem 'jeweler'
13
+ gem 'ruby-debug'
14
+ end
data/Gemfile.lock ADDED
@@ -0,0 +1,44 @@
1
+ GEM
2
+ remote: http://rubygems.org/
3
+ specs:
4
+ columnize (0.3.1)
5
+ gemcutter (0.6.1)
6
+ git (1.2.5)
7
+ jeweler (1.4.0)
8
+ gemcutter (>= 0.1.0)
9
+ git (>= 1.2.5)
10
+ rubyforge (>= 2.0.0)
11
+ json_pure (1.4.5)
12
+ linecache (0.43)
13
+ oyster (0.9.4)
14
+ packr (3.1.0)
15
+ oyster
16
+ rack (1.2.1)
17
+ rack-test (0.5.4)
18
+ rack (>= 1.0)
19
+ rainpress (1.0)
20
+ rspec (1.3.0)
21
+ ruby-debug (0.10.3)
22
+ columnize (>= 0.1)
23
+ ruby-debug-base (~> 0.10.3.0)
24
+ ruby-debug-base (0.10.3)
25
+ linecache (>= 0.3)
26
+ rubyforge (2.0.4)
27
+ json_pure (>= 1.1.7)
28
+ sinatra (1.0)
29
+ rack (>= 1.0)
30
+ yard (0.5.8)
31
+
32
+ PLATFORMS
33
+ ruby
34
+
35
+ DEPENDENCIES
36
+ jeweler
37
+ packr
38
+ rack (>= 1.0)
39
+ rack-test (>= 0.5.3)
40
+ rainpress
41
+ rspec (>= 1.2.9)
42
+ ruby-debug
43
+ sinatra (>= 1.0)
44
+ yard
data/Rakefile CHANGED
@@ -1,5 +1,6 @@
1
1
  require 'rubygems'
2
2
  require 'rake'
3
+ require 'bundler'
3
4
 
4
5
  begin
5
6
  require 'jeweler'
@@ -10,13 +11,7 @@ begin
10
11
  gem.email = 'darkhelmet@darkhelmetlive.com'
11
12
  gem.homepage = 'http://github.com/darkhelmet/sinatra-bundles'
12
13
  gem.authors = ['Daniel Huckstep']
13
- gem.add_dependency 'rainpress', '>= 0'
14
- gem.add_dependency 'packr', '>= 0'
15
- gem.add_dependency 'rack', '>= 1.0'
16
- gem.add_dependency 'sinatra', '>= 1.0'
17
- gem.add_development_dependency 'rspec', '>= 1.2.9'
18
- gem.add_development_dependency 'rack-test', '>= 0.5.3'
19
- gem.add_development_dependency 'yard', '>= 0'
14
+ gem.add_bundler_dependencies
20
15
  # gem is a Gem::Specification... see http://www.rubygems.org/read/chapter/20 for additional settings
21
16
  end
22
17
  Jeweler::GemcutterTasks.new
data/VERSION CHANGED
@@ -1 +1 @@
1
- 0.3.0
1
+ 0.4.0
@@ -8,33 +8,34 @@ module Sinatra
8
8
  class Bundle
9
9
  include Enumerable
10
10
 
11
- def initialize(app, files = nil)
11
+ def initialize(app, names = nil)
12
12
  @app = app
13
- @files = []
14
- files ||= ['**/*']
15
- files.each do |f|
13
+ @names = names || ['**/*']
14
+
15
+ etag if @app.warm_bundle_cache
16
+ end
17
+
18
+ def files
19
+ @files ||= @names.map do |f|
16
20
  full_path = path(f)
17
21
  if File.file?(full_path)
18
- @files << f
22
+ f
19
23
  else
20
24
  ext = File.extname(full_path)
21
- Dir[full_path].each do |file|
25
+ Dir[full_path].map do |file|
22
26
  if File.exists?(file)
23
- file.chomp!(ext).gsub!("#{root}/", '')
24
- @files << file
27
+ file.chomp(ext).gsub("#{root}/", '')
25
28
  end
26
29
  end
27
30
  end
28
- end
29
- @files.uniq!
30
- etag if @app.warm_bundle_cache
31
+ end.flatten.uniq
31
32
  end
32
33
 
33
34
  # Since we pass Bundles back as the body,
34
35
  # this follows Rack standards and supports an each method
35
36
  # to yield parts of the body, in our case, the files.
36
37
  def each
37
- @files.each do |f|
38
+ files.each do |f|
38
39
  content = File.read(path(f))
39
40
  content = compress(content) if @app.compress_bundles
40
41
  # Include a new line to prevent weirdness at file boundaries
@@ -66,14 +67,23 @@ module Sinatra
66
67
  def rebundle
67
68
  @content = nil
68
69
  @etag = nil
70
+ @files = nil
69
71
  @options_hash = options_hash.hash
70
72
  end
71
73
 
74
+ # Set the root path for this bundle
75
+ def root=(path)
76
+ @root = path
77
+ rebundle
78
+ end
79
+
72
80
  private
81
+
73
82
  def options_hash
74
83
  {
75
84
  :compress => @app.compress_bundles,
76
- :stamp => stamp
85
+ :stamp => stamp,
86
+ :root => root
77
87
  }
78
88
  end
79
89
 
@@ -81,8 +91,8 @@ module Sinatra
81
91
  #
82
92
  # @return [Integer] The timestamp of the bundle
83
93
  def stamp
84
- @files.map { |f| File.mtime(path(f)) }.sort.last.to_i
94
+ files.map { |f| File.mtime(path(f)) }.sort.last.to_i
85
95
  end
86
96
  end
87
97
  end
88
- end
98
+ end
@@ -14,13 +14,13 @@ module Sinatra
14
14
  "<script type='text/javascript' src='#{src}'></script>"
15
15
  end
16
16
 
17
- protected
18
-
19
17
  # The root of these bundles, for path purposes
20
18
  def root
21
- File.join(@app.public, @app.javascripts)
19
+ @root ||= File.join(@app.public, @app.javascripts)
22
20
  end
23
21
 
22
+ protected
23
+
24
24
  # Compress Javascript
25
25
  #
26
26
  # @param [String] js The Javascript to compress
@@ -15,13 +15,13 @@ module Sinatra
15
15
  "<link type='text/css' href='#{href}' rel='stylesheet' media='#{media}' />"
16
16
  end
17
17
 
18
- protected
19
-
20
18
  # The root of these bundles, for path purposes
21
19
  def root
22
- File.join(@app.public, @app.stylesheets)
20
+ @root ||= File.join(@app.public, @app.stylesheets)
23
21
  end
24
22
 
23
+ protected
24
+
25
25
  # Compress CSS
26
26
  #
27
27
  # @param [String] css The CSS to compress
@@ -5,11 +5,11 @@
5
5
 
6
6
  Gem::Specification.new do |s|
7
7
  s.name = %q{sinatra-bundles}
8
- s.version = "0.3.0"
8
+ s.version = "0.4.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-07-01}
12
+ s.date = %q{2010-08-08}
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 = [
@@ -19,6 +19,9 @@ Gem::Specification.new do |s|
19
19
  s.files = [
20
20
  ".document",
21
21
  ".gitignore",
22
+ ".rvmrc",
23
+ "Gemfile",
24
+ "Gemfile.lock",
22
25
  "LICENSE",
23
26
  "README.md",
24
27
  "Rakefile",
@@ -31,6 +34,9 @@ Gem::Specification.new do |s|
31
34
  "sinatra-bundles.gemspec",
32
35
  "spec/app.rb",
33
36
  "spec/custom_app.rb",
37
+ "spec/extension_app.rb",
38
+ "spec/other_public/css/test.css",
39
+ "spec/other_public/javascripts/test.js",
34
40
  "spec/production_app.rb",
35
41
  "spec/public/javascripts/eval.js",
36
42
  "spec/public/javascripts/splat/splat.js",
@@ -50,6 +56,7 @@ Gem::Specification.new do |s|
50
56
  s.test_files = [
51
57
  "spec/app.rb",
52
58
  "spec/custom_app.rb",
59
+ "spec/extension_app.rb",
53
60
  "spec/production_app.rb",
54
61
  "spec/sinatra-bundles_spec.rb",
55
62
  "spec/spec_helper.rb"
@@ -67,6 +74,8 @@ Gem::Specification.new do |s|
67
74
  s.add_development_dependency(%q<rspec>, [">= 1.2.9"])
68
75
  s.add_development_dependency(%q<rack-test>, [">= 0.5.3"])
69
76
  s.add_development_dependency(%q<yard>, [">= 0"])
77
+ s.add_development_dependency(%q<jeweler>, [">= 0"])
78
+ s.add_development_dependency(%q<ruby-debug>, [">= 0"])
70
79
  else
71
80
  s.add_dependency(%q<rainpress>, [">= 0"])
72
81
  s.add_dependency(%q<packr>, [">= 0"])
@@ -75,6 +84,8 @@ Gem::Specification.new do |s|
75
84
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
76
85
  s.add_dependency(%q<rack-test>, [">= 0.5.3"])
77
86
  s.add_dependency(%q<yard>, [">= 0"])
87
+ s.add_dependency(%q<jeweler>, [">= 0"])
88
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
78
89
  end
79
90
  else
80
91
  s.add_dependency(%q<rainpress>, [">= 0"])
@@ -84,6 +95,8 @@ Gem::Specification.new do |s|
84
95
  s.add_dependency(%q<rspec>, [">= 1.2.9"])
85
96
  s.add_dependency(%q<rack-test>, [">= 0.5.3"])
86
97
  s.add_dependency(%q<yard>, [">= 0"])
98
+ s.add_dependency(%q<jeweler>, [">= 0"])
99
+ s.add_dependency(%q<ruby-debug>, [">= 0"])
87
100
  end
88
101
  end
89
102
 
@@ -0,0 +1,11 @@
1
+ class ExtensionApp < Sinatra::Base
2
+ configure do
3
+ set(:environment, :test)
4
+ set(:root, File.dirname(__FILE__))
5
+ end
6
+
7
+ register Sinatra::Bundles
8
+
9
+ stylesheet_bundle(:test, %w(test)).root = File.join(File.dirname(__FILE__), 'other_public', 'css')
10
+ javascript_bundle(:test, %w(test)).root = File.join(File.dirname(__FILE__), 'other_public', 'javascripts')
11
+ end
@@ -0,0 +1,3 @@
1
+ #test {
2
+ color: white;
3
+ }
@@ -0,0 +1 @@
1
+ alert('foo');
@@ -3,6 +3,7 @@ require 'fileutils'
3
3
  require 'app'
4
4
  require 'production_app'
5
5
  require 'custom_app'
6
+ require 'extension_app'
6
7
 
7
8
  describe 'sinatra-bundles' do
8
9
  def app(env = :test)
@@ -172,6 +173,16 @@ describe 'sinatra-bundles' do
172
173
  FileUtils.touch(app.javascript_bundles[:test].instance_eval { path(@files.first) })
173
174
  app.javascript_bundles[:test].needs_rebundle?.should be_true
174
175
  end
176
+
177
+ it 'should be able to set the root path for a bundle' do
178
+ def app
179
+ ExtensionApp
180
+ end
181
+
182
+ get '/javascripts/bundles/test.js'
183
+ last_response.should be_ok
184
+ last_response.body.should == "alert('foo');\n"
185
+ end
175
186
  end
176
187
 
177
188
  context 'stylesheet bundles' do
@@ -257,5 +268,15 @@ describe 'sinatra-bundles' do
257
268
  FileUtils.touch(app.stylesheet_bundles[:test].instance_eval { path(@files.first) })
258
269
  app.stylesheet_bundles[:test].needs_rebundle?.should be_true
259
270
  end
271
+
272
+ it 'should accept a root path for a bundle' do
273
+ def app
274
+ ExtensionApp
275
+ end
276
+
277
+ get '/stylesheets/bundles/test.css'
278
+ last_response.should be_ok
279
+ last_response.body.should == "#test {\n color: white;\n}\n"
280
+ end
260
281
  end
261
282
  end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sinatra-bundles
3
3
  version: !ruby/object:Gem::Version
4
- hash: 19
4
+ hash: 15
5
5
  prerelease: false
6
6
  segments:
7
7
  - 0
8
- - 3
8
+ - 4
9
9
  - 0
10
- version: 0.3.0
10
+ version: 0.4.0
11
11
  platform: ruby
12
12
  authors:
13
13
  - Daniel Huckstep
@@ -15,13 +15,14 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2010-07-01 00:00:00 -06:00
18
+ date: 2010-08-08 00:00:00 -06:00
19
19
  default_executable:
20
20
  dependencies:
21
21
  - !ruby/object:Gem::Dependency
22
- name: rainpress
23
22
  prerelease: false
24
- requirement: &id001 !ruby/object:Gem::Requirement
23
+ type: :runtime
24
+ name: rainpress
25
+ version_requirements: &id001 !ruby/object:Gem::Requirement
25
26
  none: false
26
27
  requirements:
27
28
  - - ">="
@@ -30,12 +31,12 @@ dependencies:
30
31
  segments:
31
32
  - 0
32
33
  version: "0"
33
- type: :runtime
34
- version_requirements: *id001
34
+ requirement: *id001
35
35
  - !ruby/object:Gem::Dependency
36
- name: packr
37
36
  prerelease: false
38
- requirement: &id002 !ruby/object:Gem::Requirement
37
+ type: :runtime
38
+ name: packr
39
+ version_requirements: &id002 !ruby/object:Gem::Requirement
39
40
  none: false
40
41
  requirements:
41
42
  - - ">="
@@ -44,12 +45,12 @@ dependencies:
44
45
  segments:
45
46
  - 0
46
47
  version: "0"
47
- type: :runtime
48
- version_requirements: *id002
48
+ requirement: *id002
49
49
  - !ruby/object:Gem::Dependency
50
- name: rack
51
50
  prerelease: false
52
- requirement: &id003 !ruby/object:Gem::Requirement
51
+ type: :runtime
52
+ name: rack
53
+ version_requirements: &id003 !ruby/object:Gem::Requirement
53
54
  none: false
54
55
  requirements:
55
56
  - - ">="
@@ -59,12 +60,12 @@ dependencies:
59
60
  - 1
60
61
  - 0
61
62
  version: "1.0"
62
- type: :runtime
63
- version_requirements: *id003
63
+ requirement: *id003
64
64
  - !ruby/object:Gem::Dependency
65
- name: sinatra
66
65
  prerelease: false
67
- requirement: &id004 !ruby/object:Gem::Requirement
66
+ type: :runtime
67
+ name: sinatra
68
+ version_requirements: &id004 !ruby/object:Gem::Requirement
68
69
  none: false
69
70
  requirements:
70
71
  - - ">="
@@ -74,12 +75,12 @@ dependencies:
74
75
  - 1
75
76
  - 0
76
77
  version: "1.0"
77
- type: :runtime
78
- version_requirements: *id004
78
+ requirement: *id004
79
79
  - !ruby/object:Gem::Dependency
80
- name: rspec
81
80
  prerelease: false
82
- requirement: &id005 !ruby/object:Gem::Requirement
81
+ type: :development
82
+ name: rspec
83
+ version_requirements: &id005 !ruby/object:Gem::Requirement
83
84
  none: false
84
85
  requirements:
85
86
  - - ">="
@@ -90,12 +91,12 @@ dependencies:
90
91
  - 2
91
92
  - 9
92
93
  version: 1.2.9
93
- type: :development
94
- version_requirements: *id005
94
+ requirement: *id005
95
95
  - !ruby/object:Gem::Dependency
96
- name: rack-test
97
96
  prerelease: false
98
- requirement: &id006 !ruby/object:Gem::Requirement
97
+ type: :development
98
+ name: rack-test
99
+ version_requirements: &id006 !ruby/object:Gem::Requirement
99
100
  none: false
100
101
  requirements:
101
102
  - - ">="
@@ -106,12 +107,26 @@ dependencies:
106
107
  - 5
107
108
  - 3
108
109
  version: 0.5.3
109
- type: :development
110
- version_requirements: *id006
110
+ requirement: *id006
111
111
  - !ruby/object:Gem::Dependency
112
+ prerelease: false
113
+ type: :development
112
114
  name: yard
115
+ version_requirements: &id007 !ruby/object:Gem::Requirement
116
+ none: false
117
+ requirements:
118
+ - - ">="
119
+ - !ruby/object:Gem::Version
120
+ hash: 3
121
+ segments:
122
+ - 0
123
+ version: "0"
124
+ requirement: *id007
125
+ - !ruby/object:Gem::Dependency
113
126
  prerelease: false
114
- requirement: &id007 !ruby/object:Gem::Requirement
127
+ type: :development
128
+ name: jeweler
129
+ version_requirements: &id008 !ruby/object:Gem::Requirement
115
130
  none: false
116
131
  requirements:
117
132
  - - ">="
@@ -120,8 +135,21 @@ dependencies:
120
135
  segments:
121
136
  - 0
122
137
  version: "0"
138
+ requirement: *id008
139
+ - !ruby/object:Gem::Dependency
140
+ prerelease: false
123
141
  type: :development
124
- version_requirements: *id007
142
+ name: ruby-debug
143
+ version_requirements: &id009 !ruby/object:Gem::Requirement
144
+ none: false
145
+ requirements:
146
+ - - ">="
147
+ - !ruby/object:Gem::Version
148
+ hash: 3
149
+ segments:
150
+ - 0
151
+ version: "0"
152
+ requirement: *id009
125
153
  description: Bundle CSS and Javascript assets to a single file, compress, and cache them for snappier web experiences.
126
154
  email: darkhelmet@darkhelmetlive.com
127
155
  executables: []
@@ -134,6 +162,9 @@ extra_rdoc_files:
134
162
  files:
135
163
  - .document
136
164
  - .gitignore
165
+ - .rvmrc
166
+ - Gemfile
167
+ - Gemfile.lock
137
168
  - LICENSE
138
169
  - README.md
139
170
  - Rakefile
@@ -146,6 +177,9 @@ files:
146
177
  - sinatra-bundles.gemspec
147
178
  - spec/app.rb
148
179
  - spec/custom_app.rb
180
+ - spec/extension_app.rb
181
+ - spec/other_public/css/test.css
182
+ - spec/other_public/javascripts/test.js
149
183
  - spec/production_app.rb
150
184
  - spec/public/javascripts/eval.js
151
185
  - spec/public/javascripts/splat/splat.js
@@ -193,6 +227,7 @@ summary: Easy asset bundling for sinatra
193
227
  test_files:
194
228
  - spec/app.rb
195
229
  - spec/custom_app.rb
230
+ - spec/extension_app.rb
196
231
  - spec/production_app.rb
197
232
  - spec/sinatra-bundles_spec.rb
198
233
  - spec/spec_helper.rb