front-end-blender 0.16 → 0.17
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.
- data/README.rdoc +9 -8
- data/lib/front_end_architect/blender.rb +27 -28
- metadata +2 -2
data/README.rdoc
CHANGED
@@ -62,16 +62,17 @@ Other examples:
|
|
62
62
|
|
63
63
|
== Installation
|
64
64
|
|
65
|
-
To install the RubyGem, run the following at the command line:
|
66
|
-
|
67
|
-
|
65
|
+
To install the RubyGem, run the following at the command line (you may need to use a command such as su or sudo):
|
66
|
+
gem install mime-types
|
67
|
+
gem install colored
|
68
|
+
gem install front-end-blender --source http://gems.github.com
|
68
69
|
|
69
|
-
|
70
|
-
|
70
|
+
If you're using Windows, you'll also need to run the following:
|
71
|
+
gem install win32console
|
71
72
|
|
72
|
-
|
73
|
-
|
74
|
-
|
73
|
+
* Java v1.4 or greater is required, http://java.com/en/
|
74
|
+
* Ruby v1.8.6 or greater is required, http://www.ruby-lang.org/en/downloads/
|
75
|
+
* RubyGems v1.2 or greater is recommended, http://rubygems.org/read/chapter/3
|
75
76
|
|
76
77
|
== License
|
77
78
|
|
@@ -4,8 +4,6 @@
|
|
4
4
|
# Blender is freely distributable under the terms of an MIT-style license.
|
5
5
|
# For details, see http://www.opensource.org/licenses/mit-license.php
|
6
6
|
|
7
|
-
# TODO Nearly all file name comparisons should be case-insensitive
|
8
|
-
|
9
7
|
$:.unshift File.join(File.dirname(File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__), *%w[..])
|
10
8
|
|
11
9
|
require 'rubygems'
|
@@ -21,7 +19,7 @@ require 'front_end_architect/hash'
|
|
21
19
|
|
22
20
|
module FrontEndArchitect
|
23
21
|
class Blender
|
24
|
-
VERSION = '0.
|
22
|
+
VERSION = '0.17'
|
25
23
|
|
26
24
|
FILTER_REGEX = /filter: ?[^?]+\(src=(['"])([^\?'"]+)(\?(?:[^'"]+)?)?\1,[^?]+\1\);/im
|
27
25
|
IMPORT_REGEX = /@import(?: url\(| )(['"]?)([^\?'"\)\s]+)(\?(?:[^'"\)]+)?)?\1\)?(?:[^?;]+)?;/im
|
@@ -80,12 +78,12 @@ module FrontEndArchitect
|
|
80
78
|
if File.writable?(output_name) && !(@options[:gzip] && !File.writable?(gzip_output_name))
|
81
79
|
create_output(output_name, sources, file_type)
|
82
80
|
else
|
83
|
-
puts
|
84
|
-
puts
|
81
|
+
puts 'Permission Denied:'.white_on_red + ' ' + output_name.red
|
82
|
+
puts 'Permission Denied:'.white_on_red + ' ' + gzip_output_name.red if @options[:gzip]
|
85
83
|
end
|
86
84
|
else
|
87
|
-
puts
|
88
|
-
puts
|
85
|
+
puts 'Skipping: '.yellow + output_name.yellow
|
86
|
+
puts 'Skipping: '.yellow + gzip_output_name.yellow if @options[:gzip]
|
89
87
|
end
|
90
88
|
else
|
91
89
|
create_output(output_name, sources, file_type)
|
@@ -107,16 +105,15 @@ module FrontEndArchitect
|
|
107
105
|
Find.find(Dir.getwd) do |f|
|
108
106
|
basename = File.basename(f)
|
109
107
|
|
110
|
-
if FileTest.directory?(f) && (basename[0] == ?. || basename.match(/^(yui|tinymce|dojo|wp-includes|wp-admin|mint)$/) || (File.basename(f) == 'rails' && File.basename(File.dirname(f)) == 'vendor'))
|
108
|
+
if FileTest.directory?(f) && (basename[0] == ?. || basename.match(/^(yui|tinymce|dojo|wp-includes|wp-admin|mint)$/i) || (File.basename(f).downcase == 'rails' && File.basename(File.dirname(f)).downcase == 'vendor'))
|
111
109
|
Find.prune
|
112
|
-
elsif !(basename.match(/[-.](pack|min)\.(css|js)$/) || basename.match(/^(sifr\.js|ext\.js|mootools.*\.js)$/))
|
113
|
-
# TODO Test for 'pack.js' and 'min.css' where the folder name serves as the identifier
|
110
|
+
elsif !(basename.match(/(^|[-.])(pack|min)\.(css|js)$/i) || basename.match(/^(sifr\.js|ext\.js|mootools.*\.js)$/i))
|
114
111
|
# TODO Check file contents instead of name for minification (port YSlow's isMinified)
|
115
112
|
f.gsub!(Dir.getwd.to_s + '/', '')
|
116
113
|
|
117
|
-
if File.extname(f) == '.css' || File.extname(f) == '.js'
|
118
|
-
min_file = basename.sub(/\.(css|js)
|
119
|
-
path = File.dirname(f).split('/') # File
|
114
|
+
if File.extname(f).downcase == '.css' || File.extname(f).downcase == '.js'
|
115
|
+
min_file = basename.sub(/\.(css|js)$/i, '-min.\1')
|
116
|
+
path = File.dirname(f).split('/') # File::dirname depends on /
|
120
117
|
|
121
118
|
path.push min_file
|
122
119
|
path.push [basename]
|
@@ -171,7 +168,7 @@ module FrontEndArchitect
|
|
171
168
|
imports = ''
|
172
169
|
|
173
170
|
sources.each do |i|
|
174
|
-
if File.extname(i) == '.css'
|
171
|
+
if File.extname(i).downcase == '.css'
|
175
172
|
processed_output, processed_imports = process_css(i, output_path)
|
176
173
|
|
177
174
|
output << processed_output
|
@@ -181,7 +178,7 @@ module FrontEndArchitect
|
|
181
178
|
end
|
182
179
|
end
|
183
180
|
|
184
|
-
if File.extname(output_name) == '.css' && !imports.empty?
|
181
|
+
if File.extname(output_name).downcase == '.css' && !imports.empty?
|
185
182
|
output.insert(0, imports)
|
186
183
|
end
|
187
184
|
|
@@ -208,9 +205,9 @@ module FrontEndArchitect
|
|
208
205
|
|
209
206
|
# Data
|
210
207
|
if @options[:data]
|
211
|
-
if File.extname(output_name) == '.css'
|
208
|
+
if File.extname(output_name).downcase == '.css'
|
212
209
|
output = output.gsub(URL_REGEX) do
|
213
|
-
unless $2.include?('.css')
|
210
|
+
unless $2.downcase.include?('.css')
|
214
211
|
mime_type = MIME::Types.type_for($2)
|
215
212
|
url_contents = make_data_uri(IO.read($2), mime_type[0])
|
216
213
|
else
|
@@ -249,7 +246,7 @@ module FrontEndArchitect
|
|
249
246
|
input = input.gsub(FILTER_REGEX) do |filter|
|
250
247
|
uri = $2
|
251
248
|
cbuster = $3
|
252
|
-
unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/)
|
249
|
+
unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/i)
|
253
250
|
full_path = File.expand_path($2, File.dirname(input_file))
|
254
251
|
buster = make_cache_buster(full_path, $3)
|
255
252
|
new_path = uri.to_s + buster
|
@@ -270,7 +267,7 @@ module FrontEndArchitect
|
|
270
267
|
asset_path = Pathname.new(File.join(File.expand_path(@options[:root]), uri))
|
271
268
|
end
|
272
269
|
|
273
|
-
unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/)
|
270
|
+
unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/i)
|
274
271
|
if (output_path != input_path)
|
275
272
|
|
276
273
|
new_path = asset_path.relative_path_from(output_path)
|
@@ -297,11 +294,12 @@ module FrontEndArchitect
|
|
297
294
|
if output_path == input_path
|
298
295
|
if @options[:data]
|
299
296
|
input = input.gsub(URL_REGEX) do
|
300
|
-
uri
|
297
|
+
uri = $2
|
301
298
|
cbuster = $3
|
302
299
|
|
303
|
-
unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/)
|
300
|
+
unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/i)
|
304
301
|
new_path = File.expand_path($2, File.dirname(input_file))
|
302
|
+
|
305
303
|
if uri.match(/^(\/[^\/]+.+)$/)
|
306
304
|
new_path = Pathname.new(File.join(File.expand_path(@options[:root]), uri))
|
307
305
|
end
|
@@ -313,8 +311,8 @@ module FrontEndArchitect
|
|
313
311
|
end
|
314
312
|
elsif @options[:cache_buster]
|
315
313
|
input = input.gsub(URL_REGEX) do
|
316
|
-
unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/)
|
317
|
-
uri
|
314
|
+
unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/i)
|
315
|
+
uri = $2
|
318
316
|
cbuster = $3
|
319
317
|
|
320
318
|
if uri.match(/^(\/[^\/]+.+)$/)
|
@@ -337,11 +335,12 @@ module FrontEndArchitect
|
|
337
335
|
else
|
338
336
|
# Find all url(.ext) in file and rewrite relative url from output directory.
|
339
337
|
input = input.gsub(URL_REGEX) do
|
340
|
-
uri
|
338
|
+
uri = $2
|
341
339
|
cbuster = $3
|
342
|
-
|
340
|
+
|
341
|
+
unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/i)
|
343
342
|
if @options[:data]
|
344
|
-
# if doing data conversion rewrite url as an absolute path
|
343
|
+
# if doing data conversion rewrite url as an absolute path
|
345
344
|
new_path = File.expand_path(uri, File.dirname(input_file))
|
346
345
|
|
347
346
|
if uri.match(/^(\/[^\/]+.+)$/)
|
@@ -354,7 +353,7 @@ module FrontEndArchitect
|
|
354
353
|
asset_path = Pathname.new(File.join(File.expand_path(@options[:root]), uri))
|
355
354
|
end
|
356
355
|
|
357
|
-
new_path
|
356
|
+
new_path = asset_path.relative_path_from(output_path)
|
358
357
|
|
359
358
|
if @options[:cache_buster]
|
360
359
|
buster = make_cache_buster(asset_path, $3)
|
@@ -383,7 +382,7 @@ module FrontEndArchitect
|
|
383
382
|
|
384
383
|
if @options[:cache_buster] == :mtime
|
385
384
|
file_mtime = File.mtime(asset_path).to_i
|
386
|
-
buster
|
385
|
+
buster = query_string + file_mtime.to_s
|
387
386
|
else
|
388
387
|
buster = query_string + @options[:cache_buster]
|
389
388
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: front-end-blender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.17"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Elshire & Chris Griego
|
@@ -9,7 +9,7 @@ autorequire: front_end_architect/blend
|
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
11
|
|
12
|
-
date: 2008-09-
|
12
|
+
date: 2008-09-24 00:00:00 -07:00
|
13
13
|
default_executable: blend
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|