roxml 1.2 → 2.3.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.
Files changed (97) hide show
  1. data/MIT-LICENSE +18 -0
  2. data/README.rdoc +126 -0
  3. data/Rakefile +100 -0
  4. data/lib/roxml.rb +479 -485
  5. data/lib/roxml/extensions/active_support.rb +32 -0
  6. data/lib/roxml/extensions/array.rb +5 -0
  7. data/lib/roxml/extensions/array/conversions.rb +25 -0
  8. data/lib/roxml/extensions/deprecation.rb +28 -0
  9. data/lib/roxml/extensions/string.rb +21 -0
  10. data/lib/roxml/extensions/string/conversions.rb +44 -0
  11. data/lib/roxml/extensions/string/iterators.rb +12 -0
  12. data/lib/roxml/options.rb +266 -0
  13. data/lib/roxml/xml.rb +223 -0
  14. data/lib/roxml/xml/libxml.rb +63 -0
  15. data/lib/roxml/xml/rexml.rb +64 -0
  16. data/roxml.gemspec +105 -0
  17. data/test/fixtures/book_text_with_attribute.xml +1 -1
  18. data/test/fixtures/book_valid.xml +2 -2
  19. data/test/fixtures/book_with_authors.xml +7 -0
  20. data/test/fixtures/book_with_contributors_attrs.xml +7 -0
  21. data/test/fixtures/book_with_default_namespace.xml +9 -0
  22. data/test/fixtures/book_with_depth.xml +6 -0
  23. data/test/fixtures/book_with_wrapped_attr.xml +3 -0
  24. data/test/fixtures/dictionary_of_attr_name_clashes.xml +8 -0
  25. data/test/fixtures/dictionary_of_attrs.xml +6 -0
  26. data/test/fixtures/dictionary_of_guarded_names.xml +6 -0
  27. data/test/fixtures/dictionary_of_mixeds.xml +4 -0
  28. data/test/fixtures/dictionary_of_name_clashes.xml +10 -0
  29. data/test/fixtures/dictionary_of_names.xml +4 -0
  30. data/test/fixtures/dictionary_of_texts.xml +10 -0
  31. data/test/fixtures/library.xml +1 -1
  32. data/test/fixtures/library_uppercase.xml +30 -0
  33. data/test/fixtures/muffins.xml +3 -0
  34. data/test/fixtures/nameless_ageless_youth.xml +2 -0
  35. data/test/fixtures/node_with_attr_name_conflicts.xml +1 -0
  36. data/test/fixtures/node_with_name_conflicts.xml +4 -0
  37. data/test/fixtures/numerology.xml +4 -0
  38. data/test/fixtures/person_with_guarded_mothers.xml +13 -0
  39. data/test/fixtures/person_with_mothers.xml +10 -0
  40. data/test/mocks/dictionaries.rb +56 -0
  41. data/test/mocks/mocks.rb +244 -48
  42. data/test/release/dependencies_test.rb +32 -0
  43. data/test/test_helper.rb +44 -0
  44. data/test/unit/inheritance_test.rb +19 -0
  45. data/test/unit/options_test.rb +102 -0
  46. data/test/unit/roxml_test.rb +24 -0
  47. data/test/unit/string_test.rb +11 -0
  48. data/test/unit/to_xml_test.rb +52 -0
  49. data/test/unit/xml_attribute_test.rb +39 -0
  50. data/test/unit/xml_block_test.rb +81 -0
  51. data/test/unit/xml_bool_test.rb +105 -0
  52. data/test/unit/xml_construct_test.rb +77 -0
  53. data/test/unit/xml_hash_test.rb +65 -0
  54. data/test/unit/xml_initialize_test.rb +50 -0
  55. data/test/unit/xml_name_test.rb +108 -0
  56. data/test/unit/xml_namespace_test.rb +38 -0
  57. data/test/unit/xml_object_test.rb +116 -0
  58. data/test/unit/xml_required_test.rb +93 -0
  59. data/test/unit/xml_text_test.rb +68 -0
  60. metadata +138 -87
  61. data/MIT-LICENSE.txt +0 -9
  62. data/README +0 -2
  63. data/doc/classes/ROXML.html +0 -374
  64. data/doc/classes/ROXML.src/M000003.html +0 -19
  65. data/doc/classes/ROXML.src/M000004.html +0 -25
  66. data/doc/classes/ROXML.src/M000005.html +0 -22
  67. data/doc/classes/ROXML/ROXML_Class.html +0 -429
  68. data/doc/classes/ROXML/ROXML_Class.src/M000006.html +0 -27
  69. data/doc/classes/ROXML/ROXML_Class.src/M000007.html +0 -18
  70. data/doc/classes/ROXML/ROXML_Class.src/M000008.html +0 -19
  71. data/doc/classes/ROXML/ROXML_Class.src/M000009.html +0 -25
  72. data/doc/classes/ROXML/ROXML_Class.src/M000010.html +0 -24
  73. data/doc/classes/ROXML/ROXML_Class.src/M000011.html +0 -18
  74. data/doc/classes/ROXML/ROXML_Class.src/M000012.html +0 -18
  75. data/doc/classes/ROXML/XMLAttributeRef.html +0 -175
  76. data/doc/classes/ROXML/XMLAttributeRef.src/M000015.html +0 -19
  77. data/doc/classes/ROXML/XMLAttributeRef.src/M000016.html +0 -19
  78. data/doc/classes/ROXML/XMLObjectRef.html +0 -175
  79. data/doc/classes/ROXML/XMLObjectRef.src/M000013.html +0 -26
  80. data/doc/classes/ROXML/XMLObjectRef.src/M000014.html +0 -32
  81. data/doc/classes/ROXML/XMLRef.html +0 -166
  82. data/doc/classes/ROXML/XMLRef.src/M000017.html +0 -21
  83. data/doc/classes/ROXML/XMLTextRef.html +0 -198
  84. data/doc/classes/ROXML/XMLTextRef.src/M000018.html +0 -28
  85. data/doc/classes/ROXML/XMLTextRef.src/M000019.html +0 -34
  86. data/doc/classes/String.html +0 -165
  87. data/doc/classes/String.src/M000001.html +0 -23
  88. data/doc/classes/String.src/M000002.html +0 -23
  89. data/doc/created.rid +0 -1
  90. data/doc/files/lib/roxml_rb.html +0 -234
  91. data/doc/fr_class_index.html +0 -33
  92. data/doc/fr_file_index.html +0 -27
  93. data/doc/fr_method_index.html +0 -45
  94. data/doc/index.html +0 -24
  95. data/doc/rdoc-style.css +0 -208
  96. data/test/fixture_helper.rb +0 -5
  97. data/test/test_roxml.rb +0 -105
@@ -1,33 +0,0 @@
1
-
2
- <?xml version="1.0" encoding="iso-8859-1"?>
3
- <!DOCTYPE html
4
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
-
7
- <!--
8
-
9
- Classes
10
-
11
- -->
12
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
- <head>
14
- <title>Classes</title>
15
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
- <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
- <base target="docwin" />
18
- </head>
19
- <body>
20
- <div id="index">
21
- <h1 class="section-bar">Classes</h1>
22
- <div id="index-entries">
23
- <a href="classes/ROXML.html">ROXML</a><br />
24
- <a href="classes/ROXML/ROXML_Class.html">ROXML::ROXML_Class</a><br />
25
- <a href="classes/ROXML/XMLAttributeRef.html">ROXML::XMLAttributeRef</a><br />
26
- <a href="classes/ROXML/XMLObjectRef.html">ROXML::XMLObjectRef</a><br />
27
- <a href="classes/ROXML/XMLRef.html">ROXML::XMLRef</a><br />
28
- <a href="classes/ROXML/XMLTextRef.html">ROXML::XMLTextRef</a><br />
29
- <a href="classes/String.html">String</a><br />
30
- </div>
31
- </div>
32
- </body>
33
- </html>
@@ -1,27 +0,0 @@
1
-
2
- <?xml version="1.0" encoding="iso-8859-1"?>
3
- <!DOCTYPE html
4
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
-
7
- <!--
8
-
9
- Files
10
-
11
- -->
12
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
- <head>
14
- <title>Files</title>
15
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
- <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
- <base target="docwin" />
18
- </head>
19
- <body>
20
- <div id="index">
21
- <h1 class="section-bar">Files</h1>
22
- <div id="index-entries">
23
- <a href="files/lib/roxml_rb.html">lib/roxml.rb</a><br />
24
- </div>
25
- </div>
26
- </body>
27
- </html>
@@ -1,45 +0,0 @@
1
-
2
- <?xml version="1.0" encoding="iso-8859-1"?>
3
- <!DOCTYPE html
4
- PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
5
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
6
-
7
- <!--
8
-
9
- Methods
10
-
11
- -->
12
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
13
- <head>
14
- <title>Methods</title>
15
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
16
- <link rel="stylesheet" href="rdoc-style.css" type="text/css" />
17
- <base target="docwin" />
18
- </head>
19
- <body>
20
- <div id="index">
21
- <h1 class="section-bar">Methods</h1>
22
- <div id="index-entries">
23
- <a href="classes/ROXML.html#M000003">included (ROXML)</a><br />
24
- <a href="classes/ROXML.html#M000005">method_missing (ROXML)</a><br />
25
- <a href="classes/ROXML/XMLRef.html#M000017">new (ROXML::XMLRef)</a><br />
26
- <a href="classes/ROXML/ROXML_Class.html#M000006">parse (ROXML::ROXML_Class)</a><br />
27
- <a href="classes/ROXML/XMLTextRef.html#M000019">populate (ROXML::XMLTextRef)</a><br />
28
- <a href="classes/ROXML/XMLObjectRef.html#M000014">populate (ROXML::XMLObjectRef)</a><br />
29
- <a href="classes/ROXML/XMLAttributeRef.html#M000016">populate (ROXML::XMLAttributeRef)</a><br />
30
- <a href="classes/ROXML/ROXML_Class.html#M000011">tag_name (ROXML::ROXML_Class)</a><br />
31
- <a href="classes/ROXML/ROXML_Class.html#M000012">tag_refs (ROXML::ROXML_Class)</a><br />
32
- <a href="classes/String.html#M000002">to_latin (String)</a><br />
33
- <a href="classes/String.html#M000001">to_utf (String)</a><br />
34
- <a href="classes/ROXML.html#M000004">to_xml (ROXML)</a><br />
35
- <a href="classes/ROXML/XMLObjectRef.html#M000013">update_xml (ROXML::XMLObjectRef)</a><br />
36
- <a href="classes/ROXML/XMLTextRef.html#M000018">update_xml (ROXML::XMLTextRef)</a><br />
37
- <a href="classes/ROXML/XMLAttributeRef.html#M000015">update_xml (ROXML::XMLAttributeRef)</a><br />
38
- <a href="classes/ROXML/ROXML_Class.html#M000008">xml_attribute (ROXML::ROXML_Class)</a><br />
39
- <a href="classes/ROXML/ROXML_Class.html#M000007">xml_name (ROXML::ROXML_Class)</a><br />
40
- <a href="classes/ROXML/ROXML_Class.html#M000010">xml_object (ROXML::ROXML_Class)</a><br />
41
- <a href="classes/ROXML/ROXML_Class.html#M000009">xml_text (ROXML::ROXML_Class)</a><br />
42
- </div>
43
- </div>
44
- </body>
45
- </html>
data/doc/index.html DELETED
@@ -1,24 +0,0 @@
1
- <?xml version="1.0" encoding="iso-8859-1"?>
2
- <!DOCTYPE html
3
- PUBLIC "-//W3C//DTD XHTML 1.0 Frameset//EN"
4
- "http://www.w3.org/TR/xhtml1/DTD/xhtml1-frameset.dtd">
5
-
6
- <!--
7
-
8
- RDoc Documentation
9
-
10
- -->
11
- <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
12
- <head>
13
- <title>RDoc Documentation</title>
14
- <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
15
- </head>
16
- <frameset rows="20%, 80%">
17
- <frameset cols="25%,35%,45%">
18
- <frame src="fr_file_index.html" title="Files" name="Files" />
19
- <frame src="fr_class_index.html" name="Classes" />
20
- <frame src="fr_method_index.html" name="Methods" />
21
- </frameset>
22
- <frame src="files/lib/roxml_rb.html" name="docwin" />
23
- </frameset>
24
- </html>
data/doc/rdoc-style.css DELETED
@@ -1,208 +0,0 @@
1
-
2
- body {
3
- font-family: Verdana,Arial,Helvetica,sans-serif;
4
- font-size: 90%;
5
- margin: 0;
6
- margin-left: 40px;
7
- padding: 0;
8
- background: white;
9
- }
10
-
11
- h1,h2,h3,h4 { margin: 0; color: #efefef; background: transparent; }
12
- h1 { font-size: 150%; }
13
- h2,h3,h4 { margin-top: 1em; }
14
-
15
- a { background: #eef; color: #039; text-decoration: none; }
16
- a:hover { background: #039; color: #eef; }
17
-
18
- /* Override the base stylesheet's Anchor inside a table cell */
19
- td > a {
20
- background: transparent;
21
- color: #039;
22
- text-decoration: none;
23
- }
24
-
25
- /* and inside a section title */
26
- .section-title > a {
27
- background: transparent;
28
- color: #eee;
29
- text-decoration: none;
30
- }
31
-
32
- /* === Structural elements =================================== */
33
-
34
- div#index {
35
- margin: 0;
36
- margin-left: -40px;
37
- padding: 0;
38
- font-size: 90%;
39
- }
40
-
41
-
42
- div#index a {
43
- margin-left: 0.7em;
44
- }
45
-
46
- div#index .section-bar {
47
- margin-left: 0px;
48
- padding-left: 0.7em;
49
- background: #ccc;
50
- font-size: small;
51
- }
52
-
53
-
54
- div#classHeader, div#fileHeader {
55
- width: auto;
56
- color: white;
57
- padding: 0.5em 1.5em 0.5em 1.5em;
58
- margin: 0;
59
- margin-left: -40px;
60
- border-bottom: 3px solid #006;
61
- }
62
-
63
- div#classHeader a, div#fileHeader a {
64
- background: inherit;
65
- color: white;
66
- }
67
-
68
- div#classHeader td, div#fileHeader td {
69
- background: inherit;
70
- color: white;
71
- }
72
-
73
-
74
- div#fileHeader {
75
- background: #057;
76
- }
77
-
78
- div#classHeader {
79
- background: #048;
80
- }
81
-
82
-
83
- .class-name-in-header {
84
- font-size: 180%;
85
- font-weight: bold;
86
- }
87
-
88
-
89
- div#bodyContent {
90
- padding: 0 1.5em 0 1.5em;
91
- }
92
-
93
- div#description {
94
- padding: 0.5em 1.5em;
95
- background: #efefef;
96
- border: 1px dotted #999;
97
- }
98
-
99
- div#description h1,h2,h3,h4,h5,h6 {
100
- color: #125;;
101
- background: transparent;
102
- }
103
-
104
- div#validator-badges {
105
- text-align: center;
106
- }
107
- div#validator-badges img { border: 0; }
108
-
109
- div#copyright {
110
- color: #333;
111
- background: #efefef;
112
- font: 0.75em sans-serif;
113
- margin-top: 5em;
114
- margin-bottom: 0;
115
- padding: 0.5em 2em;
116
- }
117
-
118
-
119
- /* === Classes =================================== */
120
-
121
- table.header-table {
122
- color: white;
123
- font-size: small;
124
- }
125
-
126
- .type-note {
127
- font-size: small;
128
- color: #DEDEDE;
129
- }
130
-
131
- .xxsection-bar {
132
- background: #eee;
133
- color: #333;
134
- padding: 3px;
135
- }
136
-
137
- .section-bar {
138
- color: #333;
139
- border-bottom: 1px solid #999;
140
- margin-left: -20px;
141
- }
142
-
143
-
144
- .section-title {
145
- background: #79a;
146
- color: #eee;
147
- padding: 3px;
148
- margin-top: 2em;
149
- margin-left: -30px;
150
- border: 1px solid #999;
151
- }
152
-
153
- .top-aligned-row { vertical-align: top }
154
- .bottom-aligned-row { vertical-align: bottom }
155
-
156
- /* --- Context section classes ----------------------- */
157
-
158
- .context-row { }
159
- .context-item-name { font-family: monospace; font-weight: bold; color: black; }
160
- .context-item-value { font-size: small; color: #448; }
161
- .context-item-desc { color: #333; padding-left: 2em; }
162
-
163
- /* --- Method classes -------------------------- */
164
- .method-detail {
165
- background: #efefef;
166
- padding: 0;
167
- margin-top: 0.5em;
168
- margin-bottom: 1em;
169
- border: 1px dotted #ccc;
170
- }
171
- .method-heading {
172
- color: black;
173
- background: #ccc;
174
- border-bottom: 1px solid #666;
175
- padding: 0.2em 0.5em 0 0.5em;
176
- }
177
- .method-signature { color: black; background: inherit; }
178
- .method-name { font-weight: bold; }
179
- .method-args { font-style: italic; }
180
- .method-description { padding: 0 0.5em 0 0.5em; }
181
-
182
- /* --- Source code sections -------------------- */
183
-
184
- a.source-toggle { font-size: 90%; }
185
- div.method-source-code {
186
- background: #262626;
187
- color: #ffdead;
188
- margin: 1em;
189
- padding: 0.5em;
190
- border: 1px dashed #999;
191
- overflow: hidden;
192
- }
193
-
194
- div.method-source-code pre { color: #ffdead; overflow: hidden; }
195
-
196
- /* --- Ruby keyword styles --------------------- */
197
-
198
- .standalone-code { background: #221111; color: #ffdead; overflow: hidden; }
199
-
200
- .ruby-constant { color: #7fffd4; background: transparent; }
201
- .ruby-keyword { color: #00ffff; background: transparent; }
202
- .ruby-ivar { color: #eedd82; background: transparent; }
203
- .ruby-operator { color: #00ffee; background: transparent; }
204
- .ruby-identifier { color: #ffdead; background: transparent; }
205
- .ruby-node { color: #ffa07a; background: transparent; }
206
- .ruby-comment { color: #b22222; font-weight: bold; background: transparent; }
207
- .ruby-regexp { color: #ffa07a; background: transparent; }
208
- .ruby-value { color: #7fffd4; background: transparent; }
@@ -1,5 +0,0 @@
1
- module FixtureHelper
2
- def fixture(name)
3
- File.read("test/fixtures/#{name.to_s}.xml")
4
- end
5
- end
data/test/test_roxml.rb DELETED
@@ -1,105 +0,0 @@
1
- require "lib/roxml"
2
- require "test/unit"
3
- require "test/fixture_helper"
4
- require "test/mocks/mocks"
5
-
6
- class TestROXML < Test::Unit::TestCase
7
- include FixtureHelper
8
-
9
- # Test a simple mapping with no composition
10
- def test_valid_simple
11
- book = Book.parse(fixture(:book_valid))
12
- assert_equal("The PickAxe", book.title)
13
- end
14
-
15
- # Test book with text and attribute
16
- def test_book_author_text_attribute
17
- book = BookWithAuthorTextAttribute.parse(fixture(:book_text_with_attribute))
18
- assert_equal("primary",book.author.role)
19
- assert_equal("David Thomas",book.author.text)
20
- end
21
-
22
- # Malformed XML parsing should throw REXML::ParseException
23
- def test_malformed
24
- begin
25
- book = Book.parse(fixture(:book_malformed))
26
- fail()
27
- rescue REXML::ParseException
28
- end
29
- end
30
-
31
- # Test XML object containing list of other XML objects (one-to-many)
32
- # In this case, book with contibutions
33
- def test_one_to_many_with_container
34
- expected_authors = ["David Thomas","Andrew Hunt","Chad Fowler"]
35
- book = BookWithContributions.parse(fixture(:book_with_contributions))
36
- assert_equal("Programming Ruby - 2nd Edition", book.title)
37
- book.contributions.each do |contributor|
38
- assert expected_authors.include?(contributor.name)
39
- end
40
- end
41
-
42
- # Test XML object containing 1-n other XML objects without container (one-to-many)
43
- # In this case, book with contibutions
44
- def test_one_to_many_without_container
45
- expected_contributors = ["David Thomas","Andrew Hunt","Chad Fowler"]
46
- book = BookWithContributors.parse(fixture(:book_with_contributors))
47
- assert_equal("Programming Ruby - 2nd Edition", book.title)
48
- book.contributors.each do |contributor|
49
- assert(expected_contributors.include?(contributor.name))
50
- end
51
- end
52
-
53
- # Test XML object containing one other XML object (one-to-one)
54
- # In this case, book with publisher
55
- def test_one_to_one
56
- book = BookWithPublisher.parse(fixture(:book_with_publisher))
57
- assert_equal("Programming Ruby - 2nd Edition", book.title)
58
- assert_equal("Pragmatic Bookshelf", book.publisher.name)
59
- end
60
-
61
- # Test XML object containing type of self (self-reference)
62
- def test_self_reference
63
- book = BookPair.parse(fixture(:book_pair))
64
- assert_equal("Programming Ruby - 2nd Edition", book.title)
65
- assert_equal("Agile Web Development with Rails", book.book.title)
66
- end
67
-
68
- # Test three-level composition (one-to-many-to-many)
69
- def test_one_to_many_to_many
70
- expected_contributors = ["David Thomas","Andrew Hunt","Chad Fowler", "David Heinemeier Hansson"]
71
- expected_books = ["Programming Ruby - 2nd Edition", "Agile Web Development with Rails"]
72
- library = Library.parse(fixture(:library))
73
- assert_equal("Ruby library", library.name)
74
- library.books.each do |book|
75
- assert expected_books.include?(book.title)
76
- book.contributions.each do |contributor|
77
- assert(expected_contributors.include?(contributor.name))
78
- end
79
- end
80
- end
81
-
82
- def test_text_modificatoin
83
- person = Person.parse(fixture(:person))
84
- assert_equal("Ben Franklin", person.name)
85
- person.name = "Fred"
86
- xml=person.to_xml.to_s
87
- assert(/Fred/=~xml)
88
- end
89
-
90
- # Verify that an exception is thrown when two accessors have the same
91
- # name in a ROXML class.
92
- def test_duplicate_accessor
93
- begin
94
- klass = Class.new do
95
- include ROXML
96
-
97
- xml_attribute :id
98
- xml_text :id
99
- end
100
- raise "Defining a class with multiple accessors with same name should fail."
101
- rescue
102
- # Ok we should fail.
103
- end
104
- end
105
- end