sprockets-rails 1.0.0 → 2.0.0.backport1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.md +155 -0
- data/lib/sprockets/rails.rb +3 -0
- data/lib/sprockets/rails/helper.rb +145 -0
- data/lib/sprockets/rails/legacy_asset_tag_helper.rb +32 -0
- data/lib/sprockets/rails/legacy_asset_url_helper.rb +130 -0
- data/lib/sprockets/rails/task.rb +82 -0
- data/lib/sprockets/railtie.rb +125 -0
- metadata +52 -81
- data/MIT-LICENSE +0 -20
- data/README.rdoc +0 -3
- data/Rakefile +0 -24
- data/lib/sprockets-rails.rb +0 -7
- data/lib/sprockets/rails/bootstrap.rb +0 -41
- data/lib/sprockets/rails/compressors.rb +0 -87
- data/lib/sprockets/rails/helpers.rb +0 -8
- data/lib/sprockets/rails/helpers/isolated_helper.rb +0 -15
- data/lib/sprockets/rails/helpers/rails_helper.rb +0 -169
- data/lib/sprockets/rails/railtie.rb +0 -64
- data/lib/sprockets/rails/static_compiler.rb +0 -64
- data/lib/sprockets/rails/version.rb +0 -5
- data/lib/tasks/assets.rake +0 -105
- data/test/abstract_unit.rb +0 -145
- data/test/assets_debugging_test.rb +0 -65
- data/test/assets_test.rb +0 -532
- data/test/fixtures/alternate/stylesheets/style.css +0 -1
- data/test/fixtures/app/fonts/dir/font.ttf +0 -0
- data/test/fixtures/app/fonts/font.ttf +0 -0
- data/test/fixtures/app/images/logo.png +0 -0
- data/test/fixtures/app/javascripts/application.js +0 -1
- data/test/fixtures/app/javascripts/dir/xmlhr.js +0 -0
- data/test/fixtures/app/javascripts/extra.js +0 -0
- data/test/fixtures/app/javascripts/xmlhr.js +0 -0
- data/test/fixtures/app/stylesheets/application.css +0 -1
- data/test/fixtures/app/stylesheets/dir/style.css +0 -0
- data/test/fixtures/app/stylesheets/extra.css +0 -0
- data/test/fixtures/app/stylesheets/style.css +0 -0
- data/test/sprockets_compressors_test.rb +0 -27
- data/test/sprockets_helper_test.rb +0 -345
- data/test/sprockets_helper_with_routes_test.rb +0 -60
- data/test/test_helper.rb +0 -84
data/lib/sprockets-rails.rb
DELETED
@@ -1,41 +0,0 @@
|
|
1
|
-
module Sprockets
|
2
|
-
module Rails
|
3
|
-
class Bootstrap
|
4
|
-
def initialize(app)
|
5
|
-
@app = app
|
6
|
-
end
|
7
|
-
|
8
|
-
# TODO: Get rid of config.assets.enabled
|
9
|
-
def run
|
10
|
-
app, config = @app, @app.config
|
11
|
-
return unless app.assets
|
12
|
-
|
13
|
-
config.assets.paths.each { |path| app.assets.append_path(path) }
|
14
|
-
|
15
|
-
if config.assets.compress
|
16
|
-
# temporarily hardcode default JS compressor to uglify. Soon, it will work
|
17
|
-
# the same as SCSS, where a default plugin sets the default.
|
18
|
-
unless config.assets.js_compressor == false
|
19
|
-
js_compressor = config.assets.js_compressor || :uglifier
|
20
|
-
app.assets.js_compressor = LazyCompressor.new { Sprockets::Rails::Compressors.registered_js_compressor(js_compressor) }
|
21
|
-
end
|
22
|
-
|
23
|
-
unless config.assets.css_compressor == false
|
24
|
-
css_compressor = config.assets.css_compressor
|
25
|
-
app.assets.css_compressor = LazyCompressor.new { Sprockets::Rails::Compressors.registered_css_compressor(css_compressor) }
|
26
|
-
end
|
27
|
-
end
|
28
|
-
|
29
|
-
if config.assets.compile
|
30
|
-
app.routes.prepend do
|
31
|
-
mount app.assets => config.assets.prefix
|
32
|
-
end
|
33
|
-
end
|
34
|
-
|
35
|
-
if config.assets.digest
|
36
|
-
app.assets = app.assets.index
|
37
|
-
end
|
38
|
-
end
|
39
|
-
end
|
40
|
-
end
|
41
|
-
end
|
@@ -1,87 +0,0 @@
|
|
1
|
-
module Sprockets
|
2
|
-
module Rails
|
3
|
-
module Compressors
|
4
|
-
extend self
|
5
|
-
|
6
|
-
@@css_compressors = {}
|
7
|
-
@@js_compressors = {}
|
8
|
-
@@default_css_compressor = nil
|
9
|
-
@@default_js_compressor = nil
|
10
|
-
|
11
|
-
def register_css_compressor(name, klass, options = {})
|
12
|
-
@@default_css_compressor = name.to_sym if options[:default] || @@default_css_compressor.nil?
|
13
|
-
@@css_compressors[name.to_sym] = { :klass => klass.to_s, :require => options[:require] }
|
14
|
-
end
|
15
|
-
|
16
|
-
def register_js_compressor(name, klass, options = {})
|
17
|
-
@@default_js_compressor = name.to_sym if options[:default] || @@default_js_compressor.nil?
|
18
|
-
@@js_compressors[name.to_sym] = { :klass => klass.to_s, :require => options[:require] }
|
19
|
-
end
|
20
|
-
|
21
|
-
def registered_css_compressor(name)
|
22
|
-
find_registered_compressor name, @@css_compressors, @@default_css_compressor
|
23
|
-
end
|
24
|
-
|
25
|
-
def registered_js_compressor(name)
|
26
|
-
find_registered_compressor name, @@js_compressors, @@default_js_compressor
|
27
|
-
end
|
28
|
-
|
29
|
-
# The default compressors must be registered in default plugins (ex. Sass-Rails)
|
30
|
-
register_css_compressor(:scss, 'Sass::Rails::Compressor', :require => 'sass/rails/compressor', :default => true)
|
31
|
-
register_js_compressor(:uglifier, 'Uglifier', :require => 'uglifier', :default => true)
|
32
|
-
|
33
|
-
# Automaticaly register some compressors
|
34
|
-
register_css_compressor(:yui, 'YUI::CssCompressor', :require => 'yui/compressor')
|
35
|
-
register_js_compressor(:closure, 'Closure::Compiler', :require => 'closure-compiler')
|
36
|
-
register_js_compressor(:yui, 'YUI::JavaScriptCompressor', :require => 'yui/compressor')
|
37
|
-
|
38
|
-
private
|
39
|
-
|
40
|
-
def find_registered_compressor(name, compressors_hash, default_compressor_name)
|
41
|
-
if name.respond_to?(:to_sym)
|
42
|
-
compressor = compressors_hash[name.to_sym] || compressors_hash[default_compressor_name]
|
43
|
-
require compressor[:require] if compressor[:require]
|
44
|
-
compressor[:klass].constantize.new
|
45
|
-
else
|
46
|
-
name
|
47
|
-
end
|
48
|
-
end
|
49
|
-
end
|
50
|
-
|
51
|
-
# An asset compressor which does nothing.
|
52
|
-
#
|
53
|
-
# This compressor simply returns the asset as-is, without any compression
|
54
|
-
# whatsoever. It is useful in development mode, when compression isn't
|
55
|
-
# needed but using the same asset pipeline as production is desired.
|
56
|
-
class NullCompressor #:nodoc:
|
57
|
-
def compress(content)
|
58
|
-
content
|
59
|
-
end
|
60
|
-
end
|
61
|
-
|
62
|
-
# An asset compressor which only initializes the underlying compression
|
63
|
-
# engine when needed.
|
64
|
-
#
|
65
|
-
# This postpones the initialization of the compressor until
|
66
|
-
# <code>#compress</code> is called the first time.
|
67
|
-
class LazyCompressor #:nodoc:
|
68
|
-
# Initializes a new LazyCompressor.
|
69
|
-
#
|
70
|
-
# The block should return a compressor when called, i.e. an object
|
71
|
-
# which responds to <code>#compress</code>.
|
72
|
-
def initialize(&block)
|
73
|
-
@block = block
|
74
|
-
end
|
75
|
-
|
76
|
-
def compress(content)
|
77
|
-
compressor.compress(content)
|
78
|
-
end
|
79
|
-
|
80
|
-
private
|
81
|
-
|
82
|
-
def compressor
|
83
|
-
@compressor ||= (@block.call || NullCompressor.new)
|
84
|
-
end
|
85
|
-
end
|
86
|
-
end
|
87
|
-
end
|
@@ -1,169 +0,0 @@
|
|
1
|
-
require "action_view"
|
2
|
-
|
3
|
-
module Sprockets
|
4
|
-
module Rails
|
5
|
-
module Helpers
|
6
|
-
module RailsHelper
|
7
|
-
extend ActiveSupport::Concern
|
8
|
-
include ActionView::Helpers::AssetTagHelper
|
9
|
-
|
10
|
-
def asset_paths
|
11
|
-
@asset_paths ||= begin
|
12
|
-
paths = RailsHelper::AssetPaths.new(config, controller)
|
13
|
-
paths.asset_environment = asset_environment
|
14
|
-
paths.asset_digests = asset_digests
|
15
|
-
paths.compile_assets = compile_assets?
|
16
|
-
paths.digest_assets = digest_assets?
|
17
|
-
paths
|
18
|
-
end
|
19
|
-
end
|
20
|
-
|
21
|
-
def javascript_include_tag(*sources)
|
22
|
-
options = sources.extract_options!
|
23
|
-
debug = options.delete(:debug) { debug_assets? }
|
24
|
-
body = options.delete(:body) { false }
|
25
|
-
digest = options.delete(:digest) { digest_assets? }
|
26
|
-
|
27
|
-
sources.collect do |source|
|
28
|
-
if debug && asset = asset_paths.asset_for(source, 'js')
|
29
|
-
asset.to_a.map { |dep|
|
30
|
-
super(dep.pathname.to_s, { :src => path_to_asset(dep, :ext => 'js', :body => true, :digest => digest) }.merge!(options))
|
31
|
-
}
|
32
|
-
else
|
33
|
-
super(source.to_s, { :src => path_to_asset(source, :ext => 'js', :body => body, :digest => digest) }.merge!(options))
|
34
|
-
end
|
35
|
-
end.join("\n").html_safe
|
36
|
-
end
|
37
|
-
|
38
|
-
def stylesheet_link_tag(*sources)
|
39
|
-
options = sources.extract_options!
|
40
|
-
debug = options.delete(:debug) { debug_assets? }
|
41
|
-
body = options.delete(:body) { false }
|
42
|
-
digest = options.delete(:digest) { digest_assets? }
|
43
|
-
|
44
|
-
sources.collect do |source|
|
45
|
-
if debug && asset = asset_paths.asset_for(source, 'css')
|
46
|
-
asset.to_a.map { |dep|
|
47
|
-
super(dep.pathname.to_s, { :href => path_to_asset(dep, :ext => 'css', :body => true, :protocol => :request, :digest => digest) }.merge!(options))
|
48
|
-
}
|
49
|
-
else
|
50
|
-
super(source.to_s, { :href => path_to_asset(source, :ext => 'css', :body => body, :protocol => :request, :digest => digest) }.merge!(options))
|
51
|
-
end
|
52
|
-
end.join("\n").html_safe
|
53
|
-
end
|
54
|
-
|
55
|
-
def asset_path(source, options = {})
|
56
|
-
source = source.logical_path if source.respond_to?(:logical_path)
|
57
|
-
path = asset_paths.compute_public_path(source, asset_prefix, options.merge(:body => true))
|
58
|
-
options[:body] ? "#{path}?body=1" : path
|
59
|
-
end
|
60
|
-
alias_method :path_to_asset, :asset_path # aliased to avoid conflicts with an asset_path named route
|
61
|
-
|
62
|
-
def image_path(source)
|
63
|
-
path_to_asset(source)
|
64
|
-
end
|
65
|
-
alias_method :path_to_image, :image_path # aliased to avoid conflicts with an image_path named route
|
66
|
-
|
67
|
-
def font_path(source)
|
68
|
-
path_to_asset(source)
|
69
|
-
end
|
70
|
-
alias_method :path_to_font, :font_path # aliased to avoid conflicts with an font_path named route
|
71
|
-
|
72
|
-
def javascript_path(source)
|
73
|
-
path_to_asset(source, :ext => 'js')
|
74
|
-
end
|
75
|
-
alias_method :path_to_javascript, :javascript_path # aliased to avoid conflicts with an javascript_path named route
|
76
|
-
|
77
|
-
def stylesheet_path(source)
|
78
|
-
path_to_asset(source, :ext => 'css')
|
79
|
-
end
|
80
|
-
alias_method :path_to_stylesheet, :stylesheet_path # aliased to avoid conflicts with an stylesheet_path named route
|
81
|
-
|
82
|
-
private
|
83
|
-
def debug_assets?
|
84
|
-
compile_assets? && (::Rails.application.config.assets.debug || params[:debug_assets])
|
85
|
-
rescue NameError
|
86
|
-
false
|
87
|
-
end
|
88
|
-
|
89
|
-
# Override to specify an alternative prefix for asset path generation.
|
90
|
-
# When combined with a custom +asset_environment+, this can be used to
|
91
|
-
# implement themes that can take advantage of the asset pipeline.
|
92
|
-
#
|
93
|
-
# If you only want to change where the assets are mounted, refer to
|
94
|
-
# +config.assets.prefix+ instead.
|
95
|
-
def asset_prefix
|
96
|
-
::Rails.application.config.assets.prefix
|
97
|
-
end
|
98
|
-
|
99
|
-
def asset_digests
|
100
|
-
::Rails.application.config.assets.digests
|
101
|
-
end
|
102
|
-
|
103
|
-
def compile_assets?
|
104
|
-
::Rails.application.config.assets.compile
|
105
|
-
end
|
106
|
-
|
107
|
-
def digest_assets?
|
108
|
-
::Rails.application.config.assets.digest
|
109
|
-
end
|
110
|
-
|
111
|
-
# Override to specify an alternative asset environment for asset
|
112
|
-
# path generation. The environment should already have been mounted
|
113
|
-
# at the prefix returned by +asset_prefix+.
|
114
|
-
def asset_environment
|
115
|
-
::Rails.application.assets
|
116
|
-
end
|
117
|
-
|
118
|
-
class AssetPaths < ::ActionView::AssetPaths #:nodoc:
|
119
|
-
attr_accessor :asset_environment, :asset_prefix, :asset_digests, :compile_assets, :digest_assets
|
120
|
-
|
121
|
-
class AssetNotPrecompiledError < StandardError; end
|
122
|
-
|
123
|
-
def asset_for(source, ext)
|
124
|
-
source = source.to_s
|
125
|
-
return nil if is_uri?(source)
|
126
|
-
source = rewrite_extension(source, nil, ext)
|
127
|
-
asset_environment[source]
|
128
|
-
rescue Sprockets::FileOutsidePaths
|
129
|
-
nil
|
130
|
-
end
|
131
|
-
|
132
|
-
def digest_for(logical_path)
|
133
|
-
if digest_assets && asset_digests && (digest = asset_digests[logical_path])
|
134
|
-
return digest
|
135
|
-
end
|
136
|
-
|
137
|
-
if compile_assets
|
138
|
-
if digest_assets && asset = asset_environment[logical_path]
|
139
|
-
return asset.digest_path
|
140
|
-
end
|
141
|
-
return logical_path
|
142
|
-
else
|
143
|
-
raise AssetNotPrecompiledError.new("#{logical_path} isn't precompiled")
|
144
|
-
end
|
145
|
-
end
|
146
|
-
|
147
|
-
def rewrite_asset_path(source, dir, options = {})
|
148
|
-
if source[0] == ?/
|
149
|
-
source
|
150
|
-
else
|
151
|
-
source = digest_for(source) unless options[:digest] == false
|
152
|
-
source = File.join(dir, source)
|
153
|
-
source = "/#{source}" unless source =~ /^\//
|
154
|
-
source
|
155
|
-
end
|
156
|
-
end
|
157
|
-
|
158
|
-
def rewrite_extension(source, dir, ext)
|
159
|
-
if ext && File.extname(source) != ".#{ext}"
|
160
|
-
"#{source}.#{ext}"
|
161
|
-
else
|
162
|
-
source
|
163
|
-
end
|
164
|
-
end
|
165
|
-
end
|
166
|
-
end
|
167
|
-
end
|
168
|
-
end
|
169
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require "action_controller/railtie"
|
2
|
-
|
3
|
-
module Sprockets
|
4
|
-
module Rails
|
5
|
-
autoload :Bootstrap, "sprockets/rails/bootstrap"
|
6
|
-
autoload :Helpers, "sprockets/rails/helpers"
|
7
|
-
autoload :Compressors, "sprockets/rails/compressors"
|
8
|
-
autoload :LazyCompressor, "sprockets/rails/compressors"
|
9
|
-
autoload :NullCompressor, "sprockets/rails/compressors"
|
10
|
-
autoload :StaticCompiler, "sprockets/rails/static_compiler"
|
11
|
-
|
12
|
-
# TODO: Get rid of config.assets.enabled
|
13
|
-
class Railtie < ::Rails::Railtie
|
14
|
-
rake_tasks do
|
15
|
-
load "tasks/assets.rake"
|
16
|
-
end
|
17
|
-
|
18
|
-
initializer "sprockets.environment", :group => :all do |app|
|
19
|
-
config = app.config
|
20
|
-
next unless config.assets.enabled
|
21
|
-
|
22
|
-
require 'sprockets'
|
23
|
-
|
24
|
-
app.assets = Sprockets::Environment.new(app.root.to_s) do |env|
|
25
|
-
env.version = ::Rails.env + "-#{config.assets.version}"
|
26
|
-
|
27
|
-
if config.assets.logger != false
|
28
|
-
env.logger = config.assets.logger || ::Rails.logger
|
29
|
-
end
|
30
|
-
|
31
|
-
if config.assets.cache_store != false
|
32
|
-
env.cache = ActiveSupport::Cache.lookup_store(config.assets.cache_store) || ::Rails.cache
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
if config.assets.manifest
|
37
|
-
path = File.join(config.assets.manifest, "manifest.yml")
|
38
|
-
else
|
39
|
-
path = File.join(::Rails.public_path, config.assets.prefix, "manifest.yml")
|
40
|
-
end
|
41
|
-
|
42
|
-
if File.exist?(path)
|
43
|
-
config.assets.digests = YAML.load_file(path)
|
44
|
-
end
|
45
|
-
|
46
|
-
ActiveSupport.on_load(:action_view) do
|
47
|
-
include ::Sprockets::Rails::Helpers::RailsHelper
|
48
|
-
app.assets.context_class.instance_eval do
|
49
|
-
include ::Sprockets::Rails::Helpers::IsolatedHelper
|
50
|
-
include ::Sprockets::Rails::Helpers::RailsHelper
|
51
|
-
end
|
52
|
-
end
|
53
|
-
end
|
54
|
-
|
55
|
-
# We need to configure this after initialization to ensure we collect
|
56
|
-
# paths from all engines. This hook is invoked exactly before routes
|
57
|
-
# are compiled, and so that other Railties have an opportunity to
|
58
|
-
# register compressors.
|
59
|
-
config.after_initialize do |app|
|
60
|
-
Sprockets::Rails::Bootstrap.new(app).run
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|
@@ -1,64 +0,0 @@
|
|
1
|
-
require 'fileutils'
|
2
|
-
|
3
|
-
module Sprockets
|
4
|
-
module Rails
|
5
|
-
class StaticCompiler
|
6
|
-
attr_accessor :env, :target, :paths
|
7
|
-
|
8
|
-
def initialize(env, target, paths, options = {})
|
9
|
-
@env = env
|
10
|
-
@target = target
|
11
|
-
@paths = paths
|
12
|
-
@digest = options.fetch(:digest, true)
|
13
|
-
@manifest = options.fetch(:manifest, true)
|
14
|
-
@manifest_path = options.delete(:manifest_path) || target
|
15
|
-
@zip_files = options.delete(:zip_files) || /\.(?:css|html|js|svg|txt|xml)$/
|
16
|
-
end
|
17
|
-
|
18
|
-
def compile
|
19
|
-
manifest = {}
|
20
|
-
env.each_logical_path do |logical_path|
|
21
|
-
next unless compile_path?(logical_path)
|
22
|
-
if asset = env.find_asset(logical_path)
|
23
|
-
manifest[logical_path] = write_asset(asset)
|
24
|
-
end
|
25
|
-
end
|
26
|
-
write_manifest(manifest) if @manifest
|
27
|
-
end
|
28
|
-
|
29
|
-
def write_manifest(manifest)
|
30
|
-
FileUtils.mkdir_p(@manifest_path)
|
31
|
-
File.open("#{@manifest_path}/manifest.yml", 'wb') do |f|
|
32
|
-
YAML.dump(manifest, f)
|
33
|
-
end
|
34
|
-
end
|
35
|
-
|
36
|
-
def write_asset(asset)
|
37
|
-
path_for(asset).tap do |path|
|
38
|
-
filename = File.join(target, path)
|
39
|
-
FileUtils.mkdir_p File.dirname(filename)
|
40
|
-
asset.write_to(filename)
|
41
|
-
asset.write_to("#{filename}.gz") if filename.to_s =~ @zip_files
|
42
|
-
end
|
43
|
-
end
|
44
|
-
|
45
|
-
def compile_path?(logical_path)
|
46
|
-
paths.each do |path|
|
47
|
-
case path
|
48
|
-
when Regexp
|
49
|
-
return true if path.match(logical_path)
|
50
|
-
when Proc
|
51
|
-
return true if path.call(logical_path)
|
52
|
-
else
|
53
|
-
return true if File.fnmatch(path.to_s, logical_path)
|
54
|
-
end
|
55
|
-
end
|
56
|
-
false
|
57
|
-
end
|
58
|
-
|
59
|
-
def path_for(asset)
|
60
|
-
@digest ? asset.digest_path : asset.logical_path
|
61
|
-
end
|
62
|
-
end
|
63
|
-
end
|
64
|
-
end
|