Module: Jammit
- Defined in:
- lib/jammit.rb,
lib/jammit/routes.rb,
lib/jammit/helper.rb,
lib/jammit/railtie.rb,
lib/jammit/packager.rb,
lib/jammit/controller.rb,
lib/jammit/compressor.rb,
lib/jammit/command_line.rb
Overview
Jammit
is the central namespace for all Jammit classes, and provides access
to all of the configuration options.
Defined Under Namespace
Modules: Helper, Routes Classes: CommandLine, Compressor, ConfigurationNotFound, Controller, DeprecationError, OutputNotWritable, PackageNotFound, Packager, Railtie
Constant Summary
- VERSION =
"0.5.0"
- ROOT =
File.(File.dirname(__FILE__) + '/..')
- ASSET_ROOT =
File.((defined?(Rails) && Rails.root.to_s.length > 0) ? Rails.root : ".") unless defined?(ASSET_ROOT)
- PUBLIC_ROOT =
(defined?(Rails) && Rails.public_path.to_s.length > 0) ? Rails.public_path : File.join(ASSET_ROOT, 'public') unless defined?(PUBLIC_ROOT)
- DEFAULT_CONFIG_PATH =
File.join(ASSET_ROOT, 'config', 'assets.yml')
- DEFAULT_PACKAGE_PATH =
"assets"
- DEFAULT_JST_SCRIPT =
File.join(ROOT, 'lib/jammit/jst.js')
- DEFAULT_JST_COMPILER =
"template"
- DEFAULT_JST_NAMESPACE =
"window.JST"
- AVAILABLE_COMPRESSORS =
[:yui, :closure]
- DEFAULT_COMPRESSOR =
:yui
- JS_EXTENSION =
Extension matchers for JavaScript and JST, which need to be disambiguated.
/\.js\Z/
- DEFAULT_JST_EXTENSION =
"jst"
Class Attribute Summary (collapse)
-
+ (Object) compress_assets
readonly
Returns the value of attribute compress_assets.
-
+ (Object) compressor_options
readonly
Returns the value of attribute compressor_options.
-
+ (Object) config_path
readonly
Returns the value of attribute config_path.
-
+ (Object) configuration
readonly
Returns the value of attribute configuration.
-
+ (Object) css_compressor_options
readonly
Returns the value of attribute css_compressor_options.
-
+ (Object) embed_assets
readonly
Returns the value of attribute embed_assets.
-
+ (Object) gzip_assets
readonly
Returns the value of attribute gzip_assets.
-
+ (Object) include_jst_script
readonly
Returns the value of attribute include_jst_script.
-
+ (Object) javascript_compressor
readonly
Returns the value of attribute javascript_compressor.
-
+ (Object) mhtml_enabled
readonly
Returns the value of attribute mhtml_enabled.
-
+ (Object) package_assets
readonly
Returns the value of attribute package_assets.
-
+ (Object) package_path
readonly
Returns the value of attribute package_path.
-
+ (Object) template_extension
readonly
Returns the value of attribute template_extension.
-
+ (Object) template_extension_matcher
readonly
Returns the value of attribute template_extension_matcher.
-
+ (Object) template_function
readonly
Returns the value of attribute template_function.
-
+ (Object) template_namespace
readonly
Returns the value of attribute template_namespace.
Class Method Summary (collapse)
-
+ (Object) asset_url(package, extension, suffix = nil, mtime = nil)
Generates the server-absolute URL to an asset package.
-
+ (Object) check_for_deprecations
private
Jammit 0.5+ no longer supports separate template packages.
-
+ (Object) check_java_version
private
The YUI Compressor requires Java > 1.4, and Closure requires Java > 1.6.
-
+ (Object) disable_compression
private
If we don’t have a working Java VM, then disable asset compression and complain loudly.
-
+ (Object) filename(package, extension, suffix = nil)
Generate the base filename for a version of a given package.
-
+ (Object) load_configuration(config_path)
Load the complete asset configuration from the specified
config_path
. -
+ (Object) packager
Keep a global (thread-local) reference to a
Jammit::Packager
, to avoid recomputing asset lists unnecessarily. -
+ (Object) reload!
Force a reload by resetting the Packager and reloading the configuration.
-
+ (Object) set_javascript_compressor(value)
private
Ensure that the JavaScript compressor is a valid choice.
-
+ (Object) set_package_assets(value)
private
Turn asset packaging on or off, depending on configuration and environment.
-
+ (Object) set_template_extension(value)
private
Set the extension for JS templates.
-
+ (Object) set_template_function(value)
private
Assign the JST template function, unless explicitly turned off.
-
+ (Object) set_template_namespace(value)
private
Set the root JS object in which to stash all compiled JST.
-
+ (Object) symbolize_keys(hash)
private
Clone of active_support’s symbolize_keys, so that we don’t have to depend on active_support in any fashion.
- + (Object) warn(message) private
Class Attribute Details
+ (Object) compress_assets (readonly)
Returns the value of attribute compress_assets
49 50 51 |
# File 'lib/jammit.rb', line 49 def compress_assets @compress_assets end |
+ (Object) compressor_options (readonly)
Returns the value of attribute compressor_options
49 50 51 |
# File 'lib/jammit.rb', line 49 def end |
+ (Object) config_path (readonly)
Returns the value of attribute config_path
49 50 51 |
# File 'lib/jammit.rb', line 49 def config_path @config_path end |
+ (Object) configuration (readonly)
Returns the value of attribute configuration
49 50 51 |
# File 'lib/jammit.rb', line 49 def configuration @configuration end |
+ (Object) css_compressor_options (readonly)
Returns the value of attribute css_compressor_options
49 50 51 |
# File 'lib/jammit.rb', line 49 def end |
+ (Object) embed_assets (readonly)
Returns the value of attribute embed_assets
49 50 51 |
# File 'lib/jammit.rb', line 49 def end |
+ (Object) gzip_assets (readonly)
Returns the value of attribute gzip_assets
49 50 51 |
# File 'lib/jammit.rb', line 49 def gzip_assets @gzip_assets end |
+ (Object) include_jst_script (readonly)
Returns the value of attribute include_jst_script
49 50 51 |
# File 'lib/jammit.rb', line 49 def include_jst_script @include_jst_script end |
+ (Object) javascript_compressor (readonly)
Returns the value of attribute javascript_compressor
49 50 51 |
# File 'lib/jammit.rb', line 49 def javascript_compressor @javascript_compressor end |
+ (Object) mhtml_enabled (readonly)
Returns the value of attribute mhtml_enabled
49 50 51 |
# File 'lib/jammit.rb', line 49 def mhtml_enabled @mhtml_enabled end |
+ (Object) package_assets (readonly)
Returns the value of attribute package_assets
49 50 51 |
# File 'lib/jammit.rb', line 49 def package_assets @package_assets end |
+ (Object) package_path (readonly)
Returns the value of attribute package_path
49 50 51 |
# File 'lib/jammit.rb', line 49 def package_path @package_path end |
+ (Object) template_extension (readonly)
Returns the value of attribute template_extension
49 50 51 |
# File 'lib/jammit.rb', line 49 def template_extension @template_extension end |
+ (Object) template_extension_matcher (readonly)
Returns the value of attribute template_extension_matcher
49 50 51 |
# File 'lib/jammit.rb', line 49 def template_extension_matcher @template_extension_matcher end |
+ (Object) template_function (readonly)
Returns the value of attribute template_function
49 50 51 |
# File 'lib/jammit.rb', line 49 def template_function @template_function end |
+ (Object) template_namespace (readonly)
Returns the value of attribute template_namespace
49 50 51 |
# File 'lib/jammit.rb', line 49 def template_namespace @template_namespace end |
Class Method Details
+ (Object) asset_url(package, extension, suffix = nil, mtime = nil)
Generates the server-absolute URL to an asset package.
106 107 108 109 |
# File 'lib/jammit.rb', line 106 def self.asset_url(package, extension, suffix=nil, mtime=nil) = mtime ? "?#{mtime.to_i}" : '' "/#{package_path}/#{filename(package, extension, suffix)}#{timestamp}" end |
+ (Object) check_for_deprecations (private)
Jammit 0.5+ no longer supports separate template packages.
165 166 167 |
# File 'lib/jammit.rb', line 165 def self.check_for_deprecations raise DeprecationError, "Jammit 0.5+ no longer supports separate packages for templates.\nPlease fold your templates into the appropriate 'javascripts' package instead." if @configuration[:templates] end |
+ (Object) check_java_version (private)
The YUI Compressor requires Java > 1.4, and Closure requires Java > 1.6.
146 147 148 149 150 151 152 153 154 155 |
# File 'lib/jammit.rb', line 146 def self.check_java_version return true if @checked_java_version java = [:java] || 'java' [:java] ||= java if [:java] version = (`#{java} -version 2>&1`)[/\d+\.\d+/] disable_compression if !version || (@javascript_compressor == :closure && version < '1.6') || (@javascript_compressor == :yui && version < '1.4') @checked_java_version = true end |
+ (Object) disable_compression (private)
If we don’t have a working Java VM, then disable asset compression and complain loudly.
159 160 161 162 |
# File 'lib/jammit.rb', line 159 def self.disable_compression @compress_assets = false warn("Asset compression disabled -- Java unavailable.") end |
+ (Object) filename(package, extension, suffix = nil)
Generate the base filename for a version of a given package.
100 101 102 103 |
# File 'lib/jammit.rb', line 100 def self.filename(package, extension, suffix=nil) suffix_part = suffix ? "-#{suffix}" : '' "#{package}#{suffix_part}.#{extension}" end |
+ (Object) load_configuration(config_path)
Load the complete asset configuration from the specified config_path
.
61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 |
# File 'lib/jammit.rb', line 61 def self.load_configuration(config_path) exists = config_path && File.exists?(config_path) raise ConfigurationNotFound, "could not find the \"#{config_path}\" configuration file" unless exists conf = YAML.load(ERB.new(File.read(config_path)).result) @config_path = config_path @configuration = symbolize_keys(conf) @package_path = conf[:package_path] || DEFAULT_PACKAGE_PATH = conf[:embed_assets] || conf[:embed_images] @compress_assets = !(conf[:compress_assets] == false) @gzip_assets = !(conf[:gzip_assets] == false) @mhtml_enabled = && != "datauri" = symbolize_keys(conf[:compressor_options] || {}) = symbolize_keys(conf[:css_compressor_options] || {}) set_javascript_compressor(conf[:javascript_compressor]) set_package_assets(conf[:package_assets]) set_template_function(conf[:template_function]) set_template_namespace(conf[:template_namespace]) set_template_extension(conf[:template_extension]) symbolize_keys(conf[:stylesheets]) if conf[:stylesheets] symbolize_keys(conf[:javascripts]) if conf[:javascripts] check_java_version check_for_deprecations self end |
+ (Object) packager
Keep a global (thread-local) reference to a Jammit::Packager
, to avoid
recomputing asset lists unnecessarily.
95 96 97 |
# File 'lib/jammit.rb', line 95 def self.packager Thread.current[:jammit_packager] ||= Packager.new end |
+ (Object) reload!
Force a reload by resetting the Packager and reloading the configuration. In development, this will be called as a before_filter before every request.
88 89 90 91 |
# File 'lib/jammit.rb', line 88 def self.reload! Thread.current[:jammit_packager] = nil load_configuration(@config_path) end |
+ (Object) set_javascript_compressor(value) (private)
Ensure that the JavaScript compressor is a valid choice.
115 116 117 118 |
# File 'lib/jammit.rb', line 115 def self.set_javascript_compressor(value) value = value && value.to_sym @javascript_compressor = AVAILABLE_COMPRESSORS.include?(value) ? value : DEFAULT_COMPRESSOR end |
+ (Object) set_package_assets(value) (private)
Turn asset packaging on or off, depending on configuration and environment.
121 122 123 124 125 |
# File 'lib/jammit.rb', line 121 def self.set_package_assets(value) package_env = !defined?(Rails) || !Rails.env.development? @package_assets = value == true || value.nil? ? package_env : value == 'always' ? true : false end |
+ (Object) set_template_extension(value) (private)
Set the extension for JS templates.
140 141 142 143 |
# File 'lib/jammit.rb', line 140 def self.set_template_extension(value) @template_extension = (value == true || value.nil? ? DEFAULT_JST_EXTENSION : value.to_s).gsub(/\A\.?(.*)\Z/, '\1') @template_extension_matcher = /\.#{Regexp.escape(@template_extension)}\Z/ end |
+ (Object) set_template_function(value) (private)
Assign the JST template function, unless explicitly turned off.
128 129 130 131 132 |
# File 'lib/jammit.rb', line 128 def self.set_template_function(value) @template_function = value == true || value.nil? ? DEFAULT_JST_COMPILER : value == false ? '' : value @include_jst_script = @template_function == DEFAULT_JST_COMPILER end |
+ (Object) set_template_namespace(value) (private)
Set the root JS object in which to stash all compiled JST.
135 136 137 |
# File 'lib/jammit.rb', line 135 def self.set_template_namespace(value) @template_namespace = value == true || value.nil? ? DEFAULT_JST_NAMESPACE : value.to_s end |
+ (Object) symbolize_keys(hash) (private)
Clone of active_support’s symbolize_keys, so that we don’t have to depend on active_support in any fashion. Converts a hash’s keys to all symbols.
178 179 180 181 182 183 |
# File 'lib/jammit.rb', line 178 def self.symbolize_keys(hash) hash.keys.each do |key| hash[(key.to_sym rescue key) || key] = hash.delete(key) end hash end |
+ (Object) warn(message) (private)
169 170 171 172 173 174 |
# File 'lib/jammit.rb', line 169 def self.warn() = "Jammit Warning: #{message}" @logger ||= (defined?(Rails) && Rails.logger ? Rails.logger : defined?(RAILS_DEFAULT_LOGGER) ? RAILS_DEFAULT_LOGGER : nil) @logger ? @logger.warn() : STDERR.puts() end |