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 +1 -0
- data/.rvmrc +1 -0
- data/Gemfile +14 -0
- data/Gemfile.lock +44 -0
- data/Rakefile +2 -7
- data/VERSION +1 -1
- data/lib/sinatra/bundles/bundle.rb +25 -15
- data/lib/sinatra/bundles/javascript_bundle.rb +3 -3
- data/lib/sinatra/bundles/stylesheet_bundle.rb +3 -3
- data/sinatra-bundles.gemspec +15 -2
- data/spec/extension_app.rb +11 -0
- data/spec/other_public/css/test.css +3 -0
- data/spec/other_public/javascripts/test.js +1 -0
- data/spec/sinatra-bundles_spec.rb +21 -0
- metadata +65 -30
data/.gitignore
CHANGED
data/.rvmrc
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
rvm use ree@bundles
|
data/Gemfile
ADDED
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.
|
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.
|
1
|
+
0.4.0
|
@@ -8,33 +8,34 @@ module Sinatra
|
|
8
8
|
class Bundle
|
9
9
|
include Enumerable
|
10
10
|
|
11
|
-
def initialize(app,
|
11
|
+
def initialize(app, names = nil)
|
12
12
|
@app = app
|
13
|
-
@
|
14
|
-
|
15
|
-
|
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
|
-
|
22
|
+
f
|
19
23
|
else
|
20
24
|
ext = File.extname(full_path)
|
21
|
-
Dir[full_path].
|
25
|
+
Dir[full_path].map do |file|
|
22
26
|
if File.exists?(file)
|
23
|
-
file.chomp
|
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
|
-
|
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
|
-
|
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
|
data/sinatra-bundles.gemspec
CHANGED
@@ -5,11 +5,11 @@
|
|
5
5
|
|
6
6
|
Gem::Specification.new do |s|
|
7
7
|
s.name = %q{sinatra-bundles}
|
8
|
-
s.version = "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-
|
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 @@
|
|
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:
|
4
|
+
hash: 15
|
5
5
|
prerelease: false
|
6
6
|
segments:
|
7
7
|
- 0
|
8
|
-
-
|
8
|
+
- 4
|
9
9
|
- 0
|
10
|
-
version: 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-
|
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
|
-
|
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
|
-
|
34
|
-
version_requirements: *id001
|
34
|
+
requirement: *id001
|
35
35
|
- !ruby/object:Gem::Dependency
|
36
|
-
name: packr
|
37
36
|
prerelease: false
|
38
|
-
|
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
|
-
|
48
|
-
version_requirements: *id002
|
48
|
+
requirement: *id002
|
49
49
|
- !ruby/object:Gem::Dependency
|
50
|
-
name: rack
|
51
50
|
prerelease: false
|
52
|
-
|
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
|
-
|
63
|
-
version_requirements: *id003
|
63
|
+
requirement: *id003
|
64
64
|
- !ruby/object:Gem::Dependency
|
65
|
-
name: sinatra
|
66
65
|
prerelease: false
|
67
|
-
|
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
|
-
|
78
|
-
version_requirements: *id004
|
78
|
+
requirement: *id004
|
79
79
|
- !ruby/object:Gem::Dependency
|
80
|
-
name: rspec
|
81
80
|
prerelease: false
|
82
|
-
|
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
|
-
|
94
|
-
version_requirements: *id005
|
94
|
+
requirement: *id005
|
95
95
|
- !ruby/object:Gem::Dependency
|
96
|
-
name: rack-test
|
97
96
|
prerelease: false
|
98
|
-
|
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
|
-
|
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
|
-
|
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
|
-
|
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
|