dokkit 0.3.0 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (180) hide show
  1. data/History.txt +5 -0
  2. data/Manifest.txt +90 -105
  3. data/README.txt +27 -7
  4. data/Rakefile +2 -3
  5. data/bin/dokkit +3 -2
  6. data/lib/dokkit/application.rb +159 -0
  7. data/lib/dokkit/cache/cache.rb +53 -0
  8. data/lib/dokkit/{models/simpledocument/model/Rakefile → cache.rb} +3 -15
  9. data/lib/dokkit/environment/basic.rb +156 -0
  10. data/lib/dokkit/environment/helpers/extmap.rb +29 -0
  11. data/lib/dokkit/environment/helpers/fileselection.rb +53 -0
  12. data/lib/dokkit/environment/helpers.rb +20 -0
  13. data/{spec/data/test_build/Rakefile → lib/dokkit/environment.rb} +4 -15
  14. data/lib/dokkit/factory/factory.rb +56 -0
  15. data/lib/dokkit/factory.rb +9 -0
  16. data/lib/dokkit/filters/deplate.rb +25 -20
  17. data/lib/dokkit/filters/maruku.rb +6 -5
  18. data/lib/dokkit/filters/nil.rb +7 -6
  19. data/lib/dokkit/filters.rb +5 -27
  20. data/lib/dokkit/hash.rb +82 -0
  21. data/lib/dokkit/{logger.rb → logging/logger.rb} +30 -24
  22. data/lib/dokkit/logging/observers/console.rb +52 -0
  23. data/lib/dokkit/{extension/extension.rb → logging/observers.rb} +7 -5
  24. data/lib/dokkit/logging.rb +11 -0
  25. data/lib/dokkit/models/simple/Rakefile +6 -0
  26. data/lib/dokkit/models/simple/doc/data/html/css/style.css +3 -0
  27. data/lib/dokkit/models/simple/doc/data/latex/deplate.sty +46 -0
  28. data/lib/dokkit/models/simple/doc/layouts/simple.html +9 -0
  29. data/lib/dokkit/models/simple/doc/layouts/simple.latex +11 -0
  30. data/lib/dokkit/models/simple/doc/pages/simple.deplate +80 -0
  31. data/lib/dokkit/models/simple/setup/setup.rb +10 -0
  32. data/lib/dokkit/resource/data.rb +36 -0
  33. data/lib/dokkit/resource/document.rb +385 -0
  34. data/lib/dokkit/resource/extensions/builtin.rb +19 -0
  35. data/lib/dokkit/resource/extensions/html.rb +22 -0
  36. data/lib/dokkit/resource/extensions/url.rb +25 -0
  37. data/lib/dokkit/{filters/base.rb → resource/extensions.rb} +7 -8
  38. data/lib/dokkit/resource/filenamehelper.rb +28 -0
  39. data/lib/dokkit/resource.rb +11 -0
  40. data/lib/dokkit/tasklib/clean.rb +73 -0
  41. data/lib/dokkit/tasklib/render.rb +137 -0
  42. data/lib/dokkit/tasklib.rb +11 -0
  43. data/lib/dokkit.rb +26 -29
  44. data/spec/dokkit/application_spec.rb +141 -0
  45. data/spec/dokkit/cache/cache_spec.rb +87 -0
  46. data/spec/dokkit/dokkit_spec.rb +20 -0
  47. data/spec/dokkit/environment/basic_spec.rb +135 -0
  48. data/spec/dokkit/environment/helpers/extmap_spec.rb +52 -0
  49. data/spec/dokkit/environment/helpers/fileselection_spec.rb +80 -0
  50. data/spec/dokkit/environment/test_data/doc/pages/document_1.yaml +3 -0
  51. data/spec/dokkit/factory/factory_spec.rb +69 -0
  52. data/spec/{filter_deplate_spec.rb → dokkit/filters/deplate_spec.rb} +7 -8
  53. data/spec/{filter_maruku_spec.rb → dokkit/filters/maruku_spec.rb} +3 -4
  54. data/spec/{filter_nil_spec.rb → dokkit/filters/nil_spec.rb} +3 -4
  55. data/spec/{recursivemerge_spec.rb → dokkit/hash_spec.rb} +25 -27
  56. data/spec/{logger_spec.rb → dokkit/logging/logger_spec.rb} +35 -47
  57. data/spec/{consolelog_spec.rb → dokkit/logging/observers/console_spec.rb} +14 -15
  58. data/spec/dokkit/resource/data_spec.rb +32 -0
  59. data/spec/dokkit/resource/document_spec.rb +485 -0
  60. data/spec/dokkit/resource/extensions/html_spec.rb +35 -0
  61. data/spec/dokkit/resource/extensions/url_spec.rb +29 -0
  62. data/spec/{filehelper_spec.rb → dokkit/resource/filenamehelper_spec.rb} +12 -13
  63. data/spec/dokkit/resource/test_data/doc/configs/config_1.yaml +3 -0
  64. data/spec/dokkit/resource/test_data/doc/configs/config_2.yaml +3 -0
  65. data/spec/dokkit/resource/test_data/doc/configs/required.yaml +3 -0
  66. data/spec/dokkit/resource/test_data/doc/configs/subdir/document.yaml +3 -0
  67. data/spec/dokkit/resource/test_data/doc/layouts/container.html +6 -0
  68. data/spec/dokkit/resource/test_data/doc/layouts/layout.html +6 -0
  69. data/spec/{data/test_build/doc/layouts → dokkit/resource/test_data/doc/layouts/nested}/nested.html +2 -1
  70. data/spec/dokkit/resource/test_data/doc/layouts/subdir/document.html +6 -0
  71. data/spec/dokkit/resource/test_data/doc/pages/COMMON.yaml +4 -0
  72. data/spec/dokkit/resource/test_data/doc/pages/document_with_many_config.ext +7 -0
  73. data/spec/dokkit/resource/test_data/doc/pages/document_with_many_errors.ext +12 -0
  74. data/spec/dokkit/resource/test_data/doc/pages/document_with_many_targets.ext +19 -0
  75. data/spec/dokkit/resource/test_data/doc/pages/document_with_nested_layout.ext +13 -0
  76. data/spec/dokkit/resource/test_data/doc/pages/document_with_nil_target.ext +5 -0
  77. data/spec/dokkit/resource/test_data/doc/pages/document_with_not_defined_target.ext +6 -0
  78. data/spec/dokkit/resource/test_data/doc/pages/document_with_one_target.ext +8 -0
  79. data/spec/dokkit/resource/test_data/doc/pages/subdir/COMMON.yaml +3 -0
  80. data/spec/dokkit/resource/test_data/doc/pages/subdir/document.ext +8 -0
  81. data/spec/dokkit/resource/test_data/doc/pages/subdir/document.yaml +5 -0
  82. data/spec/dokkit/tasklib/clean_spec.rb +75 -0
  83. data/spec/dokkit/tasklib/render_spec.rb +125 -0
  84. data/spec/dokkit/tasklib/test_data/doc/pages/document_2 +0 -0
  85. data/spec/dokkit/test_data/dokkit/models/model1/doc/pages/model1 +0 -0
  86. data/spec/dokkit/test_data/dokkit/models/model2/doc/pages/model2 +0 -0
  87. data/spec/spec.opts +4 -0
  88. data/spec/spec_helper.rb +120 -47
  89. metadata +94 -117
  90. data/lib/dokkit/app.rb +0 -131
  91. data/lib/dokkit/builtintask.rb +0 -85
  92. data/lib/dokkit/cachemanager.rb +0 -61
  93. data/lib/dokkit/cleantask.rb +0 -51
  94. data/lib/dokkit/consolelog.rb +0 -42
  95. data/lib/dokkit/defaults.rb +0 -19
  96. data/lib/dokkit/deplate/fmt/html-notemplate.rb +0 -21
  97. data/lib/dokkit/deplate/fmt/latex-notemplate.rb +0 -24
  98. data/lib/dokkit/document.rb +0 -221
  99. data/lib/dokkit/dokkitlib.rb +0 -68
  100. data/lib/dokkit/extension/filehelper.rb +0 -25
  101. data/lib/dokkit/fileselection.rb +0 -44
  102. data/lib/dokkit/filters/all.rb +0 -18
  103. data/lib/dokkit/model.rb +0 -34
  104. data/lib/dokkit/models/simpledocument/model/doc/layouts/simpledocument.html +0 -9
  105. data/lib/dokkit/models/simpledocument/model/doc/pages/simpledocument.deplate +0 -102
  106. data/lib/dokkit/models/simpledocument/model/tasks/all.rb +0 -3
  107. data/lib/dokkit/models/simpledocument/model/tasks/clean.rake +0 -3
  108. data/lib/dokkit/models/simpledocument/model/tasks/render.rake +0 -8
  109. data/lib/dokkit/models/simpledocument/model/tasks/setup.rb +0 -9
  110. data/lib/dokkit/modeltask.rb +0 -83
  111. data/lib/dokkit/pathhelper.rb +0 -46
  112. data/lib/dokkit/recursivemerge.rb +0 -59
  113. data/lib/dokkit/rendertask.rb +0 -101
  114. data/lib/dokkit/resourcemanager.rb +0 -177
  115. data/lib/dokkit/taskconfig.rb +0 -39
  116. data/lib/dokkit/templatetask.rb +0 -37
  117. data/spec/app_spec.rb +0 -55
  118. data/spec/builtintask_spec.rb +0 -114
  119. data/spec/cachemanager_spec.rb +0 -107
  120. data/spec/cleantask_spec.rb +0 -72
  121. data/spec/data/test_build/doc/configs/document_1.yaml +0 -3
  122. data/spec/data/test_build/doc/configs/required.yaml +0 -3
  123. data/spec/data/test_build/doc/configs/subdir/document_4.yaml +0 -3
  124. data/spec/data/test_build/doc/layouts/document_1.html +0 -9
  125. data/spec/data/test_build/doc/layouts/document_with_partials.html +0 -9
  126. data/spec/data/test_build/doc/layouts/layout.html +0 -8
  127. data/spec/data/test_build/doc/layouts/layout.html.backup +0 -8
  128. data/spec/data/test_build/doc/layouts/partials/partial.html +0 -4
  129. data/spec/data/test_build/doc/pages/COMMON.yaml +0 -6
  130. data/spec/data/test_build/doc/pages/document_1 +0 -20
  131. data/spec/data/test_build/doc/pages/document_1.dep +0 -4
  132. data/spec/data/test_build/doc/pages/document_1.yaml +0 -11
  133. data/spec/data/test_build/doc/pages/document_2 +0 -9
  134. data/spec/data/test_build/doc/pages/document_2.yaml +0 -6
  135. data/spec/data/test_build/doc/pages/document_3 +0 -13
  136. data/spec/data/test_build/doc/pages/document_7 +0 -4
  137. data/spec/data/test_build/doc/pages/document_7.yaml +0 -5
  138. data/spec/data/test_build/doc/pages/document_extended +0 -1
  139. data/spec/data/test_build/doc/pages/document_nested +0 -6
  140. data/spec/data/test_build/doc/pages/document_nested.yaml +0 -5
  141. data/spec/data/test_build/doc/pages/document_nolayout.ext +0 -3
  142. data/spec/data/test_build/doc/pages/document_nolayout.yaml +0 -2
  143. data/spec/data/test_build/doc/pages/document_with_partials +0 -3
  144. data/spec/data/test_build/doc/pages/document_with_partials.yaml +0 -2
  145. data/spec/data/test_build/doc/pages/partials/COMMON.yaml +0 -5
  146. data/spec/data/test_build/doc/pages/partials/circular_partial +0 -2
  147. data/spec/data/test_build/doc/pages/partials/circular_partial.yaml +0 -3
  148. data/spec/data/test_build/doc/pages/partials/partial +0 -2
  149. data/spec/data/test_build/doc/pages/subdir/COMMON.yaml +0 -2
  150. data/spec/data/test_build/doc/pages/subdir/document_4 +0 -11
  151. data/spec/data/test_build/doc/pages/subdir/subdir/COMMON.yaml +0 -2
  152. data/spec/data/test_build/doc/pages/subdir/subdir/document_6 +0 -3
  153. data/spec/data/test_build/tasks/all.rb +0 -3
  154. data/spec/data/test_build/tasks/clean.rake +0 -3
  155. data/spec/data/test_build/tasks/render.rake +0 -8
  156. data/spec/data/test_build/tasks/setup.rb +0 -9
  157. data/spec/data/test_build/tasks/template.rake +0 -3
  158. data/spec/document_spec.rb +0 -321
  159. data/spec/dokkitlib_spec.rb +0 -63
  160. data/spec/fileselection_spec.rb +0 -101
  161. data/spec/filter_base_spec.rb +0 -29
  162. data/spec/filters_spec.rb +0 -37
  163. data/spec/model_spec.rb +0 -45
  164. data/spec/pathhelper_spec.rb +0 -62
  165. data/spec/rendertask_spec.rb +0 -374
  166. data/spec/taskconfig_spec.rb +0 -45
  167. data/spec/templatetask_spec.rb +0 -72
  168. /data/lib/dokkit/models/{simpledocument/model/doc/configs/simpledocument.yaml → simple/doc/configs/simple.yaml} +0 -0
  169. /data/lib/dokkit/models/{simpledocument/model/doc/layouts/simpledocument.text → simple/doc/layouts/simple.text} +0 -0
  170. /data/{lib/dokkit/models/simpledocument/model/doc/data/css/style.css → spec/dokkit/environment/helpers/test_data/doc/pages/document_1.ext_1} +0 -0
  171. /data/spec/{data/test_build/doc/data/resource → dokkit/environment/helpers/test_data/doc/pages/document_2} +0 -0
  172. /data/spec/{data/test_build/doc/data/resource.exclude → dokkit/environment/helpers/test_data/doc/pages/document_3.ext_3} +0 -0
  173. /data/spec/{data/test_build/doc/data/subdir/resource.insubdir → dokkit/environment/test_data/doc/data/data} +0 -0
  174. /data/spec/{data/test_build/doc/layouts/layout → dokkit/environment/test_data/doc/pages/document_1} +0 -0
  175. /data/spec/{data/test_build/doc/pages/document_2.dep → dokkit/environment/test_data/doc/pages/document_2} +0 -0
  176. /data/spec/{data/test_build/doc/pages/document_5.exclude → dokkit/environment/test_data/doc/pages/subdir/document_1} +0 -0
  177. /data/{lib/dokkit/models/simpledocument/model/doc/layouts/simpledocument.latex → spec/dokkit/resource/test_data/doc/layouts/layout.latex} +0 -0
  178. /data/spec/{data/test_build/doc/layouts/document_1.latex → dokkit/resource/test_data/doc/layouts/subdir/document.latex} +0 -0
  179. /data/spec/{data/test_build/templates/layouts/layout → dokkit/tasklib/test_data/doc/data/data_1} +0 -0
  180. /data/spec/{data/test_build/templates/pages/template → dokkit/tasklib/test_data/doc/pages/document_1} +0 -0
@@ -0,0 +1,19 @@
1
+ #
2
+ # File 'builtin.rb' created on 21 giu 2008 at 20:41:42.
3
+ #
4
+ # See 'dokkit.rb' or +LICENSE+ for licence information.
5
+ #
6
+ # (C)2006-2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
7
+ #
8
+
9
+ require 'dokkit/resource/extensions/html'
10
+
11
+ module Dokkit
12
+ module Resource
13
+ module Extension
14
+ module Builtin
15
+ include HTML
16
+ end
17
+ end
18
+ end
19
+ end
@@ -0,0 +1,22 @@
1
+ #
2
+ # File 'html.rb' created on 21 giu 2008 at 19:55:48.
3
+ #
4
+ # See 'dokkit.rb' or +LICENSE+ for licence information.
5
+ #
6
+ # (C)2006-2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
7
+ #
8
+
9
+ require 'dokkit/resource/extensions/url'
10
+
11
+ module Dokkit
12
+ module Resource
13
+ module Extension
14
+ module HTML
15
+ include Url
16
+ def link_to(name, args = { })
17
+ "<a href=\"#{relative(args[:href])}\" class=\"#{args[:class]}\">#{name}</a>"
18
+ end
19
+ end
20
+ end
21
+ end
22
+ end
@@ -0,0 +1,25 @@
1
+ #
2
+ # File 'url.rb' created on 09 mag 2008 at 19:13:53.
3
+ #
4
+ # See 'dokkit.rb' or +LICENSE+ for licence information.
5
+ #
6
+ # (C)2006-2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
7
+ #
8
+
9
+ module Dokkit
10
+ module Resource
11
+ module Extension
12
+ module Url
13
+ def relative(href)
14
+ thr = href
15
+ if thr.is_a?(String) && href[0,1] == '/'
16
+ dtfn = File.dirname(source_fn[/^#{configuration[:document_dir]}\/(.*)/,1]) + '/'
17
+ count = dtfn == './' ? 0 : dtfn.split('/').length
18
+ thr = ('../' * count) + href[1..href.length]
19
+ end
20
+ thr
21
+ end
22
+ end
23
+ end
24
+ end
25
+ end
@@ -1,18 +1,17 @@
1
1
  #
2
- # File 'base.rb' created on 15 feb 2008 at 22:56:37.
2
+ # File 'extension.rb' created on 09 mag 2008 at 19:12:50.
3
3
  #
4
4
  # See 'dokkit.rb' or +LICENSE+ for licence information.
5
5
  #
6
- # (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
6
+ # (C)2006-2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
7
7
  #
8
8
 
9
+ require 'dokkit/resource/extensions/url'
10
+
9
11
  module Dokkit
10
- module Filters
11
- class Base
12
- def filter(text)
13
- nil
14
- end
12
+ module Resource
13
+ module Extension
14
+
15
15
  end
16
16
  end
17
17
  end
18
-
@@ -0,0 +1,28 @@
1
+ #
2
+ # File 'filenamehelper.rb' created on 21 apr 2008 at 14:25:47.
3
+ #
4
+ # See 'dokkit.rb' or +LICENSE+ for licence information.
5
+ #
6
+ # (C) 2006, 2007, 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
7
+ #
8
+
9
+ module Dokkit
10
+ module Resource
11
+ # This is a helper module that aims to simplify operation with
12
+ # filenames.
13
+ module FilenameHelper
14
+ # Return a filename transformed in its directory part and
15
+ # (optionally) in its extension.
16
+ # +fn+:: is the source filename.
17
+ # +dir+:: is the directory part to be changed.
18
+ # +new_dir+:: is the new directory part that substitutes +dir+.
19
+ # +new_ext+:: is the (optionally) new extension for the +fn+.
20
+ def filename_helper(fn, dir, new_dir, new_ext = '')
21
+ ext = File.extname(fn).sub(/^\./,'') # strip leading dot
22
+ new_fn = fn.sub(/#{dir}/, new_dir)
23
+ new_fn = new_fn << new_ext unless new_ext.empty?
24
+ new_fn
25
+ end
26
+ end
27
+ end
28
+ end
@@ -0,0 +1,11 @@
1
+ #
2
+ # File 'resource.rb' created on 04 mag 2008 at 17:41:25.
3
+ #
4
+ # See 'dokkit.rb' or +LICENSE+ for licence information.
5
+ #
6
+ # (C)2006-2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
7
+ #
8
+
9
+ require 'dokkit/resource/document'
10
+ require 'dokkit/resource/data'
11
+
@@ -0,0 +1,73 @@
1
+ #
2
+ # File 'clean.rb' created on 14 apr 2008 at 16:04:19.
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
+ module TaskLib
11
+ # The Clean task library is a collection of rake tasks devoted to
12
+ # the cleaning of the documentation environment. The library
13
+ # defines a clean:output that remove the generated output folder
14
+ # (if exists). It defines also a clean:cache task that remove the
15
+ # cache folder (if exists).
16
+ class Clean
17
+ attr_reader :output_dir, :cache_dir
18
+
19
+ # Initialize the library with the logger instance, an optional
20
+ # namespace and configuration hash.
21
+ def initialize(logger, configuration, namespace = 'clean')
22
+ @namespace = namespace
23
+ @logger = logger
24
+ @configuration = configuration
25
+ @output_dir = configuration[:output_dir]
26
+ @cache_dir = configuration[:cache_dir]
27
+ define_tasks
28
+ end
29
+
30
+ private
31
+
32
+ # Define library tasks under the given namespace.
33
+ def define_tasks
34
+ namespace @namespace do
35
+ define_output_task
36
+ define_cache_task
37
+ define_clean_all_task
38
+ end
39
+ end
40
+
41
+ # Define a task to remove output directory.
42
+ def define_output_task
43
+ desc "Remove the generated output."
44
+ task :output do
45
+ remove_dir(output_dir)
46
+ end
47
+ end
48
+
49
+ # Define a task to remove cache directory.
50
+ def define_cache_task
51
+ desc "Remove cache directory."
52
+ task :cache do
53
+ remove_dir(cache_dir)
54
+ end
55
+ end
56
+
57
+ def remove_dir(dir)
58
+ if File.exists?(dir)
59
+ @logger.info("Removing directory '#{dir}'.")
60
+ rm_rf dir unless dir == '.'
61
+ end
62
+ end
63
+
64
+ # Define a task that clean the documentation environment
65
+ # removing both output and cache directory.
66
+ def define_clean_all_task
67
+ desc "Clean the documentation environment."
68
+ task :all => ["#{@namespace}:output", "#{@namespace}:cache"]
69
+ end
70
+
71
+ end
72
+ end
73
+ end
@@ -0,0 +1,137 @@
1
+ #
2
+ # File 'render.rb' created on 18 feb 2008 at 17:47:44.
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/tasklib'
10
+
11
+ module Dokkit
12
+ module TaskLib
13
+ # Render task library defines a set of rake tasks devoted to the
14
+ # transformation (rendering) of the documents and data files.
15
+ class Render < Rake::TaskLib
16
+
17
+ # Initialize a set of tasks that transform resources.
18
+ # +namespace+:: is the namespace for the tasks defined in the library.
19
+ # +logger+:: is the logger instance.
20
+ # +factory+:: is a factory class that creates document instances.
21
+ # +document_fns+:: is an array of source filenames.
22
+ # +data_fns+:: is an array of data files.
23
+ def initialize(logger, resource_factory, document_fns, data_fns, namespace = 'render')
24
+ @namespace = namespace
25
+ @document_fns = document_fns
26
+ @data_fns = data_fns
27
+ @resource_factory = resource_factory
28
+ @logger = logger
29
+ define_tasks
30
+ end
31
+
32
+ # Use factory to get an instance of Dokkit::Resource::Document
33
+ # starting from document filename.
34
+ def get_document(document_fn)
35
+ @resource_factory.get(:document, document_fn)
36
+ end
37
+
38
+ # use factory to get an instance of Dokkit::Resource::Data
39
+ # starting from data filename. Note that Data instances are
40
+ # *immutable* resources, that is no rendering process occurs:
41
+ # the file is copied as is.
42
+ def get_data(data_fn)
43
+ @resource_factory.get(:data, data_fn)
44
+ end
45
+
46
+ private
47
+
48
+ # Create output directory +dn+ unless it already exists.
49
+ def mkdir(dn)
50
+ mkdir_p(dn, :verbose => false) unless File.exists?(dn)
51
+ end
52
+
53
+ # Write the result of the rendering to the target file. The
54
+ # output directory is created at this time.
55
+ def write_document(render_text, target_fn)
56
+ mkdir(File.dirname(target_fn))
57
+ File.open(target_fn, 'w') { |file| file << render_text }
58
+ end
59
+
60
+ # Copy the given source data file to the given target destination.
61
+ def write_data(data)
62
+ mkdir(File.dirname(data.target_fn))
63
+ cp(data.source_fn, data.target_fn, :preserve => true, :verbose => false)
64
+ end
65
+
66
+ # Define all tasks in library.
67
+ def define_tasks
68
+ namespace @namespace do
69
+ define_render_all_documents_task
70
+ define_data_task
71
+ define_render_all_task
72
+ end
73
+ end
74
+
75
+ # Define render all documents task.
76
+ def define_render_all_documents_task
77
+ desc "Render documents."
78
+ task :doc do
79
+ render_all_documents
80
+ end
81
+ end
82
+
83
+ def render_all_documents
84
+ @document_fns.each { |fn| render_all_targets(get_document(fn)) }
85
+ end
86
+
87
+ def render_all_targets(document)
88
+ document.targets.each_key do |format|
89
+ render_target(document, format) if need_update?(document.target_for(format), document.deps_for(format))
90
+ end
91
+ end
92
+
93
+ def render_target(document, format)
94
+ @logger.info("Render '#{document.source_fn}' => '#{document.target_for(format)}'.")
95
+ write_document(document.render(:format => format), document.target_for(format))
96
+ end
97
+
98
+ # Define data task.
99
+ def define_data_task
100
+ desc "Copy data files."
101
+ task :data do
102
+ copy_all_data
103
+ end
104
+ end
105
+
106
+ def copy_all_data
107
+ @data_fns.each { |fn| copy_data(get_data(fn)) }
108
+ end
109
+
110
+ def copy_data(data)
111
+ if need_update?(data.target_fn, data.source_fn)
112
+ @logger.info("Copy '#{data.source_fn}' => '#{data.target_fn}'.")
113
+ write_data(data)
114
+ end
115
+ end
116
+
117
+ # Define a task that render all documents and copy all data.
118
+ def define_render_all_task
119
+ desc "Render the documents and copy the data."
120
+ task :all => ["#{@namespace}:doc", "#{@namespace}:data"]
121
+ end
122
+
123
+ private
124
+
125
+ # Compares target mtime against dependencies mtime. Returns true
126
+ # if target mtime is greater than dependencies mtime returns
127
+ # true. Otherwise return false (target needs update).
128
+ def need_update?(target, deps)
129
+ return true unless File.exists?(target)
130
+ deps.each { |dep| return true if File.mtime(target) < File.mtime(dep) }
131
+ false
132
+ end
133
+
134
+ end
135
+ end
136
+ end
137
+
@@ -0,0 +1,11 @@
1
+ #
2
+ # File 'tasklib.rb' created on 04 mag 2008 at 17:40:50.
3
+ #
4
+ # See 'dokkit.rb' or +LICENSE+ for licence information.
5
+ #
6
+ # (C)2006-2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
7
+ #
8
+
9
+ require 'dokkit/tasklib/render'
10
+ require 'dokkit/tasklib/clean'
11
+
data/lib/dokkit.rb CHANGED
@@ -1,36 +1,39 @@
1
1
  # dokkit.rb - main Dokkit module
2
2
 
3
3
  #####
4
- ## *Dokkit* is a Rote (http://rote.rubyforge.it) and Rake (http://rake.rubyforge.org)
5
- ## based documentation building tool. It uses the deplate rendering engine to produce
6
- ## very polished tex file, page-based documentation, websites, and general textual templates.
7
- ## It enables embedded Ruby code, layouts, YAML config files and rake tasks
8
- ## to be used to automatically generate output in any
9
- ## (textual) format from a directory tree containing template files.
4
+ ## *Dokkit* is a rake (http://rake.rubyforge.org) based documentation
5
+ ## building tool. It uses filters to produce very polished tex file,
6
+ ## page-based documentation, websites, and general textual templates.
7
+ ## It enables embedded ruby code, layouts, YAML config files and rake
8
+ ## tasks to be used to automatically generate output in any (textual)
9
+ ## format from a directory tree containing template files.
10
10
  ##
11
- ## Dokkit was created to manage the documentation produced by Alca Coop (http://alca.le.it/) for its customers
12
- ## and it is a fairly flexible tool.
11
+ ## Dokkit was created to manage the documentation produced by Alca
12
+ ## Coop (http://alca.le.it/) for its customers and it is a fairly
13
+ ## flexible tool.
13
14
  ##
14
- ## Dokkit can be used from the command-line, or in your own +Rakefile+. It
15
- ## supports both manual and automatic rendering of modified resources, and
16
- ## can be configured to monitor your source tree for changes.
15
+ ## Dokkit can be used from the command-line, or in your own
16
+ ## +Rakefile+. It supports both manual and automatic rendering of
17
+ ## modified resources.
17
18
  ##
18
- ## See +README+ and http://dokkit.rubyforge.org for general usage information.
19
+ ## See +README+ and http://dokkit.rubyforge.org for general usage
20
+ ## information.
19
21
  ##
20
- ## Copyright (C) 2006, 2007 Andrea Fazzi (and contributors).
22
+ ## Copyright (C) 2006, 2007, 2008 Andrea Fazzi (and contributors).
21
23
  ##
22
- ## This program is free software: you can redistribute it and/or modify
23
- ## it under the terms of the GNU General Public License as published by
24
- ## the Free Software Foundation, either version 3 of the License, or
25
- ## (at your option) any later version.
24
+ ## This program is free software: you can redistribute it and/or
25
+ ## modify it under the terms of the GNU General Public License as
26
+ ## published by the Free Software Foundation, either version 3 of the
27
+ ## License, or (at your option) any later version.
26
28
  ##
27
- ## This program is distributed in the hope that it will be useful,
28
- ## but WITHOUT ANY WARRANTY; without even the implied warranty of
29
- ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
30
- ## GNU General Public License for more details.
29
+ ## This program is distributed in the hope that it will be useful, but
30
+ ## WITHOUT ANY WARRANTY; without even the implied warranty of
31
+ ## MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
32
+ ## General Public License for more details.
31
33
  ##
32
34
  ## You should have received a copy of the GNU General Public License
33
- ## along with this program. If not, see <http://www.gnu.org/licenses/>.
35
+ ## along with this program. If not, see
36
+ ## <http://www.gnu.org/licenses/>.
34
37
  ##
35
38
  ## See +LICENSE+ for details.
36
39
 
@@ -47,12 +50,6 @@ rescue LoadError
47
50
  nil # just try without then...
48
51
  end
49
52
 
50
- require 'rake'
51
- require 'dokkit/app'
52
- require 'dokkit/defaults'
53
-
54
53
  module Dokkit
55
-
56
- # this space intentionally left blank
57
-
54
+ VERSION = '0.4.0'
58
55
  end
@@ -0,0 +1,141 @@
1
+ #
2
+ # File 'application_spec.rb' created on 08 mag 2008 at 17:26:24.
3
+ # See 'dokkit.rb' or +LICENSE+ for licence information.
4
+ #
5
+ # (c)2006-2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
6
+ #
7
+
8
+ $LOAD_PATH.unshift(File.expand_path(File.join(File.dirname(__FILE__),'../../lib')))
9
+
10
+ require 'rubygems'
11
+ require 'spec'
12
+ require 'dokkit/application'
13
+ require 'spec/spec_helper'
14
+
15
+ describe Dokkit::Application, ' options behaviour' do
16
+ include SpecHelper::CaptureOutput, SpecHelper::Logger
17
+ before(:all) do
18
+ @initial_dir = Dir.pwd
19
+ Dir.chdir(File.join(File.dirname(__FILE__), SpecHelper::Path::TEST_DATA))
20
+ end
21
+ after(:all) do
22
+ Dir.chdir(@initial_dir)
23
+ end
24
+ before do
25
+ @logger = logger
26
+ @dokkit = Dokkit::Application.new(@logger, { :dokkit_dir => 'dokkit', :model_dir => 'models', :default_model => 'model1' })
27
+ end
28
+ after do
29
+ ARGV.clear
30
+ end
31
+ it 'should set default model' do
32
+ @dokkit.default_model.should == 'model1'
33
+ end
34
+ it 'should display version number' do
35
+ ARGV << '--version'
36
+ capture_stdout do
37
+ lambda do
38
+ @dokkit.run
39
+ end.should raise_error(SystemExit)
40
+ end.should match(/dokkit, version \d.\d.\d/)
41
+ end
42
+ #FIXME: Code duplication here ...
43
+ it 'should alias --help option with --usage' do
44
+ ARGV << '--help'
45
+ @output = capture_stdout do
46
+ lambda do
47
+ @dokkit.run
48
+ end.should raise_error(SystemExit)
49
+ end
50
+ @output.should match(/Usage: dokkit/)
51
+ @output.should match(/Recognized options/)
52
+ end
53
+ it 'should display usage information' do
54
+ ARGV << '--usage'
55
+ @output = capture_stdout do
56
+ lambda do
57
+ @dokkit.run
58
+ end.should raise_error(SystemExit)
59
+ end
60
+ @output.should match(/Usage: dokkit/)
61
+ @output.should match(/Recognized options/)
62
+ end
63
+ it 'should display the list of available models' do
64
+ ARGV << '--list'
65
+ @logger.should_receive(:info).with(/model[1-2]/).twice
66
+ lambda do
67
+ @dokkit.run
68
+ end.should raise_error(SystemExit)
69
+ end
70
+ it 'should fail if the number of commandline argument is less than one' do
71
+ @output = capture_stdout do
72
+ lambda do
73
+ @dokkit.run
74
+ end.should raise_error(SystemExit)
75
+ end
76
+ end
77
+ end
78
+
79
+ describe Dokkit::Application, ' creating new documentation environment based on builtin model' do
80
+ include SpecHelper::CaptureOutput, SpecHelper::Logger
81
+ before(:all) do
82
+ @initial_dir = Dir.pwd
83
+ Dir.chdir(File.join(File.dirname(__FILE__), SpecHelper::Path::TEST_DATA))
84
+ end
85
+ after(:all) do
86
+ Dir.chdir(@initial_dir)
87
+ end
88
+ before do
89
+ @logger = logger
90
+ @dokkit = Dokkit::Application.new(@logger)
91
+ end
92
+ after do
93
+ ARGV.clear
94
+ FileUtils.rm_rf 'project'
95
+ end
96
+ it 'should copy builtin model directory structure on destination dir' do
97
+ ARGV << 'project'
98
+ @dokkit.run
99
+ File.exists?('project/doc/pages/simple.deplate').should be_true
100
+ end
101
+ it 'should fail if the destination directory exists' do
102
+ ARGV << 'project'
103
+ FileUtils.mkdir 'project'
104
+ @logger.should_receive(:error).with(/already exists/)
105
+ @dokkit.run
106
+ end
107
+ end
108
+
109
+ describe Dokkit::Application, ' creating new documentation environment based on user models' do
110
+ include SpecHelper::CaptureOutput, SpecHelper::Logger
111
+ before(:all) do
112
+ @initial_dir = Dir.pwd
113
+ Dir.chdir(File.join(File.dirname(__FILE__), SpecHelper::Path::TEST_DATA))
114
+ end
115
+ after(:all) do
116
+ Dir.chdir(@initial_dir)
117
+ end
118
+ before do
119
+ @logger = logger
120
+ @dokkit = Dokkit::Application.new(@logger, { :dokkit_dir => 'dokkit', :model_dir => 'models', :default_model => 'model1' })
121
+ end
122
+ after do
123
+ ARGV.clear
124
+ FileUtils.rm_rf 'project'
125
+ end
126
+ it 'should copy model1 directory structure on destination dir' do
127
+ ARGV << 'project'
128
+ @dokkit.run
129
+ File.exists?('project/doc/pages/model1').should be_true
130
+ end
131
+ it 'should copy model2 directory structure on destination dir' do
132
+ ARGV.concat(['--model', 'model2', 'project'])
133
+ @dokkit.run
134
+ File.exists?('project/doc/pages/model2').should be_true
135
+ end
136
+ it 'should fail if not existent model is specified' do
137
+ ARGV.concat(['--model', 'notexists', 'project'])
138
+ @logger.should_receive(:error).with(/not found/)
139
+ @dokkit.run
140
+ end
141
+ end
@@ -0,0 +1,87 @@
1
+ #
2
+ # File 'cachemanager_spec.rb' created on 28 gen 2008 at 18:31:31.
3
+ # See 'dokkit.rb' or +LICENSE+ for licence information.
4
+ #
5
+ # (c)2006, 2007 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
6
+ #
7
+ # To execute this spec run:
8
+ #
9
+ # spec spec/cachemanager_spec.rb
10
+ #
11
+
12
+
13
+ $LOAD_PATH.unshift File.expand_path(File.join(File.dirname(__FILE__),'../../../lib'))
14
+
15
+ require 'rubygems'
16
+ require 'spec'
17
+ require 'dokkit'
18
+ require 'dokkit/cache'
19
+ require 'spec/spec_helper'
20
+
21
+ describe Dokkit::Cache do
22
+ include SpecHelper::Path
23
+
24
+ before(:all) do
25
+ @initial_dir = Dir.pwd
26
+ Dir.chdir(File.join(File.dirname(__FILE__), SpecHelper::Path::TEST_DATA))
27
+ end
28
+ after(:all) do
29
+ Dir.chdir(@initial_dir)
30
+ end
31
+
32
+ describe ' when initialized' do
33
+ before do
34
+ mkdir '.cache_test' unless File.exists?('.cache_test')
35
+ File.open(base_path('.cache_test/deps.rake'), 'w') do |file|
36
+ file.write YAML::dump({ document_path('document_1') => { 'html' => [document_path('document_1.dep')] } } )
37
+ end
38
+ @cache = Dokkit::Cache.new('deps.rake', '.cache_test')
39
+ end
40
+ it 'should import the cache file (if exists)' do
41
+ @cache.deps.should == { document_path('document_1') => { 'html' => [document_path('document_1.dep')] } }
42
+ end
43
+ after do
44
+ @cache.clean
45
+ rm_rf base_path('.cache_test')
46
+ end
47
+ end
48
+
49
+ describe '#add_dependency' do
50
+ before do
51
+ @cache = Dokkit::Cache.new('deps.rake', '.cache_test')
52
+ end
53
+ it 'should add dependecies to the given document' do
54
+ @cache.add_dependency(document_path('document_1'), 'html', 'doc/pages/document_1.dep')
55
+ @cache.deps.should == { document_path('document_1') => { 'html' => [document_path('document_1.dep')] } }
56
+ end
57
+ it 'should not add an existing dependency to the given document' do
58
+ @cache.add_dependency(document_path('document_1'), 'html', 'doc/pages/document_1.dep')
59
+ @cache.add_dependency(document_path('document_1'), 'html', 'doc/pages/document_1.dep')
60
+ @cache.add_dependency(document_path('document_1'), 'html', 'doc/pages/document_2.dep')
61
+ @cache.deps.should == { document_path('document_1') => { 'html' => ['doc/pages/document_1.dep', 'doc/pages/document_2.dep'] } }
62
+ end
63
+ after do
64
+ @cache.clean
65
+ rm_rf '.cache_test'
66
+ @cache = nil
67
+ end
68
+ end
69
+
70
+ describe '#save' do
71
+ before do
72
+ @cache = Dokkit::Cache.new('deps.rake', '.cache_test')
73
+ @cache.add_dependency(document_path('document_1'), 'html', 'doc/pages/document_1.dep')
74
+ @cache.add_dependency(document_path('document_1'), 'html', 'doc/pages/document_2.dep')
75
+ @cache.add_dependency(document_path('document_1'), 'html', 'doc/pages/document_3.dep')
76
+ end
77
+ it 'should save the dependencies to file' do
78
+ @cache.save
79
+ File.exists?(base_path('.cache_test/deps.rake')).should be_true
80
+ end
81
+ after do
82
+ @cache.clean
83
+ rm_rf '.cache_test'
84
+ end
85
+
86
+ end
87
+ end