xml-object 0.9.93 → 1.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/README.rdoc +2 -12
- data/WHATSNEW +9 -1
- data/lib/xml-object.rb +47 -47
- data/lib/xml-object/adapters.rb +21 -21
- data/lib/xml-object/adapters/libxml.rb +23 -23
- data/lib/xml-object/adapters/rexml.rb +31 -31
- data/lib/xml-object/collection_proxy.rb +22 -22
- data/lib/xml-object/element.rb +18 -18
- data/lib/xml-object/properties.rb +96 -94
- data/lib/xml-object/version.rb +3 -3
- data/xml-object.gemspec +7 -3
- metadata +68 -48
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 0c18066558a35627d1903eff9a58c61e133429c0
|
4
|
+
data.tar.gz: 52e89eaf04ae675b033091bafe97fba86847aaaa
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 7f9c6fe37eea43a4f073f7db584c29617334607f6b20b1fc1e2e18814a11e70a4f63ead949a9e227ecd58055d381affde99d0bd4776f1081bf94e9896ac72535
|
7
|
+
data.tar.gz: 3de060a2a3537d4008d518ba25ad6d4f178d4bb144f9e6c5b011cc5d9b217bbf719e66fde17bc22aa3aba797cd6622470388931a8c9679d216341c888d2324a5
|
data/README.rdoc
CHANGED
@@ -12,17 +12,7 @@ speedups. See more below.
|
|
12
12
|
|
13
13
|
== Compatibility
|
14
14
|
|
15
|
-
|
16
|
-
|
17
|
-
Rubinius: 1.0.1 (REXML only, libxml-ruby might work if you can build it)
|
18
|
-
MRI: 1.9.2, 1.8.7, 1.8.6
|
19
|
-
REE: 1.8.7
|
20
|
-
JRuby: 1.5.2, 1.4.0 (both in 1.8.7 mode)
|
21
|
-
|
22
|
-
And with the following optionals:
|
23
|
-
|
24
|
-
version 1.1.4 of libxml-ruby (for faster execution)
|
25
|
-
version 2.3.8 of activesupport (for inflected plurals)
|
15
|
+
See https://travis-ci.org/notlaforge/xml-object/
|
26
16
|
|
27
17
|
== Installation instructions
|
28
18
|
|
@@ -180,4 +170,4 @@ The LibXML adapter will not return the 'xmlns' attribute.
|
|
180
170
|
|
181
171
|
== Legal
|
182
172
|
|
183
|
-
Copyright (c)
|
173
|
+
Copyright (c) Jordi Bunster, released under the MIT license
|
data/WHATSNEW
CHANGED
@@ -1,4 +1,12 @@
|
|
1
|
-
* 0.
|
1
|
+
* 1.0.0 (2016-04-07):
|
2
|
+
- Verified safe after http://blog.rubygems.org/2016/04/06/gem-replacement-vulnerability-and-mitigation.html
|
3
|
+
- Dropped ruby 1.8 (and JRuby in 1.8 mode)
|
4
|
+
- Moved tests to https://travis-ci.org/notlaforge/xml-object/
|
5
|
+
- Activesupport now required, but we only load the inflector
|
6
|
+
and none of the core extensions, so it won't infect your
|
7
|
+
code.
|
8
|
+
|
9
|
+
* 0.9.93 (2010-08-26):
|
2
10
|
- Rubinius support (tested with REXML only)
|
3
11
|
- 1.9.2 support
|
4
12
|
|
data/lib/xml-object.rb
CHANGED
@@ -6,63 +6,63 @@ require 'xml-object/collection_proxy'
|
|
6
6
|
require 'xml-object/element'
|
7
7
|
|
8
8
|
module XMLObject
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
9
|
+
# Returns a String or Array object representing the given XML, decorated
|
10
|
+
# with methods to access attributes and/or child elements.
|
11
|
+
def self.new(duck) # :nodoc:
|
12
|
+
case duck
|
13
|
+
when @adapter::Element then new_decorated_obj duck
|
14
|
+
when Array then duck.map! { |d| new_decorated_obj d }
|
15
|
+
else new @adapter.new(duck)
|
16
|
+
end
|
17
|
+
end
|
18
18
|
|
19
|
-
|
19
|
+
private ##################################################################
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
21
|
+
# Takes any adapter Element object, and converts it recursively into
|
22
|
+
# the corresponding tree of decorated objects.
|
23
|
+
def self.new_decorated_obj(xml) # :nodoc:
|
24
|
+
# More than one child, empty value, and all children with the same name?
|
25
|
+
obj = if xml.children.size > 1 && xml.value !~ /\S/ &&
|
26
26
|
xml.children.map { |c| c.name }.uniq.size == 1
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
28
|
+
CollectionProxy.new xml # This is an empty array wrap
|
29
|
+
else
|
30
|
+
Element.new xml # This one is an actual element
|
31
|
+
end
|
32
32
|
|
33
|
-
|
34
|
-
|
33
|
+
xml.children.each { |child| add_child obj, child.name, new(child) }
|
34
|
+
xml.attributes.each { |name, value| add_attribute obj, name, value }
|
35
35
|
|
36
|
-
|
37
|
-
|
38
|
-
|
36
|
+
# Let's teach our object how to access its XML elements and attributes
|
37
|
+
obj.extend Properties
|
38
|
+
end
|
39
39
|
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
40
|
+
# Decorates the given object 'obj' with a method 'name' that returns the
|
41
|
+
# given 'element'. If 'name' is already taken, takes care of the array
|
42
|
+
# folding behaviour.
|
43
|
+
def self.add_child(obj, name, element) # :nodoc:
|
44
|
+
key = name.to_sym
|
45
|
+
children = obj.instance_variable_get :@__children
|
46
46
|
|
47
|
-
|
47
|
+
children[key] = if children[key]
|
48
48
|
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
49
|
+
children[key] = [ children[key] ] unless children[key].is_a? Array
|
50
|
+
children[key] << element
|
51
|
+
else
|
52
|
+
element
|
53
|
+
end
|
54
54
|
|
55
|
-
|
56
|
-
|
57
|
-
|
55
|
+
obj.instance_variable_set :@__children, children
|
56
|
+
element
|
57
|
+
end
|
58
58
|
|
59
|
-
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
59
|
+
# Decorates the given object 'obj' with a method 'name' that returns the
|
60
|
+
# given 'attr_value'.
|
61
|
+
def self.add_attribute(obj, name, value) # :nodoc:
|
62
|
+
attributes = obj.instance_variable_get :@__attributes
|
63
|
+
attributes[key = name.to_sym] = value.strip.gsub /\s+/, ' '
|
64
64
|
|
65
|
-
|
66
|
-
|
67
|
-
|
65
|
+
obj.instance_variable_set :@__attributes, attributes
|
66
|
+
value
|
67
|
+
end
|
68
68
|
end
|
data/lib/xml-object/adapters.rb
CHANGED
@@ -1,29 +1,29 @@
|
|
1
1
|
module XMLObject # :nodoc:
|
2
|
-
|
3
|
-
|
4
|
-
|
2
|
+
class << self # :nodoc:
|
3
|
+
attr_accessor :adapter # :nodoc:
|
4
|
+
end
|
5
5
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
6
|
+
module Adapters # :nodoc:
|
7
|
+
module Base # :nodoc:
|
8
|
+
class Element # :nodoc:
|
9
|
+
attr_accessor :raw, :name, :value, :attributes, :children # :nodoc:
|
10
10
|
|
11
|
-
|
11
|
+
def initialize(*args)
|
12
12
|
|
13
|
-
|
14
|
-
|
15
|
-
|
13
|
+
@children = @element_nodes.map { |node| self.class.new(node) }
|
14
|
+
@value = (not (text_value !~ /\S/)) ? text_value : cdata_value
|
15
|
+
end
|
16
16
|
|
17
|
-
|
17
|
+
private ###########################################################
|
18
18
|
|
19
|
-
|
20
|
-
|
21
|
-
|
19
|
+
def text_value
|
20
|
+
@text_value_memo ||= @text_nodes.reject { |n| n !~ /\S/ }.join
|
21
|
+
end
|
22
22
|
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
23
|
+
def cdata_value
|
24
|
+
@cdata_nodes.join
|
25
|
+
end
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
29
|
end
|
@@ -1,34 +1,34 @@
|
|
1
1
|
require 'libxml' unless defined?(JRUBY_VERSION) # JRuby already has it...
|
2
2
|
|
3
3
|
module XMLObject::Adapters::LibXML
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
4
|
+
# Can take a String of XML data, or anything that responds to
|
5
|
+
# either +read+ or +to_s+.
|
6
|
+
def self.new(duck)
|
7
|
+
case
|
8
|
+
when duck.respond_to?(:read)
|
9
|
+
then Element.new(::LibXML::XML::Parser.string(duck.read).parse.root)
|
10
|
+
when duck.respond_to?(:to_s)
|
11
|
+
then Element.new(::LibXML::XML::Parser.string(duck.to_s).parse.root)
|
12
|
+
else raise "Don't know how to deal with '#{duck.class}' object"
|
13
|
+
end
|
14
|
+
end
|
15
15
|
|
16
|
-
|
16
|
+
private ##################################################################
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
class Element < XMLObject::Adapters::Base::Element # :nodoc:
|
19
|
+
def initialize(xml)
|
20
|
+
@raw, @name, @attributes = xml, xml.name, xml.attributes.to_h
|
21
21
|
|
22
|
-
|
22
|
+
@element_nodes = xml.children.select { |c| c.element? }
|
23
23
|
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
24
|
+
@text_nodes = xml.children.select { |c| c.text? }.map! { |c| c.to_s }
|
25
|
+
@cdata_nodes = xml.children.select { |c| c.cdata? }.map! do |c|
|
26
|
+
c.to_s.chomp(']]>').sub('<![CDATA[', '')
|
27
|
+
end
|
28
28
|
|
29
|
-
|
30
|
-
|
31
|
-
|
29
|
+
super
|
30
|
+
end
|
31
|
+
end
|
32
32
|
end
|
33
33
|
|
34
34
|
::XMLObject.adapter = ::XMLObject::Adapters::LibXML
|
@@ -1,37 +1,37 @@
|
|
1
1
|
require 'rexml/document'
|
2
2
|
|
3
3
|
module XMLObject::Adapters::REXML
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
34
|
-
|
4
|
+
# Can take a String of XML data, or anything that responds to
|
5
|
+
# either +read+ or +to_s+.
|
6
|
+
def self.new(duck)
|
7
|
+
case
|
8
|
+
when duck.respond_to?(:read)
|
9
|
+
then Element.new(::REXML::Document.new(duck.read).root)
|
10
|
+
when duck.respond_to?(:to_s)
|
11
|
+
then Element.new(::REXML::Document.new(duck.to_s).root)
|
12
|
+
else raise "Don't know how to deal with '#{duck.class}' object"
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
private ##################################################################
|
17
|
+
|
18
|
+
class Element < XMLObject::Adapters::Base::Element # :nodoc:
|
19
|
+
def initialize(xml)
|
20
|
+
@raw, @name, @attributes = xml, xml.name, xml.attributes
|
21
|
+
|
22
|
+
@element_nodes = xml.elements
|
23
|
+
|
24
|
+
@text_nodes = xml.children.select do |child|
|
25
|
+
child.class == ::REXML::Text
|
26
|
+
end.map! { |child| child.to_s }
|
27
|
+
|
28
|
+
@cdata_nodes = xml.children.select do |child|
|
29
|
+
child.class == ::REXML::CData
|
30
|
+
end.map! { |child| child.to_s }
|
31
|
+
|
32
|
+
super
|
33
|
+
end
|
34
|
+
end
|
35
35
|
end
|
36
36
|
|
37
37
|
::XMLObject.adapter = ::XMLObject::Adapters::REXML
|
@@ -1,37 +1,37 @@
|
|
1
1
|
class XMLObject::CollectionProxy # :nodoc:
|
2
|
-
|
3
|
-
|
2
|
+
instance_methods.each do |m|
|
3
|
+
meth_str, meth_sym = m.to_s, m.to_sym # Ruby 1.8 and 1.9 differ, so...
|
4
4
|
|
5
|
-
|
5
|
+
undef_method meth_sym unless meth_str =~ /^__/ ||
|
6
6
|
meth_str =~ /^instance_/ ||
|
7
7
|
meth_sym == :is_a? ||
|
8
8
|
meth_sym == :kind_of? ||
|
9
9
|
meth_sym == :extend ||
|
10
10
|
meth_sym == :nil? ||
|
11
11
|
meth_sym == :object_id
|
12
|
-
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
14
|
+
def initialize(xml) # :nodoc:
|
15
|
+
@__children, @__attributes = {}, {}
|
16
|
+
@__target_kid = xml.children[0].name.to_sym
|
17
|
+
end
|
18
18
|
|
19
|
-
|
19
|
+
private ##################################################################
|
20
20
|
|
21
|
-
|
22
|
-
|
23
|
-
|
21
|
+
def method_missing(m, *a, &b) # :nodoc:
|
22
|
+
dispatched = __question_dispatch(m, *a, &b)
|
23
|
+
dispatched = __dot_notation_dispatch(m, *a, &b) if dispatched.nil?
|
24
24
|
|
25
|
-
|
26
|
-
|
25
|
+
if dispatched.nil? && @__children[@__target_kid].respond_to?(m)
|
26
|
+
dispatched = @__children[@__target_kid].__send__(m, *a, &b)
|
27
27
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
28
|
+
unless nil == dispatched
|
29
|
+
# All is fair in Love and War. And 100% coverage.
|
30
|
+
instance_eval \
|
31
|
+
%{ def #{m}(*a, &b); @__children[@__target_kid].#{m}(*a, &b); end }
|
32
|
+
end
|
33
|
+
end
|
34
34
|
|
35
|
-
|
36
|
-
|
35
|
+
(nil == dispatched) ? raise(NameError.new(m.to_s)) : dispatched
|
36
|
+
end
|
37
37
|
end
|
data/lib/xml-object/element.rb
CHANGED
@@ -1,24 +1,24 @@
|
|
1
1
|
module XMLObject::Element
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
2
|
+
def self.new(xml) # :nodoc:
|
3
|
+
element = xml.value
|
4
|
+
element.instance_variable_set :@__raw_xml, xml.raw
|
5
|
+
element.instance_variable_set :@__children, {}
|
6
|
+
element.instance_variable_set :@__attributes, {}
|
7
|
+
element.extend self
|
8
|
+
end
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
10
|
+
# The raw, unadapted XML object. Whatever this is, it really depends on
|
11
|
+
# the currently chosen adapter.
|
12
|
+
def raw_xml
|
13
|
+
@__raw_xml
|
14
|
+
end
|
15
15
|
|
16
|
-
|
16
|
+
private ##################################################################
|
17
17
|
|
18
|
-
|
19
|
-
|
20
|
-
|
18
|
+
def method_missing(m, *a, &b) # :nodoc:
|
19
|
+
dispatched = __question_dispatch(m, *a, &b)
|
20
|
+
dispatched = __dot_notation_dispatch(m, *a, &b) if dispatched.nil?
|
21
21
|
|
22
|
-
|
23
|
-
|
22
|
+
dispatched.nil? ? raise(NameError.new(m.to_s)) : dispatched
|
23
|
+
end
|
24
24
|
end
|
@@ -1,95 +1,97 @@
|
|
1
|
+
require 'active_support/inflector'
|
2
|
+
|
1
3
|
module XMLObject::Properties
|
2
|
-
|
3
|
-
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
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
|
-
|
72
|
-
|
73
|
-
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
-
|
82
|
-
|
83
|
-
|
84
|
-
|
85
|
-
|
86
|
-
|
87
|
-
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
93
|
-
|
94
|
-
|
95
|
-
end
|
4
|
+
# Array-bracket (+[]+) notation access to elements and attributes. Use
|
5
|
+
# when the element or attribute you need to reach is not reachable via dot
|
6
|
+
# notation (because it's not a valid method name, or because the method
|
7
|
+
# exists, such as +id+ or +class+).
|
8
|
+
#
|
9
|
+
# It also supports a hash key, which is used to reach attributes named
|
10
|
+
# the same as elements in the same depth level (which otherwise go first)
|
11
|
+
#
|
12
|
+
# All of this is a lot easier to explain by example:
|
13
|
+
#
|
14
|
+
# <article id="main_article" author="j-random">
|
15
|
+
# <author>J. Random Hacker</author>
|
16
|
+
# </article>
|
17
|
+
#
|
18
|
+
# article.id => 9314390 # Object#id
|
19
|
+
# article[:id] => "main_article" # id attribute
|
20
|
+
# article[:author] => "J. Random Hacker" # <author> element
|
21
|
+
# article[:attr => 'author'] => "j-random" # author attribute
|
22
|
+
#
|
23
|
+
# Valid keys for the hash notation are +:attr+ and +:elem+.
|
24
|
+
def [](duck)
|
25
|
+
if @__target_kid && duck.is_a?(Numeric)
|
26
|
+
@__children[@__target_kid][duck]
|
27
|
+
elsif duck.is_a?(Hash)
|
28
|
+
raise NameError.new('only one key allowed') if duck.keys.size != 1
|
29
|
+
key, name = duck.keys[0].to_sym, duck.values[0].to_sym
|
30
|
+
|
31
|
+
unless ( (key == :elem) || (:attr == key) )
|
32
|
+
raise NameError.new("Invalid key :#{key.to_s}. Use :elem or :attr")
|
33
|
+
end
|
34
|
+
|
35
|
+
value = (key == :elem) ? @__children[name] : @__attributes[name]
|
36
|
+
value.nil? ? raise(NameError.new(name.to_s)) : value
|
37
|
+
else
|
38
|
+
key = duck.to_s.to_sym
|
39
|
+
|
40
|
+
case
|
41
|
+
when (not @__children[key].nil?) then @__children[key]
|
42
|
+
when (not @__attributes[key].nil?) then @__attributes[key]
|
43
|
+
else raise NameError.new(key.to_s)
|
44
|
+
end
|
45
|
+
end
|
46
|
+
end
|
47
|
+
|
48
|
+
private ##################################################################
|
49
|
+
|
50
|
+
def __question_dispatch(meth, *args, &block)
|
51
|
+
return nil unless meth.to_s.match(/\?$/) && args.empty? && block.nil?
|
52
|
+
|
53
|
+
method_sans_question = meth.to_s.chomp('?').to_sym
|
54
|
+
|
55
|
+
if boolish = __send__(method_sans_question)
|
56
|
+
bool = case
|
57
|
+
when %w[ true yes t y ].include?(boolish.downcase) then true
|
58
|
+
when %w[ false no f n ].include?(boolish.downcase) then false
|
59
|
+
else nil
|
60
|
+
end
|
61
|
+
|
62
|
+
unless bool.nil?
|
63
|
+
instance_eval %{ def #{meth}; #{bool ? 'true' : 'false'}; end }
|
64
|
+
end
|
65
|
+
|
66
|
+
bool
|
67
|
+
end
|
68
|
+
end
|
69
|
+
|
70
|
+
def __dot_notation_dispatch(meth, *args, &block)
|
71
|
+
return nil unless args.empty? && block.nil?
|
72
|
+
|
73
|
+
if @__children.has_key?(meth)
|
74
|
+
instance_eval %{ def #{meth}; @__children[%s|#{meth}|]; end }
|
75
|
+
@__children[meth]
|
76
|
+
|
77
|
+
elsif @__attributes.has_key?(meth)
|
78
|
+
instance_eval %{ def #{meth}; @__attributes[%s|#{meth}|]; end }
|
79
|
+
@__attributes[meth]
|
80
|
+
|
81
|
+
elsif @__children.has_key?(naive_sing = meth.to_s.chomp('s').to_sym) &&
|
82
|
+
@__children[naive_sing].is_a?(Array)
|
83
|
+
|
84
|
+
instance_eval %{ def #{meth}; @__children[%s|#{naive_sing}|]; end }
|
85
|
+
@__children[naive_sing]
|
86
|
+
|
87
|
+
elsif (singular = ActiveSupport::Inflector.singularize(meth.to_s)) &&
|
88
|
+
@__children.has_key?(singular.to_sym) &&
|
89
|
+
@__children[singular.to_sym].is_a?(Array)
|
90
|
+
|
91
|
+
instance_eval %{ def #{meth}; @__children[%s|#{singular}|]; end }
|
92
|
+
@__children[singular.to_sym]
|
93
|
+
else
|
94
|
+
nil
|
95
|
+
end
|
96
|
+
end
|
97
|
+
end
|
data/lib/xml-object/version.rb
CHANGED
@@ -1,4 +1,4 @@
|
|
1
1
|
module XMLObject
|
2
|
-
|
3
|
-
|
4
|
-
end
|
2
|
+
VERSION = '1.0.0'
|
3
|
+
LOCATION = File.dirname __FILE__ # :nodoc:
|
4
|
+
end
|
data/xml-object.gemspec
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
require 'lib/xml-object/version'
|
1
|
+
require './lib/xml-object/version'
|
2
2
|
|
3
3
|
Gem::Specification.new do |gem|
|
4
4
|
gem.name = 'xml-object'
|
@@ -12,7 +12,11 @@ Gem::Specification.new do |gem|
|
|
12
12
|
documents of a known structure. While not devoid of caveats, it does
|
13
13
|
have a very pleasant, idiomatic Ruby syntax. }.strip!.gsub! /\s+/, ' '
|
14
14
|
|
15
|
-
gem.required_ruby_version = '>= 1.
|
15
|
+
gem.required_ruby_version = '>= 1.9.3'
|
16
|
+
|
17
|
+
gem.add_dependency 'activesupport'
|
18
|
+
gem.add_development_dependency 'minitest'
|
19
|
+
gem.add_development_dependency 'rake'
|
16
20
|
|
17
21
|
gem.has_rdoc = true
|
18
22
|
gem.extra_rdoc_files = %w[ README.rdoc MIT-LICENSE WHATSNEW ]
|
@@ -37,4 +41,4 @@ Gem::Specification.new do |gem|
|
|
37
41
|
lib/xml-object.rb
|
38
42
|
xml-object.gemspec
|
39
43
|
]
|
40
|
-
end
|
44
|
+
end
|
metadata
CHANGED
@@ -1,35 +1,68 @@
|
|
1
|
-
--- !ruby/object:Gem::Specification
|
1
|
+
--- !ruby/object:Gem::Specification
|
2
2
|
name: xml-object
|
3
|
-
version: !ruby/object:Gem::Version
|
4
|
-
|
5
|
-
prerelease: false
|
6
|
-
segments:
|
7
|
-
- 0
|
8
|
-
- 9
|
9
|
-
- 93
|
10
|
-
version: 0.9.93
|
3
|
+
version: !ruby/object:Gem::Version
|
4
|
+
version: 1.0.0
|
11
5
|
platform: ruby
|
12
|
-
authors:
|
6
|
+
authors:
|
13
7
|
- Jordi Bunster
|
14
8
|
autorequire:
|
15
9
|
bindir: bin
|
16
10
|
cert_chain: []
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
11
|
+
date: 2016-04-07 00:00:00.000000000 Z
|
12
|
+
dependencies:
|
13
|
+
- !ruby/object:Gem::Dependency
|
14
|
+
name: activesupport
|
15
|
+
requirement: !ruby/object:Gem::Requirement
|
16
|
+
requirements:
|
17
|
+
- - '>='
|
18
|
+
- !ruby/object:Gem::Version
|
19
|
+
version: '0'
|
20
|
+
type: :runtime
|
21
|
+
prerelease: false
|
22
|
+
version_requirements: !ruby/object:Gem::Requirement
|
23
|
+
requirements:
|
24
|
+
- - '>='
|
25
|
+
- !ruby/object:Gem::Version
|
26
|
+
version: '0'
|
27
|
+
- !ruby/object:Gem::Dependency
|
28
|
+
name: minitest
|
29
|
+
requirement: !ruby/object:Gem::Requirement
|
30
|
+
requirements:
|
31
|
+
- - '>='
|
32
|
+
- !ruby/object:Gem::Version
|
33
|
+
version: '0'
|
34
|
+
type: :development
|
35
|
+
prerelease: false
|
36
|
+
version_requirements: !ruby/object:Gem::Requirement
|
37
|
+
requirements:
|
38
|
+
- - '>='
|
39
|
+
- !ruby/object:Gem::Version
|
40
|
+
version: '0'
|
41
|
+
- !ruby/object:Gem::Dependency
|
42
|
+
name: rake
|
43
|
+
requirement: !ruby/object:Gem::Requirement
|
44
|
+
requirements:
|
45
|
+
- - '>='
|
46
|
+
- !ruby/object:Gem::Version
|
47
|
+
version: '0'
|
48
|
+
type: :development
|
49
|
+
prerelease: false
|
50
|
+
version_requirements: !ruby/object:Gem::Requirement
|
51
|
+
requirements:
|
52
|
+
- - '>='
|
53
|
+
- !ruby/object:Gem::Version
|
54
|
+
version: '0'
|
55
|
+
description: XMLObject is a library for reading (not writing) XML. It is particularly
|
56
|
+
suited for cases where one is dealing with small documents of a known structure.
|
57
|
+
While not devoid of caveats, it does have a very pleasant, idiomatic Ruby syntax.
|
23
58
|
email: jordi@bunster.org
|
24
59
|
executables: []
|
25
|
-
|
26
60
|
extensions: []
|
27
|
-
|
28
|
-
extra_rdoc_files:
|
61
|
+
extra_rdoc_files:
|
29
62
|
- README.rdoc
|
30
63
|
- MIT-LICENSE
|
31
64
|
- WHATSNEW
|
32
|
-
files:
|
65
|
+
files:
|
33
66
|
- MIT-LICENSE
|
34
67
|
- README.rdoc
|
35
68
|
- TODO
|
@@ -43,45 +76,32 @@ files:
|
|
43
76
|
- lib/xml-object/properties.rb
|
44
77
|
- lib/xml-object.rb
|
45
78
|
- xml-object.gemspec
|
46
|
-
has_rdoc: true
|
47
79
|
homepage:
|
48
80
|
licenses: []
|
49
|
-
|
81
|
+
metadata: {}
|
50
82
|
post_install_message:
|
51
|
-
rdoc_options:
|
83
|
+
rdoc_options:
|
52
84
|
- --title
|
53
85
|
- XMLObject
|
54
86
|
- --main
|
55
87
|
- README.rdoc
|
56
88
|
- --inline-source
|
57
|
-
require_paths:
|
89
|
+
require_paths:
|
58
90
|
- lib
|
59
|
-
required_ruby_version: !ruby/object:Gem::Requirement
|
60
|
-
|
61
|
-
|
62
|
-
|
63
|
-
|
64
|
-
|
65
|
-
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
version: 1.8.6
|
70
|
-
required_rubygems_version: !ruby/object:Gem::Requirement
|
71
|
-
none: false
|
72
|
-
requirements:
|
73
|
-
- - ">="
|
74
|
-
- !ruby/object:Gem::Version
|
75
|
-
hash: 3
|
76
|
-
segments:
|
77
|
-
- 0
|
78
|
-
version: "0"
|
91
|
+
required_ruby_version: !ruby/object:Gem::Requirement
|
92
|
+
requirements:
|
93
|
+
- - '>='
|
94
|
+
- !ruby/object:Gem::Version
|
95
|
+
version: 1.9.3
|
96
|
+
required_rubygems_version: !ruby/object:Gem::Requirement
|
97
|
+
requirements:
|
98
|
+
- - '>='
|
99
|
+
- !ruby/object:Gem::Version
|
100
|
+
version: '0'
|
79
101
|
requirements: []
|
80
|
-
|
81
102
|
rubyforge_project:
|
82
|
-
rubygems_version:
|
103
|
+
rubygems_version: 2.0.14
|
83
104
|
signing_key:
|
84
|
-
specification_version:
|
105
|
+
specification_version: 4
|
85
106
|
summary: The Rubyista's way to do quick XML sit-ups
|
86
107
|
test_files: []
|
87
|
-
|