smart_asset 0.4.7 → 0.5.0
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.
- data/lib/smart_asset/version.rb +1 -1
- data/lib/smart_asset.rb +43 -41
- metadata +4 -4
data/lib/smart_asset/version.rb
CHANGED
data/lib/smart_asset.rb
CHANGED
@@ -2,6 +2,7 @@ require File.dirname(__FILE__) + '/smart_asset/gems'
|
|
2
2
|
|
3
3
|
SmartAsset::Gems.require(:lib)
|
4
4
|
|
5
|
+
require 'digest'
|
5
6
|
require 'fileutils'
|
6
7
|
require 'time'
|
7
8
|
require 'yaml'
|
@@ -29,14 +30,9 @@ class SmartAsset
|
|
29
30
|
def compress(type)
|
30
31
|
dest = @dest[type]
|
31
32
|
dir = "#{@pub}/#{@sources[type]}"
|
32
|
-
ext = ext_from_type
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
# Read version yaml
|
37
|
-
if File.exists?(version_path = "#{dest}/#{type}.yml")
|
38
|
-
version = YAML::load(File.read(version_path))
|
39
|
-
end
|
33
|
+
ext = ext_from_type(type)
|
34
|
+
packages = []
|
35
|
+
time_cache = {}
|
40
36
|
|
41
37
|
FileUtils.mkdir_p dest
|
42
38
|
|
@@ -44,24 +40,36 @@ class SmartAsset
|
|
44
40
|
next if ENV['PACKAGE'] && ENV['PACKAGE'] != package
|
45
41
|
if files
|
46
42
|
# Retrieve list of Git modified timestamps
|
47
|
-
|
43
|
+
timestamps = []
|
48
44
|
files.each do |file|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
if mod.strip.empty? || mod.include?('command not found')
|
53
|
-
modified << (ENV['MODIFIED'] ? Time.parse(ENV['MODIFIED']) : Time.now).utc.strftime("%Y%m%d%H%M%S")
|
45
|
+
if File.exists?("#{dir}/#{file}.#{ext}")
|
46
|
+
if time_cache[file]
|
47
|
+
time = time_cache[file]
|
54
48
|
else
|
55
|
-
|
49
|
+
time = `cd #{@root} && git log --pretty=format:%cd -n 1 --date=iso #{@config['public']}/#{@sources[type]}/#{file}.#{ext}`
|
50
|
+
if time.strip.empty? || time.include?('command not found')
|
51
|
+
time = ENV['MODIFIED'] ? Time.parse(ENV['MODIFIED']) : Time.now
|
52
|
+
else
|
53
|
+
time = Time.parse(time)
|
54
|
+
end
|
55
|
+
time = time.utc.strftime("%Y%m%d%H%M%S")
|
56
|
+
time += file.to_s
|
57
|
+
time_cache[file] = time
|
56
58
|
end
|
59
|
+
timestamps << time
|
57
60
|
end
|
58
61
|
end
|
59
|
-
|
60
|
-
|
62
|
+
next if timestamps.empty?
|
63
|
+
|
64
|
+
# Modified hash
|
65
|
+
hash = Digest::SHA1.hexdigest(timestamps.join)[0..7]
|
61
66
|
|
62
|
-
#
|
63
|
-
|
64
|
-
|
67
|
+
# Package path
|
68
|
+
package = "#{dest}/#{hash}_#{package}.#{ext}"
|
69
|
+
packages << package
|
70
|
+
|
71
|
+
# If package file does not exist
|
72
|
+
unless File.exists?(package)
|
65
73
|
data = []
|
66
74
|
|
67
75
|
# Join files in package
|
@@ -71,24 +79,20 @@ class SmartAsset
|
|
71
79
|
end
|
72
80
|
end
|
73
81
|
|
74
|
-
# Delete old package
|
75
|
-
Dir["#{dest}/*[0-9]_#{package}.#{ext}"].each do |old|
|
76
|
-
FileUtils.rm old
|
77
|
-
end
|
78
|
-
|
79
82
|
# Don't create new compressed file if no data
|
80
|
-
|
83
|
+
data = data.join("\n")
|
84
|
+
next if data.strip.empty?
|
81
85
|
|
82
86
|
# Compress joined files
|
83
87
|
tmp = "#{dest}/tmp.#{ext}"
|
84
|
-
File.open(tmp, 'w') { |f| f.write(data
|
85
|
-
puts "\nCreating #{
|
88
|
+
File.open(tmp, 'w') { |f| f.write(data) }
|
89
|
+
puts "\nCreating #{package}..."
|
86
90
|
if ext == 'js'
|
87
91
|
warning = ENV['WARN'] ? nil : " --warning_level QUIET"
|
88
|
-
cmd = "java -jar #{CLOSURE_COMPILER} --js #{tmp} --js_output_file #{
|
92
|
+
cmd = "java -jar #{CLOSURE_COMPILER} --js #{tmp} --js_output_file #{package}#{warning}"
|
89
93
|
elsif ext == 'css'
|
90
94
|
warning = ENV['WARN'] ? " -v" : nil
|
91
|
-
cmd = "java -jar #{YUI_COMPRESSOR} #{tmp} -o #{
|
95
|
+
cmd = "java -jar #{YUI_COMPRESSOR} #{tmp} -o #{package}#{warning}"
|
92
96
|
end
|
93
97
|
puts cmd if ENV['DEBUG']
|
94
98
|
`#{cmd}`
|
@@ -97,25 +101,23 @@ class SmartAsset
|
|
97
101
|
# Fix YUI compression issue
|
98
102
|
if ext == 'css'
|
99
103
|
if RUBY_PLATFORM.downcase.include?('darwin')
|
100
|
-
`sed -i '' 's/ and(/ and (/g' #{
|
104
|
+
`sed -i '' 's/ and(/ and (/g' #{package}`
|
101
105
|
else
|
102
|
-
`sed -i 's/ and(/ and (/g' #{
|
106
|
+
`sed -i 's/ and(/ and (/g' #{package}`
|
103
107
|
end
|
104
108
|
end
|
105
109
|
end
|
106
110
|
end
|
107
111
|
end
|
108
112
|
|
109
|
-
#
|
110
|
-
(
|
111
|
-
|
112
|
-
FileUtils.rm old
|
113
|
-
end
|
113
|
+
# Remove old/unused packages
|
114
|
+
(Dir["#{dest}/????????_*.#{ext}"] - packages).each do |path|
|
115
|
+
FileUtils.rm path
|
114
116
|
end
|
115
117
|
|
116
|
-
#
|
117
|
-
|
118
|
-
|
118
|
+
# Delete legacy yml files
|
119
|
+
Dir["#{dest}/*.yml"].each do |path|
|
120
|
+
FileUtils.rm path
|
119
121
|
end
|
120
122
|
end
|
121
123
|
|
@@ -188,7 +190,7 @@ class SmartAsset
|
|
188
190
|
|
189
191
|
if @envs.include?(@env.to_s)
|
190
192
|
@cache[type][match] =
|
191
|
-
if result = Dir["#{dest}
|
193
|
+
if result = Dir["#{dest}/????????_#{match}.#{ext}"].sort.last
|
192
194
|
[ result.gsub(@pub, '') ]
|
193
195
|
else
|
194
196
|
[]
|
metadata
CHANGED
@@ -4,9 +4,9 @@ version: !ruby/object:Gem::Version
|
|
4
4
|
prerelease: false
|
5
5
|
segments:
|
6
6
|
- 0
|
7
|
-
-
|
8
|
-
-
|
9
|
-
version: 0.
|
7
|
+
- 5
|
8
|
+
- 0
|
9
|
+
version: 0.5.0
|
10
10
|
platform: ruby
|
11
11
|
authors:
|
12
12
|
- Winton Welsh
|
@@ -14,7 +14,7 @@ autorequire:
|
|
14
14
|
bindir: bin
|
15
15
|
cert_chain: []
|
16
16
|
|
17
|
-
date: 2010-12-
|
17
|
+
date: 2010-12-20 00:00:00 -08:00
|
18
18
|
default_executable:
|
19
19
|
dependencies:
|
20
20
|
- !ruby/object:Gem::Dependency
|