js-preflight 0.0.3 → 0.0.4
Sign up to get free protection for your applications and to get access to all the features.
- data/bin/preflight +35 -19
- data/lib/js-preflight/version.rb +1 -1
- data/lib/js-preflight.rb +2 -1
- metadata +2 -2
data/bin/preflight
CHANGED
@@ -39,13 +39,23 @@ USAGE
|
|
39
39
|
banner
|
40
40
|
end
|
41
41
|
|
42
|
+
def ensure_copy(src, dst)
|
43
|
+
FileUtils.mkdir_p(Pathname.new(dst).dirname)
|
44
|
+
if File.directory?(src)
|
45
|
+
FileUtils.cp_r(src, dst)
|
46
|
+
else
|
47
|
+
FileUtils.cp(src, dst)
|
48
|
+
end
|
49
|
+
end
|
50
|
+
|
42
51
|
end
|
43
52
|
end
|
44
53
|
end
|
45
54
|
|
46
55
|
options = {}
|
47
56
|
js_output = StringIO.new
|
48
|
-
|
57
|
+
js_regexp = Js::Preflight::JsRegexp
|
58
|
+
css_regexp = Js::Preflight::CSSRegexp
|
49
59
|
protected_paths = %w{/bin /sbin /usr/bin /usr/sbin /usr/local/bin /usr/local/sbin /var /var/log /var/spool /etc}
|
50
60
|
|
51
61
|
optparse = OptionParser.new do |opts|
|
@@ -84,7 +94,7 @@ optparse = OptionParser.new do |opts|
|
|
84
94
|
end
|
85
95
|
|
86
96
|
options[:build_path] = false
|
87
|
-
opts.on("--build-path PATH", "Output the provided HTML file(s), packaged Javascript", " at assets.js, and excluded files to PATH.", " Protected paths are silently ignored; ask an adult for help.", " Javascript file output -j is ignored with this option.") do |path|
|
97
|
+
opts.on("--build-path PATH", "Output the provided HTML file(s), packaged Javascript", " at assets.js, css files, images, and excluded js files to PATH.", " Protected paths are silently ignored; ask an adult for help.", " Javascript file output -j is ignored with this option.") do |path|
|
88
98
|
unless protected_paths.include?(path)
|
89
99
|
options[:build_path] = path
|
90
100
|
end
|
@@ -142,10 +152,10 @@ if ARGV.length > 0
|
|
142
152
|
out_filename = Pathname.new(File.join(options[:build_path], path.basename))
|
143
153
|
base_path = File.expand_path(options[:build_path])
|
144
154
|
js_path = File.join(base_path, "js")
|
145
|
-
|
146
|
-
|
147
|
-
|
148
|
-
|
155
|
+
css_path = File.join(base_path, "css")
|
156
|
+
images_path = File.join(base_path, "images")
|
157
|
+
build_dirs = [base_path] #, js_path, css_path, images_path # only copy these if they're needed
|
158
|
+
FileUtils.mkdir_p(*build_dirs)
|
149
159
|
|
150
160
|
# Re-read the file line by line, and construct a target duplicate with
|
151
161
|
# script tags for packed files removed. If a script tag is encountered
|
@@ -156,41 +166,47 @@ if ARGV.length > 0
|
|
156
166
|
file.rewind
|
157
167
|
File.open(out_filename, "w+") do |outfile|
|
158
168
|
while line = file.gets do
|
159
|
-
match = line[
|
160
|
-
|
169
|
+
match = line[js_regexp, 1]
|
170
|
+
case
|
161
171
|
# If this is a script tag, and we haven't packed it, make sure the file
|
162
172
|
# is copied and the script tag is retained.
|
163
173
|
# If it's a script tag and it matches the last of the packed .js files,
|
164
|
-
# insert a script tag that links to our assets.js file.
|
165
|
-
|
166
|
-
if match
|
174
|
+
# insert a script tag that links to our assets.js file.
|
175
|
+
when match = line[js_regexp, 1]
|
167
176
|
if !js_files.include?(match)
|
168
|
-
|
169
|
-
FileUtils.cp(File.join(path.dirname, match), File.join(base_path, match))
|
177
|
+
::Js::Preflight::Instructions.ensure_copy(File.join(path.dirname, match), File.join(base_path, match))
|
170
178
|
outfile << line
|
171
179
|
elsif match == js_files.last
|
172
180
|
outfile << %Q{<script src="js/assets.js" type="text/javascript" charset="utf-8"></script>}
|
173
181
|
end
|
182
|
+
|
183
|
+
# When a stylesheet link is encountered, ensure it is copied as well.
|
184
|
+
when match = line[css_regexp, 1]
|
185
|
+
::Js::Preflight::Instructions.ensure_copy(File.join(path.dirname, match), File.join(base_path, match))
|
186
|
+
outfile << line
|
187
|
+
|
188
|
+
# If this isn't a script tag, just append to the target file.
|
174
189
|
else
|
175
190
|
outfile << line
|
176
191
|
end
|
177
|
-
|
178
192
|
end
|
179
193
|
end
|
180
|
-
|
181
194
|
end
|
182
|
-
|
183
195
|
end
|
184
|
-
|
196
|
+
|
197
|
+
# Finally, copy the packed file as assets.js, and the entire images directory
|
198
|
+
# (if it exists), to build_path if we're doing that.
|
185
199
|
if options[:build_path]
|
186
|
-
# js_output.close
|
187
|
-
# FileUtils.mv(js_output.path, File.join(options[:build_path], "js", "assets.js"))
|
188
200
|
js_output.rewind
|
189
201
|
File.open(File.join(options[:build_path], "js", "assets.js"), "w") do |assets|
|
190
202
|
assets.write js_output.read
|
191
203
|
end
|
204
|
+
images_path = File.join(Pathname.new(ARGV[0]).dirname, "images")
|
205
|
+
::Js::Preflight::Instructions.ensure_copy(images_path, options[:build_path]) if Dir.exists?(images_path)
|
206
|
+
# or output the packed .js file as a file, if we're doing that
|
192
207
|
elsif options[:js_file]
|
193
208
|
js_output.close
|
209
|
+
# otherwise, just output the packed .js file to STDOUT
|
194
210
|
else
|
195
211
|
js_output.rewind
|
196
212
|
STDOUT.puts js_output.read
|
data/lib/js-preflight/version.rb
CHANGED
data/lib/js-preflight.rb
CHANGED