blender 0.20 → 0.24
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/{MIT-LICENSE → License.txt} +0 -0
- data/Manifest.txt +1 -1
- data/README.txt +22 -21
- data/Rakefile +8 -9
- data/bin/blend +22 -14
- data/lib/front_end_architect/blender.rb +98 -78
- data/lib/yui/yuicompressor.jar +0 -0
- metadata +6 -5
data/{MIT-LICENSE → License.txt}
RENAMED
File without changes
|
data/Manifest.txt
CHANGED
data/README.txt
CHANGED
@@ -35,18 +35,22 @@ source files are the hash values as an array. Here is a sample Blendfile:
|
|
35
35
|
== Usage
|
36
36
|
|
37
37
|
Usage: blend [options]
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
38
|
+
-g, --generate Generate a stub Blendfile
|
39
|
+
-f, --file FILE Use specified Blendfile
|
40
|
+
-r, --root ROOT Specify the path to the web root directory
|
41
|
+
-t, --type TYPE Select file type to blend (css, js)
|
42
|
+
-m, --min [MINIFIER] Select minifier to use (yui, none)
|
43
|
+
-c, --cache-buster [BUSTER] Add cache busters to URLs in CSS
|
44
|
+
--force Don't allow output files to be skipped
|
45
|
+
--yui=YUIOPTS Pass arguments to YUI Compressor
|
46
|
+
|
47
|
+
Experimental:
|
48
|
+
-d, --data Convert url(file.ext) to url(data:) in CSS
|
49
|
+
-z, --gzip Additionally generate gzipped output files
|
50
|
+
|
51
|
+
Meta:
|
52
|
+
-h, --help Show this message
|
53
|
+
-V, --version Show the version number
|
50
54
|
|
51
55
|
== Examples
|
52
56
|
|
@@ -63,21 +67,18 @@ Other examples:
|
|
63
67
|
== Installation
|
64
68
|
|
65
69
|
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
|
67
|
-
gem install colored
|
68
|
-
gem install front-end-blender --source http://gems.github.com
|
70
|
+
gem install blender
|
69
71
|
|
70
|
-
If you're using Windows, you'll also
|
72
|
+
If you're using Windows, you'll also want to run the following to get colored command line output:
|
71
73
|
gem install win32console
|
72
74
|
|
73
|
-
* Java v1.4 or greater is required
|
74
|
-
* Ruby v1.8.6 or greater is required
|
75
|
-
* RubyGems v1.2 or greater is recommended
|
75
|
+
* Java[http://java.com/en/] v1.4 or greater is required
|
76
|
+
* Ruby[http://www.ruby-lang.org/en/downloads/] v1.8.6 or greater is required
|
77
|
+
* RubyGems[http://rubygems.org/read/chapter/3] v1.2 or greater is recommended
|
76
78
|
|
77
79
|
== License
|
78
80
|
|
79
|
-
|
80
|
-
(c) 2008 Blake Elshire
|
81
|
+
Copyright (c) 2008 Blake Elshire, Chris Griego
|
81
82
|
|
82
83
|
Blender is freely distributable under the terms of an MIT-style license.
|
83
84
|
For details, see http://www.opensource.org/licenses/mit-license.php
|
data/Rakefile
CHANGED
@@ -1,5 +1,4 @@
|
|
1
|
-
# Copyright (c) 2008 Chris Griego
|
2
|
-
# (c) 2008 Blake Elshire
|
1
|
+
# Copyright (c) 2008 Blake Elshire, Chris Griego
|
3
2
|
#
|
4
3
|
# Blender is freely distributable under the terms of an MIT-style license.
|
5
4
|
# For details, see http://www.opensource.org/licenses/mit-license.php
|
@@ -8,15 +7,14 @@ $:.unshift File.join(File.dirname(File.symlink?(__FILE__) ? File.readlink(__FILE
|
|
8
7
|
|
9
8
|
require 'rubygems'
|
10
9
|
require 'hoe'
|
11
|
-
require 'front_end_architect/blender
|
10
|
+
require 'front_end_architect/blender'
|
12
11
|
|
13
12
|
hoe = Hoe.new('blender', FrontEndArchitect::Blender::VERSION) do |p|
|
14
|
-
p.author
|
15
|
-
p.email
|
16
|
-
p.summary
|
17
|
-
p.description
|
18
|
-
|
19
|
-
p.url = 'http://www.front-end-architect.com/blender/'
|
13
|
+
p.author = ['Blake Elshire', 'Chris Griego']
|
14
|
+
p.email = 'blender@front-end-architect.com'
|
15
|
+
p.summary = 'Blender outputs efficient, production-ready CSS and/or JavaScript assets.'
|
16
|
+
p.description = 'Blender is like ant or make for the front-end. It aggregates and compresses CSS and/or JavaScript assets for a site into efficient, production-ready files.'
|
17
|
+
p.url = 'http://www.front-end-architect.com/blender/'
|
20
18
|
|
21
19
|
p.extra_deps << ['mime-types', '>= 1.15']
|
22
20
|
p.extra_deps << ['colored', '>= 1.1']
|
@@ -24,6 +22,7 @@ hoe = Hoe.new('blender', FrontEndArchitect::Blender::VERSION) do |p|
|
|
24
22
|
p.spec_extras[:requirements] = 'Java, v1.4 or greater'
|
25
23
|
|
26
24
|
p.remote_rdoc_dir = '' # Release to root
|
25
|
+
p.rdoc_pattern = /^(lib\/front_end_architect|bin|ext)|txt$/
|
27
26
|
end
|
28
27
|
|
29
28
|
task :update_gemspec do
|
data/bin/blend
CHANGED
@@ -1,7 +1,6 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
|
-
# Copyright (c) 2008 Chris Griego
|
4
|
-
# (c) 2008 Blake Elshire
|
3
|
+
# Copyright (c) 2008 Blake Elshire, Chris Griego
|
5
4
|
#
|
6
5
|
# Blender is freely distributable under the terms of an MIT-style license.
|
7
6
|
# For details, see http://www.opensource.org/licenses/mit-license.php
|
@@ -12,19 +11,28 @@ require 'front_end_architect/blender'
|
|
12
11
|
|
13
12
|
options = {}
|
14
13
|
|
14
|
+
def section(opts, title)
|
15
|
+
opts.separator ''
|
16
|
+
opts.separator title + ':'
|
17
|
+
end
|
18
|
+
|
15
19
|
opts = OptionParser.new do |opts|
|
16
|
-
|
17
|
-
|
18
|
-
opts.on('-g',
|
19
|
-
opts.on('-f FILE',
|
20
|
-
opts.on('-r ROOT',
|
21
|
-
opts.on('-t TYPE',
|
22
|
-
opts.on('-m [MINIFIER]',
|
23
|
-
opts.on('-c [BUSTER]',
|
24
|
-
opts.on(
|
25
|
-
opts.on(
|
26
|
-
opts
|
27
|
-
opts.on('-
|
20
|
+
version = "Front-End Blender v#{FrontEndArchitect::Blender::VERSION}"
|
21
|
+
|
22
|
+
opts.on('-g', '--generate', String, "Generate a stub Blendfile") { options[:generate] = true }
|
23
|
+
opts.on('-f FILE', '--file FILE', String, "Use specified Blendfile") {|f| options[:blendfile] = f; options[:root] = File.dirname(f) }
|
24
|
+
opts.on('-r ROOT', '--root ROOT', String, "Specify the path to the web root directory") {|r| options[:root] = r }
|
25
|
+
opts.on('-t TYPE', '--type TYPE', [:css, :js], "Select file type to blend (css, js)") {|t| options[:file_type] = t }
|
26
|
+
opts.on('-m [MINIFIER]', '--min [MINIFIER]', [:yui, :none], "Select minifier to use (yui, none)") {|m| options[:min] = m.nil? ? :none : m.to_sym }
|
27
|
+
opts.on('-c [BUSTER]', '--cache-buster [BUSTER]', String, "Add cache busters to URLs in CSS") {|b| options[:cache_buster] = b.nil? ? :mtime : b }
|
28
|
+
opts.on( '--force', String, "Don't allow output files to be skipped") { options[:force] = true }
|
29
|
+
opts.on( '--yui=YUIOPTS', String, "Pass arguments to YUI Compressor") {|o| options[:yuiopts] = o }
|
30
|
+
section opts, 'Experimental'
|
31
|
+
opts.on('-d', '--data', String, "Convert url(file.ext) to url(data:) in CSS") { options[:data] = true }
|
32
|
+
opts.on('-z', '--gzip', String, "Additionally generate gzipped output files") { options[:gzip] = true }
|
33
|
+
section opts, 'Meta'
|
34
|
+
opts.on('-h', '--help', "Show this message") { puts opts; exit 0 }
|
35
|
+
opts.on('-V', '--version', "Show the version number") { puts version; exit 0 }
|
28
36
|
|
29
37
|
opts.parse!(ARGV) rescue return false
|
30
38
|
end
|
@@ -1,5 +1,4 @@
|
|
1
|
-
# Copyright (c) 2008 Chris Griego
|
2
|
-
# (c) 2008 Blake Elshire
|
1
|
+
# Copyright (c) 2008 Blake Elshire, Chris Griego
|
3
2
|
#
|
4
3
|
# Blender is freely distributable under the terms of an MIT-style license.
|
5
4
|
# For details, see http://www.opensource.org/licenses/mit-license.php
|
@@ -7,30 +6,33 @@
|
|
7
6
|
$:.unshift File.join(File.dirname(File.symlink?(__FILE__) ? File.readlink(__FILE__) : __FILE__), *%w[..])
|
8
7
|
|
9
8
|
require 'rubygems'
|
10
|
-
|
9
|
+
|
11
10
|
require 'base64'
|
12
11
|
require 'benchmark'
|
13
|
-
require 'colored'
|
14
|
-
require 'mime/types'
|
12
|
+
require 'colored' unless PLATFORM =~ /win32/ && !Gem.available?('win32console')
|
15
13
|
require 'find'
|
14
|
+
require 'mime/types'
|
16
15
|
require 'pathname'
|
17
16
|
require 'zlib'
|
17
|
+
require 'yaml'
|
18
|
+
|
18
19
|
require 'front_end_architect/hash'
|
19
20
|
|
20
21
|
module FrontEndArchitect
|
21
22
|
class Blender
|
22
|
-
VERSION = '0.
|
23
|
+
VERSION = '0.24'
|
23
24
|
|
24
|
-
|
25
|
-
IMPORT_REGEX = /@import(?: url\(| )(['"]?)([^\?'"\)\s]+)(\?(?:[^'"\)]+)?)?\1\)?(?:[^?;]+)?;/im
|
25
|
+
ALPHA_REGEX = /(-ms-)?filter:\s*(['"]?)progid:DXImageTransform\.Microsoft\.AlphaImageLoader\(\s*src=(['"])([^\?'"\)]+)(\?(?:[^'"\)]+)?)?\3,\s*sizingMethod=(['"])(image|scale|crop)\6\s*\)\2/im
|
26
|
+
IMPORT_REGEX = /@import(?: url\(| )(['"]?)([^\?'"\)\s]+)(\?(?:[^'"\)]+)?)?\1\)?(?:[^?;]+)?;/im # shouldn't the semicolon be optional?
|
26
27
|
URL_REGEX = /url\((['"]?)([^\?'"\)]+)(\?(?:[^'"\)]+)?)?\1?\)/im
|
27
28
|
|
28
29
|
DEFAULT_OPTIONS = {
|
29
30
|
:blendfile => 'Blendfile.yaml',
|
30
31
|
:data => false,
|
31
32
|
:force => false,
|
32
|
-
:root => File.dirname(
|
33
|
+
:root => File.dirname('Blendfile.yaml'),
|
33
34
|
:min => :yui,
|
35
|
+
:colored => (Object.const_defined? :Colored),
|
34
36
|
}
|
35
37
|
|
36
38
|
def initialize(opts)
|
@@ -83,12 +85,12 @@ module FrontEndArchitect
|
|
83
85
|
if File.writable?(output_name) && !(@options[:gzip] && !File.writable?(gzip_output_name))
|
84
86
|
create_output(output_name, sources, file_type)
|
85
87
|
else
|
86
|
-
|
87
|
-
|
88
|
+
puts_colored 'Permission Denied:' + ' ' + output_name, :red
|
89
|
+
puts_colored 'Permission Denied:' + ' ' + gzip_output_name, :red if @options[:gzip]
|
88
90
|
end
|
89
91
|
else
|
90
|
-
|
91
|
-
|
92
|
+
puts_colored 'Skipping: ' + output_name, :yellow
|
93
|
+
puts_colored 'Skipping: ' + gzip_output_name, :yellow if @options[:gzip]
|
92
94
|
end
|
93
95
|
else
|
94
96
|
create_output(output_name, sources, file_type)
|
@@ -137,6 +139,14 @@ module FrontEndArchitect
|
|
137
139
|
|
138
140
|
protected
|
139
141
|
|
142
|
+
def puts_colored(output, color)
|
143
|
+
if @options[:colored]
|
144
|
+
puts Colored.colorize(output, { :foreground => color })
|
145
|
+
else
|
146
|
+
puts output
|
147
|
+
end
|
148
|
+
end
|
149
|
+
|
140
150
|
def flatten_blendfile(value, key=nil, context=[])
|
141
151
|
if value.is_a? Hash
|
142
152
|
context << key unless key.nil?
|
@@ -208,15 +218,19 @@ module FrontEndArchitect
|
|
208
218
|
end
|
209
219
|
end
|
210
220
|
|
211
|
-
# Data
|
221
|
+
# Data URI conversion is processed after compression for speed
|
222
|
+
# Workaround for YUI Compressor Bug #2099271
|
212
223
|
if @options[:data]
|
213
224
|
if File.extname(output_name).downcase == '.css'
|
214
225
|
output = output.gsub(URL_REGEX) do
|
215
|
-
|
216
|
-
|
217
|
-
|
226
|
+
url = $2
|
227
|
+
query = $3
|
228
|
+
|
229
|
+
unless url.downcase.include?('.css')
|
230
|
+
mime_type = MIME::Types.type_for(url)
|
231
|
+
url_contents = make_data_uri(IO.read(url), mime_type[0])
|
218
232
|
else
|
219
|
-
url_contents =
|
233
|
+
url_contents = url
|
220
234
|
end
|
221
235
|
%Q!url(#{url_contents})!
|
222
236
|
end
|
@@ -226,7 +240,7 @@ module FrontEndArchitect
|
|
226
240
|
output_file << output
|
227
241
|
end
|
228
242
|
|
229
|
-
|
243
|
+
puts_colored output_name, :green
|
230
244
|
|
231
245
|
if @options[:gzip]
|
232
246
|
output_gzip = output_name + '.gz'
|
@@ -235,12 +249,13 @@ module FrontEndArchitect
|
|
235
249
|
gz.write(output)
|
236
250
|
end
|
237
251
|
|
238
|
-
|
252
|
+
puts_colored output_gzip, :green
|
239
253
|
end
|
240
254
|
end
|
241
255
|
|
242
|
-
# TODO Move this to a seperate class and clean it up A LOT. For 1.1
|
243
256
|
def process_css(input_file, output_path)
|
257
|
+
# TODO Move this to a seperate class and clean it up A LOT. For 2.0
|
258
|
+
|
244
259
|
# Determine full path of input file
|
245
260
|
input_path = Pathname.new(File.dirname(input_file))
|
246
261
|
input = IO.read(input_file)
|
@@ -248,45 +263,50 @@ module FrontEndArchitect
|
|
248
263
|
|
249
264
|
# Find filter statements and append cache busters to URLs
|
250
265
|
if @options[:cache_buster]
|
251
|
-
input = input.gsub(
|
252
|
-
|
253
|
-
|
254
|
-
|
255
|
-
|
256
|
-
|
257
|
-
|
258
|
-
|
259
|
-
|
260
|
-
|
261
|
-
|
266
|
+
input = input.gsub(ALPHA_REGEX) do |alpha|
|
267
|
+
prefix = $1
|
268
|
+
outter_quote = $2
|
269
|
+
inner_quote1 = $3
|
270
|
+
url = $4
|
271
|
+
query = $5
|
272
|
+
inner_quote2 = $6
|
273
|
+
sizing = $7
|
274
|
+
|
275
|
+
# TODO Rewrite to root relative (if :root specified?)
|
276
|
+
|
277
|
+
unless url.match(/^(https:\/\/|http:\/\/|\/\/)/i)
|
278
|
+
full_path = File.expand_path(url, File.dirname(input_file))
|
279
|
+
query = make_cache_buster(full_path, query)
|
262
280
|
end
|
281
|
+
|
282
|
+
"#{prefix}filter:#{outter_quote}progid:DXImageTransform.Microsoft.AlphaImageLoader(src=#{inner_quote1}#{url}#{query}#{inner_quote1},sizingMethod=#{inner_quote2}#{sizing}#{inner_quote2})#{outter_quote}"
|
263
283
|
end
|
264
284
|
end
|
265
285
|
|
266
286
|
# Handle @import statements URL rewrite and adding cache busters
|
267
287
|
input = input.gsub(IMPORT_REGEX) do |import|
|
268
|
-
|
269
|
-
|
288
|
+
url = $2
|
289
|
+
query = $3
|
290
|
+
asset_path = Pathname.new(File.expand_path(url, input_path))
|
270
291
|
|
271
|
-
if
|
272
|
-
asset_path = Pathname.new(File.join(File.expand_path(@options[:root]),
|
292
|
+
if url.match(/^(\/[^\/]+.+)$/)
|
293
|
+
asset_path = Pathname.new(File.join(File.expand_path(@options[:root]), url))
|
273
294
|
end
|
274
295
|
|
275
|
-
unless
|
296
|
+
unless url.match(/^(https:\/\/|http:\/\/|\/\/)/i)
|
276
297
|
if (output_path != input_path)
|
277
|
-
|
278
298
|
new_path = asset_path.relative_path_from(output_path)
|
279
299
|
|
280
300
|
if @options[:cache_buster]
|
281
|
-
buster = make_cache_buster(asset_path,
|
282
|
-
import.gsub!(
|
301
|
+
buster = make_cache_buster(asset_path, query)
|
302
|
+
import.gsub!(url, new_path.to_s + buster)
|
283
303
|
else
|
284
|
-
import.gsub!(
|
304
|
+
import.gsub!(url, new_path)
|
285
305
|
end
|
286
306
|
else
|
287
307
|
if @options[:cache_buster]
|
288
|
-
buster = make_cache_buster(asset_path,
|
289
|
-
import.gsub!(
|
308
|
+
buster = make_cache_buster(asset_path, query)
|
309
|
+
import.gsub!(url, asset_path.to_s + buster)
|
290
310
|
end
|
291
311
|
end
|
292
312
|
end
|
@@ -299,39 +319,39 @@ module FrontEndArchitect
|
|
299
319
|
if output_path == input_path
|
300
320
|
if @options[:data]
|
301
321
|
input = input.gsub(URL_REGEX) do
|
302
|
-
|
303
|
-
|
322
|
+
url = $2
|
323
|
+
query = $3
|
304
324
|
|
305
|
-
unless
|
306
|
-
new_path = File.expand_path(
|
325
|
+
unless url.match(/^(https:\/\/|http:\/\/|\/\/)/i)
|
326
|
+
new_path = File.expand_path(url, File.dirname(input_file))
|
307
327
|
|
308
|
-
if
|
309
|
-
new_path = Pathname.new(File.join(File.expand_path(@options[:root]),
|
328
|
+
if url.match(/^(\/[^\/]+.+)$/)
|
329
|
+
new_path = Pathname.new(File.join(File.expand_path(@options[:root]), url))
|
310
330
|
end
|
311
331
|
|
312
332
|
%Q!url(#{new_path})!
|
313
333
|
else
|
314
|
-
%Q!url(#{
|
334
|
+
%Q!url(#{url}#{query})!
|
315
335
|
end
|
316
336
|
end
|
317
337
|
elsif @options[:cache_buster]
|
318
338
|
input = input.gsub(URL_REGEX) do
|
319
|
-
|
320
|
-
|
321
|
-
|
322
|
-
|
323
|
-
if
|
324
|
-
|
339
|
+
url = $2
|
340
|
+
query = $3
|
341
|
+
|
342
|
+
unless url.match(/^(https:\/\/|http:\/\/|\/\/)/i)
|
343
|
+
if url.match(/^(\/[^\/]+.+)$/)
|
344
|
+
url = Pathname.new(File.join(File.expand_path(@options[:root]), url))
|
325
345
|
end
|
326
346
|
|
327
347
|
if @options[:cache_buster]
|
328
|
-
buster = make_cache_buster(
|
329
|
-
new_path =
|
348
|
+
buster = make_cache_buster(url, query)
|
349
|
+
new_path = url.to_s + buster
|
330
350
|
end
|
331
351
|
|
332
352
|
%Q!url(#{new_path})!
|
333
353
|
else
|
334
|
-
%Q!url(#{
|
354
|
+
%Q!url(#{url}#{query})!
|
335
355
|
end
|
336
356
|
end
|
337
357
|
end
|
@@ -340,37 +360,37 @@ module FrontEndArchitect
|
|
340
360
|
else
|
341
361
|
# Find all url(.ext) in file and rewrite relative url from output directory.
|
342
362
|
input = input.gsub(URL_REGEX) do
|
343
|
-
|
344
|
-
|
363
|
+
url = $2
|
364
|
+
query = $3
|
345
365
|
|
346
|
-
unless
|
366
|
+
unless url.match(/^(https:\/\/|http:\/\/|\/\/)/i)
|
347
367
|
if @options[:data]
|
348
368
|
# if doing data conversion rewrite url as an absolute path
|
349
|
-
new_path = File.expand_path(
|
369
|
+
new_path = File.expand_path(url, File.dirname(input_file))
|
350
370
|
|
351
|
-
if
|
352
|
-
new_path = Pathname.new(File.join(File.expand_path(@options[:root]),
|
371
|
+
if url.match(/^(\/[^\/]+.+)$/)
|
372
|
+
new_path = Pathname.new(File.join(File.expand_path(@options[:root]), url))
|
353
373
|
end
|
354
374
|
else
|
355
|
-
asset_path = Pathname.new(File.expand_path(
|
375
|
+
asset_path = Pathname.new(File.expand_path(url, File.dirname(input_file)))
|
356
376
|
|
357
|
-
if
|
358
|
-
asset_path = Pathname.new(File.join(File.expand_path(@options[:root]),
|
377
|
+
if url.match(/^(\/[^\/]+.+)$/)
|
378
|
+
asset_path = Pathname.new(File.join(File.expand_path(@options[:root]), url))
|
359
379
|
end
|
360
380
|
|
361
381
|
new_path = asset_path.relative_path_from(output_path)
|
362
382
|
|
363
383
|
if @options[:cache_buster]
|
364
|
-
buster = make_cache_buster(asset_path,
|
365
|
-
new_path = new_path.to_s+buster
|
384
|
+
buster = make_cache_buster(asset_path, query)
|
385
|
+
new_path = new_path.to_s + buster
|
366
386
|
else
|
367
|
-
new_path = new_path.to_s
|
387
|
+
new_path = new_path.to_s + query unless query.nil?
|
368
388
|
end
|
369
389
|
end
|
370
390
|
|
371
391
|
%Q!url(#{new_path})!
|
372
392
|
else
|
373
|
-
%Q!url(#{
|
393
|
+
%Q!url(#{url}#{query})!
|
374
394
|
end
|
375
395
|
end
|
376
396
|
|
@@ -378,18 +398,18 @@ module FrontEndArchitect
|
|
378
398
|
end
|
379
399
|
end
|
380
400
|
|
381
|
-
def make_cache_buster(asset_path,
|
382
|
-
unless
|
383
|
-
|
401
|
+
def make_cache_buster(asset_path, query)
|
402
|
+
unless query.nil?
|
403
|
+
query += '&'
|
384
404
|
else
|
385
|
-
|
405
|
+
query = '?'
|
386
406
|
end
|
387
407
|
|
388
408
|
if @options[:cache_buster] == :mtime
|
389
409
|
file_mtime = File.mtime(asset_path).to_i
|
390
|
-
buster =
|
410
|
+
buster = query + file_mtime.to_s
|
391
411
|
else
|
392
|
-
buster =
|
412
|
+
buster = query + @options[:cache_buster]
|
393
413
|
end
|
394
414
|
|
395
415
|
return buster
|
data/lib/yui/yuicompressor.jar
CHANGED
Binary file
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: blender
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: "0.
|
4
|
+
version: "0.24"
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Blake Elshire
|
@@ -10,7 +10,7 @@ autorequire:
|
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
12
|
|
13
|
-
date:
|
13
|
+
date: 2009-03-02 00:00:00 -06:00
|
14
14
|
default_executable:
|
15
15
|
dependencies:
|
16
16
|
- !ruby/object:Gem::Dependency
|
@@ -41,7 +41,7 @@ dependencies:
|
|
41
41
|
requirements:
|
42
42
|
- - ">="
|
43
43
|
- !ruby/object:Gem::Version
|
44
|
-
version: 1.
|
44
|
+
version: 1.8.0
|
45
45
|
version:
|
46
46
|
description: Blender is like ant or make for the front-end. It aggregates and compresses CSS and/or JavaScript assets for a site into efficient, production-ready files.
|
47
47
|
email: blender@front-end-architect.com
|
@@ -51,11 +51,12 @@ extensions: []
|
|
51
51
|
|
52
52
|
extra_rdoc_files:
|
53
53
|
- History.txt
|
54
|
+
- License.txt
|
54
55
|
- Manifest.txt
|
55
56
|
- README.txt
|
56
57
|
files:
|
57
58
|
- History.txt
|
58
|
-
-
|
59
|
+
- License.txt
|
59
60
|
- Manifest.txt
|
60
61
|
- README.txt
|
61
62
|
- Rakefile
|
@@ -87,7 +88,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
|
|
87
88
|
requirements:
|
88
89
|
- Java, v1.4 or greater
|
89
90
|
rubyforge_project: blender
|
90
|
-
rubygems_version: 1.
|
91
|
+
rubygems_version: 1.3.1
|
91
92
|
signing_key:
|
92
93
|
specification_version: 2
|
93
94
|
summary: Blender outputs efficient, production-ready CSS and/or JavaScript assets.
|