rake-uglifier 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (2) hide show
  1. data/lib/rake/uglifier_task.rb +121 -0
  2. metadata +78 -0
@@ -0,0 +1,121 @@
1
+ require 'rake'
2
+ require 'rake/tasklib'
3
+ require 'uglifier'
4
+
5
+ module Rake
6
+ class UglifierTask < Rake::TaskLib
7
+ # A Hash containing the options to give to uglifier
8
+ attr_accessor :uglifier_options
9
+
10
+ # The name of the task, defaults to :minify
11
+ attr_accessor :name
12
+
13
+ # The logger to use
14
+ attr_accessor :logger
15
+
16
+ # A list of regexps that should match any assets to compile
17
+ # Defaults to all file ending in .js
18
+ attr_accessor :assets
19
+
20
+ # A booleaning indicating whether or not to create source maps
21
+ attr_accessor :create_source_map
22
+
23
+ # The path to the root directory where the assets are located.
24
+ attr_reader :assets_path
25
+ def assets_path=(path)
26
+ @assets_path = File.join(path, '')
27
+ end
28
+
29
+ def initialize(name=:minify)
30
+ @name = name
31
+ @logger = Logger.new($stderr)
32
+ @logger.level = Logger::INFO
33
+ @uglifier_options = {}
34
+ @assets = [/.*\.js/ ]
35
+ @create_source_map = true
36
+
37
+ yield self if block_given?
38
+
39
+ define
40
+ end
41
+
42
+ def define
43
+ desc "#{name.to_s.capitalize} assets"
44
+ task name do
45
+ find_assets do |asset|
46
+ minify_asset(asset)
47
+ end
48
+ end
49
+ end
50
+
51
+ def minify_asset(asset)
52
+ path = File.dirname(asset)
53
+ name = File.basename(asset)
54
+ pretty_name = asset.chomp[assets_path.length..-1]
55
+
56
+ original_name = "orig-#{name}"
57
+ original_file = File.join(path, original_name)
58
+ pretty_original_name = original_file[assets_path.length..-1]
59
+
60
+ source_map_name = name.chomp(File.extname(name)) + ".map"
61
+ source_map_file = File.join(path, source_map_name)
62
+
63
+ File.rename(asset, original_file)
64
+ if create_source_map
65
+ logger.debug("Renamed #{pretty_name} -> #{pretty_original_name}")
66
+ end
67
+
68
+ uglified = source_map = nil
69
+ ms = benchmark do
70
+ File.open(original_file, 'rb:UTF-8') do |f|
71
+ uglifier = Uglifier.new(uglifier_options.merge(
72
+ output_filename: name,
73
+ source_filename: original_name))
74
+ if create_source_map
75
+ uglified, source_map = uglifier.compile_with_map(f.read)
76
+ else
77
+ uglified = uglifier.compile(f.read)
78
+ end
79
+ end
80
+ end
81
+
82
+ logger.debug("Minified #{pretty_name}) (#{ms}ms)")
83
+
84
+ logger.info("Writing #{asset}")
85
+ File.open(asset, 'wb+:UTF-8') do |f|
86
+ f.write(uglified)
87
+ if create_source_map
88
+ f.write("\n//@ sourceMappingURL=#{source_map_name}")
89
+ end
90
+ end
91
+
92
+ if create_source_map
93
+ logger.info("Writing #{source_map_file}")
94
+ File.open(source_map_file, 'wb+:UTF-8') do |f|
95
+ f.write(source_map)
96
+ end
97
+ else
98
+ File.delete(original_file)
99
+ end
100
+ end
101
+
102
+ private
103
+
104
+ def find_assets(path=nil, &block)
105
+ path = assets_path if path == nil
106
+ Dir[File.join(path, '**/*.js')]
107
+ .reject {|f| File.directory?(f) }
108
+ .each do |f|
109
+ assets.each do |asset|
110
+ block.call(f) if asset =~ f
111
+ end
112
+ end
113
+ end
114
+
115
+ def benchmark
116
+ start_time = Time.now.to_f
117
+ yield
118
+ ((Time.now.to_f - start_time) * 1000).to_i
119
+ end
120
+ end
121
+ end
metadata ADDED
@@ -0,0 +1,78 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: rake-uglifier
3
+ version: !ruby/object:Gem::Version
4
+ version: 0.0.1
5
+ prerelease:
6
+ platform: ruby
7
+ authors:
8
+ - Nicklas Ansman
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+ date: 2013-01-20 00:00:00.000000000 Z
13
+ dependencies:
14
+ - !ruby/object:Gem::Dependency
15
+ name: rake
16
+ requirement: !ruby/object:Gem::Requirement
17
+ none: false
18
+ requirements:
19
+ - - ! '>='
20
+ - !ruby/object:Gem::Version
21
+ version: '0'
22
+ type: :runtime
23
+ prerelease: false
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
30
+ - !ruby/object:Gem::Dependency
31
+ name: uglifier
32
+ requirement: !ruby/object:Gem::Requirement
33
+ none: false
34
+ requirements:
35
+ - - ! '>='
36
+ - !ruby/object:Gem::Version
37
+ version: '0'
38
+ type: :runtime
39
+ prerelease: false
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
46
+ description: A rake task for compressing assets with uglifier. It can also create
47
+ source maps.
48
+ email: nicklas@wrapp.com
49
+ executables: []
50
+ extensions: []
51
+ extra_rdoc_files: []
52
+ files:
53
+ - lib/rake/uglifier_task.rb
54
+ homepage: http://rubygems.org/gems/rake-uglifier
55
+ licenses: []
56
+ post_install_message:
57
+ rdoc_options: []
58
+ require_paths:
59
+ - lib
60
+ required_ruby_version: !ruby/object:Gem::Requirement
61
+ none: false
62
+ requirements:
63
+ - - ! '>='
64
+ - !ruby/object:Gem::Version
65
+ version: '0'
66
+ required_rubygems_version: !ruby/object:Gem::Requirement
67
+ none: false
68
+ requirements:
69
+ - - ! '>='
70
+ - !ruby/object:Gem::Version
71
+ version: '0'
72
+ requirements: []
73
+ rubyforge_project:
74
+ rubygems_version: 1.8.24
75
+ signing_key:
76
+ specification_version: 3
77
+ summary: Rake uglifier
78
+ test_files: []