class UglifierWithSourceMaps::Compressor

Public Class Methods

call(*args) click to toggle source
# File lib/uglifier_with_source_maps/compressor.rb, line 3
def self.call(*args)
  new.call(*args)
end
new(options = {}) click to toggle source
# File lib/uglifier_with_source_maps/compressor.rb, line 7
def initialize(options = {})
  @uglifier = Uglifier.new(options)
  # @cache_key = [
  #     'UglifierWithSourceMapsCompressor',
  #     ::Uglifier::VERSION,
  #     ::UglifierWithSourceMaps::VERSION,
  #     options
  #   ]
end

Public Instance Methods

compress(data, context) click to toggle source
# File lib/uglifier_with_source_maps/compressor.rb, line 17
def compress(data, context)

  minified_data, sourcemap = @uglifier.compile_with_map(data)

  # write source map
  minified_filename     = [Rails.application.config.assets.prefix, "#{context.logical_path}-#{digest(minified_data)}.js"].join('/')
  sourcemap_filename    = [Rails.application.config.assets.prefix, Rails.application.config.assets.sourcemaps_prefix, "#{context.logical_path}-#{digest(minified_data)}.map"].join('/')
  concatenated_filename = [Rails.application.config.assets.prefix, Rails.application.config.assets.uncompressed_prefix, "#{context.logical_path}-#{digest(minified_data)}.js"].join('/')

  map = JSON.parse(sourcemap)
  map['file']    = minified_filename
  map['sources'] = [concatenated_filename]

  FileUtils.mkdir_p File.dirname(File.join(Rails.public_path, sourcemap_filename))
  FileUtils.mkdir_p File.dirname(File.join(Rails.public_path, concatenated_filename))

  # Write sourcemap and uncompressed js
  File.open(File.join(Rails.public_path, sourcemap_filename), "w") { |f| f.puts map.to_json }
  File.open(File.join(Rails.public_path, concatenated_filename), "w") {|f| f.write(data)}

  sourcemap_comment = "\n//# sourceMappingURL=#{sourcemap_filename}\n"

  return minified_data + sourcemap_comment
end
digest(io) click to toggle source
# File lib/uglifier_with_source_maps/compressor.rb, line 42
def digest(io)
  Rails.application.assets.digest.update(io).hexdigest
end