asset-trip 0.1.0
Sign up to get free protection for your applications and to get access to all the features.
- data/.gitignore +2 -0
- data/History.txt +6 -0
- data/MIT-LICENSE.txt +19 -0
- data/README.rdoc +27 -0
- data/Rakefile +12 -0
- data/Thorfile +110 -0
- data/asset-trip.gemspec +107 -0
- data/init.rb +3 -0
- data/lib/asset_trip/asset.rb +82 -0
- data/lib/asset_trip/compressor.rb +36 -0
- data/lib/asset_trip/config.rb +60 -0
- data/lib/asset_trip/file_writer.rb +17 -0
- data/lib/asset_trip/helper.rb +83 -0
- data/lib/asset_trip/javascript.rb +29 -0
- data/lib/asset_trip/load_path.rb +39 -0
- data/lib/asset_trip/manifest.rb +40 -0
- data/lib/asset_trip/manifest_writer.rb +35 -0
- data/lib/asset_trip/memoizable.rb +28 -0
- data/lib/asset_trip/middleware.rb +109 -0
- data/lib/asset_trip/ssl_stylesheet.rb +15 -0
- data/lib/asset_trip/stylesheet.rb +44 -0
- data/lib/asset_trip/url_rewriter.rb +82 -0
- data/lib/asset_trip.rb +66 -0
- data/spec/asset_trip/asset_spec.rb +47 -0
- data/spec/asset_trip/compressor_spec.rb +46 -0
- data/spec/asset_trip/config_spec.rb +61 -0
- data/spec/asset_trip/helper_spec.rb +221 -0
- data/spec/asset_trip/javascript_spec.rb +24 -0
- data/spec/asset_trip/load_path_spec.rb +61 -0
- data/spec/asset_trip/manifest_writer_spec.rb +32 -0
- data/spec/asset_trip/middleware_spec.rb +72 -0
- data/spec/asset_trip/stylesheet_spec.rb +51 -0
- data/spec/asset_trip/url_rewriter_spec.rb +166 -0
- data/spec/asset_trip_spec.rb +13 -0
- data/spec/fixtures/app/javascripts/main/new.js +1 -0
- data/spec/fixtures/app/javascripts/main.js +1 -0
- data/spec/fixtures/app/javascripts/signup.js +1 -0
- data/spec/fixtures/app/stylesheets/new.css +0 -0
- data/spec/fixtures/config/asset_trip/assets.rb +0 -0
- data/spec/integration/bundle_spec.rb +243 -0
- data/spec/integration/prune_spec.rb +53 -0
- data/spec/spec.opts +3 -0
- data/spec/spec_helper.rb +24 -0
- data/spec/support/core_extensions.rb +13 -0
- data/spec/support/helpers.rb +33 -0
- data/spec/support/matchers.rb +67 -0
- data/spec/support/path_utils.rb +45 -0
- data/spec/support/sandbox_helper.rb +19 -0
- data/tasks/asset_trip.rake +11 -0
- data/vendor/yuicompressor-2.4.2.jar +0 -0
- metadata +128 -0
@@ -0,0 +1,243 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
require "action_controller"
|
3
|
+
|
4
|
+
describe "rake asset_trip:bundle" do
|
5
|
+
setup_sandbox_app!(:each)
|
6
|
+
|
7
|
+
context "(disabling the YUI Compressor for speed)" do
|
8
|
+
before do
|
9
|
+
AssetTrip::Compressor.stub!(:new => DummyCompressor.new)
|
10
|
+
end
|
11
|
+
|
12
|
+
it "stores each Asset into the public directory" do
|
13
|
+
install_config <<-CONFIG
|
14
|
+
js_asset "signup" do
|
15
|
+
end
|
16
|
+
CONFIG
|
17
|
+
AssetTrip.bundle!
|
18
|
+
fixture_app.should have_asset("signup.js")
|
19
|
+
end
|
20
|
+
|
21
|
+
it "supports loading additional config files" do
|
22
|
+
install_config(<<-CONFIG, "assets.rb")
|
23
|
+
load "config/asset_trip/more_assets"
|
24
|
+
CONFIG
|
25
|
+
install_config(<<-CONFIG, "more_assets.rb")
|
26
|
+
js_asset "signup" do
|
27
|
+
end
|
28
|
+
CONFIG
|
29
|
+
AssetTrip.bundle!
|
30
|
+
fixture_app.should have_asset("signup.js")
|
31
|
+
end
|
32
|
+
|
33
|
+
it "concatenates the files into an Asset" do
|
34
|
+
install_config <<-CONFIG
|
35
|
+
js_asset "signup" do
|
36
|
+
include "main"
|
37
|
+
include "signup"
|
38
|
+
end
|
39
|
+
CONFIG
|
40
|
+
AssetTrip.bundle!
|
41
|
+
asset("signup.js").should have_contents('alert("main")')
|
42
|
+
asset("signup.js").should have_contents('alert("signup")')
|
43
|
+
end
|
44
|
+
|
45
|
+
it "uses the same path if the Asset content is the same" do
|
46
|
+
install_config <<-CONFIG
|
47
|
+
js_asset "signup" do
|
48
|
+
include "main.js"
|
49
|
+
end
|
50
|
+
CONFIG
|
51
|
+
AssetTrip.bundle!
|
52
|
+
AssetTrip.bundle!
|
53
|
+
assets("signup.js").should have(1).item
|
54
|
+
end
|
55
|
+
|
56
|
+
it "uses a different path if the Asset content is different" do
|
57
|
+
install_config <<-CONFIG
|
58
|
+
js_asset "signup" do
|
59
|
+
include "main.js"
|
60
|
+
end
|
61
|
+
CONFIG
|
62
|
+
AssetTrip.bundle!
|
63
|
+
AssetTrip.instance_variable_set(:@config, nil)
|
64
|
+
write_javascript("main.js", 'alert("new.main");')
|
65
|
+
AssetTrip.bundle!
|
66
|
+
assets("signup.js").should have(2).items
|
67
|
+
end
|
68
|
+
|
69
|
+
it "generates paths in the form of assets/XX/YYYYYYYY/filename.js" do
|
70
|
+
install_config <<-CONFIG
|
71
|
+
js_asset "signup" do
|
72
|
+
include "main.js"
|
73
|
+
end
|
74
|
+
CONFIG
|
75
|
+
AssetTrip.bundle!
|
76
|
+
|
77
|
+
directory = assets_path.glob("*").map { |f| File.basename(f) }.first
|
78
|
+
directory.size.should == 2
|
79
|
+
end
|
80
|
+
|
81
|
+
it "generates a manifest for use at runtime" do
|
82
|
+
install_config <<-CONFIG
|
83
|
+
js_asset "signup" do
|
84
|
+
include "main.js"
|
85
|
+
end
|
86
|
+
CONFIG
|
87
|
+
AssetTrip.bundle!
|
88
|
+
|
89
|
+
File.read(fixture_app.join("config", "asset_trip", "manifest.rb")).should be_like(<<-RUBY)
|
90
|
+
module AssetTrip
|
91
|
+
@manifest = Manifest.new
|
92
|
+
@manifest["signup.js"] = "7d6db1efb9e"
|
93
|
+
end
|
94
|
+
RUBY
|
95
|
+
end
|
96
|
+
|
97
|
+
it "rewrites URLs in CSS files to include the asset host" do
|
98
|
+
ActionController::Base.stub!(:asset_host => "http://cdn%d.example.com")
|
99
|
+
|
100
|
+
install_config <<-CONFIG
|
101
|
+
css_asset "signup" do
|
102
|
+
include "new"
|
103
|
+
end
|
104
|
+
CONFIG
|
105
|
+
|
106
|
+
write_stylesheet("new.css", <<-STYLESHEET)
|
107
|
+
.foo { background: url(/foo.jpg) }
|
108
|
+
STYLESHEET
|
109
|
+
AssetTrip.bundle!
|
110
|
+
|
111
|
+
asset("signup.css").should have_contents('url(http://cdn1.example.com/foo.jpg)')
|
112
|
+
end
|
113
|
+
|
114
|
+
it "rewrites URLs in CSS files to include HTTPs asset hosts" do
|
115
|
+
ActionController::Base.stub!(:asset_host => "http://cdn%d.example.com")
|
116
|
+
|
117
|
+
install_config <<-CONFIG
|
118
|
+
css_asset "signup" do
|
119
|
+
include "new"
|
120
|
+
end
|
121
|
+
CONFIG
|
122
|
+
|
123
|
+
write_stylesheet("new.css", <<-STYLESHEET)
|
124
|
+
.foo { background: url(/foo.jpg) }
|
125
|
+
STYLESHEET
|
126
|
+
AssetTrip.bundle!
|
127
|
+
|
128
|
+
asset("signup.ssl.css").should have_contents('url(https://cdn1.example.com/foo.jpg)')
|
129
|
+
end
|
130
|
+
|
131
|
+
it "respects ssl? method of request in asset proc" do
|
132
|
+
asset_proc = Proc.new { |source, request|
|
133
|
+
if request.ssl?
|
134
|
+
"https://assets.example.com"
|
135
|
+
else
|
136
|
+
"https://cdn.example.com"
|
137
|
+
end
|
138
|
+
}
|
139
|
+
ActionController::Base.stub!(:asset_host => asset_proc)
|
140
|
+
install_config <<-CONFIG
|
141
|
+
css_asset "signup" do
|
142
|
+
include "new"
|
143
|
+
end
|
144
|
+
CONFIG
|
145
|
+
|
146
|
+
write_stylesheet("new.css", <<-STYLESHEET)
|
147
|
+
.foo { background: url(/foo.jpg) }
|
148
|
+
STYLESHEET
|
149
|
+
AssetTrip.bundle!
|
150
|
+
|
151
|
+
asset("signup.ssl.css").should have_contents('url(https://assets.example.com/foo.jpg)')
|
152
|
+
end
|
153
|
+
|
154
|
+
it "does not write a new bundle if the package has not expired" do
|
155
|
+
install_config <<-CONFIG
|
156
|
+
js_asset "signup" do
|
157
|
+
include "main.js"
|
158
|
+
end
|
159
|
+
CONFIG
|
160
|
+
AssetTrip.bundle!
|
161
|
+
|
162
|
+
asset_mtime = 5.minutes.ago
|
163
|
+
source_mtime = 10.minutes.ago
|
164
|
+
asset("signup.js").utime(asset_mtime, asset_mtime)
|
165
|
+
app_javascript("main.js").utime(source_mtime, source_mtime)
|
166
|
+
|
167
|
+
AssetTrip.bundle!
|
168
|
+
asset("signup.js").mtime.to_i.should == asset_mtime.to_i
|
169
|
+
end
|
170
|
+
|
171
|
+
it "should use the most recent package to detect mtimes for expiry" do
|
172
|
+
install_config <<-CONFIG
|
173
|
+
js_asset "signup" do
|
174
|
+
include "main.js"
|
175
|
+
end
|
176
|
+
CONFIG
|
177
|
+
AssetTrip.bundle!
|
178
|
+
|
179
|
+
asset_mtime = 5.minutes.ago
|
180
|
+
source_mtime = 10.minutes.ago
|
181
|
+
oldest_asset_mtime = 15.minutes.ago
|
182
|
+
|
183
|
+
asset("signup.js").utime(asset_mtime, asset_mtime)
|
184
|
+
app_javascript("main.js").utime(source_mtime, source_mtime)
|
185
|
+
create_asset("46/123431bdc/signup.js", :mtime => oldest_asset_mtime)
|
186
|
+
|
187
|
+
AssetTrip.bundle!
|
188
|
+
assets("signup.js").map { |asset| asset.mtime.to_i }.sort.should == [oldest_asset_mtime.to_i, asset_mtime.to_i]
|
189
|
+
end
|
190
|
+
end
|
191
|
+
|
192
|
+
it "minifies JavaScript using the YUI Compressor" do
|
193
|
+
install_config <<-CONFIG
|
194
|
+
js_asset "signup" do
|
195
|
+
include "main"
|
196
|
+
end
|
197
|
+
CONFIG
|
198
|
+
|
199
|
+
write_javascript("main.js", <<-JAVASCRIPT)
|
200
|
+
// Comment
|
201
|
+
function foo() {
|
202
|
+
var long_var_name = 1;
|
203
|
+
return long_var_name + 1;
|
204
|
+
}
|
205
|
+
JAVASCRIPT
|
206
|
+
AssetTrip.bundle!
|
207
|
+
|
208
|
+
asset("signup.js").should_not have_contents('Comment')
|
209
|
+
asset("signup.js").should have_contents('return a+1')
|
210
|
+
end
|
211
|
+
|
212
|
+
it "minifies CSS using the YUI Compressor" do
|
213
|
+
install_config <<-CONFIG
|
214
|
+
css_asset "signup" do
|
215
|
+
include "new"
|
216
|
+
end
|
217
|
+
CONFIG
|
218
|
+
|
219
|
+
write_stylesheet("new.css", <<-STYLESHEET)
|
220
|
+
/* Comment */
|
221
|
+
.foo {
|
222
|
+
font-weight: bold;
|
223
|
+
}
|
224
|
+
STYLESHEET
|
225
|
+
AssetTrip.bundle!
|
226
|
+
|
227
|
+
asset("signup.css").should_not have_contents('Comment')
|
228
|
+
asset("signup.css").should have_contents('.foo{font-weight:bold;}')
|
229
|
+
end
|
230
|
+
|
231
|
+
it "raises a CompressorError if compression fails" do
|
232
|
+
install_config <<-CONFIG
|
233
|
+
js_asset "signup" do
|
234
|
+
include "main"
|
235
|
+
end
|
236
|
+
CONFIG
|
237
|
+
write_javascript("main.js", "!@$%&*")
|
238
|
+
|
239
|
+
lambda {
|
240
|
+
AssetTrip.bundle!
|
241
|
+
}.should raise_error(AssetTrip::CompressorError)
|
242
|
+
end
|
243
|
+
end
|
@@ -0,0 +1,53 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe "rake asset_trip:prune" do
|
4
|
+
setup_sandbox_app!(:each)
|
5
|
+
|
6
|
+
before do
|
7
|
+
AssetTrip::Compressor.stub!(:new => DummyCompressor.new)
|
8
|
+
end
|
9
|
+
|
10
|
+
it "removes assets not in the current Manifest" do
|
11
|
+
install_config <<-CONFIG
|
12
|
+
js_asset "signup" do
|
13
|
+
include "main.js"
|
14
|
+
end
|
15
|
+
CONFIG
|
16
|
+
AssetTrip.bundle!
|
17
|
+
AssetTrip.instance_variable_set(:@config, nil)
|
18
|
+
write_javascript("main.js", 'alert("new.main");')
|
19
|
+
AssetTrip.bundle!
|
20
|
+
load fixture_app.join("config", "asset_trip", "manifest.rb")
|
21
|
+
AssetTrip.prune!
|
22
|
+
assets("signup.js").should have(1).item
|
23
|
+
end
|
24
|
+
|
25
|
+
it "does not remove assets in the current Manifest" do
|
26
|
+
install_config <<-CONFIG
|
27
|
+
js_asset "signup" do
|
28
|
+
include "main.js"
|
29
|
+
end
|
30
|
+
CONFIG
|
31
|
+
AssetTrip.bundle!
|
32
|
+
load fixture_app.join("config", "asset_trip", "manifest.rb")
|
33
|
+
AssetTrip.prune!
|
34
|
+
assets("signup.js").should have(1).item
|
35
|
+
end
|
36
|
+
|
37
|
+
it "removes unknown files" do
|
38
|
+
install_config <<-CONFIG
|
39
|
+
js_asset "signup" do
|
40
|
+
include "main.js"
|
41
|
+
end
|
42
|
+
CONFIG
|
43
|
+
AssetTrip.bundle!
|
44
|
+
|
45
|
+
File.open(assets_path.join("blah.jpg"), "w") do |f|
|
46
|
+
f << "blah!"
|
47
|
+
end
|
48
|
+
|
49
|
+
load fixture_app.join("config", "asset_trip", "manifest.rb")
|
50
|
+
AssetTrip.prune!
|
51
|
+
assets("blah.jpg").should have(0).items
|
52
|
+
end
|
53
|
+
end
|
data/spec/spec.opts
ADDED
data/spec/spec_helper.rb
ADDED
@@ -0,0 +1,24 @@
|
|
1
|
+
require "asset_trip"
|
2
|
+
|
3
|
+
Dir[File.join(File.dirname(__FILE__), 'support', '*.rb')].each do |file|
|
4
|
+
require file
|
5
|
+
end
|
6
|
+
|
7
|
+
class DummyCompressor
|
8
|
+
def compress(contents)
|
9
|
+
return contents
|
10
|
+
end
|
11
|
+
end
|
12
|
+
|
13
|
+
Spec::Runner.configure do |config|
|
14
|
+
config.include AssetTrip::Spec::Helpers
|
15
|
+
config.include AssetTrip::Spec::Matchers
|
16
|
+
config.include AssetTrip::Spec::PathUtils
|
17
|
+
config.extend AssetTrip::Spec::SandboxHelper
|
18
|
+
|
19
|
+
config.before do
|
20
|
+
# TODO: Is there a better way to accomodate this concern?
|
21
|
+
AssetTrip.instance_variable_set(:@config, nil)
|
22
|
+
AssetTrip.instance_variable_set(:@manifest, nil)
|
23
|
+
end
|
24
|
+
end
|
@@ -0,0 +1,33 @@
|
|
1
|
+
module AssetTrip
|
2
|
+
module Spec
|
3
|
+
module Helpers
|
4
|
+
|
5
|
+
def install_config(config_source, filename = "assets.rb")
|
6
|
+
FileUtils.mkdir_p(fixture_app)
|
7
|
+
File.open(fixture_app("config", "asset_trip", filename), 'w') do |f|
|
8
|
+
f.puts config_source
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def write_javascript(name, contents)
|
13
|
+
File.open(app_javascript(name), "w") do |f|
|
14
|
+
f.puts contents
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
18
|
+
def write_stylesheet(name, contents)
|
19
|
+
File.open(app_stylesheet(name), "w") do |f|
|
20
|
+
f.puts contents
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def create_asset(path, opts = {})
|
25
|
+
fake_asset = assets_path.join(path)
|
26
|
+
FileUtils.mkdir_p(fake_asset.dirname)
|
27
|
+
FileUtils.touch(fake_asset)
|
28
|
+
fake_asset.utime(opts[:mtime], opts[:mtime]) if opts[:mtime]
|
29
|
+
end
|
30
|
+
|
31
|
+
end
|
32
|
+
end
|
33
|
+
end
|
@@ -0,0 +1,67 @@
|
|
1
|
+
module AssetTrip
|
2
|
+
module Spec
|
3
|
+
module Matchers
|
4
|
+
|
5
|
+
class BeLike
|
6
|
+
def initialize(expected)
|
7
|
+
@expected = expected
|
8
|
+
end
|
9
|
+
|
10
|
+
def matches?(actual)
|
11
|
+
@actual = actual
|
12
|
+
@expected.gsub(/\s+/, ' ').strip == @actual.gsub(/\s+/, ' ').strip
|
13
|
+
end
|
14
|
+
|
15
|
+
def failure_message
|
16
|
+
"expected\n#{@actual}\nto be like\n#{@expected}"
|
17
|
+
end
|
18
|
+
|
19
|
+
def negative_failure_message
|
20
|
+
"expected\n#{@actual}\nto be unlike\n#{@expected}"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def be_like(expected)
|
25
|
+
BeLike.new(expected)
|
26
|
+
end
|
27
|
+
|
28
|
+
def have_asset(name)
|
29
|
+
simple_matcher("have asset") do |path|
|
30
|
+
File.exist?(assets_path.glob("**", name).first)
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
def have_directory(name)
|
35
|
+
simple_matcher("have directory") do |path|
|
36
|
+
matches = path.glob("**", name)
|
37
|
+
matches.any? { |path| File.directory?(path) }
|
38
|
+
end
|
39
|
+
end
|
40
|
+
|
41
|
+
class HaveContents
|
42
|
+
def initialize(text)
|
43
|
+
@text = text
|
44
|
+
end
|
45
|
+
|
46
|
+
def matches?(path)
|
47
|
+
@path = path
|
48
|
+
@actual = File.read(path)
|
49
|
+
@actual.include?(@text)
|
50
|
+
end
|
51
|
+
|
52
|
+
def failure_message
|
53
|
+
"expected #{@path}\n#{@actual}\nto include\n#{@text}"
|
54
|
+
end
|
55
|
+
|
56
|
+
def negative_failure_message
|
57
|
+
"expected #{@path}\n#{@actual}\nto not include\n#{@text}"
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
def have_contents(text)
|
62
|
+
HaveContents.new(text)
|
63
|
+
end
|
64
|
+
|
65
|
+
end
|
66
|
+
end
|
67
|
+
end
|
@@ -0,0 +1,45 @@
|
|
1
|
+
module AssetTrip
|
2
|
+
module Spec
|
3
|
+
module PathUtils
|
4
|
+
|
5
|
+
def reset_filesystem!
|
6
|
+
tmp_path.rmtree if tmp_path.exist?
|
7
|
+
tmp_path.mkdir
|
8
|
+
FileUtils.cp_r(root.join("spec", "fixtures"), fixture_app)
|
9
|
+
end
|
10
|
+
|
11
|
+
def root
|
12
|
+
Pathname.new(__FILE__).dirname.join('..', '..').expand_path
|
13
|
+
end
|
14
|
+
|
15
|
+
def tmp_path
|
16
|
+
root.join("tmp")
|
17
|
+
end
|
18
|
+
|
19
|
+
def fixture_app(*args)
|
20
|
+
tmp_path.join("fixture_app", *args)
|
21
|
+
end
|
22
|
+
|
23
|
+
def app_javascript(*args)
|
24
|
+
fixture_app.join("app", "javascripts", *args)
|
25
|
+
end
|
26
|
+
|
27
|
+
def app_stylesheet(*args)
|
28
|
+
fixture_app.join("app", "stylesheets", *args)
|
29
|
+
end
|
30
|
+
|
31
|
+
def asset(name)
|
32
|
+
assets(name).first
|
33
|
+
end
|
34
|
+
|
35
|
+
def assets(name)
|
36
|
+
assets_path.glob("**", name)
|
37
|
+
end
|
38
|
+
|
39
|
+
def assets_path
|
40
|
+
fixture_app.join("public", "assets")
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
end
|
45
|
+
end
|
@@ -0,0 +1,19 @@
|
|
1
|
+
module AssetTrip
|
2
|
+
module Spec
|
3
|
+
module SandboxHelper
|
4
|
+
|
5
|
+
def setup_sandbox_app!(around = :all)
|
6
|
+
before(around) do
|
7
|
+
reset_filesystem!
|
8
|
+
@old_pwd = Dir.pwd
|
9
|
+
Dir.chdir(fixture_app)
|
10
|
+
end
|
11
|
+
|
12
|
+
after(around) do
|
13
|
+
Dir.chdir(@old_pwd)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
Binary file
|
metadata
ADDED
@@ -0,0 +1,128 @@
|
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
|
+
name: asset-trip
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.1.0
|
5
|
+
platform: ruby
|
6
|
+
authors:
|
7
|
+
- Bryan Helmkamp
|
8
|
+
autorequire:
|
9
|
+
bindir: bin
|
10
|
+
cert_chain: []
|
11
|
+
|
12
|
+
date: 2009-11-05 00:00:00 -05:00
|
13
|
+
default_executable:
|
14
|
+
dependencies: []
|
15
|
+
|
16
|
+
description: |-
|
17
|
+
Asset Trip bundles JavaScript and CSS files at deploy time. The assets are
|
18
|
+
then served from a Git-esque object store in the application's public
|
19
|
+
directory.
|
20
|
+
email: bryan@brynary.com
|
21
|
+
executables: []
|
22
|
+
|
23
|
+
extensions: []
|
24
|
+
|
25
|
+
extra_rdoc_files:
|
26
|
+
- History.txt
|
27
|
+
- README.rdoc
|
28
|
+
- MIT-LICENSE.txt
|
29
|
+
files:
|
30
|
+
- .gitignore
|
31
|
+
- History.txt
|
32
|
+
- MIT-LICENSE.txt
|
33
|
+
- README.rdoc
|
34
|
+
- Rakefile
|
35
|
+
- Thorfile
|
36
|
+
- asset-trip.gemspec
|
37
|
+
- init.rb
|
38
|
+
- lib/asset_trip.rb
|
39
|
+
- lib/asset_trip/asset.rb
|
40
|
+
- lib/asset_trip/compressor.rb
|
41
|
+
- lib/asset_trip/config.rb
|
42
|
+
- lib/asset_trip/file_writer.rb
|
43
|
+
- lib/asset_trip/helper.rb
|
44
|
+
- lib/asset_trip/javascript.rb
|
45
|
+
- lib/asset_trip/load_path.rb
|
46
|
+
- lib/asset_trip/manifest.rb
|
47
|
+
- lib/asset_trip/manifest_writer.rb
|
48
|
+
- lib/asset_trip/memoizable.rb
|
49
|
+
- lib/asset_trip/middleware.rb
|
50
|
+
- lib/asset_trip/ssl_stylesheet.rb
|
51
|
+
- lib/asset_trip/stylesheet.rb
|
52
|
+
- lib/asset_trip/url_rewriter.rb
|
53
|
+
- spec/asset_trip/asset_spec.rb
|
54
|
+
- spec/asset_trip/compressor_spec.rb
|
55
|
+
- spec/asset_trip/config_spec.rb
|
56
|
+
- spec/asset_trip/helper_spec.rb
|
57
|
+
- spec/asset_trip/javascript_spec.rb
|
58
|
+
- spec/asset_trip/load_path_spec.rb
|
59
|
+
- spec/asset_trip/manifest_writer_spec.rb
|
60
|
+
- spec/asset_trip/middleware_spec.rb
|
61
|
+
- spec/asset_trip/stylesheet_spec.rb
|
62
|
+
- spec/asset_trip/url_rewriter_spec.rb
|
63
|
+
- spec/asset_trip_spec.rb
|
64
|
+
- spec/fixtures/app/javascripts/main.js
|
65
|
+
- spec/fixtures/app/javascripts/main/new.js
|
66
|
+
- spec/fixtures/app/javascripts/signup.js
|
67
|
+
- spec/fixtures/app/stylesheets/new.css
|
68
|
+
- spec/fixtures/config/asset_trip/assets.rb
|
69
|
+
- spec/integration/bundle_spec.rb
|
70
|
+
- spec/integration/prune_spec.rb
|
71
|
+
- spec/spec.opts
|
72
|
+
- spec/spec_helper.rb
|
73
|
+
- spec/support/core_extensions.rb
|
74
|
+
- spec/support/helpers.rb
|
75
|
+
- spec/support/matchers.rb
|
76
|
+
- spec/support/path_utils.rb
|
77
|
+
- spec/support/sandbox_helper.rb
|
78
|
+
- tasks/asset_trip.rake
|
79
|
+
- vendor/yuicompressor-2.4.2.jar
|
80
|
+
has_rdoc: true
|
81
|
+
homepage: http://github.com/brynary/asset-trip
|
82
|
+
licenses: []
|
83
|
+
|
84
|
+
post_install_message:
|
85
|
+
rdoc_options: []
|
86
|
+
|
87
|
+
require_paths:
|
88
|
+
- lib
|
89
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
90
|
+
requirements:
|
91
|
+
- - ">="
|
92
|
+
- !ruby/object:Gem::Version
|
93
|
+
version: "0"
|
94
|
+
version:
|
95
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
96
|
+
requirements:
|
97
|
+
- - ">="
|
98
|
+
- !ruby/object:Gem::Version
|
99
|
+
version: "0"
|
100
|
+
version:
|
101
|
+
requirements: []
|
102
|
+
|
103
|
+
rubyforge_project:
|
104
|
+
rubygems_version: 1.3.5
|
105
|
+
signing_key:
|
106
|
+
specification_version: 3
|
107
|
+
summary: Rails asset bundling plugin that will expand your mind
|
108
|
+
test_files:
|
109
|
+
- spec/asset_trip/asset_spec.rb
|
110
|
+
- spec/asset_trip/compressor_spec.rb
|
111
|
+
- spec/asset_trip/config_spec.rb
|
112
|
+
- spec/asset_trip/helper_spec.rb
|
113
|
+
- spec/asset_trip/javascript_spec.rb
|
114
|
+
- spec/asset_trip/load_path_spec.rb
|
115
|
+
- spec/asset_trip/manifest_writer_spec.rb
|
116
|
+
- spec/asset_trip/middleware_spec.rb
|
117
|
+
- spec/asset_trip/stylesheet_spec.rb
|
118
|
+
- spec/asset_trip/url_rewriter_spec.rb
|
119
|
+
- spec/asset_trip_spec.rb
|
120
|
+
- spec/fixtures/config/asset_trip/assets.rb
|
121
|
+
- spec/integration/bundle_spec.rb
|
122
|
+
- spec/integration/prune_spec.rb
|
123
|
+
- spec/spec_helper.rb
|
124
|
+
- spec/support/core_extensions.rb
|
125
|
+
- spec/support/helpers.rb
|
126
|
+
- spec/support/matchers.rb
|
127
|
+
- spec/support/path_utils.rb
|
128
|
+
- spec/support/sandbox_helper.rb
|