@@ -20,17 +20,7 @@ class Configuration
20
20
remove_possible_method :assets=
21
21
22
22
# Returns Sprockets::Environment for app config.
23
- def assets
24
- @assets ||= Sprockets ::Environment . new ( root . to_s ) do |env |
25
- env . version = ::Rails . env
26
- env . cache = Sprockets ::Cache ::FileStore . new ( "#{ root } /tmp/cache" )
27
-
28
- env . context_class . class_eval do
29
- include ::Sprockets ::Rails ::Context
30
- end
31
- end
32
- end
33
- attr_writer :assets
23
+ attr_accessor :assets
34
24
35
25
# Returns Sprockets::Manifest for app config.
36
26
attr_accessor :assets_manifest
@@ -77,47 +67,70 @@ def configure(&block)
77
67
Sprockets ::Rails ::Task . new ( app )
78
68
end
79
69
80
- config . after_initialize do | app |
70
+ def self . build_environment ( app )
81
71
config = app . config
72
+ env = Sprockets ::Environment . new ( app . root . to_s )
73
+
74
+ # Copy config.assets.paths to Sprockets
75
+ config . assets . paths . each do |path |
76
+ env . append_path path
77
+ end
78
+
79
+ env . js_compressor = config . assets . js_compressor
80
+ env . css_compressor = config . assets . css_compressor
81
+
82
+ env . context_class . class_eval do
83
+ include ::Sprockets ::Rails ::Context
84
+ self . assets_prefix = config . assets . prefix
85
+ self . digest_assets = config . assets . digest
86
+ self . config = config . action_controller
87
+ end
82
88
83
89
# Configuration options that should invalidate
84
90
# the Sprockets cache when changed.
85
- app . assets . version = [
91
+ env . version = [
86
92
::Rails . env ,
87
- app . assets . version ,
93
+ :: Rails . env , # TODO: Remove duplicate key
88
94
config . assets . version ,
89
95
config . action_controller . relative_url_root ,
90
96
( config . action_controller . asset_host unless config . action_controller . asset_host . respond_to? ( :call ) ) ,
91
97
Sprockets ::Rails ::VERSION
92
98
] . compact . join ( '-' )
93
99
94
- # Copy config.assets.paths to Sprockets
95
- config . assets . paths . each do |path |
96
- app . assets . append_path path
97
- end
98
-
99
- app . assets . js_compressor = config . assets . js_compressor
100
- app . assets . css_compressor = config . assets . css_compressor
100
+ env . cache = Sprockets ::Cache ::FileStore . new ( "#{ app . root } /tmp/cache" )
101
101
102
102
# Run app.assets.configure blocks
103
103
config . assets . _blocks . each do |block |
104
- block . call app . assets
104
+ block . call ( env )
105
105
end
106
106
107
107
# No more configuration changes at this point.
108
108
# With cache classes on, Sprockets won't check the FS when files
109
109
# change. Preferable in production when the FS only changes on
110
110
# deploys when the app restarts.
111
111
if config . cache_classes
112
- app . assets = app . assets . cached
112
+ env = env . cached
113
113
end
114
114
115
- manifest_assets_path = File . join ( config . paths [ 'public' ] . first , config . assets . prefix )
115
+ env
116
+ end
117
+
118
+ def self . build_manifest ( app )
119
+ config = app . config
120
+ path = File . join ( config . paths [ 'public' ] . first , config . assets . prefix )
121
+ Sprockets ::Manifest . new ( app . assets , path , config . assets . manifest )
122
+ end
123
+
124
+ config . after_initialize do |app |
125
+ config = app . config
126
+
116
127
if config . assets . compile
117
- app . assets_manifest = Sprockets ::Manifest . new ( app . assets , manifest_assets_path , config . assets . manifest )
118
- else
119
- app . assets_manifest = Sprockets ::Manifest . new ( manifest_assets_path , config . assets . manifest )
128
+ app . assets = self . build_environment ( app )
129
+ app . routes . prepend do
130
+ mount app . assets => config . assets . prefix
131
+ end
120
132
end
133
+ app . assets_manifest = build_manifest ( app )
121
134
122
135
ActiveSupport . on_load ( :action_view ) do
123
136
include Sprockets ::Rails ::Helper
@@ -128,21 +141,9 @@ def configure(&block)
128
141
self . assets_prefix = config . assets . prefix
129
142
self . assets_precompile = config . assets . precompile
130
143
131
- # Copy over to Sprockets as well
132
- context = app . assets . context_class
133
- context . assets_prefix = config . assets . prefix
134
- context . digest_assets = config . assets . digest
135
- context . config = config . action_controller
136
-
137
- self . assets_environment = app . assets if config . assets . compile
144
+ self . assets_environment = app . assets
138
145
self . assets_manifest = app . assets_manifest
139
146
end
140
-
141
- if config . assets . compile
142
- app . routes . prepend do
143
- mount app . assets => config . assets . prefix
144
- end
145
- end
146
147
end
147
148
end
148
149
end
0 commit comments