buildrizpack 0.1 → 0.2

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.
@@ -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