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.
File without changes
@@ -1,5 +1,5 @@
1
1
  History.txt
2
- MIT-LICENSE
2
+ License.txt
3
3
  Manifest.txt
4
4
  README.txt
5
5
  Rakefile
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
- -h, --help Show this message
39
- -V, --version Prints Blender's version number
40
- -g, --generate Generate a stub Blendfile
41
- -f, --file FILE Use given Blendfile
42
- -r, --root ROOT Specify the path to the web root directory
43
- -t, --type TYPE Select file type to blend (css, js)
44
- -m, --min [MINIFIER] Select minifier to use (yui, none)
45
- -c, --cache-buster [BUSTER] Append cache busters to URLs in CSS, defaults to timestamps
46
- --force Force blending when source files aren't newer than output files
47
- --yui=YUIOPTS Pass arguments to YUI Compressor
48
- -d, --data EXPERIMENTAL Convert url(file.ext) to url(data:) in CSS files
49
- -z, --gzip EXPERIMENTAL Also create gzip output files
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 mime-types
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 need to run the following:
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, 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
+ * 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
- Copyright (c) 2008 Chris Griego
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.rb'
10
+ require 'front_end_architect/blender'
12
11
 
13
12
  hoe = Hoe.new('blender', FrontEndArchitect::Blender::VERSION) do |p|
14
- p.author = ['Blake Elshire', 'Chris Griego']
15
- p.email = 'blender@front-end-architect.com'
16
- p.summary = 'Blender outputs efficient, production-ready CSS and/or JavaScript assets.'
17
- 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.'
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
- opts.on('-h', '--help', "Show this message") { puts opts; exit 0 }
17
- opts.on('-V', '--version', "Show the version number") { puts "Front-End Blender v#{Blender::VERSION}"; exit 0 }
18
- opts.on('-g', '--generate', String, "Generate a stub Blendfile") { options[:generate] = true }
19
- opts.on('-f FILE', '--file FILE', String, "Use given Blendfile") {|f| options[:blendfile] = f }
20
- opts.on('-r ROOT', '--root ROOT', String, "Set the path to the web root directory") {|r| options[:root] = r }
21
- opts.on('-t TYPE', '--type TYPE', [:css, :js], "Select file type to blend (css, js)") {|t| options[:file_type] = t }
22
- opts.on('-m [MINIFIER]', '--min [MINIFIER]', [:yui, :none], "Select minifier to use (yui, none)") {|m| options[:min] = m.nil? ? :none : m.to_sym }
23
- opts.on('-c [BUSTER]', '--cache-buster [BUSTER]', String, "Append cache busters to URLs in CSS, defaults to timestamps") {|b| options[:cache_buster] = b.nil? ? :mtime : b }
24
- opts.on( '--force', String, "Force blending when source files aren't newer than output files") { options[:force] = true }
25
- opts.on( '--yui=YUIOPTS', String, "Pass arguments to YUI Compressor") {|o| options[:yuiopts] = o }
26
- opts.on('-d', '--data', String, "EXPERIMENTAL Convert url(file.ext) to url(data:) in CSS files") { options[:data] = true }
27
- opts.on('-z', '--gzip', String, "EXPERIMENTAL Also create gzip output files") { options[:gzip] = true }
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
- require 'yaml'
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.20'
23
+ VERSION = '0.24'
23
24
 
24
- FILTER_REGEX = /filter: ?[^?]+\(src=(['"])([^\?'"]+)(\?(?:[^'"]+)?)?\1,[^?]+\1\);/im
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(:blendfile.to_s),
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
- puts 'Permission Denied:'.white_on_red + ' ' + output_name.red
87
- puts 'Permission Denied:'.white_on_red + ' ' + gzip_output_name.red if @options[:gzip]
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
- puts 'Skipping: '.yellow + output_name.yellow
91
- puts 'Skipping: '.yellow + gzip_output_name.yellow if @options[:gzip]
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
- unless $2.downcase.include?('.css')
216
- mime_type = MIME::Types.type_for($2)
217
- url_contents = make_data_uri(IO.read($2), mime_type[0])
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 = $2
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
- puts output_name.green
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
- puts output_gzip.green
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(FILTER_REGEX) do |filter|
252
- uri = $2
253
- cbuster = $3
254
- unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/i)
255
- full_path = File.expand_path($2, File.dirname(input_file))
256
- buster = make_cache_buster(full_path, $3)
257
- new_path = uri.to_s + buster
258
-
259
- %Q!filter='#{new_path}'!
260
- else
261
- %Q!filter='#{uri}#{cbuster}'!
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
- uri = $2
269
- asset_path = Pathname.new(File.expand_path(uri, input_path))
288
+ url = $2
289
+ query = $3
290
+ asset_path = Pathname.new(File.expand_path(url, input_path))
270
291
 
271
- if uri.match(/^(\/[^\/]+.+)$/)
272
- asset_path = Pathname.new(File.join(File.expand_path(@options[:root]), uri))
292
+ if url.match(/^(\/[^\/]+.+)$/)
293
+ asset_path = Pathname.new(File.join(File.expand_path(@options[:root]), url))
273
294
  end
274
295
 
275
- unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/i)
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, $3)
282
- import.gsub!(uri, new_path.to_s+buster)
301
+ buster = make_cache_buster(asset_path, query)
302
+ import.gsub!(url, new_path.to_s + buster)
283
303
  else
284
- import.gsub!(uri, new_path)
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, $3)
289
- import.gsub!(uri, asset_path.to_s+buster)
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
- uri = $2
303
- cbuster = $3
322
+ url = $2
323
+ query = $3
304
324
 
305
- unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/i)
306
- new_path = File.expand_path($2, File.dirname(input_file))
325
+ unless url.match(/^(https:\/\/|http:\/\/|\/\/)/i)
326
+ new_path = File.expand_path(url, File.dirname(input_file))
307
327
 
308
- if uri.match(/^(\/[^\/]+.+)$/)
309
- new_path = Pathname.new(File.join(File.expand_path(@options[:root]), uri))
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(#{uri}#{cbuster})!
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
- unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/i)
320
- uri = $2
321
- cbuster = $3
322
-
323
- if uri.match(/^(\/[^\/]+.+)$/)
324
- uri = Pathname.new(File.join(File.expand_path(@options[:root]), uri))
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(uri, $3)
329
- new_path = uri.to_s+buster
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(#{uri}#{cbuster})!
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
- uri = $2
344
- cbuster = $3
363
+ url = $2
364
+ query = $3
345
365
 
346
- unless uri.match(/^(https:\/\/|http:\/\/|\/\/)/i)
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(uri, File.dirname(input_file))
369
+ new_path = File.expand_path(url, File.dirname(input_file))
350
370
 
351
- if uri.match(/^(\/[^\/]+.+)$/)
352
- new_path = Pathname.new(File.join(File.expand_path(@options[:root]), uri))
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(uri, File.dirname(input_file)))
375
+ asset_path = Pathname.new(File.expand_path(url, File.dirname(input_file)))
356
376
 
357
- if uri.match(/^(\/[^\/]+.+)$/)
358
- asset_path = Pathname.new(File.join(File.expand_path(@options[:root]), uri))
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, $3)
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+$3 unless $3.nil?
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(#{uri}#{cbuster})!
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, query_string)
382
- unless query_string.nil?
383
- query_string += '&'
401
+ def make_cache_buster(asset_path, query)
402
+ unless query.nil?
403
+ query += '&'
384
404
  else
385
- query_string = '?'
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 = query_string + file_mtime.to_s
410
+ buster = query + file_mtime.to_s
391
411
  else
392
- buster = query_string + @options[:cache_buster]
412
+ buster = query + @options[:cache_buster]
393
413
  end
394
414
 
395
415
  return buster
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.20"
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: 2008-10-13 00:00:00 -05:00
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.7.0
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
- - MIT-LICENSE
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.2.0
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.