Module: Jammit

Defined in:
lib/jammit.rb,
lib/jammit/helper.rb,
lib/jammit/routes.rb,
lib/jammit/railtie.rb,
lib/jammit/packager.rb,
lib/jammit/compressor.rb,
lib/jammit/controller.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, Controller, DeprecationError, MissingConfiguration, OutputNotWritable, PackageNotFound, Packager, Railtie, SassCompressor, Uglifier

Constant Summary collapse

VERSION =
"0.6.3"
ROOT =
File.expand_path(File.dirname(__FILE__) + '/..')
ASSET_ROOT =
File.expand_path((defined?(Rails) && Rails.root.to_s.length > 0) ? Rails.root : ENV['RAILS_ROOT'] || ".")
DEFAULT_PUBLIC_ROOT =
(Rails) && Rails.public_path.to_s.length > 0) ? Rails.public_path : File.join(ASSET_ROOT, 'public')
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"
JAVASCRIPT_COMPRESSORS =
[:yui, :closure, :uglifier]
DEFAULT_JAVASCRIPT_COMPRESSOR =
:yui
CSS_COMPRESSORS =
[:yui, :sass]
DEFAULT_CSS_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

Class Method Summary collapse

Class Attribute Details

.allow_debuggingObject (readonly)

Returns the value of attribute allow_debugging.



54
55
56
# File 'lib/jammit.rb', line 54

def allow_debugging
  @allow_debugging
end

.compress_assetsObject (readonly)

Returns the value of attribute compress_assets.



54
55
56
# File 'lib/jammit.rb', line 54

def compress_assets
  @compress_assets
end

.compress_cssObject (readonly)

Returns the value of attribute compress_css.



54
55
56
# File 'lib/jammit.rb', line 54

def compress_css
  @compress_css
end

.compressor_optionsObject (readonly)

Returns the value of attribute compressor_options.



54
55
56
# File 'lib/jammit.rb', line 54

def compressor_options
  @compressor_options
end

.config_pathObject (readonly)

Returns the value of attribute config_path.



54
55
56
# File 'lib/jammit.rb', line 54

def config_path
  @config_path
end

.configurationObject (readonly)

Returns the value of attribute configuration.



54
55
56
# File 'lib/jammit.rb', line 54

def configuration
  @configuration
end

.css_compressorObject (readonly)

Returns the value of attribute css_compressor.



54
55
56
# File 'lib/jammit.rb', line 54

def css_compressor
  @css_compressor
end

.css_compressor_optionsObject (readonly)

Returns the value of attribute css_compressor_options.



54
55
56
# File 'lib/jammit.rb', line 54

def css_compressor_options
  @css_compressor_options
end

.css_compressorsObject

Returns the value of attribute css_compressors.



63
64
65
# File 'lib/jammit.rb', line 63

def css_compressors
  @css_compressors
end

.embed_assetsObject (readonly)

Returns the value of attribute embed_assets.



54
55
56
# File 'lib/jammit.rb', line 54

def embed_assets
  @embed_assets
end

.gzip_assetsObject (readonly)

Returns the value of attribute gzip_assets.



54
55
56
# File 'lib/jammit.rb', line 54

def gzip_assets
  @gzip_assets
end

.include_jst_scriptObject (readonly)

Returns the value of attribute include_jst_script.



54
55
56
# File 'lib/jammit.rb', line 54

def include_jst_script
  @include_jst_script
end

.javascript_compressorObject (readonly)

Returns the value of attribute javascript_compressor.



54
55
56
# File 'lib/jammit.rb', line 54

def javascript_compressor
  @javascript_compressor
end

.javascript_compressorsObject

Returns the value of attribute javascript_compressors.



62
63
64
# File 'lib/jammit.rb', line 62

def javascript_compressors
  @javascript_compressors
end

.mhtml_enabledObject (readonly)

Returns the value of attribute mhtml_enabled.



54
55
56
# File 'lib/jammit.rb', line 54

def mhtml_enabled
  @mhtml_enabled
end

.package_assetsObject (readonly)

Returns the value of attribute package_assets.



54
55
56
# File 'lib/jammit.rb', line 54

def package_assets
  @package_assets
end

.package_pathObject (readonly)

Returns the value of attribute package_path.



54
55
56
# File 'lib/jammit.rb', line 54

def package_path
  @package_path
end

.public_rootObject (readonly)

Returns the value of attribute public_root.



54
55
56
# File 'lib/jammit.rb', line 54

def public_root
  @public_root
end

.template_extensionObject (readonly)

Returns the value of attribute template_extension.



54
55
56
# File 'lib/jammit.rb', line 54

def template_extension
  @template_extension
end

.template_extension_matcherObject (readonly)

Returns the value of attribute template_extension_matcher.



54
55
56
# File 'lib/jammit.rb', line 54

def template_extension_matcher
  @template_extension_matcher
end

.template_functionObject (readonly)

Returns the value of attribute template_function.



54
55
56
# File 'lib/jammit.rb', line 54

def template_function
  @template_function
end

.template_namespaceObject (readonly)

Returns the value of attribute template_namespace.



54
55
56
# File 'lib/jammit.rb', line 54

def template_namespace
  @template_namespace
end

Class Method Details

.asset_url(package, extension, suffix = nil, mtime = nil) ⇒ Object

Generates the server-absolute URL to an asset package.



129
130
131
132
# File 'lib/jammit.rb', line 129

def self.asset_url(package, extension, suffix=nil, mtime=nil)
  timestamp = mtime ? "?#{mtime.to_i}" : ''
  "/#{package_path}/#{filename(package, extension, suffix)}#{timestamp}"
end

.filename(package, extension, suffix = nil) ⇒ Object

Generate the base filename for a version of a given package.



123
124
125
126
# File 'lib/jammit.rb', line 123

def self.filename(package, extension, suffix=nil)
  suffix_part  = suffix ? "-#{suffix}" : ''
  "#{package}#{suffix_part}.#{extension}"
end

.load_configuration(config_path, soft = false) ⇒ Object

Load the complete asset configuration from the specified @config_path@. If we’re loading softly, don’t let missing configuration error out.



75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
# File 'lib/jammit.rb', line 75

def self.load_configuration(config_path, soft=false)
  exists = config_path && File.exists?(config_path)
  return false if soft && !exists
  raise MissingConfiguration, "could not find the \"#{config_path}\" configuration file" unless exists
  conf = YAML.load(ERB.new(File.read(config_path)).result)

  # Optionally overwrite configuration based on the environment.
  rails_env = defined?(Rails) ? Rails.env : ENV['RAILS_ENV']
  conf.merge! conf.delete rails_env if conf.has_key? rails_env

  @config_path            = config_path
  @configuration          = symbolize_keys(conf)
  @package_path           = conf[:package_path] || DEFAULT_PACKAGE_PATH
  @embed_assets           = conf[:embed_assets] || conf[:embed_images]
  @compress_assets        = !(conf[:compress_assets] == false)
  @compress_css           = conf[:compress_css].nil? ? @compress_assets : !(conf[:compress_css] == false)
  @gzip_assets            = !(conf[:gzip_assets] == false)
  @allow_debugging        = !(conf[:allow_debugging] == false)
  @mhtml_enabled          = @embed_assets && @embed_assets != "datauri"
  @compressor_options     = symbolize_keys(conf[:compressor_options] || {})
  @css_compressor_options = symbolize_keys(conf[:css_compressor_options] || {})
  set_javascript_compressor(conf[:javascript_compressor])
  set_css_compressor(conf[:css_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])
  set_public_root(conf[:public_root]) if conf[:public_root]
  symbolize_keys(conf[:stylesheets]) if conf[:stylesheets]
  symbolize_keys(conf[:javascripts]) if conf[:javascripts]
  check_for_deprecations
  self
end

.package!(options = {}) ⇒ Object

Convenience method for packaging up Jammit, using the default options.



135
136
137
138
139
140
141
142
143
144
145
146
147
148
# File 'lib/jammit.rb', line 135

def self.package!(options={})
  options = {
    :config_path    => Jammit::DEFAULT_CONFIG_PATH,
    :output_folder  => nil,
    :base_url       => nil,
    :public_root    => nil,
    :force          => false
  }.merge(options)
  load_configuration(options[:config_path])
  set_public_root(options[:public_root]) if options[:public_root]
  packager.force         = options[:force]
  packager.package_names = options[:package_names]
  packager.precache_all(options[:output_folder], options[:base_url])
end

.packagerObject

Keep a global (thread-local) reference to a @Jammit::Packager@, to avoid recomputing asset lists unnecessarily.



118
119
120
# File 'lib/jammit.rb', line 118

def self.packager
  Thread.current[:jammit_packager] ||= Packager.new
end

.reload!Object

Force a reload by resetting the Packager and reloading the configuration. In development, this will be called as a before_filter before every request.



111
112
113
114
# File 'lib/jammit.rb', line 111

def self.reload!
  Thread.current[:jammit_packager] = nil
  load_configuration(@config_path)
end