libxml-fixed-jruby 1.0.0-jruby
Sign up to get free protection for your applications and to get access to all the features.
- data/History.txt +4 -0
- data/Manifest.txt +91 -0
- data/README.txt +50 -0
- data/Rakefile +40 -0
- data/lib/libxml-jruby.rb +84 -0
- data/lib/libxml-jruby/xml.rb +1 -0
- data/lib/libxml-jruby/xml/attr.rb +46 -0
- data/lib/libxml-jruby/xml/attributes.rb +68 -0
- data/lib/libxml-jruby/xml/document.rb +52 -0
- data/lib/libxml-jruby/xml/dtd.rb +25 -0
- data/lib/libxml-jruby/xml/node.rb +285 -0
- data/lib/libxml-jruby/xml/ns.rb +19 -0
- data/lib/libxml-jruby/xml/parser.rb +121 -0
- data/lib/libxml-jruby/xml/xpath.rb +98 -0
- data/lib/libxml.rb +1 -0
- data/lib/xml.rb +13 -0
- data/lib/xml/libxml.rb +8 -0
- data/script/benchmark/depixelate.rb +633 -0
- data/script/benchmark/hamlet.xml +9055 -0
- data/script/benchmark/sock_entries.xml +507 -0
- data/script/benchmark/throughput.rb +40 -0
- data/script/benchmark/xml_benchmarks.rb +228 -0
- data/script/test +6 -0
- data/tasks/ann.rake +81 -0
- data/tasks/bones.rake +21 -0
- data/tasks/gem.rake +126 -0
- data/tasks/git.rake +41 -0
- data/tasks/manifest.rake +49 -0
- data/tasks/notes.rake +28 -0
- data/tasks/post_load.rake +39 -0
- data/tasks/rdoc.rake +51 -0
- data/tasks/rubyforge.rake +57 -0
- data/tasks/setup.rb +268 -0
- data/tasks/spec.rake +55 -0
- data/tasks/svn.rake +48 -0
- data/tasks/test.rake +38 -0
- data/test/etc_doc_to_s.rb +19 -0
- data/test/ets_copy_bug.rb +21 -0
- data/test/ets_copy_bug3.rb +38 -0
- data/test/ets_doc_file.rb +15 -0
- data/test/ets_doc_to_s.rb +21 -0
- data/test/ets_gpx.rb +26 -0
- data/test/ets_node_gc.rb +21 -0
- data/test/ets_test.xml +2 -0
- data/test/ets_tsr.rb +9 -0
- data/test/model/books.xml +147 -0
- data/test/model/default_validation_bug.rb +0 -0
- data/test/model/merge_bug_data.xml +58 -0
- data/test/model/rubynet.xml +78 -0
- data/test/model/rubynet_project +1 -0
- data/test/model/saxtest.xml +5 -0
- data/test/model/shiporder.rnc +28 -0
- data/test/model/shiporder.rng +86 -0
- data/test/model/shiporder.xml +23 -0
- data/test/model/shiporder.xsd +31 -0
- data/test/model/simple.xml +7 -0
- data/test/model/soap.xml +27 -0
- data/test/model/xinclude.xml +5 -0
- data/test/tc_attributes.rb +110 -0
- data/test/tc_deprecated_require.rb +13 -0
- data/test/tc_document.rb +97 -0
- data/test/tc_document_write.rb +139 -0
- data/test/tc_dtd.rb +70 -0
- data/test/tc_html_parser.rb +63 -0
- data/test/tc_node.rb +108 -0
- data/test/tc_node_attr.rb +176 -0
- data/test/tc_node_cdata.rb +51 -0
- data/test/tc_node_comment.rb +32 -0
- data/test/tc_node_copy.rb +40 -0
- data/test/tc_node_edit.rb +98 -0
- data/test/tc_node_set.rb +24 -0
- data/test/tc_node_set2.rb +37 -0
- data/test/tc_node_text.rb +17 -0
- data/test/tc_node_xlink.rb +28 -0
- data/test/tc_ns.rb +18 -0
- data/test/tc_parser.rb +308 -0
- data/test/tc_parser_context.rb +126 -0
- data/test/tc_properties.rb +37 -0
- data/test/tc_reader.rb +112 -0
- data/test/tc_relaxng.rb +39 -0
- data/test/tc_sax_parser.rb +113 -0
- data/test/tc_schema.rb +39 -0
- data/test/tc_traversal.rb +220 -0
- data/test/tc_well_formed.rb +11 -0
- data/test/tc_xinclude.rb +26 -0
- data/test/tc_xpath.rb +130 -0
- data/test/tc_xpath_context.rb +72 -0
- data/test/tc_xpointer.rb +78 -0
- data/test/test_libxml-jruby.rb +0 -0
- data/test/test_suite.rb +31 -0
- data/test/ts_working.rb +31 -0
- metadata +146 -0
@@ -0,0 +1,40 @@
|
|
1
|
+
$:.unshift(Dir.pwd + "/lib")
|
2
|
+
require 'rubygems'
|
3
|
+
require 'hpricot'
|
4
|
+
require 'xml'
|
5
|
+
require 'rexml/document'
|
6
|
+
|
7
|
+
ITERATIONS = 10
|
8
|
+
NESTED_ITERATIONS = 5
|
9
|
+
|
10
|
+
def bm(name, filename, &block)
|
11
|
+
text = File.open(filename).read
|
12
|
+
length = text.length / 1024.0 / 1024.0
|
13
|
+
puts "#{filename}: #{name} (#{(length * 1024).round} kb)"
|
14
|
+
for j in 0 .. NESTED_ITERATIONS
|
15
|
+
s = Time.now.to_f
|
16
|
+
for i in 0 .. ITERATIONS
|
17
|
+
block.call(text)
|
18
|
+
end
|
19
|
+
timer = Time.now.to_f - s
|
20
|
+
puts "\t#{length * ITERATIONS / timer} MB/s"
|
21
|
+
end
|
22
|
+
end
|
23
|
+
|
24
|
+
def bm_suite(filenames)
|
25
|
+
filenames.each do |filename|
|
26
|
+
bm("LIBXML THROUGHPUT:", filename) do |text|
|
27
|
+
XML::Parser.string(text).parse
|
28
|
+
end
|
29
|
+
|
30
|
+
bm("HPRICOT THROUGHPUT:", filename) do |text|
|
31
|
+
Hpricot.XML(text)
|
32
|
+
end
|
33
|
+
|
34
|
+
bm("REXML THROUGHPUT:", filename) do |text|
|
35
|
+
REXML::Document.new(text)
|
36
|
+
end
|
37
|
+
end
|
38
|
+
end
|
39
|
+
|
40
|
+
bm_suite("script/benchmark/hamlet.xml")
|
@@ -0,0 +1,228 @@
|
|
1
|
+
# From: https://svn.concord.org/svn/projects/trunk/common/ruby/xml_benchmarks/
|
2
|
+
#
|
3
|
+
# Each test has an XML Parser open a 98k XML document
|
4
|
+
# and count one type of leaf element (466 entries).
|
5
|
+
# This is repeated a total of 50 time sfor each Parser.
|
6
|
+
#
|
7
|
+
# These results were produced on:
|
8
|
+
# MacBook Pro
|
9
|
+
# 2.33 GHz Intel Core 2 Duo
|
10
|
+
# 4 GB memory
|
11
|
+
# running MacOS X 10.5.2
|
12
|
+
#
|
13
|
+
# Ruby versions tested:
|
14
|
+
# MRI: ruby 1.8.6 (2007-09-24 patchlevel 111) [universal-darwin9.0]
|
15
|
+
# JRuby: ruby 1.8.6 (2008-03-20 rev 6255) [i386-jruby1.1RC3] on Java 1.5.0_13
|
16
|
+
# JRuby: ruby 1.8.6 (2008-03-20 rev 6255) [i386-jruby1.1RC3] on Java 1.6.0_03 (Soylatte)
|
17
|
+
#
|
18
|
+
# Library versions MRI:
|
19
|
+
# libxml-ruby 0.5.2.0
|
20
|
+
# hpricot 0.6
|
21
|
+
#
|
22
|
+
# Library versions JRuby:
|
23
|
+
# hpricot 0.6.161
|
24
|
+
# jrexml 0.5.3
|
25
|
+
#
|
26
|
+
# Summary data: 100 iterations, timings from second set
|
27
|
+
#
|
28
|
+
# Platform and method total time
|
29
|
+
# -----------------------------------------------------------
|
30
|
+
# JRuby (Java 1.6.0) jdom_document_builder 0.363
|
31
|
+
# MRI: libxml 0.389
|
32
|
+
# JRuby (Java 1.6.0 server) jdom_document_builder 0.412
|
33
|
+
# JRuby (server) jdom_document_builder 0.617
|
34
|
+
# JRuby: jdom_document_builder 1.451
|
35
|
+
# MRI: hpricot 2.056
|
36
|
+
# JRuby (Java 1.6.0 server) hpricot 2.272
|
37
|
+
# JRuby (Java 1.6.0) hpricot 2.273
|
38
|
+
# JRuby (server) hpricot 3.447
|
39
|
+
# JRuby: hpricot 6.198
|
40
|
+
# JRuby (Java 1.6.0 server) rexml 6.251
|
41
|
+
# JRuby (Java 1.6.0) rexml 6.356
|
42
|
+
# MRI: rexml 7.624
|
43
|
+
# JRuby (server) rexml 9.609
|
44
|
+
# JRuby: rexml 12.944
|
45
|
+
#
|
46
|
+
# Detailed data:
|
47
|
+
#
|
48
|
+
# $ ruby ./xml_benchmarks.rb
|
49
|
+
#
|
50
|
+
# Ruby version: MRI 1.8.6 (2007-09-24 rev 111), platform: universal-darwin9.0
|
51
|
+
#
|
52
|
+
# 100 times: Open 98k XML document and count one type of leaf element (466 entries)
|
53
|
+
#
|
54
|
+
# Rehearsal -------------------------------------------
|
55
|
+
# rexml 7.650000 0.040000 7.690000 ( 7.692767)
|
56
|
+
# hpricot 2.100000 0.030000 2.130000 ( 2.133564)
|
57
|
+
# libxml 0.390000 0.030000 0.420000 ( 0.419391)
|
58
|
+
# --------------------------------- total: 10.240000sec
|
59
|
+
#
|
60
|
+
# user system total real
|
61
|
+
# rexml 7.600000 0.010000 7.610000 ( 7.624436)
|
62
|
+
# hpricot 2.040000 0.020000 2.060000 ( 2.056690)
|
63
|
+
# libxml 0.380000 0.010000 0.390000 ( 0.389298)
|
64
|
+
#
|
65
|
+
# $ jruby ./xml_benchmarks.rb
|
66
|
+
#
|
67
|
+
# Ruby version: JRuby 1.8.6 (2008-03-20 rev 6255) [i386-jruby1.1RC3], platform: Java: version: 1.5.0_13
|
68
|
+
#
|
69
|
+
# 100 times: Open 98k XML document and count one type of leaf element (466 entries)
|
70
|
+
#
|
71
|
+
# Rehearsal ---------------------------------------------------------
|
72
|
+
# rexml 14.063000 0.000000 14.063000 ( 14.063000)
|
73
|
+
# hpricot 6.579000 0.000000 6.579000 ( 6.579000)
|
74
|
+
# jdom_document_builder 2.211000 0.000000 2.211000 ( 2.211000)
|
75
|
+
# ----------------------------------------------- total: 22.853000sec
|
76
|
+
#
|
77
|
+
# user system total real
|
78
|
+
# rexml 12.944000 0.000000 12.944000 ( 12.944000)
|
79
|
+
# hpricot 6.198000 0.000000 6.198000 ( 6.198000)
|
80
|
+
# jdom_document_builder 1.450000 0.000000 1.450000 ( 1.451000)
|
81
|
+
#
|
82
|
+
# $ jruby -J-server ./xml_benchmarks.rb
|
83
|
+
#
|
84
|
+
# Ruby version: JRuby 1.8.6 (2008-03-20 rev 6255) [i386-jruby1.1RC3], platform: Java: version: 1.5.0_13
|
85
|
+
#
|
86
|
+
# 100 times: Open 98k XML document and count one type of leaf element (466 entries)
|
87
|
+
#
|
88
|
+
# Rehearsal ---------------------------------------------------------
|
89
|
+
# rexml 13.212000 0.000000 13.212000 ( 13.212000)
|
90
|
+
# hpricot 6.992000 0.000000 6.992000 ( 6.993000)
|
91
|
+
# jdom_document_builder 1.873000 0.000000 1.873000 ( 1.873000)
|
92
|
+
# ----------------------------------------------- total: 22.077000sec
|
93
|
+
#
|
94
|
+
# user system total real
|
95
|
+
# rexml 9.611000 0.000000 9.611000 ( 9.609000)
|
96
|
+
# hpricot 3.446000 0.000000 3.446000 ( 3.447000)
|
97
|
+
# jdom_document_builder 0.616000 0.000000 0.616000 ( 0.617000)
|
98
|
+
#
|
99
|
+
#
|
100
|
+
# *** Now using: Java 1.6.0_03 (Soylatte) ***
|
101
|
+
#
|
102
|
+
# $ jruby ./xml_benchmarks.rb
|
103
|
+
#
|
104
|
+
# Ruby version: JRuby 1.8.6 (2008-03-20 rev 6255) [i386-jruby1.1RC3], platform: Java: version: 1.6.0_03-p3
|
105
|
+
#
|
106
|
+
# 100 times: Open 98k XML document and count one type of leaf element (466 entries)
|
107
|
+
#
|
108
|
+
# Rehearsal ---------------------------------------------------------
|
109
|
+
# rexml 9.976000 0.000000 9.976000 ( 9.976000)
|
110
|
+
# hpricot 4.129000 0.000000 4.129000 ( 4.129000)
|
111
|
+
# jdom_document_builder 2.287000 0.000000 2.287000 ( 2.287000)
|
112
|
+
# ----------------------------------------------- total: 16.392000sec
|
113
|
+
#
|
114
|
+
# user system total real
|
115
|
+
# rexml 6.357000 0.000000 6.357000 ( 6.356000)
|
116
|
+
# hpricot 2.274000 0.000000 2.274000 ( 2.273000)
|
117
|
+
# jdom_document_builder 0.363000 0.000000 0.363000 ( 0.363000)
|
118
|
+
#
|
119
|
+
# $ jruby -J-server ./xml_benchmarks.rb
|
120
|
+
#
|
121
|
+
# Ruby version: JRuby 1.8.6 (2008-03-20 rev 6255) [i386-jruby1.1RC3], platform: Java: version: 1.6.0_03-p3
|
122
|
+
#
|
123
|
+
# 100 times: Open 98k XML document and count one type of leaf element (466 entries)
|
124
|
+
#
|
125
|
+
# Rehearsal ---------------------------------------------------------
|
126
|
+
# rexml 9.936000 0.000000 9.936000 ( 9.935000)
|
127
|
+
# hpricot 4.074000 0.000000 4.074000 ( 4.074000)
|
128
|
+
# jdom_document_builder 1.355000 0.000000 1.355000 ( 1.355000)
|
129
|
+
# ----------------------------------------------- total: 15.365000sec
|
130
|
+
#
|
131
|
+
# user system total real
|
132
|
+
# rexml 6.251000 0.000000 6.251000 ( 6.251000)
|
133
|
+
# hpricot 2.273000 0.000000 2.273000 ( 2.272000)
|
134
|
+
# jdom_document_builder 0.412000 0.000000 0.412000 ( 0.412000)
|
135
|
+
#
|
136
|
+
|
137
|
+
$:.unshift 'lib'
|
138
|
+
$:.unshift 'ext/libxml'
|
139
|
+
|
140
|
+
__DIR__ = File.dirname(__FILE__)
|
141
|
+
|
142
|
+
require 'benchmark'
|
143
|
+
require 'rexml/document'
|
144
|
+
require 'hpricot'
|
145
|
+
|
146
|
+
if RUBY_PLATFORM =~ /java/
|
147
|
+
include Java
|
148
|
+
import javax.xml.parsers.DocumentBuilder
|
149
|
+
import javax.xml.parsers.DocumentBuilderFactory
|
150
|
+
@dbf = DocumentBuilderFactory.new_instance
|
151
|
+
@ruby_info = "Ruby version: JRuby #{RUBY_VERSION} (#{RUBY_RELEASE_DATE} rev #{RUBY_PATCHLEVEL}) [i386-jruby#{JRUBY_VERSION}]"
|
152
|
+
@ruby_info << ", platform: Java, version #{java.lang.System.getProperty('java.version')}"
|
153
|
+
else
|
154
|
+
require 'xml'
|
155
|
+
@xml_parser = XML::Parser.new
|
156
|
+
@ruby_info = "Ruby version: MRI #{RUBY_VERSION} (#{RUBY_RELEASE_DATE}"# rev #{RUBY_PATCHLEVEL})"
|
157
|
+
@ruby_info << ", platform: #{RUBY_PLATFORM}"
|
158
|
+
end
|
159
|
+
|
160
|
+
@bundle_with_466_sock_entries = File.read(File.join(__DIR__,"sock_entries.xml"))
|
161
|
+
|
162
|
+
def rexml_count_socks
|
163
|
+
doc = REXML::Document.new(@bundle_with_466_sock_entries).root
|
164
|
+
socks = doc.elements.to_a('./sockEntries').length
|
165
|
+
end
|
166
|
+
|
167
|
+
unless RUBY_PLATFORM =~ /java/
|
168
|
+
def libxml_count_socks
|
169
|
+
@xml_parser.string = @bundle_with_466_sock_entries
|
170
|
+
doc = @xml_parser.parse.root
|
171
|
+
socks = doc.find('//sockEntries').length
|
172
|
+
end
|
173
|
+
end
|
174
|
+
|
175
|
+
def hpricot_count_socks
|
176
|
+
doc = Hpricot.XML(@bundle_with_466_sock_entries)
|
177
|
+
socks = doc.search("//sockEntries").length
|
178
|
+
end
|
179
|
+
|
180
|
+
if RUBY_PLATFORM =~ /java/
|
181
|
+
def jdom_document_builder_count_socks
|
182
|
+
doc = @dbf.new_document_builder.parse("bundle_with_466_sock_entries.xml").get_document_element
|
183
|
+
socks = doc.getElementsByTagName("sockEntries")
|
184
|
+
socks.get_length
|
185
|
+
end
|
186
|
+
end
|
187
|
+
|
188
|
+
n = 100
|
189
|
+
test_iterations = ARGV.first.to_i
|
190
|
+
test_iterations = 1 unless test_iterations > 1
|
191
|
+
puts
|
192
|
+
puts @ruby_info
|
193
|
+
puts
|
194
|
+
puts "#{n} times: Open 98k XML document and count one type of leaf element (466 entries)"
|
195
|
+
puts
|
196
|
+
print "running benchmark "
|
197
|
+
if test_iterations == 1
|
198
|
+
puts "once.\n\n"
|
199
|
+
else
|
200
|
+
puts "#{test_iterations} times.\n\n"
|
201
|
+
end
|
202
|
+
test_iterations.times do
|
203
|
+
Benchmark.bmbm do |x|
|
204
|
+
x.report("libxml") { n.times {libxml_count_socks} } unless RUBY_PLATFORM =~ /java/
|
205
|
+
x.report("hpricot") { n.times {hpricot_count_socks} }
|
206
|
+
x.report("rexml") { n.times {rexml_count_socks} }
|
207
|
+
x.report("jdom_document_builder") { n.times {jdom_document_builder_count_socks} } if RUBY_PLATFORM =~ /java/
|
208
|
+
end
|
209
|
+
puts
|
210
|
+
end
|
211
|
+
|
212
|
+
#
|
213
|
+
# jrexml doesn't appear to have any speedup in this test
|
214
|
+
#
|
215
|
+
# if RUBY_PLATFORM =~ /java/
|
216
|
+
# require 'jrexml'
|
217
|
+
# def rexml_with_jrexml_count_socks
|
218
|
+
# doc = REXML::Document.new(@bundle_with_466_sock_entries).root
|
219
|
+
# socks = doc.elements.to_a('./sockEntries').length
|
220
|
+
# end
|
221
|
+
#
|
222
|
+
# puts "\nNow add in JREXML to see if it speeds up rexml\n"
|
223
|
+
# Benchmark.bmbm do |x|
|
224
|
+
# x.report("rexml+jrexml") { n.times {rexml_with_jrexml_count_socks} }
|
225
|
+
# end
|
226
|
+
# puts
|
227
|
+
# end
|
228
|
+
|
data/script/test
ADDED
data/tasks/ann.rake
ADDED
@@ -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
|
data/tasks/bones.rake
ADDED
@@ -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
|
data/tasks/gem.rake
ADDED
@@ -0,0 +1,126 @@
|
|
1
|
+
# $Id$
|
2
|
+
|
3
|
+
require 'rake/gempackagetask'
|
4
|
+
|
5
|
+
namespace :gem do
|
6
|
+
|
7
|
+
PROJ.gem._spec = Gem::Specification.new do |s|
|
8
|
+
s.name = PROJ.name
|
9
|
+
s.version = PROJ.version
|
10
|
+
s.summary = PROJ.summary
|
11
|
+
s.authors = Array(PROJ.authors)
|
12
|
+
s.email = PROJ.email
|
13
|
+
s.homepage = Array(PROJ.url).first
|
14
|
+
s.rubyforge_project = PROJ.rubyforge.name
|
15
|
+
|
16
|
+
s.description = PROJ.description
|
17
|
+
|
18
|
+
PROJ.gem.dependencies.each do |dep|
|
19
|
+
s.add_dependency(*dep)
|
20
|
+
end
|
21
|
+
|
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
|
+
|
26
|
+
s.bindir = 'bin'
|
27
|
+
dirs = Dir["{#{PROJ.libs.join(',')}}"]
|
28
|
+
s.require_paths = dirs unless dirs.empty?
|
29
|
+
|
30
|
+
incl = Regexp.new(PROJ.rdoc.include.join('|'))
|
31
|
+
excl = PROJ.rdoc.exclude.dup.concat %w[\.rb$ ^(\.\/|\/)?ext]
|
32
|
+
excl = Regexp.new(excl.join('|'))
|
33
|
+
rdoc_files = PROJ.gem.files.find_all do |fn|
|
34
|
+
case fn
|
35
|
+
when excl; false
|
36
|
+
when incl; true
|
37
|
+
else false end
|
38
|
+
end
|
39
|
+
s.rdoc_options = PROJ.rdoc.opts + ['--main', PROJ.rdoc.main]
|
40
|
+
s.extra_rdoc_files = rdoc_files
|
41
|
+
s.has_rdoc = true
|
42
|
+
|
43
|
+
if test ?f, PROJ.test.file
|
44
|
+
s.test_file = PROJ.test.file
|
45
|
+
else
|
46
|
+
s.test_files = PROJ.test.files.to_a
|
47
|
+
end
|
48
|
+
|
49
|
+
# Do any extra stuff the user wants
|
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
|
62
|
+
|
63
|
+
desc 'Show information about the gem'
|
64
|
+
task :debug => 'gem:prereqs' do
|
65
|
+
puts PROJ.gem._spec.to_ruby
|
66
|
+
end
|
67
|
+
|
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
|
+
}
|
91
|
+
end
|
92
|
+
|
93
|
+
desc 'Install the gem'
|
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}"
|
99
|
+
end
|
100
|
+
|
101
|
+
desc 'Uninstall the gem'
|
102
|
+
task :uninstall do
|
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}"
|
115
|
+
end
|
116
|
+
|
117
|
+
end # namespace :gem
|
118
|
+
|
119
|
+
desc 'Alias to gem:package'
|
120
|
+
task :gem => 'gem:package'
|
121
|
+
|
122
|
+
task :clobber => 'gem:clobber_package'
|
123
|
+
|
124
|
+
remove_desc_for_task %w(gem:clobber_package)
|
125
|
+
|
126
|
+
# EOF
|