excemel 1.0.2-java → 1.1.0-java
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.
- data/Gemfile +3 -4
- data/History.txt +7 -1
- data/Manifest.txt +1 -1
- data/{README.rdoc → README.md} +9 -7
- data/Rakefile +5 -25
- data/lib/excemel/excemel.rb +96 -72
- data/lib/java/{xom-1.2.7.jar → xom-1.2.9.jar} +0 -0
- data/lib/module/xom.rb +1 -1
- metadata +113 -109
data/Gemfile
CHANGED
@@ -1,10 +1,9 @@
|
|
1
1
|
source "http://rubygems.org"
|
2
2
|
|
3
|
-
gem 'blankslate', '~>
|
3
|
+
gem 'blankslate', '~> 3.1.2'
|
4
4
|
|
5
5
|
group :development do
|
6
|
-
gem "bundler"
|
7
|
-
gem "
|
8
|
-
gem "rcov", ">= 0"
|
6
|
+
gem "bundler"
|
7
|
+
gem "simplecov"
|
9
8
|
gem "rdoc", ">= 3.7"
|
10
9
|
end
|
data/History.txt
CHANGED
@@ -13,4 +13,10 @@
|
|
13
13
|
|
14
14
|
== 1.0.2
|
15
15
|
|
16
|
-
- added the ability to remove attributes by passing nil as a value
|
16
|
+
- added the ability to remove attributes by passing nil as a value
|
17
|
+
|
18
|
+
== 1.1.0
|
19
|
+
|
20
|
+
- upped XOM version to 1.2.9
|
21
|
+
- upgraded blankslate dependency
|
22
|
+
- tested with jruby 1.7.3
|
data/Manifest.txt
CHANGED
data/{README.rdoc → README.md}
RENAMED
@@ -1,4 +1,6 @@
|
|
1
|
-
|
1
|
+
# Excemel: Better XML for JRuby
|
2
|
+
|
3
|
+
[](https://codeclimate.com/github/integrallis/excemel)
|
2
4
|
|
3
5
|
Excemel is a Ruby DSL for Elliotte Rusty Harold's XOM XML library. It is based
|
4
6
|
on Jim Weirich's Builder. Excemel brings to JRuby the expressiveness and
|
@@ -9,15 +11,15 @@ Excemel extends the semantics of Builder with methods to navigate the
|
|
9
11
|
in memory XML document with XPath and exposing some of the powerful XML
|
10
12
|
manipulation capabilities of XOM.
|
11
13
|
|
12
|
-
|
14
|
+
## Usage
|
13
15
|
|
14
16
|
See usage examples under /examples directory of this distribution
|
15
17
|
|
16
|
-
|
18
|
+
## Contact
|
17
19
|
|
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)
|
20
|
+
* Author:: Brian Sam-Bodden
|
21
|
+
* Email:: bsbodden@integrallis.com
|
22
|
+
* Home Page:: http://integrallis.com
|
23
|
+
* License:: MIT Licence (http://www.opensource.org/licenses/mit-license.html)
|
22
24
|
|
23
25
|
|
data/Rakefile
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
#!/usr/bin/env ruby
|
2
2
|
|
3
3
|
#--
|
4
|
-
# Copyright &169;2001-
|
4
|
+
# Copyright &169;2001-2013 Integrallis Software, LLC.
|
5
5
|
# All Rights Reserved.
|
6
6
|
#
|
7
7
|
# Permission is granted for use, copying, modification, distribution,
|
@@ -26,24 +26,6 @@ require 'rake'
|
|
26
26
|
|
27
27
|
# --------------------------------------------------------------------
|
28
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
29
|
require 'rake/testtask'
|
48
30
|
Rake::TestTask.new(:test) do |test|
|
49
31
|
test.libs << 'lib' << 'test'
|
@@ -53,12 +35,10 @@ end
|
|
53
35
|
|
54
36
|
# --------------------------------------------------------------------
|
55
37
|
|
56
|
-
require '
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
test.verbose = true
|
61
|
-
test.rcov_opts << '--exclude "gems/*"'
|
38
|
+
require 'simplecov'
|
39
|
+
SimpleCov.command_name 'Unit Tests'
|
40
|
+
SimpleCov.start do
|
41
|
+
add_group "source", "lib"
|
62
42
|
end
|
63
43
|
|
64
44
|
task :default => :test
|
data/lib/excemel/excemel.rb
CHANGED
@@ -1,5 +1,3 @@
|
|
1
|
-
#!/usr/bin/env ruby
|
2
|
-
|
3
1
|
#--
|
4
2
|
# Copyright &169;2001-2008 Integrallis Software, LLC.
|
5
3
|
# All Rights Reserved.
|
@@ -23,7 +21,7 @@
|
|
23
21
|
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
24
22
|
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
25
23
|
#++
|
26
|
-
|
24
|
+
|
27
25
|
require 'rubygems'
|
28
26
|
require 'blankslate'
|
29
27
|
require 'java'
|
@@ -45,43 +43,11 @@ module Excemel
|
|
45
43
|
# :resolve_includes => true|false replaces xi:include elements by the content they refer to
|
46
44
|
# :namespace => provides a namespace prefix to the elements
|
47
45
|
def initialize(options)
|
48
|
-
|
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
|
46
|
+
resolve_includes = _extract_options(options, :resolve_includes, true)
|
79
47
|
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
@root = @doc.get_root_element unless @root
|
48
|
+
_build_document(options)
|
49
|
+
|
50
|
+
@doc = XOM::XIncluder.resolve(@doc) if resolve_includes
|
85
51
|
@target = @root
|
86
52
|
end
|
87
53
|
|
@@ -89,39 +55,10 @@ module Excemel
|
|
89
55
|
# Add XML elements (tags) based on the name of the method called on the
|
90
56
|
# Document instance, blocks passed get processed recursively
|
91
57
|
def method_missing(sym, *args, &block)
|
92
|
-
|
93
|
-
|
94
|
-
attrs
|
95
|
-
|
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
|
-
|
58
|
+
unless %w(class to_s inspect).include?(sym.to_s)
|
59
|
+
sym = _extract_sym(args, sym)
|
60
|
+
attrs, namespace, prefix, text = _process_args(args, sym)
|
61
|
+
tag = _build_tag(sym, namespace)
|
125
62
|
_add_attributes(tag, attrs)
|
126
63
|
|
127
64
|
if block
|
@@ -283,6 +220,93 @@ module Excemel
|
|
283
220
|
@target = old_target
|
284
221
|
end
|
285
222
|
|
223
|
+
def _build_tag(sym, namespace = nil)
|
224
|
+
unless namespace
|
225
|
+
tag = XOM::Element.new sym.to_s
|
226
|
+
else
|
227
|
+
tag = XOM::Element.new sym.to_s, namespace
|
228
|
+
end
|
229
|
+
tag
|
230
|
+
end
|
231
|
+
|
232
|
+
def _get_namespace(prefix)
|
233
|
+
@namespaces ? "#{@namespaces[prefix]}" : nil
|
234
|
+
end
|
235
|
+
|
236
|
+
def _extract_sym(args, sym)
|
237
|
+
args.first.kind_of?(Symbol) ? "#{sym}:#{args.shift}" : sym
|
238
|
+
end
|
239
|
+
|
240
|
+
def _extract_prefix(sym)
|
241
|
+
sym.to_s.include? ":" ? sym.to_s.split(":").first : nil
|
242
|
+
end
|
243
|
+
|
244
|
+
def _process_args(args, sym)
|
245
|
+
attrs, namespace, text = nil
|
246
|
+
prefix = _extract_prefix(sym)
|
247
|
+
args.each do |arg|
|
248
|
+
case arg
|
249
|
+
when Hash
|
250
|
+
if arg.has_key? :namespace
|
251
|
+
namespace = arg[:namespace]
|
252
|
+
prefix = sym.to_s.split(":").first
|
253
|
+
else
|
254
|
+
attrs ||= {}
|
255
|
+
attrs.merge!(arg)
|
256
|
+
end
|
257
|
+
else
|
258
|
+
text ||= ''
|
259
|
+
text << arg.to_s
|
260
|
+
end
|
261
|
+
end
|
262
|
+
namespace = _get_namespace(prefix) if prefix
|
263
|
+
[attrs, namespace, prefix, text]
|
264
|
+
end
|
265
|
+
|
266
|
+
def _extract_options(options, sym, boolean = false)
|
267
|
+
boolean ? (options[sym] ? options[sym] : false) : options[sym]
|
268
|
+
end
|
269
|
+
|
270
|
+
def _generate_doc_from_source(options, builder)
|
271
|
+
doc = nil
|
272
|
+
xml = _extract_options(options, :xml)
|
273
|
+
url = _extract_options(options, :url)
|
274
|
+
file = _extract_options(options, :file)
|
275
|
+
|
276
|
+
if xml
|
277
|
+
doc = builder.build(xml, nil)
|
278
|
+
elsif url
|
279
|
+
doc = builder.build url
|
280
|
+
elsif file
|
281
|
+
java_file = Lang::File.new file
|
282
|
+
doc = builder.build java_file
|
283
|
+
end
|
284
|
+
|
285
|
+
doc
|
286
|
+
end
|
287
|
+
|
288
|
+
def _build_document(options)
|
289
|
+
root = _extract_options(options, :root)
|
290
|
+
namespace = _extract_options(options, :namespace)
|
291
|
+
validate = _extract_options(options, :validate, true)
|
292
|
+
|
293
|
+
if root
|
294
|
+
_build_document_from_root(root, namespace)
|
295
|
+
else
|
296
|
+
@doc = _generate_doc_from_source(options, XOM::Builder.new(validate))
|
297
|
+
@root = @doc.get_root_element
|
298
|
+
end
|
299
|
+
end
|
300
|
+
|
301
|
+
def _build_document_from_root(root, namespace)
|
302
|
+
@root = _build_tag(root, namespace)
|
303
|
+
if namespace
|
304
|
+
prefix = root.to_s.split(":").first if root.include? ":"
|
305
|
+
(@namespaces ||= {})[prefix] = namespace if prefix
|
306
|
+
end
|
307
|
+
@doc = XOM::Document.new @root
|
308
|
+
end
|
309
|
+
|
286
310
|
end
|
287
311
|
|
288
312
|
end
|
Binary file
|
data/lib/module/xom.rb
CHANGED
metadata
CHANGED
@@ -1,124 +1,128 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: excemel
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
prerelease:
|
5
|
-
version: 1.0
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
prerelease:
|
5
|
+
version: 1.1.0
|
6
6
|
platform: java
|
7
|
-
authors:
|
8
|
-
|
9
|
-
autorequire:
|
7
|
+
authors:
|
8
|
+
- Brian Sam-Bodden
|
9
|
+
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
35
|
-
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
|
70
|
-
|
71
|
-
|
12
|
+
date: 2013-05-09 00:00:00.000000000 Z
|
13
|
+
dependencies:
|
14
|
+
- !ruby/object:Gem::Dependency
|
15
|
+
name: blankslate
|
16
|
+
version_requirements: !ruby/object:Gem::Requirement
|
17
|
+
requirements:
|
18
|
+
- - "~>"
|
19
|
+
- !ruby/object:Gem::Version
|
20
|
+
version: 3.1.2
|
21
|
+
none: false
|
22
|
+
requirement: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - "~>"
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: 3.1.2
|
27
|
+
none: false
|
28
|
+
prerelease: false
|
29
|
+
type: :runtime
|
30
|
+
- !ruby/object:Gem::Dependency
|
31
|
+
name: bundler
|
32
|
+
version_requirements: !ruby/object:Gem::Requirement
|
33
|
+
requirements:
|
34
|
+
- - ">="
|
35
|
+
- !ruby/object:Gem::Version
|
36
|
+
version: !binary |-
|
37
|
+
MA==
|
38
|
+
none: false
|
39
|
+
requirement: !ruby/object:Gem::Requirement
|
40
|
+
requirements:
|
41
|
+
- - ">="
|
42
|
+
- !ruby/object:Gem::Version
|
43
|
+
version: !binary |-
|
44
|
+
MA==
|
45
|
+
none: false
|
46
|
+
prerelease: false
|
47
|
+
type: :development
|
48
|
+
- !ruby/object:Gem::Dependency
|
49
|
+
name: simplecov
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - ">="
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: !binary |-
|
55
|
+
MA==
|
56
|
+
none: false
|
57
|
+
requirement: !ruby/object:Gem::Requirement
|
58
|
+
requirements:
|
59
|
+
- - ">="
|
60
|
+
- !ruby/object:Gem::Version
|
61
|
+
version: !binary |-
|
62
|
+
MA==
|
63
|
+
none: false
|
64
|
+
prerelease: false
|
65
|
+
type: :development
|
66
|
+
- !ruby/object:Gem::Dependency
|
67
|
+
name: rdoc
|
68
|
+
version_requirements: !ruby/object:Gem::Requirement
|
69
|
+
requirements:
|
70
|
+
- - ">="
|
71
|
+
- !ruby/object:Gem::Version
|
72
|
+
version: '3.7'
|
73
|
+
none: false
|
74
|
+
requirement: !ruby/object:Gem::Requirement
|
75
|
+
requirements:
|
76
|
+
- - ">="
|
77
|
+
- !ruby/object:Gem::Version
|
78
|
+
version: '3.7'
|
79
|
+
none: false
|
80
|
+
prerelease: false
|
81
|
+
type: :development
|
82
|
+
description: JRuby DSL for XML Building and Manipulation with XPath
|
72
83
|
email: bsbodden@integrallis.com
|
73
84
|
executables: []
|
74
|
-
|
75
85
|
extensions: []
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
- lib/module/xom.rb
|
92
|
-
has_rdoc: true
|
86
|
+
extra_rdoc_files:
|
87
|
+
- LICENSE
|
88
|
+
- README.md
|
89
|
+
files:
|
90
|
+
- Gemfile
|
91
|
+
- History.txt
|
92
|
+
- LICENSE
|
93
|
+
- Manifest.txt
|
94
|
+
- Rakefile
|
95
|
+
- lib/excemel.rb
|
96
|
+
- lib/excemel/excemel.rb
|
97
|
+
- lib/java/xom-1.2.9.jar
|
98
|
+
- lib/module/lang.rb
|
99
|
+
- lib/module/xom.rb
|
100
|
+
- README.md
|
93
101
|
homepage: http://github.com/bsbodden/excemel
|
94
|
-
licenses:
|
95
|
-
|
96
|
-
post_install_message:
|
102
|
+
licenses:
|
103
|
+
- MIT
|
104
|
+
post_install_message:
|
97
105
|
rdoc_options: []
|
98
|
-
|
99
|
-
|
100
|
-
|
101
|
-
|
106
|
+
require_paths:
|
107
|
+
- lib
|
108
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
109
|
+
requirements:
|
110
|
+
- - ">="
|
111
|
+
- !ruby/object:Gem::Version
|
112
|
+
version: !binary |-
|
113
|
+
MA==
|
102
114
|
none: false
|
103
|
-
|
104
|
-
|
105
|
-
|
106
|
-
|
107
|
-
|
108
|
-
|
109
|
-
version: "0"
|
110
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
115
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
116
|
+
requirements:
|
117
|
+
- - ">="
|
118
|
+
- !ruby/object:Gem::Version
|
119
|
+
version: !binary |-
|
120
|
+
MA==
|
111
121
|
none: false
|
112
|
-
requirements:
|
113
|
-
- - ">="
|
114
|
-
- !ruby/object:Gem::Version
|
115
|
-
version: "0"
|
116
122
|
requirements: []
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
signing_key:
|
123
|
+
rubyforge_project:
|
124
|
+
rubygems_version: 1.8.24
|
125
|
+
signing_key:
|
121
126
|
specification_version: 3
|
122
127
|
summary: JRuby DSL for XOM
|
123
128
|
test_files: []
|
124
|
-
|