/
static.rb
55 lines (43 loc) · 1.23 KB
/
static.rb
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
require 'digest/sha1'
module Nanoc3::DataSources
class Static < Nanoc3::DataSource
identifier :static
def items
# Get prefix
prefix = config[:prefix] || 'static'
# Get all files under prefix dir
filenames = Dir[prefix + '/**/*'].select { |f| File.file?(f) }
# Convert filenames to items
filenames.map do |filename|
attributes = {
:extension => File.extname(filename)[1..-1],
:filename => filename,
}
identifier = filename[(prefix.length+1)..-1] + '/'
mtime = File.mtime(filename)
checksum = checksum_for(filename)
Nanoc3::Item.new(
filename,
attributes,
identifier,
:binary => true, :mtime => mtime, :checksum => checksum
)
end
end
private
# Returns a checksum of the given filenames
# TODO un-duplicate this somewhere
def checksum_for(*filenames)
filenames.flatten.map do |filename|
digest = Digest::SHA1.new
File.open(filename, 'r') do |io|
until io.eof
data = io.readpartial(2**10)
digest.update(data)
end
end
digest.hexdigest
end.join('-')
end
end
end