jammit 0.4.3 → 0.4.4

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/jammit.gemspec CHANGED
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'jammit'
3
- s.version = '0.4.3' # Keep version in sync with jammit.rb
4
- s.date = '2009-1-29'
3
+ s.version = '0.4.4' # Keep version in sync with jammit.rb
4
+ s.date = '2010-2-6'
5
5
 
6
6
  s.homepage = "http://documentcloud.github.com/jammit/"
7
7
  s.summary = "Industrial Strength Asset Packaging for Rails"
data/lib/jammit.rb CHANGED
@@ -4,13 +4,13 @@ $LOAD_PATH.push File.expand_path(File.dirname(__FILE__))
4
4
  # to all of the configuration options.
5
5
  module Jammit
6
6
 
7
- VERSION = "0.4.3"
7
+ VERSION = "0.4.4"
8
8
 
9
9
  ROOT = File.expand_path(File.dirname(__FILE__) + '/..')
10
10
 
11
11
  ASSET_ROOT = File.expand_path(defined?(Rails) ? Rails.root : ".") unless defined?(ASSET_ROOT)
12
12
 
13
- PUBLIC_ROOT = File.join(ASSET_ROOT, 'public')
13
+ PUBLIC_ROOT = defined?(Rails) ? Rails.public_path : File.join(ASSET_ROOT, 'public')
14
14
 
15
15
  DEFAULT_CONFIG_PATH = File.join(ASSET_ROOT, 'config', 'assets.yml')
16
16
 
@@ -23,8 +23,8 @@ module Jammit
23
23
  EMBED_EXTS = EMBED_MIME_TYPES.keys
24
24
  EMBED_FONTS = ['.ttf', '.otf']
25
25
 
26
- # Maximum size for embeddable images (an IE8 limitation).
27
- MAX_IMAGE_SIZE = 32.kilobytes
26
+ # 32k maximum size for embeddable images (an IE8 limitation).
27
+ MAX_IMAGE_SIZE = 32768
28
28
 
29
29
  # CSS asset-embedding regexes for URL rewriting.
30
30
  EMBED_DETECTOR = /url\(['"]?([^\s)]+\.[a-z]+)(\?\d+)?['"]?\)/
@@ -110,7 +110,7 @@ module Jammit
110
110
  File.read(css_path).gsub(EMBED_DETECTOR) do |url|
111
111
  ipath, cpath = Pathname.new($1), Pathname.new(File.expand_path(css_path))
112
112
  is_url = URI.parse($1).absolute?
113
- is_url ? url : "url(#{rewrite_asset_path(ipath, cpath, variant)})"
113
+ is_url ? url : "url(#{construct_asset_path(ipath, cpath, variant)})"
114
114
  end
115
115
  end
116
116
  stylesheets.join("\n")
@@ -133,7 +133,7 @@ module Jammit
133
133
  i = paths[$1] ||= "#{index += 1}-#{File.basename($1)}"
134
134
  "url(mhtml:#{asset_url}!#{i})"
135
135
  end
136
- mhtml = paths.map do |path, identifier|
136
+ mhtml = paths.sort.map do |path, identifier|
137
137
  mime, contents = mime_type(path), encoded_contents(path)
138
138
  [MHTML_SEPARATOR, "Content-Location: #{identifier}\r\n", "Content-Type: #{mime}\r\n", "Content-Transfer-Encoding: base64\r\n\r\n", contents, "\r\n"]
139
139
  end
@@ -143,10 +143,11 @@ module Jammit
143
143
  # Return a rewritten asset URL for a new stylesheet -- the asset should
144
144
  # be tagged for embedding if embeddable, and referenced at the correct level
145
145
  # if relative.
146
- def rewrite_asset_path(asset_path, css_path, variant)
146
+ def construct_asset_path(asset_path, css_path, variant)
147
147
  public_path = absolute_path(asset_path, css_path)
148
148
  return "__EMBED__#{public_path}" if embeddable?(public_path, variant)
149
- asset_path.absolute? ? asset_path.to_s : relative_path(public_path)
149
+ source = asset_path.absolute? ? asset_path.to_s : relative_path(public_path)
150
+ rewrite_asset_path(source, public_path)
150
151
  end
151
152
 
152
153
  # Get the site-absolute public path for an asset file path that may or may
@@ -163,6 +164,21 @@ module Jammit
163
164
  File.join('../', absolute_path.sub(PUBLIC_ROOT, ''))
164
165
  end
165
166
 
167
+ # Similar to the AssetTagHelper's method of the same name, this will
168
+ # append the RAILS_ASSET_ID cache-buster to URLs, if it's defined.
169
+ def rewrite_asset_path(path, file_path)
170
+ asset_id = rails_asset_id(file_path)
171
+ asset_id.blank? ? path : "#{path}?#{asset_id}"
172
+ end
173
+
174
+ # Similar to the AssetTagHelper's method of the same name, this will
175
+ # determine the correct asset id for a file.
176
+ def rails_asset_id(path)
177
+ asset_id = ENV["RAILS_ASSET_ID"]
178
+ return asset_id if asset_id
179
+ File.exists?(path) ? File.mtime(path).to_i.to_s : ''
180
+ end
181
+
166
182
  # An asset is valid for embedding if it exists, is less than 32K, and is
167
183
  # stored somewhere inside of a folder named "embed".
168
184
  # IE does not support Data-URIs larger than 32K, and you probably shouldn't
@@ -179,7 +195,8 @@ module Jammit
179
195
 
180
196
  # Return the Base64-encoded contents of an asset on a single line.
181
197
  def encoded_contents(asset_path)
182
- Base64.encode64(File.read(asset_path)).gsub(/\n/, '')
198
+ data = File.open(asset_path, 'rb'){|f| f.read }
199
+ Base64.encode64(data).gsub(/\n/, '')
183
200
  end
184
201
 
185
202
  # Grab the mime-type of an asset, by filename.
@@ -8,9 +8,11 @@ require 'fileutils'
8
8
 
9
9
  # Gem Dependencies:
10
10
  require 'rubygems'
11
+ gem 'rails', '~> 2.0'
11
12
  require 'yui/compressor'
12
13
  require 'closure-compiler'
13
14
  require 'active_support'
15
+ require 'active_support/core_ext/hash'
14
16
 
15
17
  # Load initial configuration before the rest of Jammit.
16
18
  Jammit.load_configuration(Jammit::DEFAULT_CONFIG_PATH) if defined?(Rails)
@@ -7,7 +7,8 @@ module Jammit
7
7
  class Packager
8
8
 
9
9
  # In Rails, the difference between a path and an asset URL is "public".
10
- PATH_TO_URL = /\A#{Regexp.escape(ASSET_ROOT)}(\/?public)?/
10
+ PATH_DIFF = PUBLIC_ROOT.sub(ASSET_ROOT, '')
11
+ PATH_TO_URL = /\A#{Regexp.escape(ASSET_ROOT)}(\/?#{Regexp.escape(PATH_DIFF)})?/
11
12
 
12
13
  # Set force to false to allow packages to only be rebuilt when their source
13
14
  # files have changed since the last time their package was built.
metadata CHANGED
@@ -1,7 +1,7 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jammit
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.3
4
+ version: 0.4.4
5
5
  platform: ruby
6
6
  authors:
7
7
  - Jeremy Ashkenas
@@ -9,7 +9,7 @@ autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
11
 
12
- date: 2009-01-29 00:00:00 -05:00
12
+ date: 2010-02-06 00:00:00 -05:00
13
13
  default_executable:
14
14
  dependencies:
15
15
  - !ruby/object:Gem::Dependency