dokkit 0.2.0 → 0.3.0
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +125 -0
- data/README.txt +53 -0
- data/Rakefile +25 -167
- data/bin/dokkit +4 -60
- data/lib/dokkit/app.rb +63 -192
- data/lib/dokkit/builtintask.rb +85 -0
- data/lib/dokkit/cachemanager.rb +61 -0
- data/lib/dokkit/cleantask.rb +51 -0
- data/lib/dokkit/consolelog.rb +42 -0
- data/lib/dokkit/defaults.rb +19 -0
- data/lib/dokkit/document.rb +221 -0
- data/lib/dokkit/dokkitlib.rb +68 -0
- data/lib/dokkit/extension/extension.rb +15 -0
- data/lib/dokkit/extension/filehelper.rb +25 -0
- data/lib/dokkit/fileselection.rb +44 -0
- data/lib/dokkit/filters/all.rb +18 -0
- data/lib/dokkit/filters/base.rb +18 -0
- data/lib/dokkit/filters/deplate.rb +21 -25
- data/lib/dokkit/filters/maruku.rb +23 -0
- data/lib/dokkit/filters/nil.rb +23 -0
- data/lib/dokkit/filters.rb +29 -21
- data/lib/dokkit/logger.rb +73 -0
- data/lib/dokkit/model.rb +34 -0
- data/lib/dokkit/models/{Rakefile.tpl → simpledocument/model/Rakefile} +15 -2
- data/lib/dokkit/models/simpledocument/model/doc/configs/simpledocument.yaml +3 -0
- data/lib/dokkit/models/simpledocument/model/doc/layouts/simpledocument.html +9 -0
- data/lib/dokkit/models/simpledocument/model/doc/layouts/simpledocument.latex +8 -0
- data/lib/dokkit/models/simpledocument/model/doc/layouts/simpledocument.text +1 -0
- data/lib/dokkit/models/simpledocument/model/doc/pages/simpledocument.deplate +102 -0
- data/lib/dokkit/models/simpledocument/model/tasks/all.rb +3 -0
- data/lib/dokkit/models/simpledocument/model/tasks/clean.rake +3 -0
- data/lib/dokkit/models/simpledocument/model/tasks/render.rake +8 -0
- data/lib/dokkit/models/simpledocument/model/tasks/setup.rb +9 -0
- data/lib/dokkit/modeltask.rb +83 -0
- data/lib/dokkit/pathhelper.rb +46 -0
- data/lib/dokkit/recursivemerge.rb +59 -0
- data/lib/dokkit/rendertask.rb +101 -0
- data/lib/dokkit/resourcemanager.rb +177 -0
- data/lib/dokkit/taskconfig.rb +39 -0
- data/lib/dokkit/templatetask.rb +37 -0
- data/lib/dokkit.rb +2 -8
- data/spec/app_spec.rb +55 -0
- data/spec/builtintask_spec.rb +114 -0
- data/spec/cachemanager_spec.rb +107 -0
- data/spec/cleantask_spec.rb +72 -0
- data/spec/consolelog_spec.rb +69 -0
- data/{tests/data/projects/simple-document → spec/data/test_build}/Rakefile +8 -8
- data/spec/data/test_build/doc/configs/document_1.yaml +3 -0
- data/spec/data/test_build/doc/configs/required.yaml +3 -0
- data/spec/data/test_build/doc/configs/subdir/document_4.yaml +3 -0
- data/spec/data/test_build/doc/layouts/document_1.html +9 -0
- data/spec/data/test_build/doc/layouts/document_1.latex +8 -0
- data/spec/data/test_build/doc/layouts/document_with_partials.html +9 -0
- data/spec/data/test_build/doc/layouts/layout +0 -0
- data/spec/data/test_build/doc/layouts/layout.html +8 -0
- data/spec/data/test_build/doc/layouts/layout.html.backup +8 -0
- data/spec/data/test_build/doc/layouts/nested.html +3 -0
- data/spec/data/test_build/doc/layouts/partials/partial.html +4 -0
- data/spec/data/test_build/doc/pages/COMMON.yaml +6 -0
- data/spec/data/test_build/doc/pages/document_1 +20 -0
- data/spec/data/test_build/doc/pages/document_1.dep +4 -0
- data/spec/data/test_build/doc/pages/document_1.yaml +11 -0
- data/spec/data/test_build/doc/pages/document_2 +9 -0
- data/spec/data/test_build/doc/pages/document_2.dep +0 -0
- data/spec/data/test_build/doc/pages/document_2.yaml +6 -0
- data/spec/data/test_build/doc/pages/document_3 +13 -0
- data/spec/data/test_build/doc/pages/document_5.exclude +0 -0
- data/spec/data/test_build/doc/pages/document_7 +4 -0
- data/spec/data/test_build/doc/pages/document_7.yaml +5 -0
- data/spec/data/test_build/doc/pages/document_extended +1 -0
- data/spec/data/test_build/doc/pages/document_nested +6 -0
- data/spec/data/test_build/doc/pages/document_nested.yaml +5 -0
- data/spec/data/test_build/doc/pages/document_nolayout.ext +3 -0
- data/spec/data/test_build/doc/pages/document_nolayout.yaml +2 -0
- data/spec/data/test_build/doc/pages/document_with_partials +3 -0
- data/spec/data/test_build/doc/pages/document_with_partials.yaml +2 -0
- data/spec/data/test_build/doc/pages/partials/COMMON.yaml +5 -0
- data/spec/data/test_build/doc/pages/partials/circular_partial +2 -0
- data/spec/data/test_build/doc/pages/partials/circular_partial.yaml +3 -0
- data/spec/data/test_build/doc/pages/partials/partial +2 -0
- data/spec/data/test_build/doc/pages/subdir/COMMON.yaml +2 -0
- data/spec/data/test_build/doc/pages/subdir/document_4 +11 -0
- data/spec/data/test_build/doc/pages/subdir/subdir/COMMON.yaml +2 -0
- data/spec/data/test_build/doc/pages/subdir/subdir/document_6 +3 -0
- data/spec/data/test_build/tasks/all.rb +3 -0
- data/spec/data/test_build/tasks/clean.rake +3 -0
- data/spec/data/test_build/tasks/render.rake +8 -0
- data/spec/data/test_build/tasks/setup.rb +9 -0
- data/spec/data/test_build/tasks/template.rake +3 -0
- data/spec/data/test_build/templates/layouts/layout +0 -0
- data/spec/data/test_build/templates/pages/template +0 -0
- data/spec/document_spec.rb +321 -0
- data/spec/dokkitlib_spec.rb +63 -0
- data/spec/filehelper_spec.rb +34 -0
- data/spec/fileselection_spec.rb +101 -0
- data/spec/filter_base_spec.rb +29 -0
- data/spec/filter_deplate_spec.rb +48 -0
- data/spec/filter_maruku_spec.rb +29 -0
- data/spec/filter_nil_spec.rb +30 -0
- data/spec/filters_spec.rb +37 -0
- data/spec/logger_spec.rb +150 -0
- data/spec/model_spec.rb +45 -0
- data/spec/pathhelper_spec.rb +62 -0
- data/spec/recursivemerge_spec.rb +91 -0
- data/spec/rendertask_spec.rb +374 -0
- data/spec/spec_helper.rb +61 -0
- data/spec/taskconfig_spec.rb +45 -0
- data/spec/templatetask_spec.rb +72 -0
- data/tasks/annotations.rake +30 -0
- data/tasks/doc.rake +49 -0
- data/tasks/gem.rake +89 -0
- data/tasks/manifest.rake +41 -0
- data/tasks/rubyforge.rake +57 -0
- data/tasks/setup.rb +151 -0
- data/tasks/spec.rake +40 -0
- data/tasks/svn.rake +44 -0
- data/tasks/test.rake +40 -0
- metadata +188 -161
- data/CHANGES +0 -26
- data/LICENSE +0 -674
- data/README +0 -32
- data/lib/dokkit/#render_task_factory.rb# +0 -94
- data/lib/dokkit/dokkittasks.rb +0 -99
- data/lib/dokkit/hash.rb +0 -41
- data/lib/dokkit/models/share/builtin.rf +0 -28
- data/lib/dokkit/page.rb +0 -195
- data/lib/dokkit/render_task_factory.rb +0 -91
- data/tests/data/output/simple_document/README +0 -57
- data/tests/data/output/simple_document/Rakefile +0 -7
- data/tests/data/output/simple_document/doc/config/simple_document.yaml +0 -5
- data/tests/data/output/simple_document/doc/pages/simple_document.dpl +0 -12
- data/tests/data/output/website_project/README +0 -49
- data/tests/data/output/website_project/Rakefile +0 -82
- data/tests/data/output/website_project/doc/layouts/normal.thtml +0 -38
- data/tests/data/output/website_project/doc/pages/COMMON.rb +0 -9
- data/tests/data/output/website_project/doc/pages/deplate.dplhtml +0 -9
- data/tests/data/output/website_project/doc/pages/index.rb +0 -10
- data/tests/data/output/website_project/doc/pages/index.thtml +0 -12
- data/tests/data/output/website_project/doc/res/images/rote-tiny.png +0 -0
- data/tests/data/projects/simple-document/README +0 -57
- data/tests/data/projects/simple-document/doc/config/author.yaml +0 -4
- data/tests/data/projects/simple-document/doc/config/model.yaml +0 -18
- data/tests/data/projects/simple-document/doc/config/simple_document.yaml +0 -6
- data/tests/data/projects/simple-document/doc/layouts/another_simple_document.html +0 -8
- data/tests/data/projects/simple-document/doc/layouts/another_simple_document.tex +0 -10
- data/tests/data/projects/simple-document/doc/layouts/layout_with_custom_name.html +0 -8
- data/tests/data/projects/simple-document/doc/layouts/semantic.cache +0 -23
- data/tests/data/projects/simple-document/doc/pages/COMMON.yaml +0 -23
- data/tests/data/projects/simple-document/doc/pages/another_simple_document.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/simple_document.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/simple_document_without_layout.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/subdir/COMMON.yaml +0 -4
- data/tests/data/projects/simple-document/doc/pages/subdir/simple_document_in_subdir.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/subdir/simple_document_in_subdir.yaml +0 -3
- data/tests/data/projects/simple-document/doc/pages/subdir/subdir/COMMON.yaml +0 -2
- data/tests/data/projects/simple-document/doc/pages/subdir/subdir/another_simple_document_in_subdir.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/yet_another_simple_document.dpl +0 -12
- data/tests/data/projects/simple-document/doc/pages/yet_another_simple_document.yaml +0 -8
- data/tests/gem_tests.rb +0 -4
- data/tests/spec_page.rb +0 -25
- data/tests/test.rb +0 -2
- data/tests/test_application.rb +0 -40
- data/tests/test_builtin_tasks.rb +0 -37
- data/tests/test_config.rb +0 -108
- data/tests/test_core.rb +0 -12
- data/tests/test_dokkit_commandline.rb +0 -18
- data/tests/test_exception.rb +0 -7
- data/tests/test_filters.rb +0 -46
- data/tests/test_layout.rb +0 -64
- data/tests/test_options.rb +0 -33
- data/tests/test_project_tasks.rb +0 -48
- data/tests/test_recursive_merge.rb +0 -42
- data/tests/test_task_factory.rb +0 -38
- /data/{CONTRIBUTORS → lib/dokkit/models/simpledocument/model/doc/data/css/style.css} +0 -0
- /data/{DONE → spec/data/test_build/doc/data/resource} +0 -0
- /data/{TODO → spec/data/test_build/doc/data/resource.exclude} +0 -0
- /data/{tests/pages/test.dpltex → spec/data/test_build/doc/data/subdir/resource.insubdir} +0 -0
data/lib/dokkit/app.rb
CHANGED
@@ -3,96 +3,41 @@
|
|
3
3
|
#
|
4
4
|
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
5
5
|
#
|
6
|
-
# (C)
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
7
7
|
#
|
8
8
|
|
9
9
|
require 'optparse'
|
10
10
|
require 'rake'
|
11
|
+
require 'dokkit/model'
|
12
|
+
require 'dokkit/logger'
|
13
|
+
require 'dokkit/consolelog'
|
14
|
+
require 'dokkit/builtintask'
|
11
15
|
|
12
16
|
module Dokkit
|
13
|
-
#
|
14
|
-
|
15
|
-
# The path from which to load the built-in layout of the model.
|
16
|
-
MODEL_LAYOUT_PATH = 'lib/doc/layouts'
|
17
|
-
# The path from which to load the built-in config of the model.
|
18
|
-
MODEL_CONFIG_PATH = 'lib/doc/config'
|
19
|
-
# Dokkit module singleton methods.
|
17
|
+
# Master Dokkit version. Manage this from the Rake release support.
|
18
|
+
DOKKITVERSION = '0.3.0'
|
20
19
|
class << self
|
21
|
-
# Current Dokkit Application
|
22
20
|
def application
|
23
|
-
@application ||=
|
21
|
+
@application ||= Application.new
|
24
22
|
end
|
25
|
-
|
26
|
-
|
27
|
-
@application = app
|
23
|
+
def release
|
24
|
+
@application = Rake.application = nil
|
28
25
|
end
|
29
|
-
|
30
|
-
def original_dir
|
31
|
-
application.original_dir
|
32
|
-
end
|
33
|
-
def dokkit_lib
|
34
|
-
lib = nil
|
35
|
-
unless lib = ENV['DOKKIT_LIB']
|
36
|
-
$:.each do |it|
|
37
|
-
if File.exists?(File.join(it,'dokkit/dokkittasks.rb'))
|
38
|
-
lib = it
|
39
|
-
break
|
40
|
-
end
|
41
|
-
end
|
42
|
-
end
|
43
|
-
lib
|
44
|
-
end
|
45
|
-
# Return the directory containing models related files.
|
46
|
-
def projects_dir
|
47
|
-
File.join(dokkit_lib, 'dokkit', 'models')
|
48
|
-
end
|
49
|
-
|
50
|
-
def fetch_models
|
51
|
-
models = { }
|
52
|
-
Dir["#{Gem.dir}/gems/dokkit-model-*"].each do |path|
|
53
|
-
path.scan(/dokkit-model-(.+)-(\d\.\d\.\d)/) { models[$1] = path }
|
54
|
-
end
|
55
|
-
Dir["#{File.expand_path("~/.dokkit/models/*")}"].each do |path|
|
56
|
-
path.scan(/.dokkit\/models\/(.+)/) { models[$1] = path }
|
57
|
-
end
|
58
|
-
models
|
59
|
-
end
|
60
|
-
# Return the full path from where to copy the model.
|
61
|
-
def model_dir(model)
|
62
|
-
File.join(fetch_models[model], MODEL_PATH)
|
63
|
-
end
|
64
|
-
# Return the full path from where to copy the model.
|
65
|
-
def model_layout_dir(model)
|
66
|
-
File.join(fetch_models[model], MODEL_LAYOUT_PATH)
|
67
|
-
end
|
68
|
-
# Return the full path from where to copy the model.
|
69
|
-
def model_config_dir(model)
|
70
|
-
File.join(fetch_models[model], MODEL_CONFIG_PATH)
|
71
|
-
end
|
72
|
-
# Return the directory containing the tests
|
73
|
-
def tests_dir
|
74
|
-
File.expand_path(File.join(dokkit_lib, '..', 'tests'))
|
75
|
-
end
|
76
|
-
end
|
77
|
-
|
78
|
-
# Command-line launcher for Dokkit.
|
26
|
+
end
|
79
27
|
class Application
|
80
|
-
|
81
|
-
attr_accessor :dokkit_lib
|
82
|
-
|
83
|
-
DEFAULT_PROJECT_MODEL = "simpledocument"
|
28
|
+
DEFAULT_MODEL = 'simpledocument'
|
84
29
|
USAGE_PREAMBLE = <<-EOU
|
85
30
|
Usage: dokkit [options] [task1] .. [taskN]
|
86
31
|
|
87
|
-
Where [taskN] is a valid task or target name for the current
|
88
|
-
|
89
|
-
|
90
|
-
a list of valid tasks.
|
32
|
+
Where [taskN] is a valid task or target name for the current model.
|
33
|
+
dokkit generates defines a number of top-level tasks for various
|
34
|
+
things. Use the '--tasks' option to get a list of valid tasks.
|
91
35
|
|
92
|
-
In addition to the standard
|
93
|
-
local configuration, the following
|
36
|
+
In addition to the standard tasks and those provided by any
|
37
|
+
local configuration, the following builtin tasks are recognised:
|
94
38
|
|
95
|
-
create
|
39
|
+
create[model] modeldir Create a blank project based on model template.
|
40
|
+
list List the models available.
|
96
41
|
|
97
42
|
In non-standard environments, it may be necessary to set the DOKKIT_LIB
|
98
43
|
variable to point to the location of Dokkit libraries.
|
@@ -103,144 +48,53 @@ EOU
|
|
103
48
|
"Display usage information." ],
|
104
49
|
[ "--help", "-h", GetoptLong::NO_ARGUMENT,
|
105
50
|
"Synonim for usage."],
|
106
|
-
[ "--project", "-P", GetoptLong::REQUIRED_ARGUMENT,
|
107
|
-
"Set the PROJECT model to create. Use --list for the full list of project models available."],
|
108
|
-
[ "--directory","-D", GetoptLong::REQUIRED_ARGUMENT,
|
109
|
-
"Change to directory DIR before reading the rakefiles or doing anything else."],
|
110
|
-
[ "--list", "-l", GetoptLong::NO_ARGUMENT,
|
111
|
-
"Display the list of the project models available." ],
|
112
51
|
[ "--version", "-V", GetoptLong::NO_ARGUMENT,
|
113
52
|
"Display the version number and quit." ],
|
114
53
|
[ "--trace", "-t", GetoptLong::NO_ARGUMENT,
|
115
54
|
"Enable trace-level output (debugging)"],
|
116
55
|
[ "--tasks", "-T", GetoptLong::NO_ARGUMENT,
|
117
56
|
"Display the list of the tasks available."],
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
|
125
|
-
|
126
|
-
|
127
|
-
def initialize(dokkit_lib) # :yield: self if block_given?
|
128
|
-
# init vars
|
129
|
-
@dokkit_lib = dokkit_lib
|
130
|
-
ENV['PROJECT'] = @project = DEFAULT_PROJECT_MODEL
|
131
|
-
yield self if block_given?
|
132
|
-
end
|
133
|
-
# Application options from the command line
|
134
|
-
def options
|
135
|
-
@options ||= OpenStruct.new
|
136
|
-
end
|
137
|
-
# set an option
|
138
|
-
def do_option(opt,value)
|
139
|
-
case opt
|
140
|
-
when '--version'
|
141
|
-
options.version = true
|
142
|
-
print "dokkit, version #{DOKKITVERSION}\n"
|
143
|
-
exit
|
144
|
-
when '--directory'
|
145
|
-
options.directory = value
|
146
|
-
Dir.chdir(options.directory)
|
147
|
-
when '--tasks'
|
148
|
-
options.tasks = true
|
149
|
-
Rake.application.do_option('--tasks', nil)
|
150
|
-
when '--project'
|
151
|
-
ENV['PROJECT'] = @project = options.project = value
|
152
|
-
when '--list'
|
153
|
-
options.list_projects = true
|
154
|
-
Dokkit.fetch_models.each_key { |key| puts key }
|
155
|
-
exit
|
57
|
+
]
|
58
|
+
attr_reader :builtintask, :logger
|
59
|
+
def initialize
|
60
|
+
@rake = Rake.application
|
61
|
+
@logger = Log::ConsoleLog.consolelog
|
62
|
+
@builtintask = Dokkit::BuiltinTask.new(self)
|
63
|
+
end
|
64
|
+
def do_option(option, value)
|
65
|
+
case option
|
156
66
|
when '--usage'
|
157
|
-
options.usage = options.help = true
|
158
67
|
help
|
159
68
|
exit
|
160
69
|
when '--help'
|
161
|
-
options.usage = options.help = true
|
162
70
|
help
|
163
|
-
exit
|
164
|
-
when '--
|
165
|
-
|
166
|
-
|
167
|
-
when '--
|
168
|
-
|
169
|
-
Rake.application.do_option('--trace', nil)
|
170
|
-
end
|
171
|
-
end
|
172
|
-
|
173
|
-
def init
|
174
|
-
Rake.application.init('dokkit')
|
175
|
-
end
|
176
|
-
|
177
|
-
def clear
|
178
|
-
Rake.application.clear
|
179
|
-
end
|
180
|
-
|
181
|
-
def load_rakefile
|
182
|
-
Rake.application.init('dokkit')
|
183
|
-
Rake.application.load_rakefile
|
184
|
-
end
|
185
|
-
def load_builtin
|
186
|
-
raise "#{@project} model not found!" unless model_dir = Dokkit.fetch_models[@project]
|
187
|
-
Dir["#{File.join(model_dir, 'lib/tasks/builtin')}/*.{rake,rf}"].each { |name| Rake.application.add_import name }
|
188
|
-
Rake.application.load_imports
|
189
|
-
end
|
190
|
-
def [](task_name)
|
191
|
-
Rake.application[task_name]
|
192
|
-
end
|
193
|
-
|
194
|
-
def task_defined?(task)
|
195
|
-
Rake.application.task_defined?(task)
|
196
|
-
end
|
197
|
-
# check if a Rakefile exists in the current directory or in any parent directory.
|
198
|
-
def have_rakefile
|
199
|
-
Rake.application.have_rakefile
|
200
|
-
end
|
201
|
-
# search for a Rakefile in the current directory and in all parent directory.
|
202
|
-
def search_for_rakefile
|
203
|
-
initial_dir = here = Dir.pwd
|
204
|
-
while ! have_rakefile
|
205
|
-
Dir.chdir("..")
|
206
|
-
if Dir.pwd == here || options.nosearch
|
207
|
-
Dir.chdir(initial_dir)
|
208
|
-
return false
|
209
|
-
end
|
210
|
-
here = Dir.pwd
|
71
|
+
exit
|
72
|
+
when '--version'
|
73
|
+
print "dokkit, version #{DOKKITVERSION}\n"
|
74
|
+
exit
|
75
|
+
when '--tasks'
|
76
|
+
@rake.do_option('--tasks', value)
|
211
77
|
end
|
212
|
-
Dir.chdir(initial_dir)
|
213
|
-
true
|
214
78
|
end
|
215
|
-
|
216
|
-
|
217
|
-
|
218
|
-
|
219
|
-
|
220
|
-
ARGV.clear
|
221
|
-
ARGV.concat(args)
|
222
|
-
end
|
223
|
-
process_args
|
224
|
-
init
|
225
|
-
load_builtin
|
226
|
-
Rake.application.load_rakefile if search_for_rakefile
|
227
|
-
Rake.application.top_level
|
228
|
-
Rake.application = nil
|
229
|
-
end
|
79
|
+
def run
|
80
|
+
process_args
|
81
|
+
@rake.init('dokkit')
|
82
|
+
@rake.load_rakefile if search_for_rakefile
|
83
|
+
@rake.top_level
|
230
84
|
end
|
231
85
|
|
232
86
|
private
|
233
|
-
|
87
|
+
|
234
88
|
def command_line_options
|
235
89
|
OPTIONS.collect { |lst| lst[0..-2] }
|
236
90
|
end
|
237
|
-
|
238
|
-
# Process commandline
|
239
91
|
def process_args
|
240
92
|
opts = GetoptLong.new(*command_line_options)
|
241
93
|
opts.each { |opt, value| do_option(opt, value) }
|
242
94
|
end
|
243
|
-
|
95
|
+
def version
|
96
|
+
DOKKITVERSION
|
97
|
+
end
|
244
98
|
def help
|
245
99
|
puts USAGE_PREAMBLE
|
246
100
|
puts "Recognized options are:"
|
@@ -255,6 +109,23 @@ EOU
|
|
255
109
|
printf " %s\n", desc
|
256
110
|
end
|
257
111
|
end
|
258
|
-
|
259
|
-
|
260
|
-
|
112
|
+
# check if a Rakefile exists in the current directory or in any parent directory.
|
113
|
+
def have_rakefile
|
114
|
+
@rake.have_rakefile
|
115
|
+
end
|
116
|
+
# search for a Rakefile in the current directory and in all parent directory.
|
117
|
+
def search_for_rakefile
|
118
|
+
initial_dir = here = Dir.pwd
|
119
|
+
while ! have_rakefile
|
120
|
+
Dir.chdir("..")
|
121
|
+
if Dir.pwd == here
|
122
|
+
Dir.chdir(initial_dir)
|
123
|
+
return false
|
124
|
+
end
|
125
|
+
here = Dir.pwd
|
126
|
+
end
|
127
|
+
Dir.chdir(initial_dir)
|
128
|
+
true
|
129
|
+
end
|
130
|
+
end
|
131
|
+
end
|
@@ -0,0 +1,85 @@
|
|
1
|
+
#
|
2
|
+
# File 'modeltask.rb' created on 23 feb 2008 at 20:45:10.
|
3
|
+
#
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
5
|
+
#
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'yaml'
|
10
|
+
require 'dokkit'
|
11
|
+
|
12
|
+
module Dokkit
|
13
|
+
class BuiltinTask
|
14
|
+
attr_reader :models, :local_dir, :search_in
|
15
|
+
def initialize(application)
|
16
|
+
@application = application
|
17
|
+
@local_dir = DEFAULT_LOCAL_DIR
|
18
|
+
@search_in = [:dokkit_dir, :local_dir]
|
19
|
+
@logger = @application.logger
|
20
|
+
@models = fetch_models
|
21
|
+
define_builtin_tasks
|
22
|
+
end
|
23
|
+
def dokkit_dir
|
24
|
+
lib = nil
|
25
|
+
unless lib = ENV['DOKKIT_LIB']
|
26
|
+
$:.each do |it|
|
27
|
+
if File.exists?(File.join(it, 'dokkit/app.rb'))
|
28
|
+
lib = it
|
29
|
+
break
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
lib
|
34
|
+
end
|
35
|
+
def builtin_model_dir
|
36
|
+
File.join(dokkit_dir, 'dokkit/models')
|
37
|
+
end
|
38
|
+
|
39
|
+
private
|
40
|
+
|
41
|
+
def define_builtin_tasks
|
42
|
+
define_list_model_task
|
43
|
+
define_create_task
|
44
|
+
end
|
45
|
+
def from_location(location)
|
46
|
+
return builtin_model_dir if location == :dokkit_dir
|
47
|
+
return File.join(((ENV['HOMEPATH'] if RUBY_PLATFORM =~ /win32/) || ENV['HOME']), @local_dir) if location == :local_dir
|
48
|
+
end
|
49
|
+
def fetch_models
|
50
|
+
models = { }
|
51
|
+
@search_in.each do |location|
|
52
|
+
Dir.glob(File.join(from_location(location), '**/model/Rakefile')).each do |model|
|
53
|
+
models[model.scan(/models\/(.*)\/model\/Rakefile/).flatten.to_s] = File.expand_path(File.join(File.dirname(model), '..'))
|
54
|
+
end
|
55
|
+
end
|
56
|
+
models
|
57
|
+
end
|
58
|
+
def define_list_model_task
|
59
|
+
desc 'List the installed models'
|
60
|
+
task 'list' do
|
61
|
+
@models.each do |modelname, path|
|
62
|
+
@logger.info("Found model '#{modelname}' in #{path}")
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
def define_create_task
|
67
|
+
desc 'Bootstrap a new documentation project'
|
68
|
+
task 'create', :model do |t, args|
|
69
|
+
model = args.model || DEFAULT_MODEL
|
70
|
+
if ARGV.size == 2
|
71
|
+
dest_dir = t.application.top_level_tasks.pop
|
72
|
+
else
|
73
|
+
@logger.error('A target directory must be provided.')
|
74
|
+
end
|
75
|
+
@logger.error("Directory '#{dest_dir}' exists.") if File.exists?(dest_dir)
|
76
|
+
@logger.error("Model '#{model}' not found.") unless @models[model]
|
77
|
+
@logger.info("Create '#{dest_dir}' based on '#{model}' model.")
|
78
|
+
cp_r(File.join(@models[model], 'model'), dest_dir, :verbose => false)
|
79
|
+
File.open(File.join(dest_dir, 'doc/configs/model.yaml'), 'w') do |file|
|
80
|
+
file << { 'name' => model, 'from' => @models[model] }.to_yaml
|
81
|
+
end
|
82
|
+
end
|
83
|
+
end
|
84
|
+
end
|
85
|
+
end
|
@@ -0,0 +1,61 @@
|
|
1
|
+
#
|
2
|
+
# File 'cachemanager.rb' created on 28 gen 2008 at 18:31:05.
|
3
|
+
#
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
5
|
+
#
|
6
|
+
# (C) 2006, 2007 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'singleton'
|
10
|
+
require 'rake'
|
11
|
+
require 'yaml'
|
12
|
+
|
13
|
+
module Dokkit
|
14
|
+
class CacheManager
|
15
|
+
include Singleton
|
16
|
+
def init(cache_filename = 'deps.yaml', cache_dir = '.cache')
|
17
|
+
@cache_filename = cache_filename
|
18
|
+
@cache_dir = cache_dir
|
19
|
+
@complete_cache_filename = File.join(cache_dir, cache_filename)
|
20
|
+
@deps = {}
|
21
|
+
load if File.exists?(@complete_cache_filename)
|
22
|
+
at_exit { save }
|
23
|
+
end
|
24
|
+
def add_dependency(task_name, dep)
|
25
|
+
@deps[task_name] ||= []
|
26
|
+
@deps[task_name] << dep unless (dep.nil? or @deps[task_name].include?(dep))
|
27
|
+
end
|
28
|
+
def load
|
29
|
+
File.open(@complete_cache_filename) do |file|
|
30
|
+
@deps = YAML::load(file)
|
31
|
+
@deps.each do |task, dep|
|
32
|
+
file task => dep
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
def save
|
37
|
+
unless @deps.empty?
|
38
|
+
mkdir_p(cache_dir, :verbose => false) unless File.exists?(cache_dir)
|
39
|
+
File.open(@complete_cache_filename, 'w') do |file|
|
40
|
+
file.write YAML::dump(@deps)
|
41
|
+
end
|
42
|
+
end
|
43
|
+
end
|
44
|
+
def clean_deps
|
45
|
+
@deps.clear
|
46
|
+
end
|
47
|
+
def clean
|
48
|
+
clean_deps
|
49
|
+
rm_rf(cache_dir, :verbose => false) unless cache_dir == '.'
|
50
|
+
end
|
51
|
+
def deps
|
52
|
+
@deps
|
53
|
+
end
|
54
|
+
def cache_dir
|
55
|
+
@cache_dir
|
56
|
+
end
|
57
|
+
def cache_filename
|
58
|
+
@cache_filename
|
59
|
+
end
|
60
|
+
end
|
61
|
+
end
|
@@ -0,0 +1,51 @@
|
|
1
|
+
#
|
2
|
+
# File 'cleantask.rb' created on 19 feb 2008 at 19:33:03.
|
3
|
+
#
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
5
|
+
#
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'rake/clean'
|
10
|
+
require 'dokkit/dokkitlib'
|
11
|
+
|
12
|
+
module Dokkit
|
13
|
+
class CleanTask < DokkitLib
|
14
|
+
def initialize(model, namespace = 'clean')
|
15
|
+
super(model, namespace)
|
16
|
+
end
|
17
|
+
|
18
|
+
private
|
19
|
+
|
20
|
+
def pre_block_configuration
|
21
|
+
@config.output_dir ||= Dokkit::DEFAULT_OUTPUT_DIR
|
22
|
+
@config.cache_dir ||= Dokkit::DEFAULT_CACHE_DIR
|
23
|
+
end
|
24
|
+
def define_dokkit_clean_output
|
25
|
+
desc 'Remove output directory'
|
26
|
+
dokkit_task :output do
|
27
|
+
if File.exists?(@config.output_dir)
|
28
|
+
@logger.info('Removing output directory')
|
29
|
+
rm_rf(@config.output_dir, :verbose => false)
|
30
|
+
end
|
31
|
+
end
|
32
|
+
end
|
33
|
+
def define_dokkit_clean_cache
|
34
|
+
desc 'Remove cache directory'
|
35
|
+
dokkit_task :cache do
|
36
|
+
if File.exists?(@model.cache.cache_dir)
|
37
|
+
@logger.info('Removing cache directory')
|
38
|
+
@model.cache.clean
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
def define_dokkit_clean_backup
|
43
|
+
desc 'Remove backup files (invoke rake:clean)'
|
44
|
+
dokkit_task :backup => ['rake:clean']
|
45
|
+
end
|
46
|
+
def define_dokkit_clean_all
|
47
|
+
desc 'Clobber all generated output and cache'
|
48
|
+
dokkit_task :all => [:output, :cache, :backup]
|
49
|
+
end
|
50
|
+
end
|
51
|
+
end
|
@@ -0,0 +1,42 @@
|
|
1
|
+
#
|
2
|
+
# File 'consolelog.rb' created on 23 feb 2008 at 16:39:59.
|
3
|
+
#
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
5
|
+
#
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
7
|
+
#
|
8
|
+
|
9
|
+
require 'dokkit/logger'
|
10
|
+
|
11
|
+
module Dokkit
|
12
|
+
module Log
|
13
|
+
class ConsoleLog
|
14
|
+
class << self
|
15
|
+
def consolelog
|
16
|
+
@consolelog ||= ConsoleLog.new(Logger.logger)
|
17
|
+
@consolelog.logger
|
18
|
+
end
|
19
|
+
end
|
20
|
+
attr_reader :logger
|
21
|
+
def initialize(logger)
|
22
|
+
@logger = logger
|
23
|
+
logger.attach(self)
|
24
|
+
end
|
25
|
+
def update
|
26
|
+
message = @logger.last_message
|
27
|
+
case message[:level]
|
28
|
+
when Log::ERROR
|
29
|
+
fail "[#{Time.now.asctime}][ERROR] #{message[:text]}"
|
30
|
+
when Log::WARNING
|
31
|
+
warn "[#{Time.now.asctime}][WARNING] #{message[:text]}"
|
32
|
+
when Log::INFO
|
33
|
+
puts "[#{Time.now.asctime}][INFO] #{message[:text]}"
|
34
|
+
when Log::DEBUG
|
35
|
+
puts "[#{Time.now.asctime}][DEBUG] #{message[:text]}"
|
36
|
+
end
|
37
|
+
message
|
38
|
+
end
|
39
|
+
end
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
@@ -0,0 +1,19 @@
|
|
1
|
+
#
|
2
|
+
# File 'defaults.rb' created on 20 feb 2008 at 19:31:57.
|
3
|
+
#
|
4
|
+
# See 'dokkit.rb' or +LICENSE+ for licence information.
|
5
|
+
#
|
6
|
+
# (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
|
7
|
+
#
|
8
|
+
|
9
|
+
module Dokkit
|
10
|
+
DEFAULT_DOCUMENT_DIR = 'doc/pages'
|
11
|
+
DEFAULT_DATA_DIR = 'doc/data'
|
12
|
+
DEFAULT_OUTPUT_DIR = 'output'
|
13
|
+
DEFAULT_LAYOUT_DIR = 'doc/layouts'
|
14
|
+
DEFAULT_CONFIG_DIR = 'doc/configs'
|
15
|
+
DEFAULT_TEMPLATE_DIR = 'templates'
|
16
|
+
DEFAULT_CACHE_DIR = '.cache'
|
17
|
+
DEFAULT_LOCAL_DIR = '.dokkit/models'
|
18
|
+
DEFAULT_MODEL = 'simpledocument'
|
19
|
+
end
|