@@ -61,15 +61,62 @@ def initialize(options = nil)
61
61
@path_reader ||= PathReader . new
62
62
63
63
@processed = [ ]
64
+
65
+ @assets = [ ]
64
66
end
65
67
66
68
def self . build ( *args , &block )
67
69
new . build ( *args , &block )
68
70
end
69
71
70
72
def build ( path , options = { } )
71
- source = read ( path )
72
- build_str ( source , path , options )
73
+ source = read path
74
+ process_string source , path , options
75
+ self
76
+ end
77
+
78
+ def process_string ( source , filename , options )
79
+ fname = path_reader . expand ( filename ) . to_s
80
+ asset = processor_for ( source , filename , fname , requirable : false )
81
+
82
+ process_requires asset , fname , options
83
+ @assets << asset
84
+ end
85
+
86
+ def process_require ( filename , options )
87
+ return if processed . include? filename
88
+ processed << filename
89
+
90
+ path = path_reader . expand ( filename ) . to_s
91
+ asset = find_asset filename
92
+
93
+ process_requires asset , path , options
94
+
95
+ @assets << asset
96
+ end
97
+
98
+ def process_requires ( asset , path , options )
99
+ ( asset . requires + tree_requires ( asset , path ) ) . each do |require_path |
100
+ process_require require_path , options
101
+ end
102
+ end
103
+
104
+ def find_asset ( path )
105
+ if asset = cached_asset ( path )
106
+ asset
107
+ else
108
+ source = read path
109
+ fname = path_reader . expand ( path ) . to_s
110
+ asset = processor_for ( source , path , fname , requirable : true )
111
+ end
112
+ end
113
+
114
+ def cached_asset ( path )
115
+ return nil if true # remove cache, for now
116
+
117
+ if data = cache_store . retrieve ( path )
118
+ CachedAsset . new ( data )
119
+ end
73
120
end
74
121
75
122
def build_str source , filename , options = { }
@@ -94,11 +141,11 @@ def build_require(path, options = {})
94
141
end
95
142
96
143
def to_s
97
- processed . map ( &:to_s ) . join ( "\n " )
144
+ assets . map ( &:to_s ) . join ( "\n " )
98
145
end
99
146
100
147
def source_map
101
- processed . map ( &:source_map ) . reduce ( :+ ) . as_json . to_json
148
+ assets . map ( &:source_map ) . reduce ( :+ ) . as_json . to_json
102
149
end
103
150
104
151
attr_reader :processed
@@ -109,8 +156,6 @@ def source_map
109
156
110
157
111
158
112
- private
113
-
114
159
def tree_requires ( asset , path )
115
160
if path . nil? or path . empty?
116
161
dirname = Dir . pwd
@@ -144,7 +189,7 @@ def read(path)
144
189
raise ArgumentError , "can't find file: #{ path . inspect } in #{ path_reader . paths . inspect } "
145
190
end
146
191
147
- def process_require ( filename , options )
192
+ def process_require_OLD ( filename , options )
148
193
return if prerequired . include? ( filename )
149
194
return if already_processed . include? ( filename )
150
195
already_processed << filename
@@ -176,12 +221,10 @@ def process_require(filename, options)
176
221
cache_store . store filename , asset . to_s , asset . requires
177
222
end
178
223
179
- def process_requires ( requires , options )
180
- requires . map { |r | process_require ( r , options ) }
181
- end
182
-
183
- def already_processed
184
- @already_processed ||= Set . new
224
+ # A set of paths which have already been processed (so we do not need
225
+ # to process them again).
226
+ def processed
227
+ @processed ||= Set . new
185
228
end
186
229
187
230
def stub? filename
0 commit comments