nanoc-cachebuster 0.1.2 → 0.2.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/.gitignore +1 -0
- data/Gemfile +3 -0
- data/HISTORY.md +13 -2
- data/README.md +19 -10
- data/Rakefile +13 -25
- data/lib/{nanoc3 → nanoc}/cachebuster.rb +2 -2
- data/lib/{nanoc3 → nanoc}/cachebuster/strategy.rb +12 -12
- data/lib/nanoc/cachebuster/version.rb +5 -0
- data/lib/nanoc/filters.rb +4 -0
- data/lib/{nanoc3 → nanoc}/filters/cache_buster.rb +6 -6
- data/lib/nanoc/helpers.rb +3 -0
- data/lib/{nanoc3 → nanoc}/helpers/cache_busting.rb +3 -3
- data/nanoc-cachebuster.gemspec +6 -2
- data/spec/{nanoc3 → nanoc}/filters/cache_buster_spec.rb +18 -3
- data/spec/{nanoc3 → nanoc}/helpers/cache_busting_spec.rb +2 -2
- data/spec/spec_helper.rb +1 -2
- metadata +83 -53
- data/lib/nanoc3/cachebuster/version.rb +0 -5
- data/lib/nanoc3/filters.rb +0 -4
- data/lib/nanoc3/helpers.rb +0 -3
data/.gitignore
CHANGED
data/Gemfile
ADDED
data/HISTORY.md
CHANGED
@@ -1,5 +1,16 @@
|
|
1
|
-
# 0.0
|
1
|
+
# 0.2.0
|
2
|
+
|
3
|
+
* Nanoc 3.3 compatibility (by John Nishinaga)
|
4
|
+
|
5
|
+
# 0.1.1
|
6
|
+
|
7
|
+
* Bugfix: no longer raise exception when an item has no content_filename attribute.
|
8
|
+
|
9
|
+
# 0.1.0
|
2
10
|
|
3
11
|
* No more re-calculation of fingerprints, just use the routed filename.
|
12
|
+
|
13
|
+
# 0.1.0
|
14
|
+
|
4
15
|
* Refactored into separate strategies.
|
5
|
-
* First, direct extraction.
|
16
|
+
* First, direct extraction.
|
data/README.md
CHANGED
@@ -29,7 +29,9 @@ install this gem:
|
|
29
29
|
|
30
30
|
Then load it via your project Gemfile or in `./lib/default.rb`:
|
31
31
|
|
32
|
-
|
32
|
+
```ruby
|
33
|
+
require 'nanoc/cachebuster'
|
34
|
+
```
|
33
35
|
|
34
36
|
Usage
|
35
37
|
=====
|
@@ -41,21 +43,27 @@ replace any references to the regularly-named file to the rewritten one.
|
|
41
43
|
|
42
44
|
So, when you include a stylesheet:
|
43
45
|
|
44
|
-
|
46
|
+
```html
|
47
|
+
<link rel="stylesheet" href="styles.css">
|
48
|
+
```
|
45
49
|
|
46
50
|
And you rewrite the output of the file to include a fingerprint:
|
47
51
|
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
52
|
+
```ruby
|
53
|
+
# in your ./lib/default.rb
|
54
|
+
include Nanoc::Helpers::CacheBusting
|
55
|
+
# in ./Rules
|
56
|
+
route '/styles/' do
|
57
|
+
fp = fingerprint(item[:filename])
|
58
|
+
item.identifier.chop + fp + '.css'
|
59
|
+
end
|
60
|
+
```
|
55
61
|
|
56
62
|
The filter will change your HTML on compilation to:
|
57
63
|
|
58
|
-
|
64
|
+
```html
|
65
|
+
<link rel="stylesheet" href="styles-cb7a4bb98ef.css">
|
66
|
+
```
|
59
67
|
|
60
68
|
You get simple, content-based cachebusters for free. All that is left for you
|
61
69
|
to do is set some far-future expires header in your server configuration.
|
@@ -79,3 +87,4 @@ Credits
|
|
79
87
|
|
80
88
|
* **Author**: Arjan van der Gaag <arjan@arjanvandergaag.nl>
|
81
89
|
* **License**: MIT License (same as Ruby, see LICENSE)
|
90
|
+
* **With contributions from**: John Nishinaga
|
data/Rakefile
CHANGED
@@ -1,19 +1,12 @@
|
|
1
|
-
|
2
|
-
require '
|
3
|
-
|
4
|
-
task :build do
|
5
|
-
sh 'gem build nanoc-cachebuster.gemspec'
|
6
|
-
end
|
1
|
+
require 'bundler/setup'
|
2
|
+
require 'bundler/gem_tasks'
|
7
3
|
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
end
|
4
|
+
require 'rspec/core/rake_task'
|
5
|
+
RSpec::Core::RakeTask.new(:spec)
|
6
|
+
task :default => :spec
|
12
7
|
|
13
|
-
|
14
|
-
|
15
|
-
sh 'git push --tags'
|
16
|
-
end
|
8
|
+
$LOAD_PATH.unshift File.expand_path("../lib", __FILE__)
|
9
|
+
require 'nanoc/cachebuster/version'
|
17
10
|
|
18
11
|
task :log do
|
19
12
|
changes = `git log --oneline $(git describe --abbrev=0 2>/dev/null)..HEAD`
|
@@ -23,7 +16,7 @@ task :log do
|
|
23
16
|
path = File.expand_path('../HISTORY.md', __FILE__)
|
24
17
|
|
25
18
|
original_content = File.read(path)
|
26
|
-
addition = "# #{
|
19
|
+
addition = "# #{Nanoc::Cachebuster::VERSION}\n\n#{changes}"
|
27
20
|
puts addition
|
28
21
|
|
29
22
|
File.open(path, 'w') do |f|
|
@@ -31,14 +24,9 @@ task :log do
|
|
31
24
|
end
|
32
25
|
end
|
33
26
|
|
34
|
-
desc 'Push code upstream, build and publish the gem'
|
35
|
-
task :release => [:install, :push] do
|
36
|
-
sh "gem push nanoc-cachebuster-#{Nanoc3::Cachebuster::VERSION}.gem"
|
37
|
-
end
|
38
|
-
|
39
27
|
desc 'Print current version number'
|
40
28
|
task :version do
|
41
|
-
puts
|
29
|
+
puts Nanoc::Cachebuster::VERSION
|
42
30
|
end
|
43
31
|
|
44
32
|
class Version
|
@@ -60,7 +48,7 @@ class Version
|
|
60
48
|
end
|
61
49
|
|
62
50
|
def write
|
63
|
-
file = File.expand_path('../lib/
|
51
|
+
file = File.expand_path('../lib/nanoc/cachebuster/version.rb', __FILE__)
|
64
52
|
original_contents = File.read(file)
|
65
53
|
File.open(file, 'w') do |f|
|
66
54
|
f.write original_contents.gsub(/VERSION = ('|")\d+\.\d+\.\d+\1/, "VERSION = '#{to_s}'")
|
@@ -74,17 +62,17 @@ namespace :version do
|
|
74
62
|
namespace :bump do
|
75
63
|
desc 'Bump a major version'
|
76
64
|
task :major do
|
77
|
-
Version.new(
|
65
|
+
Version.new(Nanoc::Cachebuster::VERSION).bump(:major).write
|
78
66
|
end
|
79
67
|
|
80
68
|
desc 'Bump a minor version'
|
81
69
|
task :minor do
|
82
|
-
Version.new(
|
70
|
+
Version.new(Nanoc::Cachebuster::VERSION).bump(:minor).write
|
83
71
|
end
|
84
72
|
|
85
73
|
desc 'Bump a patch version'
|
86
74
|
task :patch do
|
87
|
-
Version.new(
|
75
|
+
Version.new(Nanoc::Cachebuster::VERSION).bump(:patch).write
|
88
76
|
end
|
89
77
|
end
|
90
78
|
end
|
@@ -1,6 +1,6 @@
|
|
1
1
|
require 'pathname'
|
2
2
|
|
3
|
-
module
|
3
|
+
module Nanoc
|
4
4
|
module Cachebuster
|
5
5
|
# The Strategy is a way to deal with an input file. The Cache busting filter
|
6
6
|
# will use a strategy to process all references. You may want to use different
|
@@ -17,7 +17,7 @@ module Nanoc3
|
|
17
17
|
|
18
18
|
def self.for(kind, site, item)
|
19
19
|
klass = @subclasses[kind]
|
20
|
-
raise
|
20
|
+
raise Nanoc::Cachebuster::NoSuchStrategy.new "No strategy found for #{kind}" unless klass
|
21
21
|
klass.new(site, item)
|
22
22
|
end
|
23
23
|
|
@@ -28,12 +28,12 @@ module Nanoc3
|
|
28
28
|
# future portability we might as well carry the entire site object
|
29
29
|
# over.
|
30
30
|
#
|
31
|
-
# @return <
|
31
|
+
# @return <Nanoc::Site>
|
32
32
|
attr_reader :site
|
33
33
|
|
34
34
|
# The Nanoc item we are currently filtering.
|
35
35
|
#
|
36
|
-
# @return <
|
36
|
+
# @return <Nanoc::Item>
|
37
37
|
attr_reader :current_item
|
38
38
|
|
39
39
|
def initialize(site, current_item)
|
@@ -70,12 +70,12 @@ module Nanoc3
|
|
70
70
|
|
71
71
|
matching_item = site.items.find do |i|
|
72
72
|
next unless i.path # some items don't have an output path. Ignore those.
|
73
|
-
i.path.sub(/#{
|
73
|
+
i.path.sub(/#{Nanoc::Cachebuster::CACHEBUSTER_PREFIX}[a-zA-Z0-9]{9}(?=\.)/o, '') == path
|
74
74
|
end
|
75
75
|
|
76
76
|
# Raise an exception to indicate we should leave this reference alone
|
77
77
|
unless matching_item
|
78
|
-
raise
|
78
|
+
raise Nanoc::Cachebuster::NoSuchSourceFile, 'No source file found matching ' + input_path
|
79
79
|
end
|
80
80
|
|
81
81
|
# keep using an absolute path if the input reference did so...
|
@@ -83,8 +83,8 @@ module Nanoc3
|
|
83
83
|
|
84
84
|
# ... if not, recreate the relative path to referenced file from
|
85
85
|
# the current file path.
|
86
|
-
current_path = Pathname.new(File.dirname(current_item.path))
|
87
|
-
target_path = Pathname.new(File.dirname(matching_item.path))
|
86
|
+
current_path = Pathname.new(File.dirname(current_item.path.sub(/^\//, '')))
|
87
|
+
target_path = Pathname.new(File.dirname(matching_item.path.sub(/^\//, '')))
|
88
88
|
output_reference = target_path.relative_path_from(current_path).join(File.basename(matching_item.path))
|
89
89
|
end
|
90
90
|
|
@@ -110,7 +110,7 @@ module Nanoc3
|
|
110
110
|
if current_item[:content_filename]
|
111
111
|
File.expand_path(File.join(File.dirname(current_item[:content_filename]), path)).sub(/^#{Dir.pwd}/, '').sub(/^\/content/, '')
|
112
112
|
else
|
113
|
-
File.dirname(current_item.path)
|
113
|
+
File.expand_path(File.dirname(current_item.path), path)
|
114
114
|
end
|
115
115
|
end
|
116
116
|
end
|
@@ -124,14 +124,14 @@ module Nanoc3
|
|
124
124
|
('|"|) # Then either a single, double or no quote at all
|
125
125
|
(
|
126
126
|
([^'")]+) # The file basename, and below the extension
|
127
|
-
\.(#{
|
127
|
+
\.(#{Nanoc::Cachebuster::FILETYPES_TO_FINGERPRINT.join('|')})
|
128
128
|
)
|
129
129
|
\1 # Repeat the same quote as at the start
|
130
130
|
\) # And cose the url()
|
131
131
|
/ix
|
132
132
|
|
133
133
|
def apply(m, quote, filename, basename, extension)
|
134
|
-
m.sub(filename, output_filename(filename))
|
134
|
+
m.sub(filename, output_filename(filename).to_s)
|
135
135
|
end
|
136
136
|
end
|
137
137
|
|
@@ -146,7 +146,7 @@ module Nanoc3
|
|
146
146
|
( # Capture the entire reference
|
147
147
|
[^'"]+ # Anything but something that would close the attribute
|
148
148
|
# And then the extension:
|
149
|
-
(\.(?:#{
|
149
|
+
(\.(?:#{Nanoc::Cachebuster::FILETYPES_TO_FINGERPRINT.join('|')}))
|
150
150
|
)
|
151
151
|
\2 # Repeat the opening quote
|
152
152
|
/ix
|
@@ -1,15 +1,15 @@
|
|
1
|
-
module
|
1
|
+
module Nanoc
|
2
2
|
module Filters
|
3
|
-
class CacheBuster <
|
3
|
+
class CacheBuster < Nanoc::Filter
|
4
4
|
identifier :cache_buster
|
5
5
|
|
6
6
|
def run(content, options = {})
|
7
7
|
kind = options[:strategy] || (stylesheet? ? :css : :html)
|
8
|
-
strategy =
|
8
|
+
strategy = Nanoc::Cachebuster::Strategy.for(kind , site, item)
|
9
9
|
content.gsub(strategy.class::REGEX) do |m|
|
10
10
|
begin
|
11
11
|
strategy.apply m, $1, $2, $3, $4
|
12
|
-
rescue
|
12
|
+
rescue Nanoc::Cachebuster::NoSuchSourceFile
|
13
13
|
m
|
14
14
|
end
|
15
15
|
end
|
@@ -22,10 +22,10 @@ module Nanoc3
|
|
22
22
|
# This is a simple check for filetypes, but you can override what strategy to use
|
23
23
|
# with the filter options. This provides a default.
|
24
24
|
#
|
25
|
-
# @see
|
25
|
+
# @see Nanoc::Cachebuster::FILETYPES_CONSIDERED_CSS
|
26
26
|
# @return <Bool>
|
27
27
|
def stylesheet?
|
28
|
-
|
28
|
+
Nanoc::Cachebuster::FILETYPES_CONSIDERED_CSS.include?(item[:extension].to_s)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
@@ -1,4 +1,4 @@
|
|
1
|
-
module
|
1
|
+
module Nanoc
|
2
2
|
module Helpers
|
3
3
|
module CacheBusting
|
4
4
|
|
@@ -15,7 +15,7 @@ module Nanoc3
|
|
15
15
|
# @param <Item> item is the item to test
|
16
16
|
# @return <Boolean>
|
17
17
|
def cachebust?(item)
|
18
|
-
|
18
|
+
Nanoc::Cachebuster.should_apply_fingerprint_to_file?(item)
|
19
19
|
end
|
20
20
|
|
21
21
|
# Get a unique fingerprint for a file's content. This currently uses
|
@@ -25,7 +25,7 @@ module Nanoc3
|
|
25
25
|
# @param <String> filename is the path to the file to fingerprint.
|
26
26
|
# @return <String> file fingerprint
|
27
27
|
def fingerprint(filename)
|
28
|
-
|
28
|
+
Nanoc::Cachebuster.fingerprint_file(filename)
|
29
29
|
end
|
30
30
|
end
|
31
31
|
end
|
data/nanoc-cachebuster.gemspec
CHANGED
@@ -1,10 +1,10 @@
|
|
1
1
|
# -*- encoding: utf-8 -*-
|
2
2
|
$:.push File.expand_path('../lib', __FILE__)
|
3
|
-
require '
|
3
|
+
require 'nanoc/cachebuster/version'
|
4
4
|
|
5
5
|
Gem::Specification.new do |s|
|
6
6
|
s.name = 'nanoc-cachebuster'
|
7
|
-
s.version =
|
7
|
+
s.version = Nanoc::Cachebuster::VERSION
|
8
8
|
s.platform = Gem::Platform::RUBY
|
9
9
|
s.authors = ['Arjan van der Gaag']
|
10
10
|
s.email = ['arjan@arjanvandergaag.nl']
|
@@ -31,4 +31,8 @@ EOS
|
|
31
31
|
s.test_files = `git ls-files -- {test,spec,features}/*`.split("\n")
|
32
32
|
s.executables = `git ls-files -- bin/*`.split("\n").map{ |f| File.basename(f) }
|
33
33
|
s.require_paths = ['lib']
|
34
|
+
|
35
|
+
s.add_runtime_dependency 'nanoc', '>= 3.3.0'
|
36
|
+
s.add_development_dependency 'rake'
|
37
|
+
s.add_development_dependency 'rspec'
|
34
38
|
end
|
@@ -1,8 +1,13 @@
|
|
1
|
+
require 'spec_helper'
|
1
2
|
require 'ostruct'
|
2
3
|
|
3
4
|
class MockItem
|
4
5
|
attr_reader :path, :content
|
5
6
|
|
7
|
+
def self.generated_css_file
|
8
|
+
new '/styles-cb123456789.css', 'example content', { :extension => 'css' }
|
9
|
+
end
|
10
|
+
|
6
11
|
def self.css_file(content = 'example content')
|
7
12
|
new '/styles-cb123456789.css', content, { :extension => 'css', :content_filename => 'content/styles.css' }
|
8
13
|
end
|
@@ -44,12 +49,12 @@ class MockItem
|
|
44
49
|
end
|
45
50
|
end
|
46
51
|
|
47
|
-
describe
|
52
|
+
describe Nanoc::Filters::CacheBuster do
|
48
53
|
before(:each) do
|
49
54
|
Digest::MD5.stub!(:hexdigest).and_return('123456789')
|
50
55
|
end
|
51
56
|
|
52
|
-
let(:subject) {
|
57
|
+
let(:subject) { Nanoc::Filters::CacheBuster.new context }
|
53
58
|
let(:content) { item.content }
|
54
59
|
let(:item) { MockItem.css_file }
|
55
60
|
let(:target) { MockItem.image_file }
|
@@ -65,7 +70,7 @@ describe Nanoc3::Filters::CacheBuster do
|
|
65
70
|
end
|
66
71
|
|
67
72
|
describe 'filter interface' do
|
68
|
-
it { should be_kind_of(
|
73
|
+
it { should be_kind_of(Nanoc::Filter) }
|
69
74
|
it { should respond_to(:run) }
|
70
75
|
|
71
76
|
it 'should accept a string and an options Hash' do
|
@@ -142,6 +147,16 @@ describe Nanoc3::Filters::CacheBuster do
|
|
142
147
|
|
143
148
|
it_should_not_filter %Q{background: url(foo.png);}
|
144
149
|
end
|
150
|
+
|
151
|
+
# Needs documentation on what this test is actually testing, and thinking on convention.
|
152
|
+
# This is currently responding to the else on line 113 of cachebuster#strategy.rb which is not adding the cb hash to the end of the file name.
|
153
|
+
# Need to discover under what condition does an item has no :content_filename and consider what is best convention to handle this case.
|
154
|
+
describe 'when the current item has no content path' do
|
155
|
+
let(:target) { MockItem.image_file '/foo.png', '/../images/foo-cb123456789.png' }
|
156
|
+
let(:item) { MockItem.generated_css_file }
|
157
|
+
|
158
|
+
it_should_filter %Q{background: url("../images/foo.png");} => %Q{background: url("../images/foo-cb123456789.png");}
|
159
|
+
end
|
145
160
|
end
|
146
161
|
|
147
162
|
describe 'filtering HTML' do
|
data/spec/spec_helper.rb
CHANGED
@@ -1,2 +1 @@
|
|
1
|
-
require '
|
2
|
-
|
1
|
+
require 'nanoc/cachebuster'
|
metadata
CHANGED
@@ -1,98 +1,128 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: nanoc-cachebuster
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 0.2.0
|
5
5
|
prerelease:
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 1
|
9
|
-
- 2
|
10
|
-
version: 0.1.2
|
11
6
|
platform: ruby
|
12
|
-
authors:
|
7
|
+
authors:
|
13
8
|
- Arjan van der Gaag
|
14
9
|
autorequire:
|
15
10
|
bindir: bin
|
16
11
|
cert_chain: []
|
12
|
+
date: 2012-02-14 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: nanoc
|
16
|
+
requirement: &70096428299300 !ruby/object:Gem::Requirement
|
17
|
+
none: false
|
18
|
+
requirements:
|
19
|
+
- - ! '>='
|
20
|
+
- !ruby/object:Gem::Version
|
21
|
+
version: 3.3.0
|
22
|
+
type: :runtime
|
23
|
+
prerelease: false
|
24
|
+
version_requirements: *70096428299300
|
25
|
+
- !ruby/object:Gem::Dependency
|
26
|
+
name: rake
|
27
|
+
requirement: &70096428298460 !ruby/object:Gem::Requirement
|
28
|
+
none: false
|
29
|
+
requirements:
|
30
|
+
- - ! '>='
|
31
|
+
- !ruby/object:Gem::Version
|
32
|
+
version: '0'
|
33
|
+
type: :development
|
34
|
+
prerelease: false
|
35
|
+
version_requirements: *70096428298460
|
36
|
+
- !ruby/object:Gem::Dependency
|
37
|
+
name: rspec
|
38
|
+
requirement: &70096428297900 !ruby/object:Gem::Requirement
|
39
|
+
none: false
|
40
|
+
requirements:
|
41
|
+
- - ! '>='
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: '0'
|
44
|
+
type: :development
|
45
|
+
prerelease: false
|
46
|
+
version_requirements: *70096428297900
|
47
|
+
description: ! 'Your website should use far-future expires headers on static assets,
|
48
|
+
to make
|
17
49
|
|
18
|
-
|
19
|
-
dependencies: []
|
50
|
+
the best use of client-side caching. But when a file is cached, updates won''t
|
20
51
|
|
21
|
-
description: |
|
22
|
-
Your website should use far-future expires headers on static assets, to make
|
23
|
-
the best use of client-side caching. But when a file is cached, updates won't
|
24
52
|
get picked up. Cache busting is the practice of making the filename of a
|
53
|
+
|
25
54
|
cached asset unique to its content, so it can be cached without having to
|
55
|
+
|
26
56
|
worry about future changes.
|
27
|
-
|
57
|
+
|
58
|
+
|
28
59
|
This gem adds a filter and some helper methods to Nanoc, the static site
|
60
|
+
|
29
61
|
generator, to simplify the process of making asset filenames unique. It helps
|
62
|
+
|
30
63
|
you output fingerprinted filenames, and refer to them from your source files.
|
31
|
-
|
64
|
+
|
65
|
+
|
32
66
|
It works on images, javascripts and stylesheets. It is extracted from the
|
67
|
+
|
33
68
|
nanoc-template project at http://github.com/avdgaag/nanoc-template.
|
34
69
|
|
35
|
-
|
70
|
+
'
|
71
|
+
email:
|
36
72
|
- arjan@arjanvandergaag.nl
|
37
73
|
executables: []
|
38
|
-
|
39
74
|
extensions: []
|
40
|
-
|
41
75
|
extra_rdoc_files: []
|
42
|
-
|
43
|
-
files:
|
76
|
+
files:
|
44
77
|
- .gitignore
|
45
78
|
- .rspec
|
79
|
+
- Gemfile
|
46
80
|
- HISTORY.md
|
47
81
|
- LICENSE
|
48
82
|
- README.md
|
49
83
|
- Rakefile
|
50
|
-
- lib/
|
51
|
-
- lib/
|
52
|
-
- lib/
|
53
|
-
- lib/
|
54
|
-
- lib/
|
55
|
-
- lib/
|
56
|
-
- lib/
|
84
|
+
- lib/nanoc/cachebuster.rb
|
85
|
+
- lib/nanoc/cachebuster/strategy.rb
|
86
|
+
- lib/nanoc/cachebuster/version.rb
|
87
|
+
- lib/nanoc/filters.rb
|
88
|
+
- lib/nanoc/filters/cache_buster.rb
|
89
|
+
- lib/nanoc/helpers.rb
|
90
|
+
- lib/nanoc/helpers/cache_busting.rb
|
57
91
|
- nanoc-cachebuster.gemspec
|
58
|
-
- spec/
|
59
|
-
- spec/
|
92
|
+
- spec/nanoc/filters/cache_buster_spec.rb
|
93
|
+
- spec/nanoc/helpers/cache_busting_spec.rb
|
60
94
|
- spec/spec_helper.rb
|
61
95
|
homepage: http://github.com/avdgaag/nanoc_cachebuster
|
62
96
|
licenses: []
|
63
|
-
|
64
97
|
post_install_message:
|
65
98
|
rdoc_options: []
|
66
|
-
|
67
|
-
require_paths:
|
99
|
+
require_paths:
|
68
100
|
- lib
|
69
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
101
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
70
102
|
none: false
|
71
|
-
requirements:
|
72
|
-
- -
|
73
|
-
- !ruby/object:Gem::Version
|
74
|
-
|
75
|
-
segments:
|
103
|
+
requirements:
|
104
|
+
- - ! '>='
|
105
|
+
- !ruby/object:Gem::Version
|
106
|
+
version: '0'
|
107
|
+
segments:
|
76
108
|
- 0
|
77
|
-
|
78
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
109
|
+
hash: -1070542068596424145
|
110
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
79
111
|
none: false
|
80
|
-
requirements:
|
81
|
-
- -
|
82
|
-
- !ruby/object:Gem::Version
|
83
|
-
|
84
|
-
segments:
|
112
|
+
requirements:
|
113
|
+
- - ! '>='
|
114
|
+
- !ruby/object:Gem::Version
|
115
|
+
version: '0'
|
116
|
+
segments:
|
85
117
|
- 0
|
86
|
-
|
118
|
+
hash: -1070542068596424145
|
87
119
|
requirements: []
|
88
|
-
|
89
120
|
rubyforge_project: nanoc-cachebuster
|
90
|
-
rubygems_version: 1.
|
121
|
+
rubygems_version: 1.8.15
|
91
122
|
signing_key:
|
92
123
|
specification_version: 3
|
93
124
|
summary: Adds filters and helpers for cache busting to Nanoc
|
94
|
-
test_files:
|
95
|
-
- spec/
|
96
|
-
- spec/
|
125
|
+
test_files:
|
126
|
+
- spec/nanoc/filters/cache_buster_spec.rb
|
127
|
+
- spec/nanoc/helpers/cache_busting_spec.rb
|
97
128
|
- spec/spec_helper.rb
|
98
|
-
has_rdoc:
|
data/lib/nanoc3/filters.rb
DELETED
data/lib/nanoc3/helpers.rb
DELETED