assets_booster 0.0.3 → 0.0.4
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/assets_booster/merger/css.rb +23 -6
- data/lib/assets_booster/version.rb +1 -1
- data/spec/merger/css_spec.rb +35 -3
- metadata +3 -3
@@ -8,12 +8,29 @@ module AssetsBooster
|
|
8
8
|
|
9
9
|
def merge(target)
|
10
10
|
target_folder = dirname(target)
|
11
|
-
assets.inject("") do |code, asset|
|
11
|
+
code = assets.inject("") do |code, asset|
|
12
12
|
source_folder = dirname(asset[:source])
|
13
13
|
asset[:css]= rewrite_urls(asset[:css], source_folder, target_folder)
|
14
14
|
code << asset[:css]
|
15
15
|
code << "\n"
|
16
16
|
end.strip
|
17
|
+
|
18
|
+
charset = nil
|
19
|
+
code.gsub!(/@charset\s+([^;\n]+)[;\n]*/).each do
|
20
|
+
current_charset, quotes = unquote($1)
|
21
|
+
current_charset.downcase!
|
22
|
+
if charset && charset != current_charset
|
23
|
+
raise ArgumentError, "source files have conflicting charsets (#{charset} != #{current_charset})"
|
24
|
+
end
|
25
|
+
charset = current_charset
|
26
|
+
""
|
27
|
+
end
|
28
|
+
|
29
|
+
if charset
|
30
|
+
code = "@charset \"#{charset}\";\n"+code
|
31
|
+
end
|
32
|
+
|
33
|
+
code
|
17
34
|
end
|
18
35
|
|
19
36
|
def load_source(source)
|
@@ -23,8 +40,8 @@ module AssetsBooster
|
|
23
40
|
source_folder << "/" unless source_folder == ""
|
24
41
|
asset[:css].gsub!(/@import\s+([^;\n]+)[;\n]*/).each do |import|
|
25
42
|
url = $1.gsub(/^url\((.+)\)/i, '\1')
|
26
|
-
url, quotes =
|
27
|
-
|
43
|
+
url, quotes = unquote(url.strip)
|
44
|
+
|
28
45
|
# we don't want to statically import external stylesheets
|
29
46
|
next import if absolute_url?(url)
|
30
47
|
|
@@ -40,7 +57,7 @@ module AssetsBooster
|
|
40
57
|
return css if url_prepend == ""
|
41
58
|
|
42
59
|
css.gsub(/url\(([^)]+)\)/i) do |match|
|
43
|
-
url, quotes =
|
60
|
+
url, quotes = unquote($1.strip)
|
44
61
|
|
45
62
|
# we don't want to change references to external assets
|
46
63
|
next match if absolute_url?(url)
|
@@ -49,8 +66,8 @@ module AssetsBooster
|
|
49
66
|
end
|
50
67
|
end
|
51
68
|
|
52
|
-
def
|
53
|
-
(
|
69
|
+
def unquote(quoted)
|
70
|
+
(quoted[0].chr =~ /["']/) ? [quoted.slice(1, quoted.length-2), quoted[0].chr] : [quoted, ""]
|
54
71
|
end
|
55
72
|
|
56
73
|
def absolute_url?(url)
|
data/spec/merger/css_spec.rb
CHANGED
@@ -38,6 +38,38 @@ module AssetsBooster
|
|
38
38
|
end
|
39
39
|
subject.merge("target.css").should == "{color:#f00;}\n{color:#00f;}\n\n@import url(http://www.example.com/test.css)\n{color:#fff;}"
|
40
40
|
end
|
41
|
+
|
42
|
+
it "should merge sources, combine charset directives and move the remaining one at top" do
|
43
|
+
File.stub(:read) do |source|
|
44
|
+
case source
|
45
|
+
when 'a.css'
|
46
|
+
"{color:#fff;}"
|
47
|
+
when 'nested/b.css'
|
48
|
+
"@charset 'UTF-8';"
|
49
|
+
when 'c.css'
|
50
|
+
"@import d.css;@import e.css"
|
51
|
+
when 'd.css'
|
52
|
+
"{color:#00f;}"
|
53
|
+
when 'e.css'
|
54
|
+
"@charset 'utf-8'"
|
55
|
+
end
|
56
|
+
end
|
57
|
+
subject.merge("target.css").should == "@charset \"utf-8\";\n{color:#fff;}\n{color:#00f;}\n"
|
58
|
+
end
|
59
|
+
|
60
|
+
it "should merge sources, and complain if sources have conflicting charset directives" do
|
61
|
+
File.stub(:read) do |source|
|
62
|
+
case source
|
63
|
+
when 'a.css'
|
64
|
+
"{color:#fff;}"
|
65
|
+
when 'nested/b.css'
|
66
|
+
"@charset 'UTF-8';"
|
67
|
+
when 'c.css'
|
68
|
+
"@charset 'iso-8859-1'"
|
69
|
+
end
|
70
|
+
end
|
71
|
+
lambda{ subject.merge("target.css") }.should raise_error(ArgumentError)
|
72
|
+
end
|
41
73
|
end
|
42
74
|
|
43
75
|
describe "absolute_url?" do
|
@@ -110,14 +142,14 @@ module AssetsBooster
|
|
110
142
|
end
|
111
143
|
end
|
112
144
|
|
113
|
-
describe "
|
114
|
-
it "should
|
145
|
+
describe "unquote" do
|
146
|
+
it "should return unquoted string and quotes" do
|
115
147
|
[
|
116
148
|
["'test.png'", ["test.png", "'"]],
|
117
149
|
['"test.png"', ["test.png", '"']],
|
118
150
|
["test.png", ["test.png", ""]],
|
119
151
|
].each do |input, output|
|
120
|
-
subject.
|
152
|
+
subject.unquote(input).should == output
|
121
153
|
end
|
122
154
|
end
|
123
155
|
end
|
metadata
CHANGED
@@ -1,13 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: assets_booster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
hash:
|
4
|
+
hash: 23
|
5
5
|
prerelease:
|
6
6
|
segments:
|
7
7
|
- 0
|
8
8
|
- 0
|
9
|
-
-
|
10
|
-
version: 0.0.
|
9
|
+
- 4
|
10
|
+
version: 0.0.4
|
11
11
|
platform: ruby
|
12
12
|
authors:
|
13
13
|
- Corin Langosch
|