buildrizpack 0.1 → 0.2

Sign up to get free protection for your applications and to get access to all the features.
@@ -12,49 +12,121 @@ This plugin provides a one-stop solution for packaging, distributing and deployi
12
12
 
13
13
  gem install BuildrIzPack
14
14
 
15
- == Useages
15
+ It has been tested using jruby-1.6.5, ruby-1.8.7-p358 and ruby-1.9.3-p125.
16
+ Running "rake spec" with rubies 1.8.7 and 1.9.2 failed with the message "Failed to download org.jruby:jruby-complete:jar:1.5.4,". This problem should be fixed once buildr 1.4.7 will be out.
16
17
 
17
- There are the following different useages.
18
+ == Usage
18
19
 
19
20
  1. Include one or more files and let the BuildrIzPack build a simple installer, where you may choose the installation path. Default langues is 'eng'. The locales accepts an array of locale-identifiers (3-letters ISO code)
20
-
21
21
  2. Specifiy a IzPack installer-XML via the the input methods
22
22
  3. Specify the XML-content of the various elements of the IzPack installation
23
23
 
24
- === Example 1
24
+ === Example 1: Simple, defaults
25
25
 
26
26
  include one or more files and let the BuildrIzPack build a simple installer
27
27
 
28
28
  require 'buildrizpack'
29
- Buildr::write "myProject/src/main/java/Hello.java", "public class Hello {}"
30
- define 'myProject' do
29
+ Buildr::write "example_1/src/main/java/Hello.java", "public class Hello {}"
30
+ define 'example_1', :version => '0.9.8' do
31
31
  package(:jar)
32
32
  package(:izpack).locales = ['eng', 'fra', 'deu']
33
33
  package(:izpack).include(package(:jar))
34
34
  end
35
35
 
36
- === Example 2
36
+ === Example 2: Using a IzPack installer-XML
37
37
 
38
38
  Specifiy a IzPack installer-XML via the the input methods
39
39
 
40
40
  require 'buildrizpack'
41
- define 'myProject' do
41
+ define 'example_2', :version => '0.9.8' do
42
+ myInstXml = path_to(:target, 'myInstaller.xml')
43
+ xm = Builder::XmlMarkup.new(:target=>File.open(myInstXml, 'w+'), :indent => 2)
44
+ xm.instruct!
45
+ xm.installation('version'=>'1.0') {
46
+ xm.tag!('info') { xm.appversion(project.version); xm.appname(project.name) }
47
+ xm.guiprefs('width' => '400', 'height' => '400', 'resizable' => 'no')
48
+ xm.panels { |x| xm.panel('classname' => 'InstallPanel') }
49
+ xm.locale { |x| xm.langpack('iso3'=>'eng') }
50
+ xm.packs {
51
+ xm.pack('name' => 'main', 'required' => 'yes') {
52
+ xm.description("my first and only pack for #{project.name}")
53
+ xm.file('src'=> myInstXml, 'targetdir' =>'$INSTALL_PATH')
54
+ }
55
+ }
56
+ }
57
+ xm.target!().close
42
58
  package(:jar)
43
59
  # It is you responsability to specify correctly all dependencies!!
44
- package(:izpack).input = path_to(:sources, :main, :ressources, 'myInstaller.xml')
60
+ package(:izpack).input = myInstXml
45
61
  package(:izpack)
46
62
  end
47
63
 
48
- === Example 3
49
64
 
50
- Specify the XML-content
65
+ === Example 3: A more realistic example. Specifies installer.xml, dependencies and integration checks
66
+
67
+ This example is closer to what you will probably need for a full blown application.
51
68
 
52
69
  require 'buildrizpack'
53
- Buildr::write "myProject/src/main/java/Hello.java", "public class Hello {}"
54
- define 'myProject' do
70
+ define 'example_3', :version => '0.9.8' do
71
+ myJavaFile = "example_3/src/main/java/Hello.java"
72
+ myFirstTextFile = path_to(:target)+"/1_5.txt"
73
+ mySecondTxtFile = path_to(:target)+"/3_7.txt"
74
+ myInstXml = path_to(:target, 'myInstaller.xml')
75
+ myInstaller = _('deploy/myInstaller.jar')
76
+ Buildr::write myJavaFile, "public class Hello {}" if !File.exists?(myJavaFile)
55
77
  package(:jar)
56
- package(:izpack).locales = ['eng', 'fra', 'deu']
57
- package(:izpack).include(package(:jar))
78
+
79
+ # :file attribute must appear on the first call to package(:izpack) or it will have no effet
80
+ package(:izpack, :file => myInstaller).locales = ['eng', 'fra', 'deu']
81
+
82
+ # we create file task for each file to be packed
83
+ file(myFirstTextFile) do Buildr.write(myFirstTextFile, "This is file 1_5.txt") end
84
+ file(mySecondTxtFile) do Buildr.write(mySecondTxtFile, "This is file 3_7.txt") end
85
+
86
+ # Use the BuildrIzPack::Pack to pack some files
87
+ pack = BuildrIzPack::Pack.new('myPackName', 'myPack description')
88
+ pack.addFile(myInstXml)
89
+ pack.addFile(package(:jar).to_s)
90
+ pack.addFile(myFirstTextFile)
91
+ pack.addFile(mySecondTxtFile, "$INSTALL_PATH/another_name")
92
+
93
+ # Create a custom installer.xml as there are just too many options to find a simple,
94
+ # less complex, easy to use abstraction. And XmlMarkup is easy to read & create!
95
+ file(myInstXml => [package(:jar).to_s, myFirstTextFile, mySecondTxtFile]) do
96
+ xm = Builder::XmlMarkup.new(:target=>File.open(myInstXml, 'w+'), :indent => 2)
97
+ xm.instruct!
98
+ xm.installation('version'=>'1.0') {
99
+ xm.tag!('info') { xm.appversion(project.version); xm.appname(project.name) }
100
+ xm.guiprefs('width' => '400', 'height' => '400', 'resizable' => 'no')
101
+ xm.panels { |x| xm.panel('classname' => 'InstallPanel') }
102
+ xm.locale { |x| xm.langpack('iso3'=>'eng') }
103
+ xm.packs {
104
+ pack.emitIzPackXML(xm)
105
+ }
106
+ }
107
+ xm.target!().close
108
+ end
109
+
110
+ # Specify an explizit dependency to the installer.xml file
111
+ package(:izpack).input = myInstXml
112
+ file(package(:izpack).to_s => myInstXml)
113
+ package(:izpack)
114
+
115
+ # It is always a good idea to check whether your buildr project had the desired effect.
116
+ # Therefore I love to add some integration tests like
117
+ check package(:izpack), 'checks, whether IzPack installer works correctly' do
118
+ File.should exist(myJavaFile)
119
+ File.should exist(myInstXml)
120
+ File.should exist(myInstaller)
121
+ content = IO.readlines(myInstXml).join('')
122
+ content.should match(/installation/)
123
+ content.should match(/\$INSTALL_PATH\/another_name/)
124
+ content.should match(/pack name="myPackName"/)
125
+ content.should match(/<description>myPack description<\/description>/)
126
+ content.should match(/target="\$INSTALL_PATH\/plugins\/1_5.txt"/)
127
+ content.should match(/target="\$INSTALL_PATH\/another_name"/)
128
+ end
129
+
58
130
  end
59
131
 
60
132
  == Living On the Edge
@@ -73,8 +145,11 @@ which changes might have broken your build. To run all the test cases:
73
145
 
74
146
  rake spec
75
147
 
148
+ (Works only with ruby-1.8.7 not with jruby or ruby 1.9)
76
149
  If you have any questions or suggestions for improvements you may reach me via E-Mail to mail:niklaus.giger@member.fsf.org
77
150
 
151
+ A continuos integration setup can be found under http://ngiger.dyndns.org/jenkins/job/buildrizpack/.
152
+
78
153
 
79
154
  == License
80
155
 
data/Rakefile CHANGED
@@ -14,7 +14,7 @@
14
14
  # the License.
15
15
 
16
16
  # To work-around a bug with gemcutter: http://stackoverflow.com/questions/4932881/gemcutter-rake-build-now-throws-undefined-method-write-for-syckemitter
17
- require 'psych' unless RUBY_PLATFORM[/java/]
17
+ require 'psych' unless RUBY_PLATFORM[/java/] or /1.8.\d/.match(RUBY_VERSION)
18
18
 
19
19
  # We need JAVA_HOME for most things (setup, spec, etc).
20
20
  unless ENV['JAVA_HOME']
@@ -16,7 +16,7 @@
16
16
 
17
17
  Gem::Specification.new do |spec|
18
18
  spec.name = 'buildrizpack'
19
- spec.version = '0.1'
19
+ spec.version = '0.2'
20
20
  spec.author = 'Niklaus Giger'
21
21
  spec.email = "niklaus.giger@member.fsf.org"
22
22
  spec.homepage = "http://buildr.apache.org/"
@@ -24,7 +24,7 @@ Gem::Specification.new do |spec|
24
24
  spec.description = <<-TEXT
25
25
  A buildr plugin contributing a new packaging method to package your project as a IzPack installer.
26
26
  TEXT
27
- #spec.rubyforge_project = 'buildrizpack'
27
+ spec.rubyforge_project = 'buildrizpack'
28
28
  # Rakefile needs to create spec for both platforms (ruby and java), using the
29
29
  # $platform global variable. In all other cases, we figure it out from RUBY_PLATFORM.
30
30
  spec.platform = $platform || RUBY_PLATFORM[/java/] || 'ruby'
@@ -42,12 +42,13 @@ TEXT
42
42
  spec.add_dependency 'net-ssh', '2.0.23'
43
43
  spec.add_dependency 'net-sftp', '2.0.4'
44
44
  spec.add_dependency 'rubyzip', '0.9.4'
45
- spec.add_dependency 'highline', '1.6.2'
45
+ spec.add_dependency 'highline', '1.5.1'
46
46
  spec.add_dependency 'json_pure', '1.4.3'
47
47
  spec.add_dependency 'rubyforge', '2.0.3'
48
48
  spec.add_dependency 'hoe', '2.3.3'
49
- spec.add_dependency 'rjb', '1.3.7' if spec.platform.to_s == 'x86-mswin32' || spec.platform.to_s == 'ruby'
50
- spec.add_dependency 'atoulme-Antwrap', '~> 0.7.2'
49
+ spec.add_dependency 'rjb', '1.3.3' if spec.platform.to_s == 'ruby'
50
+ spec.add_dependency 'rjb', '1.3.2' if spec.platform.to_s == 'x86-mswin32'
51
+ spec.add_dependency 'atoulme-Antwrap', '0.7.1'
51
52
  spec.add_dependency 'diff-lcs', '1.1.2'
52
53
  spec.add_dependency 'rspec-expectations', '2.1.0'
53
54
  spec.add_dependency 'rspec-mocks', '2.1.0'
@@ -57,24 +58,21 @@ TEXT
57
58
  spec.add_dependency 'minitar', '0.5.3'
58
59
  spec.add_dependency 'jruby-openssl', '>= 0.7' if spec.platform.to_s == 'java'
59
60
 
60
- # The documentation is currently not generated whe building via jruby
61
- unless spec.platform.to_s == 'java'
62
- spec.add_development_dependency 'jekyll', '0.11.0'
63
- spec.add_development_dependency 'RedCloth', '4.2.9'
64
- spec.add_development_dependency 'jekylltask', '1.1.0'
65
- spec.add_development_dependency 'rdoc', '3.8'
66
- spec.add_development_dependency 'rcov', '0.9.9'
67
- end
61
+ spec.add_development_dependency 'rdoc', '>=3.8'
62
+ spec.add_development_dependency 'rcov', '0.9.9'
68
63
 
69
64
  spec.add_development_dependency 'ci_reporter', '1.6.3'
70
- spec.add_development_dependency 'debugger'
65
+ spec.add_development_dependency 'sdoc'
66
+ # spec.add_development_dependency 'psych', '>=1.3.0' if spec.platform.to_s != 'java' and !/1.8.\d/.match(RUBY_VERSION)
67
+ # spec.add_development_dependency 'debugger'
71
68
  spec.add_development_dependency 'readline-ffi'
69
+ spec.add_development_dependency 'pygmentize'
72
70
 
73
71
  spec.add_development_dependency 'bundler'
74
72
  spec.add_development_dependency 'win32console' if spec.platform.to_s == 'x86-mswin32'
75
73
  spec.add_development_dependency 'rubyforge'
76
74
 
77
75
  # signing key and certificate chain
78
- spec.signing_key = '/media/Keys/gem-private_key.pem'
76
+ spec.signing_key = '/mnt/Keys/gem-private_key.pem' if false
79
77
  spec.cert_chain = ['gem-public_cert.pem']
80
78
  end
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
-
2
+ # :include:../../README.rdoc
3
3
  # Licensed to the Apache Software Foundation (ASF) under one or more
4
4
  # contributor license agreements. See the NOTICE file distributed with this
5
5
  # work for additional information regarding copyright ownership. The ASF
@@ -19,6 +19,45 @@ require "rexml/document"
19
19
  include REXML
20
20
 
21
21
  module BuildrIzPack
22
+
23
+ # A simple helper class to create a single pack
24
+ #
25
+ class Pack
26
+ # The path to be used by the IzPack-installer for this pack. Defaults to
27
+ attr_reader :defaultPath
28
+ # A hast of the files to be packed (src => installpath)
29
+ attr_reader :files
30
+ # A more elaborate description of the pack
31
+ attr_reader :description
32
+ # Attributes of the pack. a hash of name => value, eg. 'require' => 'yes'
33
+ attr_reader :attributes
34
+ # Initialize an IzPack-Pack by name, description.
35
+ # :attributes: Attributes of the pack, a Hash, eg. { 'required' => 'yes' }
36
+ def initialize(name, description, attributes = {}, defaultPath = '$INSTALL_PATH/plugins')
37
+ @description = description
38
+ @attributes = attributes
39
+ @attributes['name'] = name
40
+ @files = Hash.new
41
+ @defaultPath = defaultPath
42
+ @attributes['required'] = 'no' if !@attributes['required']
43
+ end
44
+
45
+ # Add a single file to the pack
46
+ def addFile(src, dest=nil)
47
+ orig = dest
48
+ dest = File.join(@defaultPath, File.basename(src)) if !dest
49
+ @files[src] = dest
50
+ end
51
+
52
+ # collect the XML representation for the pack using an XMLMarkup object
53
+ def emitIzPackXML(xm)
54
+ # raise "xm must be an Builder::XmlMarkup object, but is #{xm.class}" if xm.class != Builder::XmlMarkup
55
+ xm.pack(@attributes) {
56
+ xm.description(@description)
57
+ @files.each{ |src, dest| xm.singlefile('src'=> src, 'target' =>dest) }
58
+ }
59
+ end
60
+ end
22
61
 
23
62
  class IzPackTask < Buildr::ArchiveTask
24
63
 
@@ -60,17 +99,7 @@ module BuildrIzPack
60
99
 
61
100
  attr_accessor :packaging, :properties, :variables, :dynamicvariables, :conditions, :installerrequirements,:resources,
62
101
  :listeners, :jar, :native
63
- # Adds the filePaths to a given pack.
64
- #
65
- # * May be called several times for the same package
66
- #
67
- # * +packName+ - the name of the destination pack, if it is a Hash, then it must point to a hash of attributes for the pack
68
- # * +filePaths+ - May be a single filename or an array of filenames
69
- # * +description+ - Description of the pack
70
- # * +destination+ - IzPack will copy the files at installation time to this directory/file.
71
- #
72
- def addToPack(packName, filePaths, description=packName, destination='')
73
- end
102
+
74
103
  # The ArchiveTask class delegates this method
75
104
  # so we can create the archive.
76
105
  # the file_map is the result of the computations of the include and exclude filters.
@@ -86,7 +115,7 @@ module BuildrIzPack
86
115
  @locales ||= ['eng']
87
116
  @panels ||= ['TargetPanel', 'InstallPanel']
88
117
  @packs ||=
89
- raise "You must include at least one file to create an izPack installer" if file_map.size == 0 and !File.exists?(@input)
118
+ raise "You must include at least one file to create an izPack installer" if file_map.size == 0 and !File.exists?(@input)
90
119
  izPackArtifact = Buildr.artifact( "org.codehaus.izpack:izpack-standalone-compiler:jar:#{@izpackVersion}")
91
120
  doc = nil
92
121
  if !File.exists?(@input)
@@ -96,7 +125,7 @@ module BuildrIzPack
96
125
  end
97
126
  Buildr.ant('izpack-ant') do |x|
98
127
  izPackArtifact.invoke
99
- msg = "Generating izpack aus #{File.expand_path(@input)} #{File.size(@input)}"
128
+ msg = "Generating izpack aus #{File.expand_path(@input)}"
100
129
  trace msg
101
130
  if properties
102
131
  properties.each{ |name, value|
@@ -1,5 +1,5 @@
1
1
  # encoding: UTF-8
2
-
2
+ # :include:../../README.rdoc
3
3
  # Licensed to the Apache Software Foundation (ASF) under one or more
4
4
  # contributor license agreements. See the NOTICE file distributed with this
5
5
  # work for additional information regarding copyright ownership. The ASF
@@ -19,6 +19,45 @@ require "rexml/document"
19
19
  include REXML
20
20
 
21
21
  module BuildrIzPack
22
+
23
+ # A simple helper class to create a single pack
24
+ #
25
+ class Pack
26
+ # The path to be used by the IzPack-installer for this pack. Defaults to
27
+ attr_reader :defaultPath
28
+ # A hast of the files to be packed (src => installpath)
29
+ attr_reader :files
30
+ # A more elaborate description of the pack
31
+ attr_reader :description
32
+ # Attributes of the pack. a hash of name => value, eg. 'require' => 'yes'
33
+ attr_reader :attributes
34
+ # Initialize an IzPack-Pack by name, description.
35
+ # :attributes: Attributes of the pack, a Hash, eg. { 'required' => 'yes' }
36
+ def initialize(name, description, attributes = {}, defaultPath = '$INSTALL_PATH/plugins')
37
+ @description = description
38
+ @attributes = attributes
39
+ @attributes['name'] = name
40
+ @files = Hash.new
41
+ @defaultPath = defaultPath
42
+ @attributes['required'] = 'no' if !@attributes['required']
43
+ end
44
+
45
+ # Add a single file to the pack
46
+ def addFile(src, dest=nil)
47
+ orig = dest
48
+ dest = File.join(@defaultPath, File.basename(src)) if !dest
49
+ @files[src] = dest
50
+ end
51
+
52
+ # collect the XML representation for the pack using an XMLMarkup object
53
+ def emitIzPackXML(xm)
54
+ # raise "xm must be an Builder::XmlMarkup object, but is #{xm.class}" if xm.class != Builder::XmlMarkup
55
+ xm.pack(@attributes) {
56
+ xm.description(@description)
57
+ @files.each{ |src, dest| xm.singlefile('src'=> src, 'target' =>dest) }
58
+ }
59
+ end
60
+ end
22
61
 
23
62
  class IzPackTask < Buildr::ArchiveTask
24
63
 
@@ -60,17 +99,7 @@ module BuildrIzPack
60
99
 
61
100
  attr_accessor :packaging, :properties, :variables, :dynamicvariables, :conditions, :installerrequirements,:resources,
62
101
  :listeners, :jar, :native
63
- # Adds the filePaths to a given pack.
64
- #
65
- # * May be called several times for the same package
66
- #
67
- # * +packName+ - the name of the destination pack, if it is a Hash, then it must point to a hash of attributes for the pack
68
- # * +filePaths+ - May be a single filename or an array of filenames
69
- # * +description+ - Description of the pack
70
- # * +destination+ - IzPack will copy the files at installation time to this directory/file.
71
- #
72
- def addToPack(packName, filePaths, description=packName, destination='')
73
- end
102
+
74
103
  # The ArchiveTask class delegates this method
75
104
  # so we can create the archive.
76
105
  # the file_map is the result of the computations of the include and exclude filters.
@@ -86,12 +115,12 @@ module BuildrIzPack
86
115
  @locales ||= ['eng']
87
116
  @panels ||= ['TargetPanel', 'InstallPanel']
88
117
  @packs ||=
89
- raise "You must include at least one file to create an izPack installer" if file_map.size == 0 and !File.exists?(@input)
118
+ raise "You must include at least one file to create an izPack installer" if file_map.size == 0 and !File.exists?(@input)
90
119
  izPackArtifact = Buildr.artifact( "org.codehaus.izpack:izpack-standalone-compiler:jar:#{@izpackVersion}")
91
120
  doc = nil
92
121
  if !File.exists?(@input)
93
- # genInstaller(Builder::XmlMarkup.new(:target=>$stdout, :indent => 2), file_map)
94
122
  genInstaller(Builder::XmlMarkup.new(:target=>File.open(@input, 'w+'), :indent => 2), file_map)
123
+ # genInstaller(Builder::XmlMarkup.new(:target=>$stdout, :indent => 2), file_map)
95
124
  # genInstaller(Builder::XmlMarkup.new(:target=>File.open('/home/niklaus/tmp2.xml', 'w+'), :indent => 2), file_map)
96
125
  end
97
126
  Buildr.ant('izpack-ant') do |x|
@@ -15,7 +15,7 @@
15
15
 
16
16
 
17
17
  desc "Check that source files contain the Apache license"
18
- task :license=>FileList["**/*.{rb,rake,java,gemspec,buildfile}", 'Rakefile'] do |task|
18
+ task :license=>FileList["**/*.{rb,rake,gemspec,buildfile}", 'Rakefile'] do |task|
19
19
  puts "Checking that files contain the Apache license ... "
20
20
  required = task.prerequisites.select { |fn| File.file?(fn) }
21
21
  missing = required.reject { |fn|
@@ -13,19 +13,16 @@
13
13
  # License for the specific language governing permissions and limitations under
14
14
  # the License.
15
15
 
16
- unless defined?(SpecHelpers)
17
- module SandboxHook
18
-
19
- def SandboxHook.included(spec_helpers)
20
- # For testing we use the gem requirements specified on the buildr4osgi.gemspec
21
- spec = Gem::Specification.load(File.expand_path('../buildrizpack.gemspec', File.dirname(__FILE__)))
22
- spec.dependencies.each { |dep| gem dep.name, dep.version_requirements.to_s }
23
- # Make sure to load from these paths first, we don't want to load any
24
- # code from Gem library.
25
- $LOAD_PATH.unshift File.expand_path('../lib', File.dirname(__FILE__))
26
- require 'buildrizpack'
27
- end
28
- end
29
- require File.join(File.dirname(__FILE__), "/../buildr/spec/spec_helpers.rb")
30
16
 
17
+ desc "Check that source files contain the Apache license"
18
+ task :license=>FileList["**/*.{rb,rake,java,gemspec,buildfile}", 'Rakefile'] do |task|
19
+ puts "Checking that files contain the Apache license ... "
20
+ required = task.prerequisites.select { |fn| File.file?(fn) }
21
+ missing = required.reject { |fn|
22
+ comments = File.read(fn).scan(/(\/\*(.*?)\*\/)|^#\s+(.*?)$|^-#\s+(.*?)$|<!--(.*?)-->/m).
23
+ map { |match| match.compact }.flatten.join("\n")
24
+ comments =~ /Licensed to the Apache Software Foundation/ && comments =~ /http:\/\/www.apache.org\/licenses\/LICENSE-2.0/
25
+ }
26
+ fail "#{missing.join(', ')} missing Apache License, please add it before making a release!" unless missing.empty?
27
+ puts "[x] Source files contain the Apache license"
31
28
  end
@@ -13,111 +13,33 @@
13
13
  # License for the specific language governing permissions and limitations under
14
14
  # the License.
15
15
 
16
- if !RUBY_PLATFORM[/java/]
17
- gem 'rdoc'
18
- require 'rdoc/task'
19
- desc "Creates a symlink to rake's lib directory to support combined rdoc generation"
20
- file "rake/lib" do
21
- rake_path = $LOAD_PATH.find { |p| File.exist? File.join(p, "rake.rb") }
22
- mkdir_p "rake"
23
- File.symlink(rake_path, "rake/lib")
24
- end
25
-
26
- desc "Generate RDoc documentation in rdoc/"
27
- RDoc::Task.new :rdoc do |rdoc|
28
- rdoc.rdoc_dir = 'rdoc'
29
- rdoc.title = spec.name
30
- rdoc.options = spec.rdoc_options.clone
31
- rdoc.rdoc_files.include('lib/**/*.rb')
32
- rdoc.rdoc_files.include spec.extra_rdoc_files
33
-
34
- # include rake source for better inheritance rdoc
35
- rdoc.rdoc_files.include('rake/lib/**.rb')
36
- end
37
- task :rdoc => ["rake/lib"]
38
-
39
- begin
40
- require 'jekylltask'
41
- module TocFilter
42
- def toc(input)
43
- output = "<ol class=\"toc\">"
44
- input.scan(/<(h2)(?:>|\s+(.*?)>)([^<]*)<\/\1\s*>/mi).each do |entry|
45
- id = (entry[1][/^id=(['"])(.*)\1$/, 2] rescue nil)
46
- title = entry[2].gsub(/<(\w*).*?>(.*?)<\/\1\s*>/m, '\2').strip
47
- if id
48
- output << %{<li><a href="##{id}">#{title}</a></li>}
49
- else
50
- output << %{<li>#{title}</li>}
51
- end
52
- end
53
- output << "</ol>"
54
- output
55
- end
56
- end
57
- Liquid::Template.register_filter(TocFilter)
58
-
59
- desc "Generate Buildr documentation in _site/"
60
- JekyllTask.new :jekyll do |task|
61
- task.source = 'doc'
62
- task.target = '_site'
63
- end
64
-
65
- rescue LoadError
66
- puts "Buildr uses the jekyll gem to generate the Web site. You can install it by running bundler"
67
- end
68
-
69
- if `pygmentize -V`.empty?
70
- puts "Buildr uses the Pygments python library. You can install it by running 'sudo easy_install Pygments'"
71
- end
16
+ gem 'rdoc'
17
+ require 'rdoc/task'
18
+ desc "Creates a symlink to rake's lib directory to support combined rdoc generation"
19
+ file "rake/lib" do
20
+ rake_path = $LOAD_PATH.find { |p| File.exist? File.join(p, "rake.rb") }
21
+ mkdir_p "rake"
22
+ File.symlink(rake_path, "rake/lib")
23
+ end
72
24
 
73
- desc "Generate Buildr documentation as buildr.pdf"
74
- file 'buildr.pdf'=>'_site' do |task|
75
- pages = File.read('_site/preface.html').scan(/<li><a href=['"]([^'"]+)/).flatten.map { |f| "_site/#{f}" }
76
- sh 'prince', '--input=html', '--no-network', '--log=prince_errors.log', "--output=#{task.name}", '_site/preface.html', *pages
77
- end
25
+ desc "Generate RDoc documentation in rdoc/"
26
+ RDoc::Task.new :rdoc do |rdoc|
27
+ rdoc.rdoc_dir = 'rdoc'
28
+ rdoc.title = spec.name
29
+ rdoc.options = spec.rdoc_options.clone
30
+ rdoc.rdoc_files.include('lib/**/*.rb')
31
+ rdoc.rdoc_files.include spec.extra_rdoc_files
78
32
 
79
- desc "Build a copy of the Web site in the ./_site"
80
- task :site=>['_site', :rdoc, '_reports/specs.html', '_reports/coverage', 'buildr.pdf'] do
81
- cp_r 'rdoc', '_site'
82
- fail 'No RDocs in site directory' unless File.exist?('_site/rdoc/lib/buildr_rb.html')
83
- cp '_reports/specs.html', '_site'
84
- cp_r '_reports/coverage', '_site'
85
- fail 'No coverage report in site directory' unless File.exist?('_site/coverage/index.html')
86
- cp 'CHANGELOG', '_site'
87
- open("_site/.htaccess", "w") do |htaccess|
88
- htaccess << %Q{
89
- <FilesMatch "CHANGELOG">
90
- ForceType 'text/plain; charset=UTF-8'
91
- </FilesMatch>
92
- }
93
- end
94
- cp 'buildr.pdf', '_site'
95
- fail 'No PDF in site directory' unless File.exist?('_site/buildr.pdf')
96
- puts 'OK'
97
- end
33
+ # include rake source for better inheritance rdoc
34
+ rdoc.rdoc_files.include('rake/lib/**.rb')
35
+ end
36
+ task :rdoc => ["rake/lib"]
98
37
 
99
- # Publish prerequisites to Web site.
100
- task 'publish'=>:site do
101
- target = "people.apache.org:/www/#{spec.name}.apache.org/"
102
- puts "Uploading new site to #{target} ..."
103
- sh 'rsync', '--progress', '--recursive', '--delete', '_site/', target
104
- sh 'ssh', 'people.apache.org', 'chmod', '-f', '-R', 'g+w', "/www/#{spec.name}.apache.org/*"
105
- puts "Done"
106
- end
38
+ if `pygmentize -V`.empty?
39
+ puts "Buildr uses the Pygments python library. You can install it by running 'sudo easy_install Pygments'"
40
+ end
107
41
 
108
- # Update HTML + PDF documentation (but not entire site; no specs, coverage, etc.)
109
- task 'publish-doc' => ['buildr.pdf', '_site'] do
110
- cp 'buildr.pdf', '_site'
111
- target = "people.apache.org:/www/#{spec.name}.apache.org/"
112
- puts "Uploading new site to #{target} ..."
113
- sh 'rsync', '--progress', '--recursive', '_site/', target # Note: no --delete
114
- sh 'ssh', 'people.apache.org', 'chmod', '-f', '-R', 'g+w', "/www/#{spec.name}.apache.org/*"
115
- puts "Done"
116
- end
117
42
 
118
- task :clobber do
119
- rm_rf '_site'
120
- rm_f 'buildr.pdf'
121
- rm_f 'prince_errors.log'
122
- end
43
+ task :clobber do
44
+ rm_rf 'rdoc'
123
45
  end