tgfa-jekyll-assets 0.7.9.1
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.gitignore +18 -0
- data/.rspec +1 -0
- data/.rubocop.yml +78 -0
- data/.travis.yml +9 -0
- data/.yardopts +1 -0
- data/Gemfile +15 -0
- data/Gemfile.jekyll-1.0 +2 -0
- data/Guardfile +8 -0
- data/HISTORY.md +202 -0
- data/LICENSE +22 -0
- data/README.md +569 -0
- data/Rakefile +9 -0
- data/lib/jekyll/assets_plugin/asset_path.rb +39 -0
- data/lib/jekyll/assets_plugin/configuration.rb +87 -0
- data/lib/jekyll/assets_plugin/environment.rb +62 -0
- data/lib/jekyll/assets_plugin/filters.rb +19 -0
- data/lib/jekyll/assets_plugin/patches/asset_patch.rb +68 -0
- data/lib/jekyll/assets_plugin/patches/bundled_asset_patch.rb +16 -0
- data/lib/jekyll/assets_plugin/patches/context_patch.rb +27 -0
- data/lib/jekyll/assets_plugin/patches/index_patch.rb +25 -0
- data/lib/jekyll/assets_plugin/patches/processed_asset_patch.rb +60 -0
- data/lib/jekyll/assets_plugin/patches/site_patch.rb +68 -0
- data/lib/jekyll/assets_plugin/patches.rb +1 -0
- data/lib/jekyll/assets_plugin/renderer.rb +47 -0
- data/lib/jekyll/assets_plugin/tag.rb +19 -0
- data/lib/jekyll/assets_plugin/version.rb +5 -0
- data/lib/jekyll/assets_plugin.rb +4 -0
- data/lib/jekyll-assets/bootstrap.rb +6 -0
- data/lib/jekyll-assets/bourbon.rb +4 -0
- data/lib/jekyll-assets/compass.rb +7 -0
- data/lib/jekyll-assets/font-awesome.rb +6 -0
- data/lib/jekyll-assets/neat.rb +4 -0
- data/lib/jekyll-assets.rb +2 -0
- data/spec/fixtures/.gitignore +2 -0
- data/spec/fixtures/_assets/app.css.erb +5 -0
- data/spec/fixtures/_assets/app.js +1 -0
- data/spec/fixtures/_assets/fonts/vapor.eot +0 -0
- data/spec/fixtures/_assets/fonts/vapor.svg +0 -0
- data/spec/fixtures/_assets/fonts/vapor.ttf +0 -0
- data/spec/fixtures/_assets/fonts/vapor.woff +0 -0
- data/spec/fixtures/_assets/lib/relative.css.scss +12 -0
- data/spec/fixtures/_assets/noise.png +0 -0
- data/spec/fixtures/_assets/should_be_blank.css.erb +1 -0
- data/spec/fixtures/_assets/should_fail.css.erb +1 -0
- data/spec/fixtures/_assets/vapor.css.scss +13 -0
- data/spec/fixtures/_assets/vapor.js +2 -0
- data/spec/fixtures/_assets/vendor/bourbon.css.sass +4 -0
- data/spec/fixtures/_assets/vendor/compass.css.sass +4 -0
- data/spec/fixtures/_assets/vendor/neat.css.sass +5 -0
- data/spec/fixtures/_assets/wowscript.js +0 -0
- data/spec/fixtures/_assets/wowstyle.css +0 -0
- data/spec/fixtures/_config.yml +2 -0
- data/spec/fixtures/_layouts/default.html +9 -0
- data/spec/fixtures/_posts/2012-10-19-hello-world.md +6 -0
- data/spec/fixtures/index.html +0 -0
- data/spec/lib/jekyll/assets_plugin/configuration_spec.rb +167 -0
- data/spec/lib/jekyll/assets_plugin/environment_spec.rb +22 -0
- data/spec/lib/jekyll/assets_plugin/filters_spec.rb +103 -0
- data/spec/lib/jekyll/assets_plugin/patches/site_patch_spec.rb +168 -0
- data/spec/lib/jekyll/assets_plugin/renderer_spec.rb +48 -0
- data/spec/lib/jekyll/assets_plugin/tag_spec.rb +103 -0
- data/spec/lib/jekyll-assets/bootstrap_spec.rb +8 -0
- data/spec/lib/jekyll-assets/bourbon_spec.rb +8 -0
- data/spec/lib/jekyll-assets/compass_spec.rb +8 -0
- data/spec/lib/jekyll-assets/font-awesome_spec.rb +8 -0
- data/spec/lib/jekyll-assets/neat_spec.rb +8 -0
- data/spec/spec_helper.rb +45 -0
- data/spec/support/fixtures_helpers.rb +7 -0
- data/tgfa-jekyll-assets.gemspec +41 -0
- metadata +322 -0
@@ -0,0 +1,167 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Jekyll::AssetsPlugin::Configuration do
|
4
|
+
context "with defaults" do
|
5
|
+
let(:config) { described_class.new }
|
6
|
+
|
7
|
+
context "output assets dirname" do
|
8
|
+
subject { config.dirname }
|
9
|
+
it { should == described_class::DEFAULTS[:dirname] }
|
10
|
+
end
|
11
|
+
|
12
|
+
context "assets baseurl" do
|
13
|
+
subject { config.baseurl }
|
14
|
+
it { should == "/" + described_class::DEFAULTS[:dirname] }
|
15
|
+
end
|
16
|
+
|
17
|
+
context "sources list" do
|
18
|
+
subject { config.sources }
|
19
|
+
it { should =~ described_class::DEFAULTS[:sources] }
|
20
|
+
end
|
21
|
+
|
22
|
+
context "cachebust" do
|
23
|
+
subject { config.cachebust }
|
24
|
+
it { should == :hard }
|
25
|
+
end
|
26
|
+
|
27
|
+
context "js compressor" do
|
28
|
+
subject { config.js_compressor }
|
29
|
+
it { should be_nil }
|
30
|
+
end
|
31
|
+
|
32
|
+
context "css compressor" do
|
33
|
+
subject { config.css_compressor }
|
34
|
+
it { should be_nil }
|
35
|
+
end
|
36
|
+
|
37
|
+
context "gzip" do
|
38
|
+
subject { config.gzip }
|
39
|
+
it { should =~ %w[text/css application/javascript] }
|
40
|
+
end
|
41
|
+
|
42
|
+
context "cache_assets?" do
|
43
|
+
subject { config.cache_assets? }
|
44
|
+
it { should be_false }
|
45
|
+
end
|
46
|
+
|
47
|
+
context "cache_path" do
|
48
|
+
subject { config.cache_path }
|
49
|
+
it { should == ".jekyll-assets-cache" }
|
50
|
+
end
|
51
|
+
|
52
|
+
context "debug" do
|
53
|
+
subject { config.debug }
|
54
|
+
it { should be_false }
|
55
|
+
end
|
56
|
+
|
57
|
+
end
|
58
|
+
|
59
|
+
it "should override specified options and leave defaults for missing" do
|
60
|
+
config = described_class.new({
|
61
|
+
:sources => %w[abc],
|
62
|
+
:css_compressor => "sass"
|
63
|
+
})
|
64
|
+
|
65
|
+
expect(config.dirname).to eq "assets"
|
66
|
+
expect(config.sources).to eq %w[abc]
|
67
|
+
expect(config.js_compressor).to be_nil
|
68
|
+
expect(config.css_compressor).to be :sass
|
69
|
+
end
|
70
|
+
|
71
|
+
context "#cache" do
|
72
|
+
context "when specified as String" do
|
73
|
+
it "should override default cache path" do
|
74
|
+
config = described_class.new :cache => "/tmp/jekyll-assets"
|
75
|
+
config.cache_path.should == "/tmp/jekyll-assets"
|
76
|
+
end
|
77
|
+
end
|
78
|
+
end
|
79
|
+
|
80
|
+
context "#baseurl" do
|
81
|
+
it "should respect explicit overrides" do
|
82
|
+
described_class.new({
|
83
|
+
:dirname => "foo",
|
84
|
+
:baseurl => "/bar/"
|
85
|
+
}).baseurl.should == "/bar"
|
86
|
+
end
|
87
|
+
|
88
|
+
it "should be auto-guessed from dirname" do
|
89
|
+
described_class.new({
|
90
|
+
:dirname => "foo"
|
91
|
+
}).baseurl.should == "/foo"
|
92
|
+
end
|
93
|
+
end
|
94
|
+
|
95
|
+
context "#js_compressor" do
|
96
|
+
context "when js compressor is given as `uglify`" do
|
97
|
+
let(:config) { described_class.new(:js_compressor => "uglify") }
|
98
|
+
subject { config.js_compressor }
|
99
|
+
it { should be :uglify }
|
100
|
+
end
|
101
|
+
|
102
|
+
context "otherwise" do
|
103
|
+
let(:config) { described_class.new }
|
104
|
+
subject { config.js_compressor }
|
105
|
+
it { should be_false }
|
106
|
+
end
|
107
|
+
end
|
108
|
+
|
109
|
+
context "#css_compressor" do
|
110
|
+
context "when css compressor is given as `sass`" do
|
111
|
+
let(:config) { described_class.new(:css_compressor => "sass") }
|
112
|
+
subject { config.css_compressor }
|
113
|
+
it { should be :sass }
|
114
|
+
end
|
115
|
+
|
116
|
+
context "otherwise" do
|
117
|
+
let(:config) { described_class.new }
|
118
|
+
subject { config.css_compressor }
|
119
|
+
it { should be_false }
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
context "#gzip" do
|
124
|
+
context "when gzip is disabled" do
|
125
|
+
let(:config) { described_class.new(:gzip => false) }
|
126
|
+
subject { config.gzip }
|
127
|
+
it { should == [] }
|
128
|
+
end
|
129
|
+
end
|
130
|
+
|
131
|
+
context "#version" do
|
132
|
+
subject { described_class.new(:version => version).version }
|
133
|
+
|
134
|
+
context "when given as 123" do
|
135
|
+
let(:version) { 123 }
|
136
|
+
it { should eq 123 }
|
137
|
+
it { should be_a Integer }
|
138
|
+
end
|
139
|
+
|
140
|
+
context "when given as 'abc'" do
|
141
|
+
let(:version) { "abc" }
|
142
|
+
it { should eq "abc" }
|
143
|
+
it { should be_a String }
|
144
|
+
end
|
145
|
+
end
|
146
|
+
|
147
|
+
context "Deprecated options" do
|
148
|
+
subject(:config) { described_class.new options }
|
149
|
+
|
150
|
+
context "compress" do
|
151
|
+
let :options do
|
152
|
+
{ :compress => { :js => "uglify", :css => "sass" } }
|
153
|
+
end
|
154
|
+
|
155
|
+
its(:js_compressor) { should be :uglify }
|
156
|
+
its(:css_compressor) { should be :sass }
|
157
|
+
end
|
158
|
+
|
159
|
+
context "cache_assets" do
|
160
|
+
let(:options) { { :cache_assets => true } }
|
161
|
+
|
162
|
+
it "should set `cache` value" do
|
163
|
+
config.cache_assets?.should be_true
|
164
|
+
end
|
165
|
+
end
|
166
|
+
end
|
167
|
+
end
|
@@ -0,0 +1,22 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
module Jekyll
|
4
|
+
module AssetsPlugin
|
5
|
+
describe Environment do
|
6
|
+
context "#asset_path of context" do
|
7
|
+
it "should properly handle query params" do
|
8
|
+
css = @site.assets["vapor.css"].to_s
|
9
|
+
css.should match(/fonts\/vapor-[a-f0-9]{32}\.eot\?#iefix/)
|
10
|
+
css.should match(/fonts\/vapor-[a-f0-9]{32}\.svg#iefix/)
|
11
|
+
end
|
12
|
+
|
13
|
+
it "should properly handle relative paths" do
|
14
|
+
css = @site.assets["lib/relative.css"].to_s
|
15
|
+
css.should =~ %r{/assets/fonts/vapor-[a-f0-9]{32}\.eot\?#iefix}
|
16
|
+
css.should =~ %r{/assets/fonts/vapor-[a-f0-9]{32}\.svg#iefix}
|
17
|
+
puts css
|
18
|
+
end
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Jekyll::AssetsPlugin::Filters do
|
4
|
+
let(:context) { { :registers => { :site => @site } } }
|
5
|
+
|
6
|
+
def render(content)
|
7
|
+
::Liquid::Template.parse(content).render({}, context)
|
8
|
+
end
|
9
|
+
|
10
|
+
context "{{ '<file>' | image }}" do
|
11
|
+
def tag_re(name)
|
12
|
+
file = "/assets/#{name}-[a-f0-9]{32}\.png"
|
13
|
+
Regexp.new "^#{Jekyll::AssetsPlugin::Renderer::IMAGE % file}$"
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when <file> exists" do
|
17
|
+
subject { render("{{ 'noise.png' | image }}") }
|
18
|
+
it { should match tag_re("noise") }
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when <file> does not exists" do
|
22
|
+
subject { render("{{ 'not-found.png' | image }}") }
|
23
|
+
it { should match "Liquid error: Couldn't find file 'not-found.png'" }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "{{ '<file>' | stylesheet }}" do
|
28
|
+
def tag_re(name)
|
29
|
+
file = "/assets/#{name}-[a-f0-9]{32}\.css"
|
30
|
+
Regexp.new "^#{Jekyll::AssetsPlugin::Renderer::STYLESHEET % file}$"
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when <file> exists" do
|
34
|
+
subject { render("{{ 'app.css' | stylesheet }}") }
|
35
|
+
it { should match tag_re("app") }
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when <file> extension is omited" do
|
39
|
+
subject { render("{{ 'app' | stylesheet }}") }
|
40
|
+
it { should match tag_re("app") }
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when <file> does not exists" do
|
44
|
+
subject { render("{{ 'not-found.css' | stylesheet }}") }
|
45
|
+
it { should match "Liquid error: Couldn't find file 'not-found.css'" }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "{{ '<file>' | javascript }}" do
|
50
|
+
def tag_re(name)
|
51
|
+
file = "/assets/#{name}-[a-f0-9]{32}\.js"
|
52
|
+
Regexp.new "^#{Jekyll::AssetsPlugin::Renderer::JAVASCRIPT % file}$"
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when <file> exists" do
|
56
|
+
subject { render("{{ 'app.js' | javascript }}") }
|
57
|
+
it { should match tag_re("app") }
|
58
|
+
end
|
59
|
+
|
60
|
+
context "when <file> extension omited" do
|
61
|
+
subject { render("{{ 'app' | javascript }}") }
|
62
|
+
it { should match tag_re("app") }
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when <file> does not exists" do
|
66
|
+
subject { render("{{ 'not-found.js' | javascript }}") }
|
67
|
+
it { should match "Liquid error: Couldn't find file 'not-found.js'" }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "{{ '<file.ext>' | asset_path }}" do
|
72
|
+
context "when <file> exists" do
|
73
|
+
subject { render("{{ 'app.css' | asset_path }}") }
|
74
|
+
it { should match(%r{^/assets/app-[a-f0-9]{32}\.css$}) }
|
75
|
+
end
|
76
|
+
|
77
|
+
context "when <file> does not exists" do
|
78
|
+
subject { render("{{ 'not-found.css' | asset_path }}") }
|
79
|
+
it { should match "Liquid error: Couldn't find file 'not-found.css'" }
|
80
|
+
end
|
81
|
+
|
82
|
+
context "with baseurl given as /foobar/" do
|
83
|
+
before do
|
84
|
+
context[:registers][:site].assets_config.baseurl = "/foobar/"
|
85
|
+
end
|
86
|
+
|
87
|
+
subject { render("{{ 'app.css' | asset_path }}") }
|
88
|
+
it { should match(%r{^/foobar/app-[a-f0-9]{32}\.css$}) }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "{{ '<file.ext>' | asset }}" do
|
93
|
+
context "when <file> exists" do
|
94
|
+
subject { render("{{ 'app.css' | asset }}") }
|
95
|
+
it { should match(/body \{ background-image: url\(.+?\) \}/) }
|
96
|
+
end
|
97
|
+
|
98
|
+
context "when <file> does not exists" do
|
99
|
+
subject { render("{{ 'not-found.js' | asset }}") }
|
100
|
+
it { should match "Liquid error: Couldn't find file 'not-found.js'" }
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|
@@ -0,0 +1,168 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Jekyll::AssetsPlugin::Patches::SitePatch do
|
4
|
+
let(:site) do
|
5
|
+
Jekyll::Site.new Jekyll.configuration({
|
6
|
+
"source" => fixtures_path.to_s,
|
7
|
+
"dirname" => "foobar",
|
8
|
+
"assets" => {
|
9
|
+
"sources" => %w[foobar _assets]
|
10
|
+
}
|
11
|
+
})
|
12
|
+
end
|
13
|
+
|
14
|
+
context "#assets" do
|
15
|
+
subject { site.assets }
|
16
|
+
it { should be_a_kind_of ::Sprockets::Environment }
|
17
|
+
|
18
|
+
context "#cache_path" do
|
19
|
+
let(:source_path) { Pathname.new site.source }
|
20
|
+
subject { site.assets.cache_path }
|
21
|
+
|
22
|
+
it { should eq source_path.join(".jekyll-assets-cache") }
|
23
|
+
end
|
24
|
+
|
25
|
+
context "calling #asset_path within assets" do
|
26
|
+
context "when requested file not found" do
|
27
|
+
it "raises a NotFound error" do
|
28
|
+
expect { site.assets["should_fail.css"] }
|
29
|
+
.to raise_error Jekyll::AssetsPlugin::Environment::AssetNotFound
|
30
|
+
end
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when requested file found" do
|
34
|
+
it "should have proper asset path" do
|
35
|
+
expect(site.assets["app.css"].to_s)
|
36
|
+
.to match(%r{url\(/assets/noise-[a-f0-9]{32}\.png\)})
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
context "when passed a blank path" do
|
41
|
+
it "should be blank" do
|
42
|
+
expect(site.assets["should_be_blank.css"].to_s)
|
43
|
+
.to match(/url\(\)/)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "#asset_path" do
|
50
|
+
subject { site.asset_path "app.css" }
|
51
|
+
|
52
|
+
context "with none cachebust" do
|
53
|
+
before { site.assets_config.cachebust = :none }
|
54
|
+
it { should match(%r{^/assets/app\.css$}) }
|
55
|
+
end
|
56
|
+
|
57
|
+
context "with soft cachebust" do
|
58
|
+
before { site.assets_config.cachebust = :soft }
|
59
|
+
it { should match(%r{^/assets/app\.css\?cb=[a-f0-9]{32}$}) }
|
60
|
+
end
|
61
|
+
|
62
|
+
context "with hard cachebust" do
|
63
|
+
before { site.assets_config.cachebust = :hard }
|
64
|
+
it { should match(%r{^/assets/app-[a-f0-9]{32}\.css$}) }
|
65
|
+
end
|
66
|
+
|
67
|
+
context "with unknown cachebust" do
|
68
|
+
before { site.assets_config.cachebust = :wtf }
|
69
|
+
it "should raise error" do
|
70
|
+
expect { site.asset_path "app.css" }.to raise_error
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
context "with query part in requested filename" do
|
75
|
+
subject { site.asset_path "app.css?foo=bar" }
|
76
|
+
|
77
|
+
context "and none cachebust" do
|
78
|
+
before { site.assets_config.cachebust = :none }
|
79
|
+
it { should match(%r{^/assets/app\.css\?foo=bar$}) }
|
80
|
+
end
|
81
|
+
|
82
|
+
context "and soft cachebust" do
|
83
|
+
before { site.assets_config.cachebust = :soft }
|
84
|
+
it { should match %r{^/assets/app\.css\?cb=[a-f0-9]{32}&foo=bar$} }
|
85
|
+
end
|
86
|
+
|
87
|
+
context "and hard cachebust" do
|
88
|
+
before { site.assets_config.cachebust = :hard }
|
89
|
+
it { should match(%r{^/assets/app-[a-f0-9]{32}\.css\?foo=bar$}) }
|
90
|
+
end
|
91
|
+
end
|
92
|
+
|
93
|
+
context "with anchor part in requested filename" do
|
94
|
+
subject { site.asset_path "app.css#foobar" }
|
95
|
+
|
96
|
+
context "and none cachebust" do
|
97
|
+
before { site.assets_config.cachebust = :none }
|
98
|
+
it { should match(%r{^/assets/app\.css#foobar$}) }
|
99
|
+
end
|
100
|
+
|
101
|
+
context "and soft cachebust" do
|
102
|
+
before { site.assets_config.cachebust = :soft }
|
103
|
+
it { should match(%r{^/assets/app\.css\?cb=[a-f0-9]{32}#foobar$}) }
|
104
|
+
end
|
105
|
+
|
106
|
+
context "and hard cachebust" do
|
107
|
+
before { site.assets_config.cachebust = :hard }
|
108
|
+
it { should match(%r{^/assets/app-[a-f0-9]{32}\.css#foobar$}) }
|
109
|
+
end
|
110
|
+
end
|
111
|
+
end
|
112
|
+
|
113
|
+
context "#assets_config" do
|
114
|
+
subject { site.assets_config }
|
115
|
+
it { should be_an_instance_of Jekyll::AssetsPlugin::Configuration }
|
116
|
+
|
117
|
+
it "should been populated with `assets` section of config" do
|
118
|
+
site.assets_config.dirname.should_not eq "foobar"
|
119
|
+
site.assets_config.sources.should include "foobar"
|
120
|
+
end
|
121
|
+
end
|
122
|
+
|
123
|
+
it "should regenerate assets upon multiple #process" do
|
124
|
+
@site.assets_config.cachebust = :none
|
125
|
+
2.times { @site.process }
|
126
|
+
@dest.join("assets", "app.css").exist?.should be_true
|
127
|
+
end
|
128
|
+
|
129
|
+
context "with cache" do
|
130
|
+
def site
|
131
|
+
Jekyll::Site.new(Jekyll.configuration({
|
132
|
+
"source" => fixtures_path.to_s,
|
133
|
+
"assets" => { "cache" => true, "cachebust" => :none },
|
134
|
+
"destination" => @dest.to_s
|
135
|
+
}))
|
136
|
+
end
|
137
|
+
|
138
|
+
after do
|
139
|
+
site.assets.cache_path.rmtree if site.assets.cache_path.exist?
|
140
|
+
end
|
141
|
+
|
142
|
+
it "should regenerate static assets upon multiple #process" do
|
143
|
+
2.times { site.process }
|
144
|
+
@dest.join("assets", "noise.png").exist?.should be_true
|
145
|
+
end
|
146
|
+
end
|
147
|
+
|
148
|
+
context "#gzip" do
|
149
|
+
subject { site.assets_config }
|
150
|
+
|
151
|
+
it "should generate a static assets if gzip is enabled" do
|
152
|
+
@site.assets_config.gzip = true
|
153
|
+
@site.process
|
154
|
+
@dest.join("assets", "app.css.gz").exist?.should be_true
|
155
|
+
end
|
156
|
+
|
157
|
+
it "should not generate a static assets if gzip is enabled" do
|
158
|
+
@site.assets_config.gzip = false
|
159
|
+
@site.process
|
160
|
+
@dest.join("assets", "app.css.gz").exist?.should be_false
|
161
|
+
end
|
162
|
+
|
163
|
+
end
|
164
|
+
|
165
|
+
it "should be included into Jekyll::Site" do
|
166
|
+
Jekyll::Site.included_modules.should include described_class
|
167
|
+
end
|
168
|
+
end
|
@@ -0,0 +1,48 @@
|
|
1
|
+
# stdlib
|
2
|
+
require "ostruct"
|
3
|
+
|
4
|
+
require "spec_helper"
|
5
|
+
|
6
|
+
describe Jekyll::AssetsPlugin::Renderer do
|
7
|
+
let(:site) do
|
8
|
+
Jekyll::Site.new Jekyll.configuration({
|
9
|
+
"source" => fixtures_path.to_s,
|
10
|
+
"destination" => @dest.to_s,
|
11
|
+
"assets" => assets_config
|
12
|
+
})
|
13
|
+
end
|
14
|
+
|
15
|
+
let(:renderer) do
|
16
|
+
context = OpenStruct.new(:registers => { :site => site })
|
17
|
+
described_class.new context, "app"
|
18
|
+
end
|
19
|
+
|
20
|
+
describe "#render_javascript" do
|
21
|
+
subject { renderer.render_javascript }
|
22
|
+
|
23
|
+
context "when debug mode enabled" do
|
24
|
+
let(:assets_config) { Hash[:debug, true] }
|
25
|
+
it { should match(/^(\s*<script src="[^"]+"><\/script>\s*){3}$/) }
|
26
|
+
end
|
27
|
+
|
28
|
+
context "when debug mode disabled" do
|
29
|
+
let(:assets_config) { Hash[:debug, false] }
|
30
|
+
it { should match(/^(\s*<script src="[^"]+"><\/script>\s*){1}$/) }
|
31
|
+
end
|
32
|
+
end
|
33
|
+
|
34
|
+
describe "#render_stylesheet" do
|
35
|
+
subject { renderer.render_stylesheet }
|
36
|
+
|
37
|
+
context "when debug mode enabled" do
|
38
|
+
let(:assets_config) { Hash[:debug, true] }
|
39
|
+
it { should match(/^(\s*<link rel="stylesheet" [^>]+>\s*){3}$/) }
|
40
|
+
end
|
41
|
+
|
42
|
+
context "when debug mode disabled" do
|
43
|
+
let(:assets_config) { Hash[:debug, false] }
|
44
|
+
it { should match(/^(\s*<link rel="stylesheet" [^>]+>\s*){1}$/) }
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
end
|
@@ -0,0 +1,103 @@
|
|
1
|
+
require "spec_helper"
|
2
|
+
|
3
|
+
describe Jekyll::AssetsPlugin::Tag do
|
4
|
+
let(:context) { { :registers => { :site => @site } } }
|
5
|
+
|
6
|
+
def render(content)
|
7
|
+
::Liquid::Template.parse(content).render({}, context)
|
8
|
+
end
|
9
|
+
|
10
|
+
context "{% image <file> %}" do
|
11
|
+
def tag_re(name)
|
12
|
+
file = "/assets/#{name}-[a-f0-9]{32}\.png"
|
13
|
+
Regexp.new "^#{Jekyll::AssetsPlugin::Renderer::IMAGE % file}$"
|
14
|
+
end
|
15
|
+
|
16
|
+
context "when <file> exists" do
|
17
|
+
subject { render("{% image noise.png %}") }
|
18
|
+
it { should match tag_re("noise") }
|
19
|
+
end
|
20
|
+
|
21
|
+
context "when <file> does not exists" do
|
22
|
+
subject { render("{% image not-found.png %}") }
|
23
|
+
it { should match "Liquid error: Couldn't find file 'not-found.png'" }
|
24
|
+
end
|
25
|
+
end
|
26
|
+
|
27
|
+
context "{% stylesheet <file> %}" do
|
28
|
+
def tag_re(name)
|
29
|
+
file = "/assets/#{name}-[a-f0-9]{32}\.css"
|
30
|
+
Regexp.new "^#{Jekyll::AssetsPlugin::Renderer::STYLESHEET % file}$"
|
31
|
+
end
|
32
|
+
|
33
|
+
context "when <file> exists" do
|
34
|
+
subject { render("{% stylesheet app.css %}") }
|
35
|
+
it { should match tag_re("app") }
|
36
|
+
end
|
37
|
+
|
38
|
+
context "when <file> extension is omited" do
|
39
|
+
subject { render("{% stylesheet app %}") }
|
40
|
+
it { should match tag_re("app") }
|
41
|
+
end
|
42
|
+
|
43
|
+
context "when <file> does not exists" do
|
44
|
+
subject { render("{% stylesheet not-found.css %}") }
|
45
|
+
it { should match "Liquid error: Couldn't find file 'not-found.css'" }
|
46
|
+
end
|
47
|
+
end
|
48
|
+
|
49
|
+
context "{% javascript <file> %}" do
|
50
|
+
def tag_re(name)
|
51
|
+
file = "/assets/#{name}-[a-f0-9]{32}\.js"
|
52
|
+
Regexp.new "^#{Jekyll::AssetsPlugin::Renderer::JAVASCRIPT % file}$"
|
53
|
+
end
|
54
|
+
|
55
|
+
context "when <file> exists" do
|
56
|
+
subject { render("{% javascript app.js %}") }
|
57
|
+
it { should match tag_re("app") }
|
58
|
+
end
|
59
|
+
|
60
|
+
context "when <file> extension omited" do
|
61
|
+
subject { render("{% javascript app %}") }
|
62
|
+
it { should match tag_re("app") }
|
63
|
+
end
|
64
|
+
|
65
|
+
context "when <file> does not exists" do
|
66
|
+
subject { render("{% javascript not-found.js %}") }
|
67
|
+
it { should match "Liquid error: Couldn't find file 'not-found.js'" }
|
68
|
+
end
|
69
|
+
end
|
70
|
+
|
71
|
+
context "{% asset_path <file.ext> %}" do
|
72
|
+
context "when <file> exists" do
|
73
|
+
subject { render("{% asset_path app.css %}") }
|
74
|
+
it { should match(%r{^/assets/app-[a-f0-9]{32}\.css$}) }
|
75
|
+
end
|
76
|
+
|
77
|
+
context "when <file> does not exists" do
|
78
|
+
subject { render("{% asset_path not-found.js %}") }
|
79
|
+
it { should match "Liquid error: Couldn't find file 'not-found.js'" }
|
80
|
+
end
|
81
|
+
|
82
|
+
context "with baseurl given as /foobar/" do
|
83
|
+
before do
|
84
|
+
context[:registers][:site].assets_config.baseurl = "/foobar/"
|
85
|
+
end
|
86
|
+
|
87
|
+
subject { render("{% asset_path app.css %}") }
|
88
|
+
it { should match(%r{^/foobar/app-[a-f0-9]{32}\.css$}) }
|
89
|
+
end
|
90
|
+
end
|
91
|
+
|
92
|
+
context "{% asset <file.ext> %}" do
|
93
|
+
context "when <file> exists" do
|
94
|
+
subject { render("{% asset app.css %}") }
|
95
|
+
it { should match(/body \{ background-image: url\(.+?\) \}/) }
|
96
|
+
end
|
97
|
+
|
98
|
+
context "when <file> does not exists" do
|
99
|
+
subject { render("{% asset_path not-found.js %}") }
|
100
|
+
it { should match "Liquid error: Couldn't find file 'not-found.js'" }
|
101
|
+
end
|
102
|
+
end
|
103
|
+
end
|