dokkit 0.4.4 → 0.5.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.
@@ -11,9 +11,11 @@ require 'dokkit/resource/extensions/html'
11
11
  module Dokkit
12
12
  module Resource
13
13
  module Extension
14
+
14
15
  module Builtin
15
16
  include HTML
16
17
  end
18
+
17
19
  end
18
20
  end
19
21
  end
@@ -13,7 +13,7 @@ module Dokkit
13
13
  def relative(href)
14
14
  thr = href
15
15
  if thr.is_a?(String) && href[0,1] == '/'
16
- dtfn = File.dirname(source_fn[/^#{configuration[:document_dir]}\/(.*)/,1]) + '/'
16
+ dtfn = File.dirname(source_fn[/^#{env_configuration[:document_dir]}\/(.*)/,1]) + '/'
17
17
  count = dtfn == './' ? 0 : dtfn.split('/').length
18
18
  thr = ('../' * count) + href[1..href.length]
19
19
  end
@@ -1,16 +1,18 @@
1
1
  #
2
2
  # File 'filenamehelper.rb' created on 21 apr 2008 at 14:25:47.
3
3
  #
4
- # See 'dokkit.rb' or +LICENSE+ for licence information.
4
+ # See 'dokkit.rb' or +LICENSE+ for license information.
5
5
  #
6
6
  # (C) 2006, 2007, 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
7
7
  #
8
8
 
9
9
  module Dokkit
10
10
  module Resource
11
+
11
12
  # This is a helper module that aims to simplify operation with
12
13
  # filenames.
13
14
  module FilenameHelper
15
+
14
16
  # Return a filename transformed in its directory part and
15
17
  # (optionally) in its extension.
16
18
  # +fn+:: is the source filename.
@@ -23,6 +25,8 @@ module Dokkit
23
25
  new_fn = new_fn << new_ext unless new_ext.empty?
24
26
  new_fn
25
27
  end
28
+
26
29
  end
30
+
27
31
  end
28
32
  end
@@ -9,3 +9,8 @@
9
9
  require 'dokkit/tasklib/render'
10
10
  require 'dokkit/tasklib/clean'
11
11
 
12
+ module Dokkit
13
+ module TaskLib
14
+
15
+ end
16
+ end
@@ -0,0 +1,36 @@
1
+ #
2
+ # File 'base.rb' created on 15 ago 2008 at 22:34:26.
3
+ #
4
+ # See 'dokkit.rb' or +LICENSE+ for license information.
5
+ #
6
+ # (C)2006-2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
7
+ #
8
+
9
+ require 'logger'
10
+ require 'rake/tasklib'
11
+
12
+ module Dokkit
13
+ module TaskLib
14
+
15
+ class Base < Rake::TaskLib
16
+
17
+ attr_reader :ns
18
+ attr_accessor :logger
19
+
20
+ def initialize(ns)
21
+ @ns = ns
22
+ @logger ||= Logger.new(STDOUT)
23
+ end
24
+
25
+ protected
26
+
27
+ def define_tasks
28
+ namespace @ns do
29
+ private_methods.select { |meth| meth =~ /define_.+_task/ }.each { |meth| send meth }
30
+ end
31
+ end
32
+
33
+ end
34
+
35
+ end
36
+ end
@@ -6,6 +6,8 @@
6
6
  # (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
7
7
  #
8
8
 
9
+ require 'dokkit/tasklib/base'
10
+
9
11
  module Dokkit
10
12
  module TaskLib
11
13
  # The Clean task library is a collection of rake tasks devoted to
@@ -13,31 +15,22 @@ module Dokkit
13
15
  # defines a clean:output that remove the generated output folder
14
16
  # (if exists). It defines also a clean:cache task that remove the
15
17
  # cache folder (if exists).
16
- class Clean
17
- attr_reader :output_dir, :cache_dir
18
+ class Clean < Base
19
+
20
+ attr_accessor :output_dir, :cache_dir
18
21
 
19
22
  # Initialize the library with the logger instance, an optional
20
23
  # 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]
24
+ def initialize(ns = 'clean')
25
+ super
26
+
27
+ yield self if block_given?
28
+
27
29
  define_tasks
28
30
  end
29
31
 
30
32
  private
31
33
 
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
34
  # Define a task to remove output directory.
42
35
  def define_output_task
43
36
  desc "Remove the generated output."
@@ -60,12 +53,12 @@ module Dokkit
60
53
  rm_rf dir unless dir == '.'
61
54
  end
62
55
  end
63
-
56
+
64
57
  # Define a task that clean the documentation environment
65
58
  # removing both output and cache directory.
66
59
  def define_clean_all_task
67
60
  desc "Clean the documentation environment."
68
- task :all => ["#{@namespace}:output", "#{@namespace}:cache"]
61
+ task :all => ["#{@ns}:output", "#{@ns}:cache"]
69
62
  end
70
63
 
71
64
  end
@@ -1,18 +1,21 @@
1
1
  #
2
2
  # File 'render.rb' created on 18 feb 2008 at 17:47:44.
3
3
  #
4
- # See 'dokkit.rb' or +LICENSE+ for licence information.
4
+ # See 'dokkit.rb' or +LICENSE+ for license information.
5
5
  #
6
6
  # (C) 2008 Andrea Fazzi <andrea.fazzi@alca.le.it> (and contributors).
7
7
  #
8
8
 
9
- require 'rake/tasklib'
9
+ require 'dokkit/tasklib/base'
10
10
 
11
11
  module Dokkit
12
12
  module TaskLib
13
+
13
14
  # Render task library defines a set of rake tasks devoted to the
14
15
  # transformation (rendering) of the documents and data files.
15
- class Render < Rake::TaskLib
16
+ class Render < Base
17
+
18
+ attr_accessor :document_fns, :data_fns, :resource_factory, :logger
16
19
 
17
20
  # Initialize a set of tasks that transform resources.
18
21
  # +namespace+:: is the namespace for the tasks defined in the library.
@@ -20,13 +23,16 @@ module Dokkit
20
23
  # +factory+:: is a factory class that creates document instances.
21
24
  # +document_fns+:: is an array of source filenames.
22
25
  # +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
26
+ def initialize(ns = 'render')
27
+ super
28
+
29
+ yield self if block_given?
30
+
31
+ @document_fns ||= []
32
+ @data_fns ||= []
33
+
29
34
  define_tasks
35
+
30
36
  end
31
37
 
32
38
  # Use factory to get an instance of Dokkit::Resource::Document
@@ -62,16 +68,7 @@ module Dokkit
62
68
  mkdir(File.dirname(data.target_fn))
63
69
  cp(data.source_fn, data.target_fn, :preserve => true, :verbose => false)
64
70
  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
-
71
+
75
72
  # Define render all documents task.
76
73
  def define_render_all_documents_task
77
74
  desc "Render documents."
@@ -86,7 +83,7 @@ module Dokkit
86
83
 
87
84
  def render_all_targets(document)
88
85
  document.targets.each_key do |format|
89
- render_target(document, format) if need_update?(document.target_for(format), document.deps_for(format))
86
+ render_target(document, format) if (need_update?(document.target_for(format), document.deps_for(format)) and document.render?)
90
87
  end
91
88
  end
92
89
 
@@ -94,7 +91,7 @@ module Dokkit
94
91
  @logger.info("Render '#{document.source_fn}' => '#{document.target_for(format)}'.")
95
92
  write_document(document.render(:format => format), document.target_for(format))
96
93
  end
97
-
94
+
98
95
  # Define data task.
99
96
  def define_data_task
100
97
  desc "Copy data files."
@@ -106,7 +103,7 @@ module Dokkit
106
103
  def copy_all_data
107
104
  @data_fns.each { |fn| copy_data(get_data(fn)) }
108
105
  end
109
-
106
+
110
107
  def copy_data(data)
111
108
  if need_update?(data.target_fn, data.source_fn)
112
109
  @logger.info("Copy '#{data.source_fn}' => '#{data.target_fn}'.")
@@ -117,7 +114,7 @@ module Dokkit
117
114
  # Define a task that render all documents and copy all data.
118
115
  def define_render_all_task
119
116
  desc "Render the documents and copy the data."
120
- task :all => ["#{@namespace}:doc", "#{@namespace}:data"]
117
+ task :all => ["#{@ns}:doc", "#{@ns}:data"]
121
118
  end
122
119
 
123
120
  private
@@ -134,4 +131,3 @@ module Dokkit
134
131
  end
135
132
  end
136
133
  end
137
-
@@ -1,10 +1,12 @@
1
1
 
2
2
  require 'dokkit/environment'
3
3
 
4
- include Dokkit::Environment::Basic
4
+ include Dokkit::Environment
5
5
 
6
- Container.new do |c|
6
+ environment do |env|
7
7
 
8
- c.documents.include('*')
8
+ env.select_document do |selection|
9
+ selection.include('**/*')
10
+ end
9
11
 
10
12
  end
@@ -0,0 +1,81 @@
1
+ # $Id$
2
+
3
+ begin
4
+ require 'bones/smtp_tls'
5
+ rescue LoadError
6
+ require 'net/smtp'
7
+ end
8
+ require 'time'
9
+
10
+ namespace :ann do
11
+
12
+ # A prerequisites task that all other tasks depend upon
13
+ task :prereqs
14
+
15
+ file PROJ.ann.file do
16
+ ann = PROJ.ann
17
+ puts "Generating #{ann.file}"
18
+ File.open(ann.file,'w') do |fd|
19
+ fd.puts("#{PROJ.name} version #{PROJ.version}")
20
+ fd.puts(" by #{Array(PROJ.authors).first}") if PROJ.authors
21
+ fd.puts(" #{PROJ.url}") if PROJ.url.valid?
22
+ fd.puts(" (the \"#{PROJ.release_name}\" release)") if PROJ.release_name
23
+ fd.puts
24
+ fd.puts("== DESCRIPTION")
25
+ fd.puts
26
+ fd.puts(PROJ.description)
27
+ fd.puts
28
+ fd.puts(PROJ.changes.sub(%r/^.*$/, '== CHANGES'))
29
+ fd.puts
30
+ ann.paragraphs.each do |p|
31
+ fd.puts "== #{p.upcase}"
32
+ fd.puts
33
+ fd.puts paragraphs_of(PROJ.readme_file, p).join("\n\n")
34
+ fd.puts
35
+ end
36
+ fd.puts ann.text if ann.text
37
+ end
38
+ end
39
+
40
+ desc "Create an announcement file"
41
+ task :announcement => ['ann:prereqs', PROJ.ann.file]
42
+
43
+ desc "Send an email announcement"
44
+ task :email => ['ann:prereqs', PROJ.ann.file] do
45
+ ann = PROJ.ann
46
+ from = ann.email[:from] || PROJ.email
47
+ to = Array(ann.email[:to])
48
+
49
+ ### build a mail header for RFC 822
50
+ rfc822msg = "From: #{from}\n"
51
+ rfc822msg << "To: #{to.join(',')}\n"
52
+ rfc822msg << "Subject: [ANN] #{PROJ.name} #{PROJ.version}"
53
+ rfc822msg << " (#{PROJ.release_name})" if PROJ.release_name
54
+ rfc822msg << "\n"
55
+ rfc822msg << "Date: #{Time.new.rfc822}\n"
56
+ rfc822msg << "Message-Id: "
57
+ rfc822msg << "<#{"%.8f" % Time.now.to_f}@#{ann.email[:domain]}>\n\n"
58
+ rfc822msg << File.read(ann.file)
59
+
60
+ params = [:server, :port, :domain, :acct, :passwd, :authtype].map do |key|
61
+ ann.email[key]
62
+ end
63
+
64
+ params[3] = PROJ.email if params[3].nil?
65
+
66
+ if params[4].nil?
67
+ STDOUT.write "Please enter your e-mail password (#{params[3]}): "
68
+ params[4] = STDIN.gets.chomp
69
+ end
70
+
71
+ ### send email
72
+ Net::SMTP.start(*params) {|smtp| smtp.sendmail(rfc822msg, from, to)}
73
+ end
74
+ end # namespace :ann
75
+
76
+ desc 'Alias to ann:announcement'
77
+ task :ann => 'ann:announcement'
78
+
79
+ CLOBBER << PROJ.ann.file
80
+
81
+ # EOF
@@ -0,0 +1,21 @@
1
+ # $Id$
2
+
3
+ if HAVE_BONES
4
+
5
+ namespace :bones do
6
+
7
+ desc 'Show the PROJ open struct'
8
+ task :debug do |t|
9
+ atr = if t.application.top_level_tasks.length == 2
10
+ t.application.top_level_tasks.pop
11
+ end
12
+
13
+ if atr then Bones::Debug.show_attr(PROJ, atr)
14
+ else Bones::Debug.show PROJ end
15
+ end
16
+
17
+ end # namespace :bones
18
+
19
+ end # HAVE_BONES
20
+
21
+ # EOF
@@ -4,77 +4,114 @@ require 'rake/gempackagetask'
4
4
 
5
5
  namespace :gem do
6
6
 
7
- PROJ.spec = Gem::Specification.new do |s|
7
+ PROJ.gem._spec = Gem::Specification.new do |s|
8
8
  s.name = PROJ.name
9
9
  s.version = PROJ.version
10
10
  s.summary = PROJ.summary
11
11
  s.authors = Array(PROJ.authors)
12
12
  s.email = PROJ.email
13
13
  s.homepage = Array(PROJ.url).first
14
- s.rubyforge_project = PROJ.rubyforge_name
14
+ s.rubyforge_project = PROJ.rubyforge.name
15
15
 
16
16
  s.description = PROJ.description
17
17
 
18
- PROJ.dependencies.each do |dep|
18
+ PROJ.gem.dependencies.each do |dep|
19
19
  s.add_dependency(*dep)
20
20
  end
21
21
 
22
- s.files = PROJ.files
23
- s.executables = PROJ.executables.map {|fn| File.basename(fn)}
24
- s.extensions = PROJ.files.grep %r/extconf\.rb$/
22
+ s.files = PROJ.gem.files
23
+ s.executables = PROJ.gem.executables.map {|fn| File.basename(fn)}
24
+ s.extensions = PROJ.gem.files.grep %r/extconf\.rb$/
25
25
 
26
26
  s.bindir = 'bin'
27
27
  dirs = Dir["{#{PROJ.libs.join(',')}}"]
28
28
  s.require_paths = dirs unless dirs.empty?
29
29
 
30
- incl = Regexp.new(PROJ.rdoc_include.join('|'))
31
- excl = PROJ.rdoc_exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
30
+ incl = Regexp.new(PROJ.rdoc.include.join('|'))
31
+ excl = PROJ.rdoc.exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
32
32
  excl = Regexp.new(excl.join('|'))
33
- rdoc_files = PROJ.files.find_all do |fn|
33
+ rdoc_files = PROJ.gem.files.find_all do |fn|
34
34
  case fn
35
35
  when excl; false
36
36
  when incl; true
37
37
  else false end
38
38
  end
39
- s.rdoc_options = PROJ.rdoc_opts + ['--main', PROJ.rdoc_main]
39
+ s.rdoc_options = PROJ.rdoc.opts + ['--main', PROJ.rdoc.main]
40
40
  s.extra_rdoc_files = rdoc_files
41
41
  s.has_rdoc = true
42
42
 
43
- if test ?f, PROJ.test_file
44
- s.test_file = PROJ.test_file
43
+ if test ?f, PROJ.test.file
44
+ s.test_file = PROJ.test.file
45
45
  else
46
- s.test_files = PROJ.tests.to_a
46
+ s.test_files = PROJ.test.files.to_a
47
47
  end
48
48
 
49
49
  # Do any extra stuff the user wants
50
- # spec_extras.each do |msg, val|
51
- # case val
52
- # when Proc
53
- # val.call(s.send(msg))
54
- # else
55
- # s.send "#{msg}=", val
56
- # end
57
- # end
58
- end
50
+ PROJ.gem.extras.each do |msg, val|
51
+ case val
52
+ when Proc
53
+ val.call(s.send(msg))
54
+ else
55
+ s.send "#{msg}=", val
56
+ end
57
+ end
58
+ end # Gem::Specification.new
59
+
60
+ # A prerequisites task that all other tasks depend upon
61
+ task :prereqs
59
62
 
60
63
  desc 'Show information about the gem'
61
- task :debug do
62
- puts PROJ.spec.to_ruby
64
+ task :debug => 'gem:prereqs' do
65
+ puts PROJ.gem._spec.to_ruby
63
66
  end
64
67
 
65
- Rake::GemPackageTask.new(PROJ.spec) do |pkg|
66
- pkg.need_tar = PROJ.need_tar
67
- pkg.need_zip = PROJ.need_zip
68
+ pkg = Rake::PackageTask.new(PROJ.name, PROJ.version) do |pkg|
69
+ pkg.need_tar = PROJ.gem.need_tar
70
+ pkg.need_zip = PROJ.gem.need_zip
71
+ pkg.package_files += PROJ.gem._spec.files
72
+ end
73
+ Rake::Task['gem:package'].instance_variable_set(:@full_comment, nil)
74
+
75
+ gem_file = if PROJ.gem._spec.platform == Gem::Platform::RUBY
76
+ "#{pkg.package_name}.gem"
77
+ else
78
+ "#{pkg.package_name}-#{PROJ.gem._spec.platform}.gem"
79
+ end
80
+
81
+ desc "Build the gem file #{gem_file}"
82
+ task :package => ['gem:prereqs', "#{pkg.package_dir}/#{gem_file}"]
83
+
84
+ file "#{pkg.package_dir}/#{gem_file}" => [pkg.package_dir] + PROJ.gem._spec.files do
85
+ when_writing("Creating GEM") {
86
+ Gem::Builder.new(PROJ.gem._spec).build
87
+ verbose(true) {
88
+ mv gem_file, "#{pkg.package_dir}/#{gem_file}"
89
+ }
90
+ }
68
91
  end
69
92
 
70
93
  desc 'Install the gem'
71
- task :install => [:clobber, :package] do
72
- sh "#{SUDO} #{GEM} install pkg/#{PROJ.spec.file_name}"
94
+ task :install => [:clobber, 'gem:package'] do
95
+ sh "#{SUDO} #{GEM} install --local pkg/#{PROJ.gem._spec.full_name}"
96
+
97
+ # use this version of the command for rubygems > 1.0.0
98
+ #sh "#{SUDO} #{GEM} install --no-update-sources pkg/#{PROJ.gem._spec.full_name}"
73
99
  end
74
100
 
75
101
  desc 'Uninstall the gem'
76
102
  task :uninstall do
77
- sh "#{SUDO} #{GEM} uninstall -v '#{PROJ.version}' #{PROJ.name}"
103
+ installed_list = Gem.source_index.find_name(PROJ.name)
104
+ if installed_list and installed_list.collect { |s| s.version.to_s}.include?(PROJ.version) then
105
+ sh "#{SUDO} #{GEM} uninstall --version '#{PROJ.version}' --ignore-dependencies --executables #{PROJ.name}"
106
+ end
107
+ end
108
+
109
+ desc 'Reinstall the gem'
110
+ task :reinstall => [:uninstall, :install]
111
+
112
+ desc 'Cleanup the gem'
113
+ task :cleanup do
114
+ sh "#{SUDO} #{GEM} cleanup #{PROJ.gem._spec.name}"
78
115
  end
79
116
 
80
117
  end # namespace :gem