Skip to content

Commit d5c94ec

Browse files
committedNov 22, 2014
WIP
1 parent 2373a56 commit d5c94ec

File tree

2 files changed

+60
-15
lines changed

2 files changed

+60
-15
lines changed
 

‎lib/opal/builder.rb

+56-13
Original file line numberDiff line numberDiff line change
@@ -61,15 +61,62 @@ def initialize(options = nil)
6161
@path_reader ||= PathReader.new
6262

6363
@processed = []
64+
65+
@assets = []
6466
end
6567

6668
def self.build(*args, &block)
6769
new.build(*args, &block)
6870
end
6971

7072
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
73120
end
74121

75122
def build_str source, filename, options = {}
@@ -94,11 +141,11 @@ def build_require(path, options = {})
94141
end
95142

96143
def to_s
97-
processed.map(&:to_s).join("\n")
144+
assets.map(&:to_s).join("\n")
98145
end
99146

100147
def source_map
101-
processed.map(&:source_map).reduce(:+).as_json.to_json
148+
assets.map(&:source_map).reduce(:+).as_json.to_json
102149
end
103150

104151
attr_reader :processed
@@ -109,8 +156,6 @@ def source_map
109156

110157

111158

112-
private
113-
114159
def tree_requires(asset, path)
115160
if path.nil? or path.empty?
116161
dirname = Dir.pwd
@@ -144,7 +189,7 @@ def read(path)
144189
raise ArgumentError, "can't find file: #{path.inspect} in #{path_reader.paths.inspect}"
145190
end
146191

147-
def process_require(filename, options)
192+
def process_require_OLD(filename, options)
148193
return if prerequired.include?(filename)
149194
return if already_processed.include?(filename)
150195
already_processed << filename
@@ -176,12 +221,10 @@ def process_require(filename, options)
176221
cache_store.store filename, asset.to_s, asset.requires
177222
end
178223

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
185228
end
186229

187230
def stub? filename

‎lib/opal/sprockets/processor.rb

+4-2
Original file line numberDiff line numberDiff line change
@@ -70,14 +70,15 @@ def evaluate(context, locals, &block)
7070
path = context.logical_path
7171
prerequired = []
7272

73+
puts "here"
7374
builder = self.class.new_builder(context)
74-
result = builder.build_str(data, path, :prerequired => prerequired)
75+
builder.build(path)
7576

7677
if self.class.source_map_enabled and false
7778
register_source_map(context.logical_path, result.source_map.to_s)
7879
"#{result.to_s}\n//# sourceMappingURL=#{File.basename(context.logical_path)}.map\n"
7980
else
80-
result.to_s
81+
builder.to_s
8182
end
8283
end
8384

@@ -109,6 +110,7 @@ def self.new_builder(context)
109110

110111
path_reader = ::Opal::Sprockets::PathReader.new(context.environment, context)
111112
cache_store = ::Opal::Builder::CacheStore.new(context.environment)
113+
112114
return Builder.new(
113115
compiler_options: compiler_options,
114116
stubs: stubbed_files,

0 commit comments

Comments
 (0)
Please sign in to comment.