nanoc-cachebuster 0.1.0 → 0.1.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.
- data/HISTORY.md +9 -2
- data/README.md +16 -16
- data/Rakefile +1 -5
- data/lib/nanoc3/cachebuster/strategy.rb +8 -1
- data/lib/nanoc3/cachebuster/version.rb +1 -1
- data/spec/nanoc3/filters/cache_buster_spec.rb +11 -0
- metadata +14 -2
data/HISTORY.md
CHANGED
@@ -1,5 +1,12 @@
|
|
1
|
-
# 0.
|
1
|
+
# 0.1.1
|
2
|
+
|
3
|
+
* Bugfix: no longer raise exception when an item has no content_filename attribute.
|
4
|
+
|
5
|
+
# 0.1.0
|
2
6
|
|
3
7
|
* No more re-calculation of fingerprints, just use the routed filename.
|
8
|
+
|
9
|
+
# 0.1.0
|
10
|
+
|
4
11
|
* Refactored into separate strategies.
|
5
|
-
* First, direct extraction.
|
12
|
+
* First, direct extraction.
|
data/README.md
CHANGED
@@ -34,31 +34,31 @@ Then load it via your project Gemfile or in `./lib/default.rb`:
|
|
34
34
|
Usage
|
35
35
|
=====
|
36
36
|
|
37
|
-
This gem provides a
|
38
|
-
|
37
|
+
This gem provides a simple helper method you can use to rewrite the output
|
38
|
+
filename of your static assets to include a content-based fingerprint.
|
39
|
+
A simple filter will look up the output filename you have generated, and
|
40
|
+
replace any references to the regularly-named file to the rewritten one.
|
39
41
|
|
40
42
|
So, when you include a stylesheet:
|
41
43
|
|
42
44
|
<link rel="stylesheet" href="styles.css">
|
43
45
|
|
44
|
-
|
45
|
-
|
46
|
-
<link rel="stylesheet" href="styles-cb7a4bb98ef.css">
|
47
|
-
|
48
|
-
The adjusted filename changes every time the file itself changes, so you don't
|
49
|
-
want to code that by hand in your Rules file. Instead, use the helper methods
|
50
|
-
provided. First, include the helpers in your ./lib/default.rb:
|
46
|
+
And you rewrite the output of the file to include a fingerprint:
|
51
47
|
|
48
|
+
# in your ./lib/default.rb
|
52
49
|
include Nanoc3::Helpers::CacheBusting
|
50
|
+
# in ./Rules
|
51
|
+
route '/styles/' do
|
52
|
+
fp = fingerprint(item[:filename])
|
53
|
+
item.identifier.chop + fp + '.css'
|
54
|
+
end
|
53
55
|
|
54
|
-
|
55
|
-
rules to determine whether an item needs cachebusting, and get the fingerprint
|
56
|
-
for it. So you can do something like:
|
56
|
+
The filter will change your HTML on compilation to:
|
57
57
|
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
58
|
+
<link rel="stylesheet" href="styles-cb7a4bb98ef.css">
|
59
|
+
|
60
|
+
You get simple, content-based cachebusters for free. All that is left for you
|
61
|
+
to do is set some far-future expires header in your server configuration.
|
62
62
|
|
63
63
|
Development
|
64
64
|
===========
|
data/Rakefile
CHANGED
@@ -10,10 +10,6 @@ task :install => :build do
|
|
10
10
|
sh "gem install nanoc-cachebuster-#{Nanoc3::Cachebuster::VERSION}.gem"
|
11
11
|
end
|
12
12
|
|
13
|
-
task :tag do
|
14
|
-
sh "git tag -a #{Nanoc3::Cachebuster::VERSION}"
|
15
|
-
end
|
16
|
-
|
17
13
|
task :push do
|
18
14
|
sh 'git push origin master'
|
19
15
|
sh 'git push --tags'
|
@@ -37,7 +33,7 @@ end
|
|
37
33
|
|
38
34
|
desc 'Tag the code, push upstream, build and push the gem'
|
39
35
|
task :release => [:install, :push] do
|
40
|
-
sh "gem push nanoc-cachebuster-#{Nanoc3::Cachebuster::VERSION}"
|
36
|
+
sh "gem push nanoc-cachebuster-#{Nanoc3::Cachebuster::VERSION}.gem"
|
41
37
|
end
|
42
38
|
|
43
39
|
desc 'Print current version number'
|
@@ -97,9 +97,16 @@ module Nanoc3
|
|
97
97
|
# an input file, such as a stylesheet or HTML page.
|
98
98
|
# @return <String> path to the same file as the input path but relative
|
99
99
|
# to the site root.
|
100
|
+
# @todo make proper test case for this bug: items generated on the fly
|
101
|
+
# do not have a content_filename attribute. Infer path from output
|
102
|
+
# path.
|
100
103
|
def absolutize(path)
|
101
104
|
return path if path =~ /^\//
|
102
|
-
|
105
|
+
if current_item[:content_filename]
|
106
|
+
File.join(File.dirname(current_item[:content_filename]), path).sub(/^content/, '')
|
107
|
+
else
|
108
|
+
File.join(File.dirname(current_item.path), path)
|
109
|
+
end
|
103
110
|
end
|
104
111
|
end
|
105
112
|
|
@@ -3,6 +3,10 @@ require 'ostruct'
|
|
3
3
|
class MockItem
|
4
4
|
attr_reader :path, :content
|
5
5
|
|
6
|
+
def self.generated_css_file
|
7
|
+
new '/styles-cb123456789.css', 'example content', { :extension => 'css' }
|
8
|
+
end
|
9
|
+
|
6
10
|
def self.css_file(content = 'example content')
|
7
11
|
new '/styles-cb123456789.css', content, { :extension => 'css', :content_filename => 'content/styles.css' }
|
8
12
|
end
|
@@ -133,6 +137,13 @@ describe Nanoc3::Filters::CacheBuster do
|
|
133
137
|
|
134
138
|
it_should_not_filter %Q{background: url(foo.png);}
|
135
139
|
end
|
140
|
+
|
141
|
+
describe 'when the current item has no content path' do
|
142
|
+
let(:target) { MockItem.image_file '/foo.png', '/../images/foo-cb123456789.png' }
|
143
|
+
let(:item) { MockItem.generated_css_file }
|
144
|
+
|
145
|
+
it_should_filter %Q{background: url("../images/foo.png");} => %Q{background: url("../images/foo-cb123456789.png");}
|
146
|
+
end
|
136
147
|
end
|
137
148
|
|
138
149
|
describe 'filtering HTML' do
|
metadata
CHANGED
@@ -1,8 +1,13 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: nanoc-cachebuster
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
+
hash: 25
|
4
5
|
prerelease:
|
5
|
-
|
6
|
+
segments:
|
7
|
+
- 0
|
8
|
+
- 1
|
9
|
+
- 1
|
10
|
+
version: 0.1.1
|
6
11
|
platform: ruby
|
7
12
|
authors:
|
8
13
|
- Arjan van der Gaag
|
@@ -10,7 +15,7 @@ autorequire:
|
|
10
15
|
bindir: bin
|
11
16
|
cert_chain: []
|
12
17
|
|
13
|
-
date: 2011-05-
|
18
|
+
date: 2011-05-24 00:00:00 Z
|
14
19
|
dependencies: []
|
15
20
|
|
16
21
|
description: |
|
@@ -66,12 +71,18 @@ required_ruby_version: !ruby/object:Gem::Requirement
|
|
66
71
|
requirements:
|
67
72
|
- - ">="
|
68
73
|
- !ruby/object:Gem::Version
|
74
|
+
hash: 3
|
75
|
+
segments:
|
76
|
+
- 0
|
69
77
|
version: "0"
|
70
78
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
79
|
none: false
|
72
80
|
requirements:
|
73
81
|
- - ">="
|
74
82
|
- !ruby/object:Gem::Version
|
83
|
+
hash: 3
|
84
|
+
segments:
|
85
|
+
- 0
|
75
86
|
version: "0"
|
76
87
|
requirements: []
|
77
88
|
|
@@ -84,3 +95,4 @@ test_files:
|
|
84
95
|
- spec/nanoc3/filters/cache_buster_spec.rb
|
85
96
|
- spec/nanoc3/helpers/cache_busting_spec.rb
|
86
97
|
- spec/spec_helper.rb
|
98
|
+
has_rdoc:
|