dokkit 0.2.0 → 0.3.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/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
|