rake-uglifier 0.0.1

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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: []