jammit 0.6.3 → 0.6.5

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/LICENSE CHANGED
@@ -1,4 +1,4 @@
1
- Copyright (c) 2009 Jeremy Ashkenas, DocumentCloud
1
+ Copyright (c) 2009-2011 Jeremy Ashkenas, DocumentCloud
2
2
 
3
3
  Permission is hereby granted, free of charge, to any person
4
4
  obtaining a copy of this software and associated documentation
@@ -1,7 +1,7 @@
1
1
  Gem::Specification.new do |s|
2
2
  s.name = 'jammit'
3
- s.version = '0.6.3' # Keep version in sync with jammit.rb
4
- s.date = '2011-05-26'
3
+ s.version = '0.6.5' # Keep version in sync with jammit.rb
4
+ s.date = '2011-11-30'
5
5
 
6
6
  s.homepage = "http://documentcloud.github.com/jammit/"
7
7
  s.summary = "Industrial Strength Asset Packaging for Rails"
@@ -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.6.3"
7
+ VERSION = "0.6.5"
8
8
 
9
9
  ROOT = File.expand_path(File.dirname(__FILE__) + '/..')
10
10
 
11
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
- 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
15
  DEFAULT_CONFIG_PATH = File.join(ASSET_ROOT, 'config', 'assets.yml')
16
16
 
@@ -51,12 +51,14 @@ module Jammit
51
51
  :embed_assets, :package_assets, :compress_assets, :gzip_assets,
52
52
  :package_path, :mhtml_enabled, :include_jst_script, :config_path,
53
53
  :javascript_compressor, :compressor_options, :css_compressor_options,
54
- :template_extension, :template_extension_matcher, :allow_debugging
54
+ :template_extension, :template_extension_matcher, :allow_debugging,
55
+ :public_root
55
56
  attr_accessor :compressors
56
57
  end
57
58
 
58
59
  # The minimal required configuration.
59
60
  @configuration = {}
61
+ @public_root = DEFAULT_PUBLIC_ROOT
60
62
  @package_path = DEFAULT_PACKAGE_PATH
61
63
  @compressors = COMPRESSORS
62
64
 
@@ -87,6 +89,7 @@ module Jammit
87
89
  set_template_function(conf[:template_function])
88
90
  set_template_namespace(conf[:template_namespace])
89
91
  set_template_extension(conf[:template_extension])
92
+ set_public_root(conf[:public_root]) if conf[:public_root]
90
93
  symbolize_keys(conf[:stylesheets]) if conf[:stylesheets]
91
94
  symbolize_keys(conf[:javascripts]) if conf[:javascripts]
92
95
  check_for_deprecations
@@ -124,9 +127,11 @@ module Jammit
124
127
  :config_path => Jammit::DEFAULT_CONFIG_PATH,
125
128
  :output_folder => nil,
126
129
  :base_url => nil,
130
+ :public_root => nil,
127
131
  :force => false
128
132
  }.merge(options)
129
133
  load_configuration(options[:config_path])
134
+ set_public_root(options[:public_root]) if options[:public_root]
130
135
  packager.force = options[:force]
131
136
  packager.package_names = options[:package_names]
132
137
  packager.precache_all(options[:output_folder], options[:base_url])
@@ -134,6 +139,12 @@ module Jammit
134
139
 
135
140
  private
136
141
 
142
+ # Allows command-line definition of `PUBLIC_ROOT`, for those using Jammit
143
+ # outside of Rails.
144
+ def self.set_public_root(public_root=nil)
145
+ @public_root = public_root if public_root
146
+ end
147
+
137
148
  # Ensure that the JavaScript compressor is a valid choice.
138
149
  def self.set_javascript_compressor(value)
139
150
  value = value && value.to_sym
@@ -66,6 +66,10 @@ Options:
66
66
  opts.on('-p', '--packages LIST', 'list of packages to build (ex: "core,ui", default: all)') do |package_names|
67
67
  @options[:package_names] = package_names.split(/,\s*/).map {|n| n.to_sym }
68
68
  end
69
+ opts.on('-P', '--public-root PATH', 'path to public assets (default: "public")') do |public_root|
70
+ puts "Option for PUBLIC_ROOT"
71
+ @options[:public_root] = public_root
72
+ end
69
73
  opts.on_tail('-v', '--version', 'display Jammit version') do
70
74
  puts "Jammit version #{Jammit::VERSION}"
71
75
  exit
@@ -187,14 +187,14 @@ module Jammit
187
187
  # not be relative, given the path of the stylesheet that contains it.
188
188
  def absolute_path(asset_pathname, css_pathname)
189
189
  (asset_pathname.absolute? ?
190
- Pathname.new(File.join(PUBLIC_ROOT, asset_pathname)) :
190
+ Pathname.new(File.join(Jammit.public_root, asset_pathname)) :
191
191
  css_pathname.dirname + asset_pathname).cleanpath
192
192
  end
193
193
 
194
194
  # CSS assets that are referenced by relative paths, and are *not* being
195
195
  # embedded, must be rewritten relative to the newly-merged stylesheet path.
196
196
  def relative_path(absolute_path)
197
- File.join('../', absolute_path.sub(PUBLIC_ROOT, ''))
197
+ File.join('../', absolute_path.sub(Jammit.public_root, ''))
198
198
  end
199
199
 
200
200
  # Similar to the AssetTagHelper's method of the same name, this will
@@ -246,7 +246,7 @@ module Jammit
246
246
 
247
247
  # `File.read`, but in "binary" mode.
248
248
  def read_binary_file(path)
249
- File.open(path, 'rb') {|f| f.read }
249
+ File.open(path, 'rb:UTF-8') {|f| f.read }
250
250
  end
251
251
  end
252
252
 
@@ -11,7 +11,7 @@ module Jammit
11
11
 
12
12
  SUFFIX_STRIPPER = /-(datauri|mhtml)\Z/
13
13
 
14
- NOT_FOUND_PATH = "#{PUBLIC_ROOT}/404.html"
14
+ NOT_FOUND_PATH = "#{Jammit.public_root}/404.html"
15
15
 
16
16
  # The "package" action receives all requests for asset packages that haven't
17
17
  # yet been cached. The package will be built, cached, and gzipped.
@@ -25,10 +25,11 @@ module Jammit
25
25
  # Writes out the URL to the bundled and compressed javascript package,
26
26
  # except in development, where it references the individual scripts.
27
27
  def include_javascripts(*packages)
28
+ options = packages.extract_options!
28
29
  html_safe packages.map {|pack|
29
30
  should_package? ? Jammit.asset_url(pack, :js) : Jammit.packager.individual_urls(pack.to_sym, :js)
30
31
  }.flatten.map {|pack|
31
- javascript_include_tag pack
32
+ javascript_include_tag pack, options
32
33
  }.join("\n")
33
34
  end
34
35
 
@@ -72,8 +73,8 @@ module Jammit
72
73
  # Generate the stylesheet tags for a batch of packages, with options, by
73
74
  # yielding each package to a block.
74
75
  def tags_with_options(packages, options)
75
- packages.dup.map {|package|
76
- yield package
76
+ packages.dup.map {|package|
77
+ yield package
77
78
  }.flatten.map {|package|
78
79
  stylesheet_link_tag package, options
79
80
  }.join("\n")
@@ -6,10 +6,6 @@ module Jammit
6
6
  # with the correct timestamps.
7
7
  class Packager
8
8
 
9
- # In Rails, the difference between a path and an asset URL is "public".
10
- PATH_DIFF = PUBLIC_ROOT.sub(ASSET_ROOT, '')
11
- PATH_TO_URL = /\A#{Regexp.escape(ASSET_ROOT)}(\/?#{Regexp.escape(PATH_DIFF)})?/
12
-
13
9
  # Set force to false to allow packages to only be rebuilt when their source
14
10
  # files have changed since the last time their package was built.
15
11
  attr_accessor :force, :package_names
@@ -37,7 +33,7 @@ module Jammit
37
33
  # Unless forced, will only rebuild assets whose source files have been
38
34
  # changed since their last package build.
39
35
  def precache_all(output_dir=nil, base_url=nil)
40
- output_dir ||= File.join(PUBLIC_ROOT, Jammit.package_path)
36
+ output_dir ||= File.join(Jammit.public_root, Jammit.package_path)
41
37
  cacheable(:js, output_dir).each {|p| cache(p, 'js', pack_javascripts(p), output_dir) }
42
38
  cacheable(:css, output_dir).each do |p|
43
39
  cache(p, 'css', pack_stylesheets(p), output_dir)
@@ -89,6 +85,7 @@ module Jammit
89
85
  def pack_templates(package)
90
86
  @compressor.compile_jst(package_for(package, :js)[:paths])
91
87
  end
88
+
92
89
 
93
90
  private
94
91
 
@@ -107,6 +104,11 @@ module Jammit
107
104
  Jammit.warn("No assets match '#{glob}'") if paths.empty?
108
105
  paths
109
106
  end
107
+
108
+ # In Rails, the difference between a path and an asset URL is "public".
109
+ def path_to_url
110
+ @path_to_url ||= /\A#{Regexp.escape(ASSET_ROOT)}(\/?#{Regexp.escape(Jammit.public_root.sub(ASSET_ROOT, ''))})?/
111
+ end
110
112
 
111
113
  # Get the latest mtime of a list of files (plus the config path).
112
114
  def latest_mtime(paths)
@@ -125,8 +127,10 @@ module Jammit
125
127
  return names.select do |name|
126
128
  pack = package_for(name, extension)
127
129
  cached = [Jammit.filename(name, extension)]
128
- cached.push Jammit.filename(name, extension, :datauri) if Jammit.embed_assets
129
- cached.push Jammit.filename(name, extension, :mhtml) if Jammit.mhtml_enabled
130
+ if extension == :css
131
+ cached.push Jammit.filename(name, extension, :datauri) if Jammit.embed_assets
132
+ cached.push Jammit.filename(name, extension, :mhtml) if Jammit.mhtml_enabled
133
+ end
130
134
  cached.map! {|file| File.join(output_dir, file) }
131
135
  if cached.any? {|file| !File.exists?(file) }
132
136
  true
@@ -153,10 +157,10 @@ module Jammit
153
157
  paths = globs.flatten.uniq.map {|glob| glob_files(glob) }.flatten.uniq
154
158
  packages[name][:paths] = paths
155
159
  if !paths.grep(Jammit.template_extension_matcher).empty?
156
- packages[name][:urls] = paths.grep(JS_EXTENSION).map {|path| path.sub(PATH_TO_URL, '') }
160
+ packages[name][:urls] = paths.grep(JS_EXTENSION).map {|path| path.sub(path_to_url, '') }
157
161
  packages[name][:urls] += [Jammit.asset_url(name, Jammit.template_extension)]
158
162
  else
159
- packages[name][:urls] = paths.map {|path| path.sub(PATH_TO_URL, '') }
163
+ packages[name][:urls] = paths.map {|path| path.sub(path_to_url, '') }
160
164
  end
161
165
  end
162
166
  packages
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: 1
4
+ hash: 13
5
5
  prerelease:
6
6
  segments:
7
7
  - 0
8
8
  - 6
9
- - 3
10
- version: 0.6.3
9
+ - 5
10
+ version: 0.6.5
11
11
  platform: ruby
12
12
  authors:
13
13
  - Jeremy Ashkenas
@@ -15,7 +15,7 @@ autorequire:
15
15
  bindir: bin
16
16
  cert_chain: []
17
17
 
18
- date: 2011-05-26 00:00:00 Z
18
+ date: 2011-11-30 00:00:00 Z
19
19
  dependencies:
20
20
  - !ruby/object:Gem::Dependency
21
21
  name: yui-compressor