jammit 0.6.5 → 0.6.6

Sign up to get free protection for your applications and to get access to all the features.
data/bin/jammit CHANGED
@@ -1,5 +1,7 @@
1
1
  #!/usr/bin/env ruby -rrubygems
2
+ require 'pathname'
2
3
 
3
- require "#{File.dirname(__FILE__)}/../lib/jammit/command_line.rb"
4
+ APP_ROOT = File.dirname(Pathname.new(__FILE__).realpath)
5
+ require File.join(APP_ROOT, '../lib/jammit/command_line.rb')
4
6
 
5
7
  Jammit::CommandLine.new
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'jammit'
3
- s.version = '0.6.5' # Keep version in sync with jammit.rb
4
- s.date = '2011-11-30'
3
+ s.version = '0.6.6' # Keep version in sync with jammit.rb
4
+ s.date = '2013-03-20'
5
5
 
6
6
  s.homepage = "http://documentcloud.github.com/jammit/"
7
7
  s.summary = "Industrial Strength Asset Packaging for Rails"
@@ -26,7 +26,8 @@ Gem::Specification.new do |s|
26
26
  '--main' << 'README' <<
27
27
  '--all'
28
28
 
29
- s.add_dependency 'yui-compressor', ['>= 0.9.3']
29
+ s.add_dependency 'cssmin', ['>= 1.0.3']
30
+ s.add_dependency 'jsmin', ['>= 1.0.1']
30
31
 
31
32
  s.files = Dir['lib/**/*', 'bin/*', 'rails/*', 'jammit.gemspec', 'LICENSE', 'README']
32
33
  end
@@ -4,27 +4,31 @@ $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.6.5"
7
+ VERSION = "0.6.6"
8
8
 
9
- ROOT = File.expand_path(File.dirname(__FILE__) + '/..')
9
+ ROOT = File.expand_path(File.dirname(__FILE__) + '/..')
10
10
 
11
- ASSET_ROOT = File.expand_path((defined?(Rails) && Rails.root.to_s.length > 0) ? Rails.root : ENV['RAILS_ROOT'] || ".") unless defined?(ASSET_ROOT)
11
+ ASSET_ROOT = File.expand_path((defined?(Rails) && Rails.root.to_s.length > 0) ? Rails.root : ENV['RAILS_ROOT'] || ".") unless defined?(ASSET_ROOT)
12
12
 
13
- DEFAULT_PUBLIC_ROOT = (defined?(Rails) && Rails.public_path.to_s.length > 0) ? Rails.public_path : File.join(ASSET_ROOT, 'public') unless defined?(PUBLIC_ROOT)
13
+ DEFAULT_PUBLIC_ROOT = (defined?(Rails) && Rails.public_path.to_s.length > 0) ? Rails.public_path : File.join(ASSET_ROOT, 'public') unless defined?(PUBLIC_ROOT)
14
14
 
15
- DEFAULT_CONFIG_PATH = File.join(ASSET_ROOT, 'config', 'assets.yml')
15
+ DEFAULT_CONFIG_PATH = File.join(ASSET_ROOT, 'config', 'assets.yml')
16
16
 
17
- DEFAULT_PACKAGE_PATH = "assets"
17
+ DEFAULT_PACKAGE_PATH = "assets"
18
18
 
19
- DEFAULT_JST_SCRIPT = File.join(ROOT, 'lib/jammit/jst.js')
19
+ DEFAULT_JST_SCRIPT = File.join(ROOT, 'lib/jammit/jst.js')
20
20
 
21
- DEFAULT_JST_COMPILER = "template"
21
+ DEFAULT_JST_COMPILER = "template"
22
22
 
23
- DEFAULT_JST_NAMESPACE = "window.JST"
23
+ DEFAULT_JST_NAMESPACE = "window.JST"
24
24
 
25
- COMPRESSORS = [:yui, :closure, :uglifier]
25
+ JAVASCRIPT_COMPRESSORS = [:jsmin, :yui, :closure, :uglifier]
26
26
 
27
- DEFAULT_COMPRESSOR = :yui
27
+ DEFAULT_JAVASCRIPT_COMPRESSOR = :jsmin
28
+
29
+ CSS_COMPRESSORS = [:cssmin, :yui, :sass]
30
+
31
+ DEFAULT_CSS_COMPRESSOR = :cssmin
28
32
 
29
33
  # Extension matchers for JavaScript and JST, which need to be disambiguated.
30
34
  JS_EXTENSION = /\.js\Z/
@@ -35,7 +39,7 @@ module Jammit
35
39
  class PackageNotFound < NameError; end
36
40
 
37
41
  # Jammit raises a MissingConfiguration exception when you try to load the
38
- # configuration of an assets.yml file that doesn't exist, or are missing
42
+ # configuration of an assets.yml file that doesn't exist, or are missing
39
43
  # a piece of required configuration.
40
44
  class MissingConfiguration < NameError; end
41
45
 
@@ -50,17 +54,20 @@ module Jammit
50
54
  attr_reader :configuration, :template_function, :template_namespace,
51
55
  :embed_assets, :package_assets, :compress_assets, :gzip_assets,
52
56
  :package_path, :mhtml_enabled, :include_jst_script, :config_path,
53
- :javascript_compressor, :compressor_options, :css_compressor_options,
54
- :template_extension, :template_extension_matcher, :allow_debugging,
55
- :public_root
56
- attr_accessor :compressors
57
+ :javascript_compressor, :compressor_options, :css_compressor,
58
+ :css_compressor_options, :template_extension,
59
+ :template_extension_matcher, :allow_debugging,
60
+ :rewrite_relative_paths, :public_root
61
+ attr_accessor :javascript_compressors, :css_compressors
57
62
  end
58
63
 
59
64
  # The minimal required configuration.
60
65
  @configuration = {}
61
66
  @public_root = DEFAULT_PUBLIC_ROOT
62
67
  @package_path = DEFAULT_PACKAGE_PATH
63
- @compressors = COMPRESSORS
68
+
69
+ @javascript_compressors = JAVASCRIPT_COMPRESSORS
70
+ @css_compressors = CSS_COMPRESSORS
64
71
 
65
72
  # Load the complete asset configuration from the specified @config_path@.
66
73
  # If we're loading softly, don't let missing configuration error out.
@@ -71,7 +78,7 @@ module Jammit
71
78
  conf = YAML.load(ERB.new(File.read(config_path)).result)
72
79
 
73
80
  # Optionally overwrite configuration based on the environment.
74
- rails_env = defined?(Rails) ? Rails.env : ENV['RAILS_ENV']
81
+ rails_env = (defined?(Rails) ? ::Rails.env : ENV['RAILS_ENV'] || "development")
75
82
  conf.merge! conf.delete rails_env if conf.has_key? rails_env
76
83
 
77
84
  @config_path = config_path
@@ -79,12 +86,14 @@ module Jammit
79
86
  @package_path = conf[:package_path] || DEFAULT_PACKAGE_PATH
80
87
  @embed_assets = conf[:embed_assets] || conf[:embed_images]
81
88
  @compress_assets = !(conf[:compress_assets] == false)
89
+ @rewrite_relative_paths = !(conf[:rewrite_relative_paths] == false)
82
90
  @gzip_assets = !(conf[:gzip_assets] == false)
83
91
  @allow_debugging = !(conf[:allow_debugging] == false)
84
92
  @mhtml_enabled = @embed_assets && @embed_assets != "datauri"
85
93
  @compressor_options = symbolize_keys(conf[:compressor_options] || {})
86
94
  @css_compressor_options = symbolize_keys(conf[:css_compressor_options] || {})
87
95
  set_javascript_compressor(conf[:javascript_compressor])
96
+ set_css_compressor(conf[:css_compressor])
88
97
  set_package_assets(conf[:package_assets])
89
98
  set_template_function(conf[:template_function])
90
99
  set_template_namespace(conf[:template_namespace])
@@ -148,7 +157,13 @@ module Jammit
148
157
  # Ensure that the JavaScript compressor is a valid choice.
149
158
  def self.set_javascript_compressor(value)
150
159
  value = value && value.to_sym
151
- @javascript_compressor = compressors.include?(value) ? value : DEFAULT_COMPRESSOR
160
+ @javascript_compressor = javascript_compressors.include?(value) ? value : DEFAULT_JAVASCRIPT_COMPRESSOR
161
+ end
162
+
163
+ # Ensure that the CSS compressor is a valid choice.
164
+ def self.set_css_compressor(value)
165
+ value = value && value.to_sym
166
+ @css_compressor = css_compressors.include?(value) ? value : DEFAULT_CSS_COMPRESSOR
152
167
  end
153
168
 
154
169
  # Turn asset packaging on or off, depending on configuration and environment.
@@ -15,9 +15,9 @@ module Jammit
15
15
  '.gif' => 'image/gif',
16
16
  '.tif' => 'image/tiff',
17
17
  '.tiff' => 'image/tiff',
18
- '.ttf' => 'font/truetype',
18
+ '.ttf' => 'application/x-font-ttf',
19
19
  '.otf' => 'font/opentype',
20
- '.woff' => 'font/woff'
20
+ '.woff' => 'application/x-font-woff'
21
21
  }
22
22
 
23
23
  # Font extensions for which we allow embedding:
@@ -41,26 +41,39 @@ module Jammit
41
41
  JST_START = "(function(){"
42
42
  JST_END = "})();"
43
43
 
44
- COMPRESSORS = {
45
- :yui => YUI::JavaScriptCompressor,
46
- :closure => Jammit.compressors.include?(:closure) ? Closure::Compiler : nil,
47
- :uglifier => Jammit.compressors.include?(:uglifier) ? Jammit::Uglifier : nil
44
+ JAVASCRIPT_COMPRESSORS = {
45
+ :jsmin => Jammit.javascript_compressors.include?(:jsmin) ? Jammit::JsminCompressor : nil,
46
+ :yui => Jammit.javascript_compressors.include?(:yui) ? YUI::JavaScriptCompressor : nil,
47
+ :closure => Jammit.javascript_compressors.include?(:closure) ? Closure::Compiler : nil,
48
+ :uglifier => Jammit.javascript_compressors.include?(:uglifier) ? Jammit::Uglifier : nil
48
49
  }
49
50
 
50
- DEFAULT_OPTIONS = {
51
+ CSS_COMPRESSORS = {
52
+ :cssmin => Jammit.css_compressors.include?(:cssmin) ? Jammit::CssminCompressor : nil,
53
+ :yui => Jammit.css_compressors.include?(:yui) ? YUI::CssCompressor : nil,
54
+ :sass => Jammit.css_compressors.include?(:sass) ? Jammit::SassCompressor : nil
55
+ }
56
+
57
+ JAVASCRIPT_DEFAULT_OPTIONS = {
58
+ :jsmin => {},
51
59
  :yui => {:munge => true},
52
60
  :closure => {},
53
61
  :uglifier => {:copyright => false}
54
62
  }
55
63
 
56
- # The css compressor is always the YUI Compressor. JS compression can be
57
- # provided with YUI Compressor, Google Closure Compiler or UglifyJS.
64
+ # CSS compression can be provided with YUI Compressor or sass. JS
65
+ # compression can be provided with YUI Compressor, Google Closure
66
+ # Compiler or UglifyJS.
58
67
  def initialize
59
- Jammit.check_java_version
60
- @css_compressor = YUI::CssCompressor.new(Jammit.css_compressor_options || {})
61
- flavor = Jammit.javascript_compressor || Jammit::DEFAULT_COMPRESSOR
62
- @options = DEFAULT_OPTIONS[flavor].merge(Jammit.compressor_options || {})
63
- @js_compressor = COMPRESSORS[flavor].new(@options)
68
+ if Jammit.javascript_compressors.include?(:yui) || Jammit.javascript_compressors.include?(:closure) || Jammit.css_compressors.include?(:yui)
69
+ Jammit.check_java_version
70
+ end
71
+
72
+ css_flavor = Jammit.css_compressor || Jammit::DEFAULT_CSS_COMPRESSOR
73
+ @css_compressor = CSS_COMPRESSORS[css_flavor].new(Jammit.css_compressor_options || {})
74
+ js_flavor = Jammit.javascript_compressor || Jammit::DEFAULT_JAVASCRIPT_COMPRESSOR
75
+ @options = JAVASCRIPT_DEFAULT_OPTIONS[js_flavor].merge(Jammit.compressor_options || {})
76
+ @js_compressor = JAVASCRIPT_COMPRESSORS[js_flavor].new(@options)
64
77
  end
65
78
 
66
79
  # Concatenate together a list of JavaScript paths, and pass them through the
@@ -179,7 +192,7 @@ module Jammit
179
192
  def construct_asset_path(asset_path, css_path, variant)
180
193
  public_path = absolute_path(asset_path, css_path)
181
194
  return "__EMBED__#{public_path}" if embeddable?(public_path, variant)
182
- source = asset_path.absolute? ? asset_path.to_s : relative_path(public_path)
195
+ source = asset_path.absolute? || ! Jammit.rewrite_relative_paths ? asset_path.to_s : relative_path(public_path)
183
196
  rewrite_asset_path(source, public_path)
184
197
  end
185
198
 
@@ -0,0 +1,10 @@
1
+ # Wraps CSSMin compressor to use the same API as the rest of
2
+ # Jammit's compressors.
3
+ class Jammit::CssminCompressor
4
+ def initialize(options = {})
5
+ end
6
+
7
+ def compress(css)
8
+ CSSMin.minify(css)
9
+ end
10
+ end
@@ -7,28 +7,45 @@ require 'base64'
7
7
  require 'pathname'
8
8
  require 'fileutils'
9
9
 
10
- # Include YUI as the default
11
- require 'yui/compressor'
10
+ # Try Uglifier.
11
+ begin
12
+ require 'uglifier'
13
+ require 'jammit/uglifier'
14
+ rescue LoadError
15
+ Jammit.javascript_compressors.delete :uglifier
16
+ end
17
+
18
+ # Try YUI
19
+ begin
20
+ require 'yui/compressor'
21
+ rescue LoadError
22
+ Jammit.javascript_compressors.delete :yui
23
+ Jammit.css_compressors.delete :yui
24
+ end
12
25
 
13
26
  # Try Closure.
14
27
  begin
15
28
  require 'closure-compiler'
16
29
  rescue LoadError
17
- Jammit.compressors.delete :closure
30
+ Jammit.javascript_compressors.delete :closure
18
31
  end
19
32
 
20
- # Try Uglifier.
33
+ # Try Sass
21
34
  begin
22
- require 'uglifier'
35
+ require 'sass'
36
+ require 'jammit/sass_compressor'
23
37
  rescue LoadError
24
- Jammit.compressors.delete :uglifier
38
+ Jammit.css_compressors.delete :sass
25
39
  end
26
40
 
27
41
  # Load initial configuration before the rest of Jammit.
28
42
  Jammit.load_configuration(Jammit::DEFAULT_CONFIG_PATH, true) if defined?(Rails)
29
43
 
30
44
  # Jammit Core:
31
- require 'jammit/uglifier' if Jammit.compressors.include? :uglifier
45
+ require 'jsmin'
46
+ require 'cssmin'
47
+ require 'jammit/jsmin_compressor'
48
+ require 'jammit/cssmin_compressor'
32
49
  require 'jammit/compressor'
33
50
  require 'jammit/packager'
34
51
 
@@ -0,0 +1,10 @@
1
+ # Wraps JSMin compressor to use the same API as the rest of
2
+ # Jammit's compressors.
3
+ class Jammit::JsminCompressor
4
+ def initialize(options = {})
5
+ end
6
+
7
+ def compress(js)
8
+ JSMin.minify(js)
9
+ end
10
+ end
@@ -14,7 +14,6 @@ module Jammit
14
14
  # Jammit.configuration. When assets.yml is being changed on the fly,
15
15
  # create a new Packager.
16
16
  def initialize
17
- @compressor = Compressor.new
18
17
  @force = false
19
18
  @package_names = nil
20
19
  @config = {
@@ -71,21 +70,25 @@ module Jammit
71
70
  package_for(package, extension)[:urls]
72
71
  end
73
72
 
73
+ def compressor
74
+ @compressor ||= Compressor.new
75
+ end
76
+
74
77
  # Return the compressed contents of a stylesheet package.
75
78
  def pack_stylesheets(package, variant=nil, asset_url=nil)
76
- @compressor.compress_css(package_for(package, :css)[:paths], variant, asset_url)
79
+ compressor.compress_css(package_for(package, :css)[:paths], variant, asset_url)
77
80
  end
78
81
 
79
82
  # Return the compressed contents of a javascript package.
80
83
  def pack_javascripts(package)
81
- @compressor.compress_js(package_for(package, :js)[:paths])
84
+ compressor.compress_js(package_for(package, :js)[:paths])
82
85
  end
83
86
 
84
87
  # Return the compiled contents of a JST package.
85
88
  def pack_templates(package)
86
- @compressor.compile_jst(package_for(package, :js)[:paths])
89
+ compressor.compile_jst(package_for(package, :js)[:paths])
87
90
  end
88
-
91
+
89
92
 
90
93
  private
91
94
 
@@ -109,7 +112,7 @@ module Jammit
109
112
  def path_to_url
110
113
  @path_to_url ||= /\A#{Regexp.escape(ASSET_ROOT)}(\/?#{Regexp.escape(Jammit.public_root.sub(ASSET_ROOT, ''))})?/
111
114
  end
112
-
115
+
113
116
  # Get the latest mtime of a list of files (plus the config path).
114
117
  def latest_mtime(paths)
115
118
  paths += [Jammit.config_path]
@@ -0,0 +1,17 @@
1
+ # Wraps sass' css compressor to use the same API as the rest of
2
+ # Jammit's compressors.
3
+ class Jammit::SassCompressor
4
+ # Creates a new sass compressor. Jammit::SassCompressor doesn't use
5
+ # any options, the +options+ parameter is there for API
6
+ # compatibility.
7
+ def initialize(options = {})
8
+ end
9
+
10
+ # Compresses +css+ using sass' CSS parser, and returns the
11
+ # compressed css.
12
+ def compress(css)
13
+ root_node = ::Sass::SCSS::CssParser.new(css, 'jammit-combined-input').parse
14
+ root_node.options = {:style => :compressed}
15
+ root_node.render.strip
16
+ end
17
+ end
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: jammit
3
3
  version: !ruby/object:Gem::Version
4
- hash: 13
4
+ hash: 11
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 5
10
- version: 0.6.5
9
+ - 6
10
+ version: 0.6.6
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jeremy Ashkenas
@@ -15,24 +15,40 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-11-30 00:00:00 Z
18
+ date: 2013-03-20 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
- name: yui-compressor
21
+ name: cssmin
22
22
  prerelease: false
23
23
  requirement: &id001 !ruby/object:Gem::Requirement
24
24
  none: false
25
25
  requirements:
26
26
  - - ">="
27
27
  - !ruby/object:Gem::Version
28
- hash: 61
28
+ hash: 17
29
29
  segments:
30
+ - 1
30
31
  - 0
31
- - 9
32
32
  - 3
33
- version: 0.9.3
33
+ version: 1.0.3
34
34
  type: :runtime
35
35
  version_requirements: *id001
36
+ - !ruby/object:Gem::Dependency
37
+ name: jsmin
38
+ prerelease: false
39
+ requirement: &id002 !ruby/object:Gem::Requirement
40
+ none: false
41
+ requirements:
42
+ - - ">="
43
+ - !ruby/object:Gem::Version
44
+ hash: 21
45
+ segments:
46
+ - 1
47
+ - 0
48
+ - 1
49
+ version: 1.0.1
50
+ type: :runtime
51
+ version_requirements: *id002
36
52
  description: " Jammit is an industrial strength asset packaging library for Rails,\n providing both the CSS and JavaScript concatenation and compression that\n you'd expect, as well as YUI Compressor and Closure Compiler compatibility,\n ahead-of-time gzipping, built-in JavaScript template support, and optional\n Data-URI / MHTML image embedding.\n"
37
53
  email: jeremy@documentcloud.org
38
54
  executables:
@@ -45,12 +61,15 @@ files:
45
61
  - lib/jammit/command_line.rb
46
62
  - lib/jammit/compressor.rb
47
63
  - lib/jammit/controller.rb
64
+ - lib/jammit/cssmin_compressor.rb
48
65
  - lib/jammit/dependencies.rb
49
66
  - lib/jammit/helper.rb
67
+ - lib/jammit/jsmin_compressor.rb
50
68
  - lib/jammit/jst.js
51
69
  - lib/jammit/packager.rb
52
70
  - lib/jammit/railtie.rb
53
71
  - lib/jammit/routes.rb
72
+ - lib/jammit/sass_compressor.rb
54
73
  - lib/jammit/uglifier.rb
55
74
  - lib/jammit.rb
56
75
  - bin/jammit
@@ -93,9 +112,10 @@ required_rubygems_version: !ruby/object:Gem::Requirement
93
112
  requirements: []
94
113
 
95
114
  rubyforge_project: jammit
96
- rubygems_version: 1.7.2
115
+ rubygems_version: 1.8.24
97
116
  signing_key:
98
117
  specification_version: 3
99
118
  summary: Industrial Strength Asset Packaging for Rails
100
119
  test_files: []
101
120
 
121
+ has_rdoc: