tgfa-jekyll-assets 0.7.9.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.
- 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
|