excemel 1.0.0-java

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile ADDED
@@ -0,0 +1,10 @@
1
+ source "http://rubygems.org"
2
+
3
+ gem 'blankslate', '~>2.1.2.4'
4
+
5
+ group :development do
6
+ gem "bundler", "~> 1.0.0"
7
+ gem "jeweler", "~> 1.6.2"
8
+ gem "rcov", ">= 0"
9
+ gem "rdoc", ">= 3.7"
10
+ end
data/History.txt ADDED
@@ -0,0 +1,3 @@
1
+ == 0.0.1
2
+
3
+ - initial release
data/LICENSE ADDED
@@ -0,0 +1,21 @@
1
+ Copyright &169;2001-2011 Integrallis Software, LLC.
2
+ All Rights Reserved.
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining
5
+ a copy of this software and associated documentation files (the
6
+ "Software"), to deal in the Software without restriction, including
7
+ without limitation the rights to use, copy, modify, merge, publish,
8
+ distribute, sublicense, and/or sell copies of the Software, and to
9
+ permit persons to whom the Software is furnished to do so, subject to
10
+ the following conditions:
11
+
12
+ The above copyright notice and this permission notice shall be
13
+ included in all copies or substantial portions of the Software.
14
+
15
+ THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
16
+ EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
17
+ MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
18
+ NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
19
+ LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
20
+ OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
21
+ WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
data/Manifest.txt ADDED
@@ -0,0 +1,10 @@
1
+ History.txt
2
+ Manifest.txt
3
+ README.txt
4
+ Rakefile
5
+ LICENSE
6
+ lib/excemel.rb
7
+ lib/excemel/excemel.rb
8
+ lib/module/lang.rb
9
+ lib/module/xom.rb
10
+ lib/java/xom-1.2.7.jar
data/README.rdoc ADDED
@@ -0,0 +1,23 @@
1
+ == Project: Excemel
2
+
3
+ Excemel is a Ruby DSL for Elliotte Rusty Harold's XOM XML library. It is based
4
+ on Jim Weirich's Builder. Excemel brings to JRuby the expressiveness and
5
+ close-to-the-language XML construction features of Builder with the correctness,
6
+ simplicity, and performance of XOM.
7
+
8
+ Excemel extends the semantics of Builder with methods to navigate the
9
+ in memory XML document with XPath and exposing some of the powerful XML
10
+ manipulation capabilities of XOM.
11
+
12
+ == Usage
13
+
14
+ See usage examples under /examples directory of this distribution
15
+
16
+ == Contact
17
+
18
+ Author:: Brian Sam-Bodden
19
+ Email:: bsbodden@integrallis.com
20
+ Home Page:: http://integrallis.com
21
+ License:: MIT Licence (http://www.opensource.org/licenses/mit-license.html)
22
+
23
+
data/Rakefile ADDED
@@ -0,0 +1,78 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright &169;2001-2008 Integrallis Software, LLC.
5
+ # All Rights Reserved.
6
+ #
7
+ # Permission is granted for use, copying, modification, distribution,
8
+ # and distribution of modified versions of this work as long as the
9
+ # above copyright notice is included.
10
+ #++
11
+
12
+ # encoding: utf-8
13
+
14
+ # --------------------------------------------------------------------
15
+
16
+ require 'rubygems'
17
+ require 'bundler'
18
+ begin
19
+ Bundler.setup(:default, :development)
20
+ rescue Bundler::BundlerError => e
21
+ $stderr.puts e.message
22
+ $stderr.puts "Run `bundle install` to install missing gems"
23
+ exit e.status_code
24
+ end
25
+ require 'rake'
26
+
27
+ # --------------------------------------------------------------------
28
+
29
+ require 'jeweler'
30
+ Jeweler::Tasks.new do |gem|
31
+ # gem is a Gem::Specification... see http://docs.rubygems.org/read/chapter/20 for more options
32
+ gem.name = "excemel"
33
+ gem.homepage = "http://github.com/bsbodden/excemel"
34
+ gem.license = "MIT"
35
+ gem.summary = "JRuby DSL for XOM"
36
+ gem.description = "JRuby DSL for XML Building and Manipulation with XPath & XQuery"
37
+ gem.email = "bsbodden@integrallis.com"
38
+ gem.authors = ["Brian Sam-Bodden"]
39
+ gem.platform = "java"
40
+ gem.files = FileList["History.txt", "Manifest.txt", "README.rdoc", "Gemfile", "Rakefile", "LICENSE", "lib/**/*.rb", "lib/java/*.jar"]
41
+ # dependencies defined in Gemfile
42
+ end
43
+ Jeweler::RubygemsDotOrgTasks.new
44
+
45
+ # --------------------------------------------------------------------
46
+
47
+ require 'rake/testtask'
48
+ Rake::TestTask.new(:test) do |test|
49
+ test.libs << 'lib' << 'test'
50
+ test.pattern = 'test/**/test_*.rb'
51
+ test.verbose = true
52
+ end
53
+
54
+ # --------------------------------------------------------------------
55
+
56
+ require 'rcov/rcovtask'
57
+ Rcov::RcovTask.new do |test|
58
+ test.libs << 'test'
59
+ test.pattern = 'test/**/test_*.rb'
60
+ test.verbose = true
61
+ test.rcov_opts << '--exclude "gems/*"'
62
+ end
63
+
64
+ task :default => :test
65
+
66
+ # --------------------------------------------------------------------
67
+
68
+ require 'rdoc/task'
69
+ RDoc::Task.new do |rdoc|
70
+ version = File.exist?('VERSION') ? File.read('VERSION') : ""
71
+
72
+ rdoc.rdoc_dir = 'rdoc'
73
+ rdoc.title = "excemel #{version}"
74
+ rdoc.rdoc_files.include('README*')
75
+ rdoc.rdoc_files.include('lib/**/*.rb')
76
+ end
77
+
78
+ # --------------------------------------------------------------------
@@ -0,0 +1,276 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright &169;2001-2008 Integrallis Software, LLC.
5
+ # All Rights Reserved.
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining
8
+ # a copy of this software and associated documentation files (the
9
+ # "Software"), to deal in the Software without restriction, including
10
+ # without limitation the rights to use, copy, modify, merge, publish,
11
+ # distribute, sublicense, and/or sell copies of the Software, and to
12
+ # permit persons to whom the Software is furnished to do so, subject to
13
+ # the following conditions:
14
+ #
15
+ # The above copyright notice and this permission notice shall be
16
+ # included in all copies or substantial portions of the Software.
17
+ #
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+ #++
26
+
27
+ require 'rubygems'
28
+ require 'blankslate'
29
+ require 'java'
30
+ require 'module/lang'
31
+ require 'module/xom'
32
+
33
+ module Excemel
34
+
35
+ class Document < BlankSlate
36
+
37
+ # Create an Excemel Document
38
+ # The method expects a hash that contain the possible elements
39
+ # :root => value : The name of the root or top-most element of the document
40
+ # :xml => value : A string containing an XML document
41
+ # :url => value : A URL pointing to an XML document
42
+ # :file => filename : A filename pointing to an XML file
43
+ # :validate => true|false : whether to validate the document being read from
44
+ # an XML string, URL or file
45
+ # :resolve_includes => true|false replaces xi:include elements by the content they refer to
46
+ # :namespace => provides a namespace prefix to the elements
47
+ def initialize(options)
48
+ # extract options
49
+ validate = options[:validate] ? options[:validate] : false
50
+ root = options[:root]
51
+ xml = options[:xml]
52
+ url = options[:url]
53
+ file = options[:file]
54
+ namespace = options[:namespace]
55
+ resolve_includes = options[:resolve_includes] ? options[:resolve_includes] : false
56
+
57
+ if root
58
+ unless namespace
59
+ @root = XOM::Element.new "#{root}"
60
+ else
61
+ @root = XOM::Element.new "#{root}", namespace
62
+ prefix = root.to_s.split(":").first if root.include? ":"
63
+ (@namespaces ||= {})[prefix] = namespace if prefix
64
+ end
65
+
66
+ @doc = XOM::Document.new @root
67
+ else
68
+ builder = XOM::Builder.new validate
69
+ end
70
+
71
+ if xml
72
+ @doc = builder.build(xml, nil)
73
+ elsif url
74
+ @doc = builder.build url
75
+ elsif file
76
+ java_file = Lang::File.new file
77
+ @doc = builder.build java_file
78
+ end
79
+
80
+ if resolve_includes
81
+ @doc = XOM::XIncluder.resolve(@doc)
82
+ end
83
+
84
+ @root = @doc.get_root_element unless @root
85
+ @target = @root
86
+ end
87
+
88
+ # Dynamic Proxy behavior
89
+ # Add XML elements (tags) based on the name of the method called on the
90
+ # Document instance, blocks passed get processed recursively
91
+ def method_missing(sym, *args, &block)
92
+ if sym.to_s != 'class' && sym.to_s != 'to_s' && sym.to_s != 'inspect' # WTF? If I don't do this I
93
+ text = nil # end up with extraneous tags
94
+ attrs = nil # in the resulting document!!
95
+ namespace = nil
96
+ sym = "#{sym}:#{args.shift}" if args.first.kind_of?(Symbol)
97
+ prefix = sym.to_s.split(":").first if sym.to_s.include? ":"
98
+ args.each do |arg|
99
+ case arg
100
+ when Hash
101
+ if arg.has_key? :namespace
102
+ namespace = arg[:namespace]
103
+ prefix = sym.to_s.split(":").first
104
+ else
105
+ attrs ||= {}
106
+ attrs.merge!(arg)
107
+ end
108
+ else
109
+ text ||= ''
110
+ text << arg.to_s
111
+ end
112
+ end
113
+
114
+ # try to get the namespace from the saved namespaces
115
+ if prefix != nil && namespace.nil? && @namespaces != nil
116
+ namespace = "#{@namespaces[prefix]}"
117
+ end
118
+
119
+ unless namespace
120
+ tag = XOM::Element.new sym.to_s
121
+ else
122
+ tag = XOM::Element.new sym.to_s, namespace
123
+ end
124
+
125
+ _add_attributes(tag, attrs)
126
+
127
+ if block
128
+ _nested_structures(block, tag)
129
+ elsif !text.nil?
130
+ tag.append_child text
131
+ end
132
+
133
+ @target.append_child tag
134
+ end
135
+
136
+ self
137
+ end
138
+
139
+ # Returns the XML document as a single line, e.g. no formatting
140
+ def to_xml
141
+ @doc.to_xml
142
+ end
143
+
144
+ # Appends a comment node at the current position in the document
145
+ def comment!(string)
146
+ comment = XOM::Comment.new string
147
+ @target.append_child(comment)
148
+ self
149
+ end
150
+
151
+ # Appends a text node at the current position in the document
152
+ def text!(string)
153
+ text = XOM::Text.new string
154
+ @target.append_child(text)
155
+ self
156
+ end
157
+
158
+ # Appends a processing instruction at the current position in the document
159
+ def processing_instruction!(target, data)
160
+ pi = XOM::ProcessingInstruction.new(target, data)
161
+ @target.append_child(pi)
162
+ self
163
+ end
164
+
165
+ # Attempts to reposition the document pointer based on the first match of
166
+ # and XQuery expression. Return true is the pointer was successfully moved
167
+ # and false otherwise
168
+ def target!(xpath_query)
169
+ nodes = @doc.query xpath_query
170
+ (0..nodes.size-1).each do |i|
171
+ node = nodes.get(i)
172
+ if node.class == XOM::Element
173
+ @target = node
174
+ return true
175
+ end
176
+ end
177
+ return false
178
+ end
179
+
180
+ # Create a tag named +sym+. Other than the first argument which
181
+ # is the tag name, the arguments are the same as the tags
182
+ # implemented via <tt>method_missing</tt>.
183
+ # XOM will throw an exception if you pass something with a prefix but no
184
+ # associated namespace
185
+ def tag!(sym, *args, &block)
186
+ method_missing(sym.to_sym, *args, &block)
187
+ self
188
+ end
189
+
190
+ # Returns a pretty-formatted document with the given indent, max line length
191
+ # and encoding. The preserve_base_uri determines whether preserves the
192
+ # original base URIs by inserting extra xml:base attributes.
193
+ def to_pretty_xml(indent=2, line_lenght=0, encoding='utf-8', preserve_base_uri=true)
194
+ baos = Lang::ByteArrayOutputStream.new
195
+ serializer = XOM::Serializer.new(baos, encoding)
196
+ serializer.indent = indent
197
+ serializer.max_length = line_lenght
198
+ serializer.write @doc
199
+ baos.to_string
200
+ end
201
+
202
+ # Appends an XML document type declaration at the current position in the
203
+ # document
204
+ def doc_type!(root_element_name, public_id='', system_id='')
205
+ doctype = XOM::DocType(root_element_name, public_id, system_id)
206
+ @doc.insert_child(doctype, 0)
207
+ self
208
+ end
209
+
210
+ # Returns the value of the first child element with the specified name in
211
+ # no namespace. If there is no such element, it returns nill.
212
+ def find_first_tag_by_name(tag_name)
213
+ element = @root.get_first_child_element tag_name
214
+ element ? element.get_value : nil
215
+ end
216
+
217
+ # Returns the values of the nodes selected by the XPath expression in the
218
+ # context of this node in document order as defined by XSLT. This XPath
219
+ # expression must not contain any namespace prefixes.
220
+ def query(xpath_query)
221
+ nodes = @doc.query xpath_query
222
+ result = Array.new
223
+ (0..nodes.size-1).each do |i| result << nodes.get(i).get_value end
224
+ result
225
+ end
226
+
227
+ # See Jim Weirich's comment on builder (plus all the test frameworks seem
228
+ # to call nil? on objects being tested
229
+ def nil?
230
+ false
231
+ end
232
+
233
+ # Returns the value of the document as defined by XPath 1.0. This is the
234
+ # same as the value of the root element, which is the complete PCDATA
235
+ # content of the root element, without any tags, comments, or processing
236
+ # instructions after all entity and character references have been resolved.
237
+ def extract_text
238
+ @doc.get_value
239
+ end
240
+
241
+ # Returns XML in the format specified by the Canonica XML Version 1.0
242
+ # (w3.org/TR/2001/REC-xml-c14n-20010315 or Exclusive XML)
243
+ # Canonicalization Version 1.0 (w3.org/TR/2002/REC-xml-exc-c14n-20020718/)
244
+ def to_canonical_form
245
+ baos = Lang::ByteArrayOutputStream.new
246
+ outputter = XOM::Canonicalizer.new baos
247
+ outputter.write(@doc)
248
+ baos.to_string
249
+ end
250
+
251
+ private
252
+
253
+ # Adds attributes to the given Element (tag) as define by the parameter
254
+ # target
255
+ def _add_attributes(target, attrs)
256
+ if attrs
257
+ attrs.each do |key, value|
258
+ attribute = XOM::Attribute.new(key.to_s, value.to_s)
259
+ target.add_attribute(attribute)
260
+ end
261
+ end
262
+ end
263
+
264
+ # Recursively processed blocks passed to document in the context of a method
265
+ # call
266
+ def _nested_structures(block, new_target)
267
+ old_target = @target
268
+ @target = new_target
269
+ block.call(self)
270
+ ensure
271
+ @target = old_target
272
+ end
273
+
274
+ end
275
+
276
+ end
data/lib/excemel.rb ADDED
@@ -0,0 +1,27 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright &169;2001-2008 Integrallis Software, LLC.
5
+ # All Rights Reserved.
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining
8
+ # a copy of this software and associated documentation files (the
9
+ # "Software"), to deal in the Software without restriction, including
10
+ # without limitation the rights to use, copy, modify, merge, publish,
11
+ # distribute, sublicense, and/or sell copies of the Software, and to
12
+ # permit persons to whom the Software is furnished to do so, subject to
13
+ # the following conditions:
14
+ #
15
+ # The above copyright notice and this permission notice shall be
16
+ # included in all copies or substantial portions of the Software.
17
+ #
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+ #++
26
+
27
+ require 'excemel/excemel'
Binary file
@@ -0,0 +1,32 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright &169;2001-2008 Integrallis Software, LLC.
5
+ # All Rights Reserved.
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining
8
+ # a copy of this software and associated documentation files (the
9
+ # "Software"), to deal in the Software without restriction, including
10
+ # without limitation the rights to use, copy, modify, merge, publish,
11
+ # distribute, sublicense, and/or sell copies of the Software, and to
12
+ # permit persons to whom the Software is furnished to do so, subject to
13
+ # the following conditions:
14
+ #
15
+ # The above copyright notice and this permission notice shall be
16
+ # included in all copies or substantial portions of the Software.
17
+ #
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+ #++
26
+
27
+ require 'java'
28
+
29
+ module Lang
30
+ include_package 'java.lang'
31
+ include_package 'java.io'
32
+ end
data/lib/module/xom.rb ADDED
@@ -0,0 +1,34 @@
1
+ #!/usr/bin/env ruby
2
+
3
+ #--
4
+ # Copyright &169;2001-2008 Integrallis Software, LLC.
5
+ # All Rights Reserved.
6
+ #
7
+ # Permission is hereby granted, free of charge, to any person obtaining
8
+ # a copy of this software and associated documentation files (the
9
+ # "Software"), to deal in the Software without restriction, including
10
+ # without limitation the rights to use, copy, modify, merge, publish,
11
+ # distribute, sublicense, and/or sell copies of the Software, and to
12
+ # permit persons to whom the Software is furnished to do so, subject to
13
+ # the following conditions:
14
+ #
15
+ # The above copyright notice and this permission notice shall be
16
+ # included in all copies or substantial portions of the Software.
17
+ #
18
+ # THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
19
+ # EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
20
+ # MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
21
+ # NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
22
+ # LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
23
+ # OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
24
+ # WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
25
+ #++
26
+
27
+ require 'java'
28
+ require 'java/xom-1.2.7.jar'
29
+
30
+ module XOM
31
+ include_package 'nu.xom'
32
+ include_package 'nu.xom.canonical'
33
+ include_package 'nu.xom.xinclude'
34
+ end
metadata ADDED
@@ -0,0 +1,124 @@
1
+ --- !ruby/object:Gem::Specification
2
+ name: excemel
3
+ version: !ruby/object:Gem::Version
4
+ prerelease:
5
+ version: 1.0.0
6
+ platform: java
7
+ authors:
8
+ - Brian Sam-Bodden
9
+ autorequire:
10
+ bindir: bin
11
+ cert_chain: []
12
+
13
+ date: 2011-06-29 00:00:00 -07:00
14
+ default_executable:
15
+ dependencies:
16
+ - !ruby/object:Gem::Dependency
17
+ name: blankslate
18
+ version_requirements: &id001 !ruby/object:Gem::Requirement
19
+ none: false
20
+ requirements:
21
+ - - ~>
22
+ - !ruby/object:Gem::Version
23
+ version: 2.1.2.4
24
+ requirement: *id001
25
+ prerelease: false
26
+ type: :runtime
27
+ - !ruby/object:Gem::Dependency
28
+ name: bundler
29
+ version_requirements: &id002 !ruby/object:Gem::Requirement
30
+ none: false
31
+ requirements:
32
+ - - ~>
33
+ - !ruby/object:Gem::Version
34
+ version: 1.0.0
35
+ requirement: *id002
36
+ prerelease: false
37
+ type: :development
38
+ - !ruby/object:Gem::Dependency
39
+ name: jeweler
40
+ version_requirements: &id003 !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ~>
44
+ - !ruby/object:Gem::Version
45
+ version: 1.6.2
46
+ requirement: *id003
47
+ prerelease: false
48
+ type: :development
49
+ - !ruby/object:Gem::Dependency
50
+ name: rcov
51
+ version_requirements: &id004 !ruby/object:Gem::Requirement
52
+ none: false
53
+ requirements:
54
+ - - ">="
55
+ - !ruby/object:Gem::Version
56
+ version: "0"
57
+ requirement: *id004
58
+ prerelease: false
59
+ type: :development
60
+ - !ruby/object:Gem::Dependency
61
+ name: rdoc
62
+ version_requirements: &id005 !ruby/object:Gem::Requirement
63
+ none: false
64
+ requirements:
65
+ - - ">="
66
+ - !ruby/object:Gem::Version
67
+ version: "3.7"
68
+ requirement: *id005
69
+ prerelease: false
70
+ type: :development
71
+ description: JRuby DSL for XML Building and Manipulation with XPath & XQuery
72
+ email: bsbodden@integrallis.com
73
+ executables: []
74
+
75
+ extensions: []
76
+
77
+ extra_rdoc_files:
78
+ - LICENSE
79
+ - README.rdoc
80
+ files:
81
+ - Gemfile
82
+ - History.txt
83
+ - LICENSE
84
+ - Manifest.txt
85
+ - README.rdoc
86
+ - Rakefile
87
+ - lib/excemel.rb
88
+ - lib/excemel/excemel.rb
89
+ - lib/java/xom-1.2.7.jar
90
+ - lib/module/lang.rb
91
+ - lib/module/xom.rb
92
+ has_rdoc: true
93
+ homepage: http://github.com/bsbodden/excemel
94
+ licenses:
95
+ - MIT
96
+ post_install_message:
97
+ rdoc_options: []
98
+
99
+ require_paths:
100
+ - lib
101
+ required_ruby_version: !ruby/object:Gem::Requirement
102
+ none: false
103
+ requirements:
104
+ - - ">="
105
+ - !ruby/object:Gem::Version
106
+ hash: 2
107
+ segments:
108
+ - 0
109
+ version: "0"
110
+ required_rubygems_version: !ruby/object:Gem::Requirement
111
+ none: false
112
+ requirements:
113
+ - - ">="
114
+ - !ruby/object:Gem::Version
115
+ version: "0"
116
+ requirements: []
117
+
118
+ rubyforge_project:
119
+ rubygems_version: 1.5.1
120
+ signing_key:
121
+ specification_version: 3
122
+ summary: JRuby DSL for XOM
123
+ test_files: []
124
+