blender 0.20 → 0.24
Sign up to get free protection for your applications and to get access to all the features.
- 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.
|