jammit 0.3.1 → 0.3.2
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 +2 -2
- data/lib/jammit.rb +13 -9
- data/lib/jammit/compressor.rb +15 -10
- data/lib/jammit/helper.rb +13 -13
- data/lib/jammit/packager.rb +1 -1
- metadata +2 -2
data/jammit.gemspec
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
Gem::Specification.new do |s|
|
2
2
|
s.name = 'jammit'
|
3
|
-
s.version = '0.3.
|
4
|
-
s.date = '2009-
|
3
|
+
s.version = '0.3.2' # Keep version in sync with jammit.rb
|
4
|
+
s.date = '2009-12-03'
|
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,7 +4,7 @@ $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.3.
|
7
|
+
VERSION = "0.3.2"
|
8
8
|
|
9
9
|
ROOT = File.expand_path(File.dirname(__FILE__) + '/..')
|
10
10
|
|
@@ -32,10 +32,6 @@ module Jammit
|
|
32
32
|
# configuration of an assets.yml file that doesn't exist.
|
33
33
|
class ConfigurationNotFound < NameError; end
|
34
34
|
|
35
|
-
# Jammit raises a JavaNotFound exception if Java is not installed, or it's
|
36
|
-
# not a recent enough version to run the JavaScript compressor.
|
37
|
-
class JavaNotFound < StandardError; end
|
38
|
-
|
39
35
|
# Jammit raises an OutputNotWritable exception if the output directory for
|
40
36
|
# cached packages is locked.
|
41
37
|
class OutputNotWritable < StandardError; end
|
@@ -118,10 +114,18 @@ module Jammit
|
|
118
114
|
# The YUI Compressor requires Java > 1.4, and Closure requires Java > 1.6.
|
119
115
|
def self.check_java_version
|
120
116
|
java = @compressor_options[:java] || 'java'
|
121
|
-
version = (`#{java} -version 2>&1`)
|
122
|
-
|
123
|
-
|
124
|
-
|
117
|
+
version = (`#{java} -version 2>&1`)[/\d+\.\d+/]
|
118
|
+
disable_compression if !version ||
|
119
|
+
(@javascript_compressor == :closure && version < '1.6') ||
|
120
|
+
(@javascript_compressor == :yui && version < '1.4')
|
121
|
+
end
|
122
|
+
|
123
|
+
# If we don't have a working Java VM, then disable asset compression and
|
124
|
+
# complain loudly.
|
125
|
+
def self.disable_compression
|
126
|
+
@compressor_options[:disabled] = true
|
127
|
+
complaint = "Warning: Jammit asset compression disabled -- Java unavailable."
|
128
|
+
defined?(Rails) ? Rails.logger.warn(complaint) : STDERR.puts(complaint)
|
125
129
|
end
|
126
130
|
|
127
131
|
end
|
data/lib/jammit/compressor.rb
CHANGED
@@ -31,6 +31,11 @@ module Jammit
|
|
31
31
|
JST_START = "(function(){window.JST = window.JST || {};"
|
32
32
|
JST_END = "})();"
|
33
33
|
|
34
|
+
COMPRESSORS = {
|
35
|
+
:yui => YUI::JavaScriptCompressor,
|
36
|
+
:closure => Closure::Compiler
|
37
|
+
}
|
38
|
+
|
34
39
|
DEFAULT_OPTIONS = {
|
35
40
|
:yui => {:munge => true},
|
36
41
|
:closure => {}
|
@@ -41,28 +46,28 @@ module Jammit
|
|
41
46
|
# "closure-compiler" gem.
|
42
47
|
def initialize
|
43
48
|
@css_compressor = YUI::CssCompressor.new
|
44
|
-
flavor
|
45
|
-
|
46
|
-
@js_compressor = flavor
|
47
|
-
Closure::Compiler.new(js_options) :
|
48
|
-
YUI::JavaScriptCompressor.new(js_options)
|
49
|
+
flavor = Jammit.javascript_compressor
|
50
|
+
@options = DEFAULT_OPTIONS[flavor].merge(Jammit.compressor_options)
|
51
|
+
@js_compressor = COMPRESSORS[flavor].new(@options)
|
49
52
|
end
|
50
53
|
|
51
54
|
# Concatenate together a list of JavaScript paths, and pass them through the
|
52
55
|
# YUI Compressor (with munging enabled).
|
53
56
|
def compress_js(paths)
|
54
|
-
|
57
|
+
js = concatenate(paths)
|
58
|
+
@options[:disabled] ? js : @js_compressor.compress(js)
|
55
59
|
end
|
56
60
|
|
57
61
|
# Concatenate and compress a list of CSS stylesheets. When compressing a
|
58
62
|
# :datauri or :mhtml variant, post-processes the result to embed
|
59
63
|
# referenced images.
|
60
64
|
def compress_css(paths, variant=nil, asset_url=nil)
|
61
|
-
|
65
|
+
css = concatenate_and_tag_images(paths, variant)
|
66
|
+
css = @css_compressor.compress(css) unless @options[:disabled]
|
62
67
|
case variant
|
63
|
-
when nil then return
|
64
|
-
when :datauri then return with_data_uris(
|
65
|
-
when :mhtml then return with_mhtml(
|
68
|
+
when nil then return css
|
69
|
+
when :datauri then return with_data_uris(css)
|
70
|
+
when :mhtml then return with_mhtml(css, asset_url)
|
66
71
|
else raise PackageNotFound, "\"#{variant}\" is not a valid stylesheet variant"
|
67
72
|
end
|
68
73
|
end
|
data/lib/jammit/helper.rb
CHANGED
@@ -15,9 +15,10 @@ module Jammit
|
|
15
15
|
# versions of the stylesheet package, otherwise the package is regular
|
16
16
|
# compressed CSS, and in development the stylesheet URLs are passed verbatim.
|
17
17
|
def include_stylesheets(*packages)
|
18
|
-
|
19
|
-
return
|
20
|
-
return packaged_stylesheets(packages)
|
18
|
+
options = packages.extract_options!
|
19
|
+
return individual_stylesheets(packages, options) unless Jammit.package_assets
|
20
|
+
return packaged_stylesheets(packages, options) if options.delete(:embed_images) == false || !Jammit.embed_images
|
21
|
+
return embedded_image_stylesheets(packages, options)
|
21
22
|
end
|
22
23
|
|
23
24
|
# Writes out the URL to the bundled and compressed javascript package,
|
@@ -39,30 +40,29 @@ module Jammit
|
|
39
40
|
private
|
40
41
|
|
41
42
|
# HTML tags, in order, for all of the individual stylesheets.
|
42
|
-
def individual_stylesheets(packages)
|
43
|
-
tags_with_options(packages) {|p| Jammit.packager.individual_urls(p.to_sym, :css) }
|
43
|
+
def individual_stylesheets(packages, options)
|
44
|
+
tags_with_options(packages, options) {|p| Jammit.packager.individual_urls(p.to_sym, :css) }
|
44
45
|
end
|
45
46
|
|
46
47
|
# HTML tags for the stylesheet packages.
|
47
|
-
def packaged_stylesheets(packages)
|
48
|
-
tags_with_options(packages) {|p| Jammit.asset_url(p, :css) }
|
48
|
+
def packaged_stylesheets(packages, options)
|
49
|
+
tags_with_options(packages, options) {|p| Jammit.asset_url(p, :css) }
|
49
50
|
end
|
50
51
|
|
51
52
|
# HTML tags for the 'datauri', and 'mhtml' versions of the packaged
|
52
53
|
# stylesheets, using conditional comments to load the correct variant.
|
53
|
-
def embedded_image_stylesheets(packages)
|
54
|
-
datauri_tags = tags_with_options(packages) {|p| Jammit.asset_url(p, :css, :datauri) }
|
54
|
+
def embedded_image_stylesheets(packages, options)
|
55
|
+
datauri_tags = tags_with_options(packages, options) {|p| Jammit.asset_url(p, :css, :datauri) }
|
55
56
|
ie_tags = Jammit.mhtml_enabled ?
|
56
|
-
tags_with_options(packages) {|p| Jammit.asset_url(p, :css, :mhtml) } :
|
57
|
-
packaged_stylesheets(packages)
|
57
|
+
tags_with_options(packages, options) {|p| Jammit.asset_url(p, :css, :mhtml) } :
|
58
|
+
packaged_stylesheets(packages, options)
|
58
59
|
[DATA_URI_START, datauri_tags, DATA_URI_END, MHTML_START, ie_tags, MHTML_END].join("\n")
|
59
60
|
end
|
60
61
|
|
61
62
|
# Generate the stylesheet tags for a batch of packages, with options, by
|
62
63
|
# yielding each package to a block.
|
63
|
-
def tags_with_options(packages)
|
64
|
+
def tags_with_options(packages, options)
|
64
65
|
packages = packages.dup
|
65
|
-
options = packages.extract_options!
|
66
66
|
packages.map! {|package| yield package }.flatten!
|
67
67
|
packages.push(options) unless options.empty?
|
68
68
|
stylesheet_link_tag(*packages)
|
data/lib/jammit/packager.rb
CHANGED
@@ -99,7 +99,7 @@ module Jammit
|
|
99
99
|
# Absolute globs are absolute -- relative globs are relative to ASSET_ROOT.
|
100
100
|
def glob_files(glob)
|
101
101
|
absolute = Pathname.new(glob).absolute?
|
102
|
-
Dir[absolute ? glob : File.join(ASSET_ROOT, glob)]
|
102
|
+
Dir[absolute ? glob : File.join(ASSET_ROOT, glob)].sort
|
103
103
|
end
|
104
104
|
|
105
105
|
# Return a list of all of the packages that should be cached. If "force" is
|
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.3.
|
4
|
+
version: 0.3.2
|
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-
|
12
|
+
date: 2009-12-03 00:00:00 -05:00
|
13
13
|
default_executable:
|
14
14
|
dependencies:
|
15
15
|
- !ruby/object:Gem::Dependency
|