class Merb::Assets::AbstractAssetBundler
An abstract class for bundling text assets into single files.
Public Class Methods
add_callback(&block)
click to toggle source
Parameters¶ ↑
- &block
-
A block to add as a post-bundle callback.
Examples¶ ↑
add_callback { |filename| %x`yuicompressor #{filename}` }
# File lib/merb-assets/assets.rb, line 144 def add_callback(&block) callbacks << block end
Also aliased as: after_bundling
asset_type()
click to toggle source
The type of asset for which the bundler is responsible. Override this method in your bundler code.
Raises¶ ↑
- NotImplementedError
-
This method is implemented by the bundler.
Returns¶ ↑
- Symbol
-
The type of the asset
# File lib/merb-assets/assets.rb, line 166 def asset_type raise NotImplementedError, "should return a symbol for the first argument to be passed to asset_path" end
cache_bundle(name)
click to toggle source
cached_bundle?(name)
click to toggle source
callbacks()
click to toggle source
new(name, *files)
click to toggle source
Parameters¶ ↑
- name<~to_s>
-
Name of the bundle. If name is true, it will be converted to :all.
- *files<String>
-
Names of the files to bundle.
# File lib/merb-assets/assets.rb, line 175 def initialize(name, *files) @bundle_name = name == true ? :all : name @bundle_filename = Merb.root / asset_path(self.class.asset_type, @bundle_name, true) @files = files.map { |f| Merb.root / asset_path(self.class.asset_type, f, true) } end
Public Instance Methods
bundle!()
click to toggle source
Creates the new bundled file, executing all the callbacks.
Returns¶ ↑
- Symbol
-
Name of the bundle.
# File lib/merb-assets/assets.rb, line 185 def bundle! # TODO: push it out to the helper level so we don't have to create the helper object. unless self.class.cached_bundle?(@bundle_name) # skip regeneration of new bundled files - preventing multiple merb apps stepping on eachother # file needs to be older than 60 seconds to be regenerated if File.exist?(@bundle_filename) && File.mtime(@bundle_filename) >= Time.now - 60 return @bundle_name # serve the old file for now - to be regenerated later end bundle_files(@bundle_filename, *@files) if File.exist?(@bundle_filename) self.class.callbacks.each { |c| c.call(@bundle_filename) } Merb.logger.info("Assets: bundled :#{@bundle_name} into #{File.basename(@bundle_filename)}") self.class.cache_bundle(@bundle_name) end end return @bundle_name end
Protected Instance Methods
bundle_files(filename, *files)
click to toggle source
Bundle all the files into one.
Parameters¶ ↑
- filename<String>
-
Name of the bundle file.
- *files<String>
-
Filenames to be bundled.
# File lib/merb-assets/assets.rb, line 212 def bundle_files(filename, *files) File.open(filename, "w") do |f| f.flock(File::LOCK_EX) files.each { |file| f.puts(File.read(file)) } f.flock(File::LOCK_UN) end end