sprockets-rails 2.3.2 → 3.2.2
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 +5 -5
- data/{LICENSE → MIT-LICENSE} +1 -1
- data/README.md +66 -36
- data/lib/sprockets/rails/context.rb +48 -0
- data/lib/sprockets/rails/helper.rb +271 -128
- data/lib/sprockets/rails/quiet_assets.rb +18 -0
- data/lib/sprockets/rails/route_wrapper.rb +23 -0
- data/lib/sprockets/rails/task.rb +10 -15
- data/lib/sprockets/rails/utils.rb +11 -0
- data/lib/sprockets/rails/version.rb +1 -1
- data/lib/sprockets/railtie.rb +173 -75
- metadata +38 -43
- data/lib/sprockets/rails/legacy_asset_tag_helper.rb +0 -32
- data/lib/sprockets/rails/legacy_asset_url_helper.rb +0 -133
@@ -0,0 +1,18 @@
|
|
1
|
+
module Sprockets
|
2
|
+
module Rails
|
3
|
+
class QuietAssets
|
4
|
+
def initialize(app)
|
5
|
+
@app = app
|
6
|
+
@assets_regex = %r(\A/{0,2}#{::Rails.application.config.assets.prefix})
|
7
|
+
end
|
8
|
+
|
9
|
+
def call(env)
|
10
|
+
if env['PATH_INFO'] =~ @assets_regex
|
11
|
+
::Rails.logger.silence { @app.call(env) }
|
12
|
+
else
|
13
|
+
@app.call(env)
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Sprockets
|
2
|
+
module Rails
|
3
|
+
module RouteWrapper
|
4
|
+
|
5
|
+
def internal_assets_path?
|
6
|
+
path =~ %r{\A#{self.class.assets_prefix}\z}
|
7
|
+
end
|
8
|
+
|
9
|
+
def internal?
|
10
|
+
super || internal_assets_path?
|
11
|
+
end
|
12
|
+
|
13
|
+
def self.included(klass)
|
14
|
+
klass.class_eval do
|
15
|
+
def internal_with_sprockets?
|
16
|
+
internal_without_sprockets? || internal_assets_path?
|
17
|
+
end
|
18
|
+
alias_method_chain :internal?, :sprockets
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/sprockets/rails/task.rb
CHANGED
@@ -2,7 +2,6 @@ require 'rake'
|
|
2
2
|
require 'rake/sprocketstask'
|
3
3
|
require 'sprockets'
|
4
4
|
require 'action_view'
|
5
|
-
require 'action_view/base'
|
6
5
|
|
7
6
|
module Sprockets
|
8
7
|
module Rails
|
@@ -16,7 +15,9 @@ module Sprockets
|
|
16
15
|
|
17
16
|
def environment
|
18
17
|
if app
|
19
|
-
app.assets
|
18
|
+
# Use initialized app.assets or force build an environment if
|
19
|
+
# config.assets.compile is disabled
|
20
|
+
app.assets || Sprockets::Railtie.build_environment(app)
|
20
21
|
else
|
21
22
|
super
|
22
23
|
end
|
@@ -24,7 +25,8 @@ module Sprockets
|
|
24
25
|
|
25
26
|
def output
|
26
27
|
if app
|
27
|
-
|
28
|
+
config = app.config
|
29
|
+
File.join(config.paths['public'].first, config.assets.prefix)
|
28
30
|
else
|
29
31
|
super
|
30
32
|
end
|
@@ -46,17 +48,12 @@ module Sprockets
|
|
46
48
|
end
|
47
49
|
end
|
48
50
|
|
49
|
-
def cache_path
|
50
|
-
if app
|
51
|
-
"#{app.config.root}/tmp/cache/assets"
|
52
|
-
else
|
53
|
-
@cache_path
|
54
|
-
end
|
55
|
-
end
|
56
|
-
attr_writer :cache_path
|
57
|
-
|
58
51
|
def define
|
59
52
|
namespace :assets do
|
53
|
+
%w( environment precompile clean clobber ).each do |task|
|
54
|
+
Rake::Task[task].clear if Rake::Task.task_defined?(task)
|
55
|
+
end
|
56
|
+
|
60
57
|
# Override this task change the loaded dependencies
|
61
58
|
desc "Load asset compile environment"
|
62
59
|
task :environment do
|
@@ -73,9 +70,8 @@ module Sprockets
|
|
73
70
|
|
74
71
|
desc "Remove old compiled assets"
|
75
72
|
task :clean, [:keep] => :environment do |t, args|
|
76
|
-
keep = Integer(args.keep || 2)
|
77
73
|
with_logger do
|
78
|
-
manifest.clean(keep)
|
74
|
+
manifest.clean(Integer(args.keep || self.keep))
|
79
75
|
end
|
80
76
|
end
|
81
77
|
|
@@ -83,7 +79,6 @@ module Sprockets
|
|
83
79
|
task :clobber => :environment do
|
84
80
|
with_logger do
|
85
81
|
manifest.clobber
|
86
|
-
rm_rf cache_path if cache_path
|
87
82
|
end
|
88
83
|
end
|
89
84
|
end
|
data/lib/sprockets/railtie.rb
CHANGED
@@ -2,9 +2,14 @@ require 'rails'
|
|
2
2
|
require 'rails/railtie'
|
3
3
|
require 'action_controller/railtie'
|
4
4
|
require 'active_support/core_ext/module/remove_method'
|
5
|
+
require 'active_support/core_ext/numeric/bytes'
|
5
6
|
require 'sprockets'
|
7
|
+
require 'sprockets/rails/context'
|
6
8
|
require 'sprockets/rails/helper'
|
9
|
+
require 'sprockets/rails/quiet_assets'
|
10
|
+
require 'sprockets/rails/route_wrapper'
|
7
11
|
require 'sprockets/rails/version'
|
12
|
+
require 'set'
|
8
13
|
|
9
14
|
module Rails
|
10
15
|
class Application
|
@@ -19,37 +24,40 @@ module Rails
|
|
19
24
|
remove_possible_method :assets=
|
20
25
|
|
21
26
|
# Returns Sprockets::Environment for app config.
|
22
|
-
|
23
|
-
@assets ||= Sprockets::Environment.new(root.to_s) do |env|
|
24
|
-
env.version = ::Rails.env
|
27
|
+
attr_accessor :assets
|
25
28
|
|
26
|
-
|
27
|
-
|
29
|
+
# Returns Sprockets::Manifest for app config.
|
30
|
+
attr_accessor :assets_manifest
|
28
31
|
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
+
# Called from asset helpers to alert you if you reference an asset URL that
|
33
|
+
# isn't precompiled and hence won't be available in production.
|
34
|
+
def asset_precompiled?(logical_path)
|
35
|
+
if precompiled_assets.include?(logical_path)
|
36
|
+
true
|
37
|
+
elsif !config.cache_classes
|
38
|
+
# Check to see if precompile list has been updated
|
39
|
+
precompiled_assets(true).include?(logical_path)
|
40
|
+
else
|
41
|
+
false
|
32
42
|
end
|
33
43
|
end
|
34
|
-
attr_writer :assets
|
35
44
|
|
36
|
-
#
|
37
|
-
|
45
|
+
# Lazy-load the precompile list so we don't cause asset compilation at app
|
46
|
+
# boot time, but ensure we cache the list so we don't recompute it for each
|
47
|
+
# request or test case.
|
48
|
+
def precompiled_assets(clear_cache = false)
|
49
|
+
@precompiled_assets = nil if clear_cache
|
50
|
+
@precompiled_assets ||= assets_manifest.find(config.assets.precompile).map(&:logical_path).to_set
|
51
|
+
end
|
38
52
|
end
|
39
53
|
|
40
54
|
class Engine < Railtie
|
41
55
|
# Skip defining append_assets_path on Rails <= 4.2
|
42
56
|
unless initializers.find { |init| init.name == :append_assets_path }
|
43
57
|
initializer :append_assets_path, :group => :all do |app|
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
app.config.assets.paths.unshift(*paths["app/assets"].existent_directories)
|
48
|
-
else
|
49
|
-
app.config.assets.paths.unshift(*paths["vendor/assets"].paths.select { |d| File.directory?(d) })
|
50
|
-
app.config.assets.paths.unshift(*paths["lib/assets"].paths.select { |d| File.directory?(d) })
|
51
|
-
app.config.assets.paths.unshift(*paths["app/assets"].paths.select { |d| File.directory?(d) })
|
52
|
-
end
|
58
|
+
app.config.assets.paths.unshift(*paths["vendor/assets"].existent_directories)
|
59
|
+
app.config.assets.paths.unshift(*paths["lib/assets"].existent_directories)
|
60
|
+
app.config.assets.paths.unshift(*paths["app/assets"].existent_directories)
|
53
61
|
end
|
54
62
|
end
|
55
63
|
end
|
@@ -57,8 +65,26 @@ end
|
|
57
65
|
|
58
66
|
module Sprockets
|
59
67
|
class Railtie < ::Rails::Railtie
|
60
|
-
|
61
|
-
|
68
|
+
include Sprockets::Rails::Utils
|
69
|
+
|
70
|
+
class ManifestNeededError < StandardError
|
71
|
+
def initialize
|
72
|
+
msg = "Expected to find a manifest file in `app/assets/config/manifest.js`\n" +
|
73
|
+
"But did not, please create this file and use it to link any assets that need\n" +
|
74
|
+
"to be rendered by your app:\n\n" +
|
75
|
+
"Example:\n" +
|
76
|
+
" //= link_tree ../images\n" +
|
77
|
+
" //= link_directory ../javascripts .js\n" +
|
78
|
+
" //= link_directory ../stylesheets .css\n" +
|
79
|
+
"and restart your server\n\n" +
|
80
|
+
"For more information see: https://github.com/rails/sprockets/blob/070fc01947c111d35bb4c836e9bb71962a8e0595/UPGRADING.md#manifestjs"
|
81
|
+
super msg
|
82
|
+
end
|
83
|
+
end
|
84
|
+
|
85
|
+
LOOSE_APP_ASSETS = lambda do |logical_path, filename|
|
86
|
+
filename.start_with?(::Rails.root.join("app/assets").to_s) &&
|
87
|
+
!['.js', '.css', ''].include?(File.extname(logical_path))
|
62
88
|
end
|
63
89
|
|
64
90
|
class OrderedOptions < ActiveSupport::OrderedOptions
|
@@ -68,90 +94,162 @@ module Sprockets
|
|
68
94
|
end
|
69
95
|
|
70
96
|
config.assets = OrderedOptions.new
|
71
|
-
config.assets._blocks
|
72
|
-
config.assets.paths
|
73
|
-
config.assets.
|
74
|
-
config.assets.
|
75
|
-
config.assets.
|
76
|
-
config.assets.
|
77
|
-
|
78
|
-
|
79
|
-
|
97
|
+
config.assets._blocks = []
|
98
|
+
config.assets.paths = []
|
99
|
+
config.assets.precompile = []
|
100
|
+
config.assets.prefix = "/assets"
|
101
|
+
config.assets.manifest = nil
|
102
|
+
config.assets.quiet = false
|
103
|
+
|
104
|
+
initializer :set_default_precompile do |app|
|
105
|
+
if using_sprockets4?
|
106
|
+
raise ManifestNeededError unless ::Rails.root.join("app/assets/config/manifest.js").exist?
|
107
|
+
app.config.assets.precompile += %w( manifest.js )
|
108
|
+
else
|
109
|
+
app.config.assets.precompile += [LOOSE_APP_ASSETS, /(?:\/|\\|\A)application\.(css|js)$/]
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
initializer :quiet_assets do |app|
|
114
|
+
if app.config.assets.quiet
|
115
|
+
app.middleware.insert_before ::Rails::Rack::Logger, ::Sprockets::Rails::QuietAssets
|
116
|
+
end
|
117
|
+
end
|
118
|
+
|
119
|
+
config.assets.version = ""
|
120
|
+
config.assets.debug = false
|
121
|
+
config.assets.compile = true
|
122
|
+
config.assets.digest = true
|
123
|
+
config.assets.cache_limit = 50.megabytes
|
124
|
+
config.assets.gzip = true
|
125
|
+
config.assets.check_precompiled_asset = true
|
126
|
+
config.assets.unknown_asset_fallback = true
|
127
|
+
|
128
|
+
config.assets.configure do |env|
|
129
|
+
config.assets.paths.each { |path| env.append_path(path) }
|
130
|
+
end
|
131
|
+
|
132
|
+
config.assets.configure do |env|
|
133
|
+
env.context_class.send :include, ::Sprockets::Rails::Context
|
134
|
+
env.context_class.assets_prefix = config.assets.prefix
|
135
|
+
env.context_class.digest_assets = config.assets.digest
|
136
|
+
env.context_class.config = config.action_controller
|
137
|
+
end
|
138
|
+
|
139
|
+
config.assets.configure do |env|
|
140
|
+
env.cache = Sprockets::Cache::FileStore.new(
|
141
|
+
"#{env.root}/tmp/cache/assets",
|
142
|
+
config.assets.cache_limit,
|
143
|
+
env.logger
|
144
|
+
)
|
145
|
+
end
|
146
|
+
|
147
|
+
Sprockets.register_dependency_resolver 'rails-env' do
|
148
|
+
::Rails.env.to_s
|
149
|
+
end
|
150
|
+
|
151
|
+
config.assets.configure do |env|
|
152
|
+
env.depend_on 'rails-env'
|
153
|
+
end
|
154
|
+
|
155
|
+
config.assets.configure do |env|
|
156
|
+
env.version = config.assets.version
|
157
|
+
end
|
158
|
+
|
159
|
+
config.assets.configure do |env|
|
160
|
+
env.gzip = config.assets.gzip if env.respond_to?(:gzip=)
|
161
|
+
end
|
80
162
|
|
81
163
|
rake_tasks do |app|
|
82
164
|
require 'sprockets/rails/task'
|
83
165
|
Sprockets::Rails::Task.new(app)
|
84
166
|
end
|
85
167
|
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
# the Sprockets cache when changed.
|
91
|
-
app.assets.version = [
|
92
|
-
app.assets.version,
|
93
|
-
config.assets.version,
|
94
|
-
config.action_controller.relative_url_root,
|
95
|
-
(config.action_controller.asset_host unless config.action_controller.asset_host.respond_to?(:call)),
|
96
|
-
Sprockets::Rails::VERSION
|
97
|
-
].compact.join('-')
|
98
|
-
|
99
|
-
# Copy config.assets.paths to Sprockets
|
100
|
-
config.assets.paths.each do |path|
|
101
|
-
app.assets.append_path path
|
168
|
+
def build_environment(app, initialized = nil)
|
169
|
+
initialized = app.initialized? if initialized.nil?
|
170
|
+
unless initialized
|
171
|
+
::Rails.logger.warn "Application uninitialized: Try calling YourApp::Application.initialize!"
|
102
172
|
end
|
103
173
|
|
104
|
-
|
105
|
-
|
174
|
+
env = Sprockets::Environment.new(app.root.to_s)
|
175
|
+
|
176
|
+
config = app.config
|
106
177
|
|
107
178
|
# Run app.assets.configure blocks
|
108
179
|
config.assets._blocks.each do |block|
|
109
|
-
block.call
|
180
|
+
block.call(env)
|
110
181
|
end
|
111
182
|
|
183
|
+
# Set compressors after the configure blocks since they can
|
184
|
+
# define new compressors and we only accept existent compressors.
|
185
|
+
env.js_compressor = config.assets.js_compressor
|
186
|
+
env.css_compressor = config.assets.css_compressor
|
187
|
+
|
112
188
|
# No more configuration changes at this point.
|
113
189
|
# With cache classes on, Sprockets won't check the FS when files
|
114
190
|
# change. Preferable in production when the FS only changes on
|
115
191
|
# deploys when the app restarts.
|
116
192
|
if config.cache_classes
|
117
|
-
|
193
|
+
env = env.cached
|
118
194
|
end
|
119
195
|
|
120
|
-
|
196
|
+
env
|
197
|
+
end
|
198
|
+
|
199
|
+
def self.build_manifest(app)
|
200
|
+
config = app.config
|
201
|
+
path = File.join(config.paths['public'].first, config.assets.prefix)
|
202
|
+
Sprockets::Manifest.new(app.assets, path, config.assets.manifest)
|
203
|
+
end
|
204
|
+
|
205
|
+
config.after_initialize do |app|
|
206
|
+
config = app.config
|
207
|
+
|
121
208
|
if config.assets.compile
|
122
|
-
app.
|
123
|
-
|
124
|
-
|
209
|
+
app.assets = self.build_environment(app, true)
|
210
|
+
app.routes.prepend do
|
211
|
+
mount app.assets => config.assets.prefix
|
212
|
+
end
|
213
|
+
end
|
214
|
+
|
215
|
+
app.assets_manifest = build_manifest(app)
|
216
|
+
|
217
|
+
if config.assets.resolve_with.nil?
|
218
|
+
config.assets.resolve_with = []
|
219
|
+
config.assets.resolve_with << :manifest if config.assets.digest && !config.assets.debug
|
220
|
+
config.assets.resolve_with << :environment if config.assets.compile
|
221
|
+
end
|
222
|
+
|
223
|
+
ActionDispatch::Routing::RouteWrapper.class_eval do
|
224
|
+
class_attribute :assets_prefix
|
225
|
+
|
226
|
+
if defined?(prepend) && ::Rails.version >= '4'
|
227
|
+
prepend Sprockets::Rails::RouteWrapper
|
228
|
+
else
|
229
|
+
include Sprockets::Rails::RouteWrapper
|
230
|
+
end
|
231
|
+
|
232
|
+
self.assets_prefix = config.assets.prefix
|
125
233
|
end
|
126
234
|
|
127
235
|
ActiveSupport.on_load(:action_view) do
|
128
236
|
include Sprockets::Rails::Helper
|
129
237
|
|
130
238
|
# Copy relevant config to AV context
|
131
|
-
self.debug_assets
|
132
|
-
self.digest_assets
|
133
|
-
self.assets_prefix
|
239
|
+
self.debug_assets = config.assets.debug
|
240
|
+
self.digest_assets = config.assets.digest
|
241
|
+
self.assets_prefix = config.assets.prefix
|
242
|
+
self.assets_precompile = config.assets.precompile
|
134
243
|
|
135
|
-
|
136
|
-
context = app.assets.context_class
|
137
|
-
context.assets_prefix = config.assets.prefix
|
138
|
-
context.digest_assets = config.assets.digest
|
139
|
-
context.config = config.action_controller
|
140
|
-
|
141
|
-
self.assets_environment = app.assets if config.assets.compile
|
244
|
+
self.assets_environment = app.assets
|
142
245
|
self.assets_manifest = app.assets_manifest
|
143
|
-
end
|
144
246
|
|
145
|
-
|
146
|
-
Sprockets::Rails::Helper.assets ||= app.assets
|
147
|
-
Sprockets::Rails::Helper.raise_runtime_errors = app.config.assets.raise_runtime_errors
|
247
|
+
self.resolve_assets_with = config.assets.resolve_with
|
148
248
|
|
149
|
-
|
150
|
-
|
151
|
-
|
152
|
-
|
153
|
-
end
|
154
|
-
end
|
249
|
+
self.check_precompiled_asset = config.assets.check_precompiled_asset
|
250
|
+
self.unknown_asset_fallback = config.assets.unknown_asset_fallback
|
251
|
+
# Expose the app precompiled asset check to the view
|
252
|
+
self.precompiled_asset_checker = -> logical_path { app.asset_precompiled? logical_path }
|
155
253
|
end
|
156
254
|
end
|
157
255
|
end
|