sprockets-rails 1.0.0 → 2.0.0.backport1
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.
- 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
|