-
Notifications
You must be signed in to change notification settings - Fork 22
/
manifest.rb
105 lines (81 loc) · 2.51 KB
/
manifest.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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
module Slideshow
module Manifest
def load_manifest_core( path )
manifest = []
File.open( path ).readlines.each_with_index do |line,i|
case line
when /^\s*$/
# skip empty lines
when /^\s*#.*$/
# skip comment lines
else
logger.debug "line #{i+1}: #{line.strip}"
values = line.strip.split( /[ <,+]+/ )
# add source for shortcuts (assumes relative path; if not issue warning/error)
values << values[0] if values.size == 1
manifest << values
end
end
manifest
end
def load_manifest( path )
filename = path
puts " Loading template manifest #{filename}..."
manifest = load_manifest_core( filename )
# post-processing
# normalize all source paths (1..-1) /make full path/add template dir
templatesdir = File.dirname( path )
logger.debug "templatesdir=#{templatesdir}"
manifest.each do |values|
(1..values.size-1).each do |i|
values[i] = "#{templatesdir}/#{values[i]}"
logger.debug " path[#{i}]=>#{values[i]}<"
end
end
manifest
end
def find_manifests( patterns )
manifests = []
patterns.each do |pattern|
pattern.gsub!( '\\', '/') # normalize path; make sure all path use / only
logger.debug "Checking #{pattern}"
Dir.glob( pattern ) do |file|
logger.debug " Found manifest: #{file}"
manifests << [ File.basename( file ), file ]
end
end
manifests
end
def installed_generator_manifests
# 1) search gem/templates
builtin_patterns = [
"#{Slideshow.root}/templates/*.txt.gen"
]
find_manifests( builtin_patterns )
end
def installed_template_manifests
# 1) search ./templates
# 2) search config_dir/templates
# 3) search gem/templates
builtin_patterns = [
"#{Slideshow.root}/templates/*.txt"
]
config_patterns = [
"#{config_dir}/templates/*.txt",
"#{config_dir}/templates/*/*.txt"
]
current_patterns = [
"templates/*.txt",
"templates/*/*.txt"
]
patterns = []
patterns += current_patterns unless Slideshow.root == File.expand_path( '.' ) # don't include working dir if we test code from repo (don't include slideshow/templates)
patterns += config_patterns
patterns += builtin_patterns
find_manifests( patterns )
end
end # module Manifest
end # module Slideshow
class Slideshow::Gen
include Slideshow::Manifest
end