sinatra-bundles 0.3.0 → 0.4.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.
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