Class: UglifierWithSourceMaps::Compressor

Inherits:
Object
  • Object
show all
Defined in:
lib/uglifier_with_source_maps/compressor.rb

Class Method Summary collapse

Instance Method Summary collapse

Constructor Details

#initialize(options = {}) ⇒ Compressor

Returns a new instance of Compressor.



7
8
9
10
11
12
13
14
15
# 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

Class Method Details

.call(*args) ⇒ Object



3
4
5
# File 'lib/uglifier_with_source_maps/compressor.rb', line 3

def self.call(*args)
  new.call(*args)
end

Instance Method Details

#compress(data, context) ⇒ Object



17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
# 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) ⇒ Object



42
43
44
# File 'lib/uglifier_with_source_maps/compressor.rb', line 42

def digest(io)
  Rails.application.assets.digest.update(io).hexdigest
end