representable 0.0.1.alpha1 → 0.0.1
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/README.rdoc +58 -153
- data/lib/representable.rb +18 -42
- data/lib/representable/bindings/json_bindings.rb +69 -0
- data/lib/representable/bindings/xml_bindings.rb +152 -0
- data/lib/representable/definition.rb +1 -12
- data/lib/representable/json.rb +66 -0
- data/lib/representable/version.rb +1 -1
- data/lib/representable/xml.rb +32 -38
- data/representable.gemspec +3 -2
- data/test/bindings_test.rb +110 -0
- data/test/json_test.rb +130 -0
- data/test/{roxml_test.rb → representable_test.rb} +28 -9
- data/test/test_helper.rb +2 -0
- data/test/xml_test.rb +192 -0
- metadata +32 -105
- data/History.txt +0 -354
- data/TODO +0 -37
- data/VERSION +0 -1
- data/examples/amazon.rb +0 -35
- data/examples/current_weather.rb +0 -27
- data/examples/dashed_elements.rb +0 -20
- data/examples/library.rb +0 -40
- data/examples/posts.rb +0 -27
- data/examples/rails.rb +0 -70
- data/examples/twitter.rb +0 -37
- data/examples/xml/active_record.xml +0 -70
- data/examples/xml/amazon.xml +0 -133
- data/examples/xml/current_weather.xml +0 -89
- data/examples/xml/dashed_elements.xml +0 -52
- data/examples/xml/posts.xml +0 -23
- data/examples/xml/twitter.xml +0 -422
- data/lib/representable/references.rb +0 -153
- data/spec/definition_spec.rb +0 -495
- data/spec/examples/active_record_spec.rb +0 -41
- data/spec/examples/amazon_spec.rb +0 -54
- data/spec/examples/current_weather_spec.rb +0 -37
- data/spec/examples/dashed_elements_spec.rb +0 -20
- data/spec/examples/library_spec.rb +0 -46
- data/spec/examples/post_spec.rb +0 -24
- data/spec/examples/twitter_spec.rb +0 -32
- data/spec/roxml_integration_test.rb +0 -289
- data/spec/roxml_spec.rb +0 -372
- data/spec/shared_specs.rb +0 -15
- data/spec/spec_helper.rb +0 -5
- data/spec/support/libxml.rb +0 -3
- data/spec/support/nokogiri.rb +0 -3
- data/spec/xml/array_spec.rb +0 -36
- data/spec/xml/attributes_spec.rb +0 -71
- data/spec/xml/encoding_spec.rb +0 -53
- data/spec/xml/namespace_spec.rb +0 -270
- data/spec/xml/namespaces_spec.rb +0 -67
- data/spec/xml/object_spec.rb +0 -82
- data/spec/xml/parser_spec.rb +0 -21
- data/spec/xml/text_spec.rb +0 -71
- data/test/fixtures/book_malformed.xml +0 -5
- data/test/fixtures/book_pair.xml +0 -8
- data/test/fixtures/book_text_with_attribute.xml +0 -5
- data/test/fixtures/book_valid.xml +0 -5
- data/test/fixtures/book_with_authors.xml +0 -7
- data/test/fixtures/book_with_contributions.xml +0 -9
- data/test/fixtures/book_with_contributors.xml +0 -7
- data/test/fixtures/book_with_contributors_attrs.xml +0 -7
- data/test/fixtures/book_with_default_namespace.xml +0 -9
- data/test/fixtures/book_with_depth.xml +0 -6
- data/test/fixtures/book_with_octal_pages.xml +0 -4
- data/test/fixtures/book_with_publisher.xml +0 -7
- data/test/fixtures/book_with_wrapped_attr.xml +0 -3
- data/test/fixtures/dictionary_of_attr_name_clashes.xml +0 -8
- data/test/fixtures/dictionary_of_attrs.xml +0 -6
- data/test/fixtures/dictionary_of_guarded_names.xml +0 -6
- data/test/fixtures/dictionary_of_mixeds.xml +0 -4
- data/test/fixtures/dictionary_of_name_clashes.xml +0 -10
- data/test/fixtures/dictionary_of_names.xml +0 -4
- data/test/fixtures/dictionary_of_texts.xml +0 -10
- data/test/fixtures/library.xml +0 -30
- data/test/fixtures/library_uppercase.xml +0 -30
- data/test/fixtures/muffins.xml +0 -3
- data/test/fixtures/nameless_ageless_youth.xml +0 -2
- data/test/fixtures/node_with_attr_name_conflicts.xml +0 -1
- data/test/fixtures/node_with_name_conflicts.xml +0 -4
- data/test/fixtures/numerology.xml +0 -4
- data/test/fixtures/person.xml +0 -1
- data/test/fixtures/person_with_guarded_mothers.xml +0 -13
- data/test/fixtures/person_with_mothers.xml +0 -10
- data/test/mocks/dictionaries.rb +0 -57
- data/test/mocks/mocks.rb +0 -279
- data/test/support/fixtures.rb +0 -11
- data/test/unit/definition_test.rb +0 -235
- data/test/unit/deprecations_test.rb +0 -24
- data/test/unit/to_xml_test.rb +0 -81
- data/test/unit/xml_attribute_test.rb +0 -39
- data/test/unit/xml_block_test.rb +0 -81
- data/test/unit/xml_bool_test.rb +0 -122
- data/test/unit/xml_convention_test.rb +0 -150
- data/test/unit/xml_hash_test.rb +0 -115
- data/test/unit/xml_initialize_test.rb +0 -49
- data/test/unit/xml_name_test.rb +0 -141
- data/test/unit/xml_namespace_test.rb +0 -31
- data/test/unit/xml_object_test.rb +0 -206
- data/test/unit/xml_required_test.rb +0 -94
- data/test/unit/xml_text_test.rb +0 -71
- data/website/index.html +0 -98
data/test/unit/xml_bool_test.rb
DELETED
@@ -1,122 +0,0 @@
|
|
1
|
-
require_relative './../test_helper'
|
2
|
-
|
3
|
-
PROC_TRUE = proc {|val| val ? 'TRUE' : 'FALSE'}
|
4
|
-
PROC_True = proc {|val| val ? 'True' : 'False'}
|
5
|
-
PROC_true = proc {|val| val.to_s}
|
6
|
-
PROC_1 = proc {|val| val ? 1 : 0}
|
7
|
-
|
8
|
-
class XmlBool
|
9
|
-
include ROXML
|
10
|
-
|
11
|
-
xml_name 'xml_bool'
|
12
|
-
xml_reader :true_from_TRUE?, :to_xml => PROC_TRUE
|
13
|
-
xml_reader :false_from_FALSE?, :from => 'text_for_FALSE', :to_xml => PROC_TRUE
|
14
|
-
xml_reader :true_from_one?, :from => '@attr_for_one', :to_xml => PROC_1
|
15
|
-
xml_reader :false_from_zero?, :from => 'text_for_zero', :in => 'container', :to_xml => PROC_1
|
16
|
-
xml_reader :true_from_True?, :from => '@attr_for_True', :in => 'container', :to_xml => PROC_True
|
17
|
-
xml_reader :false_from_False?, :from => 'false_from_cdata_False', :cdata => true, :to_xml => PROC_True
|
18
|
-
xml_reader :true_from_true?, :to_xml => PROC_true
|
19
|
-
xml_reader :false_from_false?, :to_xml => PROC_true
|
20
|
-
xml_reader :missing?
|
21
|
-
end
|
22
|
-
|
23
|
-
class XmlBoolRequired
|
24
|
-
include ROXML
|
25
|
-
|
26
|
-
xml_reader :required?, :required => true
|
27
|
-
end
|
28
|
-
|
29
|
-
class XmlBoolUnexpected
|
30
|
-
include ROXML
|
31
|
-
|
32
|
-
xml_reader :unexpected?
|
33
|
-
end
|
34
|
-
|
35
|
-
class XmlBoolUnexpectedWithBlock
|
36
|
-
include ROXML
|
37
|
-
|
38
|
-
xml_reader :unexpected? do |val|
|
39
|
-
val
|
40
|
-
end
|
41
|
-
end
|
42
|
-
|
43
|
-
BOOL_XML = %{
|
44
|
-
<xml_bool attr_for_one="1">
|
45
|
-
<true_from_TRUE>TRUE</true_from_TRUE>
|
46
|
-
<text_for_FALSE>FALSE</text_for_FALSE>
|
47
|
-
<container attr_for_True="True">
|
48
|
-
<text_for_zero>0</text_for_zero>
|
49
|
-
</container>
|
50
|
-
<false_from_cdata_False><![CDATA[False]]></false_from_cdata_False>
|
51
|
-
<true_from_true>true</true_from_true>
|
52
|
-
<false_from_false>false</false_from_false>
|
53
|
-
</xml_bool>
|
54
|
-
}
|
55
|
-
PRESENT = %{
|
56
|
-
<xml_bool_required>
|
57
|
-
<required>true</required>
|
58
|
-
</xml_bool_required>
|
59
|
-
}
|
60
|
-
ABSENT = %{
|
61
|
-
<xml_bool_required>
|
62
|
-
</xml_bool_required>
|
63
|
-
}
|
64
|
-
UNEXPECTED_VALUE_XML = %{
|
65
|
-
<xml_bool_unexpected>
|
66
|
-
<unexpected>Unexpected Value</unexpected>
|
67
|
-
</xml_bool_unexpected>
|
68
|
-
}
|
69
|
-
|
70
|
-
|
71
|
-
class TestXMLBool < ActiveSupport::TestCase
|
72
|
-
def test_bool_results_for_various_inputs
|
73
|
-
x = XmlBool.from_xml(BOOL_XML)
|
74
|
-
assert_equal true, x.true_from_TRUE?
|
75
|
-
assert_equal false, x.false_from_FALSE?
|
76
|
-
assert_equal true, x.true_from_one?
|
77
|
-
assert_equal false, x.false_from_zero?
|
78
|
-
assert_equal true, x.true_from_True?
|
79
|
-
assert_equal false, x.false_from_False?
|
80
|
-
assert_equal true, x.true_from_true?
|
81
|
-
assert_equal false, x.false_from_false?
|
82
|
-
end
|
83
|
-
|
84
|
-
def test_missing_results_in_nil
|
85
|
-
x = XmlBool.from_xml(BOOL_XML)
|
86
|
-
assert_equal nil, x.missing?
|
87
|
-
end
|
88
|
-
|
89
|
-
def test_unexpected_value_results_in_nil
|
90
|
-
x = XmlBoolUnexpected.from_xml(UNEXPECTED_VALUE_XML)
|
91
|
-
assert_equal nil, x.unexpected?
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_block_recieves_unexpected_value_rather_than_nil
|
95
|
-
x = XmlBoolUnexpectedWithBlock.from_xml(UNEXPECTED_VALUE_XML)
|
96
|
-
assert_equal "Unexpected Value", x.unexpected?
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_required_raises_on_missing
|
100
|
-
assert_nothing_raised do
|
101
|
-
XmlBoolRequired.from_xml(PRESENT)
|
102
|
-
end
|
103
|
-
|
104
|
-
assert_raise ROXML::RequiredElementMissing do
|
105
|
-
XmlBoolRequired.from_xml(ABSENT)
|
106
|
-
end
|
107
|
-
end
|
108
|
-
|
109
|
-
def test_writable_references_properly_handle_punctuation
|
110
|
-
klass = Class.new do
|
111
|
-
include ROXML
|
112
|
-
xml_accessor :punctuation?
|
113
|
-
end
|
114
|
-
|
115
|
-
instance = klass.from_xml("<xml><punctuation>True</punctuation></xml>")
|
116
|
-
assert_equal true, instance.punctuation?
|
117
|
-
instance.punctuation = false
|
118
|
-
assert_equal false, instance.punctuation?
|
119
|
-
end
|
120
|
-
|
121
|
-
to_xml_test XmlBool => BOOL_XML
|
122
|
-
end
|
@@ -1,150 +0,0 @@
|
|
1
|
-
require_relative './../test_helper'
|
2
|
-
|
3
|
-
XML_CAMELLOWER = %{
|
4
|
-
<bookCase name="Jonas' Books">
|
5
|
-
<bookCount>12</bookCount>
|
6
|
-
<bigBooks>
|
7
|
-
<bigBook>GED</bigBook>
|
8
|
-
<bigBook>House of Leaves</bigBook>
|
9
|
-
</bigBooks>
|
10
|
-
</bookCase>
|
11
|
-
}
|
12
|
-
|
13
|
-
XML_CAMELCASE = %{
|
14
|
-
<BookCase Name="Jonas' Books">
|
15
|
-
<BookCount>12</BookCount>
|
16
|
-
<BigBooks>
|
17
|
-
<BigBook>GED</BigBook>
|
18
|
-
<BigBook>House of Leaves</BigBook>
|
19
|
-
</BigBooks>
|
20
|
-
</BookCase>
|
21
|
-
}
|
22
|
-
|
23
|
-
XML_UNDERSCORE = %{
|
24
|
-
<book_case name="Jonas' Books">
|
25
|
-
<book_count>12</book_count>
|
26
|
-
<big_books>
|
27
|
-
<big_book>GED</big_book>
|
28
|
-
<big_book>House of Leaves</big_book>
|
29
|
-
</big_books>
|
30
|
-
</book_case>
|
31
|
-
}
|
32
|
-
|
33
|
-
XML_DASHES = %{
|
34
|
-
<book-case name="Jonas' Books">
|
35
|
-
<book-count>12</book-count>
|
36
|
-
<big-books>
|
37
|
-
<big-book>GED</big-book>
|
38
|
-
<big-book>House of Leaves</big-book>
|
39
|
-
</big-books>
|
40
|
-
</book-case>
|
41
|
-
}
|
42
|
-
|
43
|
-
XML_UPCASE = %{
|
44
|
-
<BOOKCASE NAME="Jonas' Books">
|
45
|
-
<BOOKCOUNT>12</BOOKCOUNT>
|
46
|
-
<BIGBOOKS>
|
47
|
-
<BIGBOOK>GED</BIGBOOK>
|
48
|
-
<BIGBOOK>House of Leaves</BIGBOOK>
|
49
|
-
</BIGBOOKS>
|
50
|
-
</BOOKCASE>
|
51
|
-
}
|
52
|
-
|
53
|
-
class BookCase
|
54
|
-
include ROXML
|
55
|
-
|
56
|
-
xml_reader :book_count, :as => Integer, :required => true
|
57
|
-
xml_reader :big_books, :as => [], :required => true
|
58
|
-
end
|
59
|
-
|
60
|
-
class BookCaseCamelCase < BookCase
|
61
|
-
xml_convention :camelcase
|
62
|
-
end
|
63
|
-
|
64
|
-
class BookCaseUnderScore < BookCase
|
65
|
-
xml_convention :underscore
|
66
|
-
end
|
67
|
-
|
68
|
-
class BookCaseDashes < BookCase
|
69
|
-
xml_convention &:dasherize
|
70
|
-
end
|
71
|
-
|
72
|
-
class BookCaseCamelLower < BookCase
|
73
|
-
xml_convention {|val| val.camelcase(:lower) }
|
74
|
-
end
|
75
|
-
|
76
|
-
class BookCaseUpCase < BookCase
|
77
|
-
xml_convention {|val| val.gsub('_', '').upcase }
|
78
|
-
end
|
79
|
-
|
80
|
-
class InheritedBookCaseCamelCase < BookCaseCamelCase
|
81
|
-
end
|
82
|
-
|
83
|
-
class InheritedBookCaseUpCase < BookCaseUpCase
|
84
|
-
end
|
85
|
-
|
86
|
-
# Same as BookCase. Needed to keep BookCase clean for other tests
|
87
|
-
class ParentBookCaseDefault
|
88
|
-
include ROXML
|
89
|
-
|
90
|
-
xml_reader :book_count, :as => Integer, :required => true
|
91
|
-
xml_reader :big_books, :as => [], :required => true
|
92
|
-
end
|
93
|
-
|
94
|
-
class InheritedBookCaseDefault < ParentBookCaseDefault
|
95
|
-
end
|
96
|
-
|
97
|
-
class TestXMLConvention < ActiveSupport::TestCase
|
98
|
-
# TODO: Test convention applies to xml_name as well...
|
99
|
-
|
100
|
-
def test_default_convention_is_underscore
|
101
|
-
bc = BookCase.from_xml(XML_UNDERSCORE)
|
102
|
-
assert_has_book_case_info(bc)
|
103
|
-
end
|
104
|
-
|
105
|
-
[BookCaseUpCase, BookCaseCamelLower, BookCaseDashes, BookCaseUnderScore, BookCaseCamelCase].each do |klass|
|
106
|
-
define_method(:"test_xml_convention_#{klass.to_s.underscore}") do
|
107
|
-
data = :"XML_#{klass.to_s.sub('BookCase', '').upcase}"
|
108
|
-
assert_equal Proc, klass.roxml_naming_convention.class
|
109
|
-
|
110
|
-
bc = klass.from_xml(Object.const_get(data))
|
111
|
-
assert_has_book_case_info(bc)
|
112
|
-
end
|
113
|
-
end
|
114
|
-
|
115
|
-
def test_child_should_inherit_convention_if_it_doesnt_declare_one
|
116
|
-
[InheritedBookCaseUpCase, InheritedBookCaseCamelCase].each do |klass|
|
117
|
-
data = :"XML_#{klass.to_s.sub('InheritedBookCase', '').upcase}"
|
118
|
-
assert_equal Proc, klass.roxml_naming_convention.class
|
119
|
-
|
120
|
-
bc = klass.from_xml(Object.const_get(data))
|
121
|
-
assert_has_book_case_info(bc)
|
122
|
-
end
|
123
|
-
end
|
124
|
-
|
125
|
-
def test_child_should_inherit_convention_even_if_it_is_added_after_child_declaration
|
126
|
-
bc = InheritedBookCaseDefault.from_xml(XML_UNDERSCORE)
|
127
|
-
assert_has_book_case_info(bc)
|
128
|
-
|
129
|
-
ParentBookCaseDefault.class_eval do
|
130
|
-
xml_convention :dasherize
|
131
|
-
end
|
132
|
-
|
133
|
-
bc = InheritedBookCaseDefault.from_xml(XML_DASHES)
|
134
|
-
assert_has_book_case_info(bc)
|
135
|
-
assert_raise ROXML::RequiredElementMissing do
|
136
|
-
InheritedBookCaseDefault.from_xml(XML_UNDERSCORE)
|
137
|
-
end
|
138
|
-
end
|
139
|
-
|
140
|
-
def test_tag_name_should_get_convention_treatment_as_well
|
141
|
-
assert_equal "book-case-dashes", BookCaseDashes.tag_name
|
142
|
-
assert_equal "INHERITEDBOOKCASEUPCASE", InheritedBookCaseUpCase.tag_name
|
143
|
-
assert_equal "InheritedBookCaseCamelCase", InheritedBookCaseCamelCase.tag_name
|
144
|
-
end
|
145
|
-
|
146
|
-
def assert_has_book_case_info(bc)
|
147
|
-
assert_equal 12, bc.book_count
|
148
|
-
assert_equal ['GED', 'House of Leaves'], bc.big_books
|
149
|
-
end
|
150
|
-
end
|
data/test/unit/xml_hash_test.rb
DELETED
@@ -1,115 +0,0 @@
|
|
1
|
-
require_relative './../test_helper'
|
2
|
-
|
3
|
-
class BookWithContributorHash
|
4
|
-
include ROXML
|
5
|
-
|
6
|
-
xml_reader :contributors, :as => {:key => '@role',
|
7
|
-
:value => 'name'}
|
8
|
-
end
|
9
|
-
|
10
|
-
class TestXMLHash < ActiveSupport::TestCase
|
11
|
-
def setup
|
12
|
-
@contents = {'quaquaversally' => 'adjective: (of a geological formation) sloping downward from the center in all directions.',
|
13
|
-
'tergiversate' => 'To use evasions or ambiguities; equivocate.'}
|
14
|
-
end
|
15
|
-
|
16
|
-
def test_hash_preserves_data
|
17
|
-
b = BookWithContributorHash.from_xml(%{
|
18
|
-
<book isbn="0974514055">
|
19
|
-
<contributor role="author"><name>David Thomas</name></contributor>
|
20
|
-
<contributor role="supporting author"><name>Andrew Hunt</name></contributor>
|
21
|
-
<contributor role="supporting author"><name>Chad Fowler</name></contributor>
|
22
|
-
</book>
|
23
|
-
})
|
24
|
-
assert_equal({'author' => 'David Thomas', 'supporting author' => ['Andrew Hunt', 'Chad Fowler']},
|
25
|
-
b.contributors)
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_hash_with_object_key_fails
|
29
|
-
assert_raise ArgumentError do
|
30
|
-
Class.new do
|
31
|
-
include ROXML
|
32
|
-
|
33
|
-
xml_reader :object_key_to_text, :as => {:key => BookWithContributorHash,
|
34
|
-
:value => 'text_node'}
|
35
|
-
end
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_hash_with_object_value_fails
|
40
|
-
assert_raise ArgumentError do
|
41
|
-
Class.new do
|
42
|
-
include ROXML
|
43
|
-
|
44
|
-
xml_reader :key_to_object_value, :as => {:key => '@text_node',
|
45
|
-
:value => BookWithContributorHash}
|
46
|
-
end
|
47
|
-
end
|
48
|
-
end
|
49
|
-
|
50
|
-
def test_attrs_hash
|
51
|
-
dict = DictionaryOfAttrs.from_xml(fixture(:dictionary_of_attrs))
|
52
|
-
assert_equal Hash, dict.definitions.class
|
53
|
-
assert_equal @contents, dict.definitions
|
54
|
-
end
|
55
|
-
|
56
|
-
def test_text_hash
|
57
|
-
dict = DictionaryOfTexts.from_xml(fixture(:dictionary_of_texts))
|
58
|
-
assert_equal Hash, dict.definitions.class
|
59
|
-
assert_equal @contents, dict.definitions
|
60
|
-
end
|
61
|
-
|
62
|
-
def test_mixed_content_hash
|
63
|
-
dict = DictionaryOfMixeds.from_xml(fixture(:dictionary_of_mixeds))
|
64
|
-
assert_equal Hash, dict.definitions.class
|
65
|
-
assert_equal @contents, dict.definitions
|
66
|
-
end
|
67
|
-
|
68
|
-
def test_name_hash
|
69
|
-
dict = DictionaryOfNames.from_xml(fixture(:dictionary_of_names))
|
70
|
-
assert_equal Hash, dict.definitions.class
|
71
|
-
assert_equal @contents, dict.definitions
|
72
|
-
end
|
73
|
-
|
74
|
-
def test_guarded_name_hash
|
75
|
-
dict = DictionaryOfGuardedNames.from_xml(fixture(:dictionary_of_guarded_names))
|
76
|
-
assert_equal Hash, dict.definitions.class
|
77
|
-
assert_equal @contents, dict.definitions
|
78
|
-
end
|
79
|
-
|
80
|
-
def test_text_name_clashes
|
81
|
-
dict = DictionaryOfNameClashes.from_xml(fixture(:dictionary_of_name_clashes))
|
82
|
-
assert_equal Hash, dict.definitions.class
|
83
|
-
assert_equal @contents, dict.definitions
|
84
|
-
end
|
85
|
-
|
86
|
-
def test_attr_name_clashes
|
87
|
-
dict = DictionaryOfAttrNameClashes.from_xml(fixture(:dictionary_of_attr_name_clashes))
|
88
|
-
assert_equal Hash, dict.definitions.class
|
89
|
-
assert_equal @contents, dict.definitions
|
90
|
-
end
|
91
|
-
|
92
|
-
def test_it_should_gracefully_handle_empty_hash
|
93
|
-
dict = Class.new do
|
94
|
-
include ROXML
|
95
|
-
|
96
|
-
xml_reader :missing_hash, :as => {:key => :name, :value => :content}, :in => 'EmptyDictionary'
|
97
|
-
end
|
98
|
-
|
99
|
-
assert_equal({}, dict.from_xml(%{
|
100
|
-
<dict>
|
101
|
-
<EmptyDictionary>
|
102
|
-
</EmptyDictionary>
|
103
|
-
</dict>
|
104
|
-
}).missing_hash)
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_as_hash_of_as_type_not_deprecated
|
108
|
-
assert_not_deprecated do
|
109
|
-
opts = ROXML::Definition.new(:name, :as => {:key => :name, :value => {:from => 'value', :as => OctalInteger}})
|
110
|
-
assert opts.hash?
|
111
|
-
assert_equal OctalInteger, opts.hash.value.sought_type
|
112
|
-
assert_equal 'value', opts.hash.value.name
|
113
|
-
end
|
114
|
-
end
|
115
|
-
end
|
@@ -1,49 +0,0 @@
|
|
1
|
-
require_relative './../test_helper'
|
2
|
-
|
3
|
-
class InheritedBookWithDepth < Book
|
4
|
-
xml_reader :depth, :as => Measurement
|
5
|
-
end
|
6
|
-
|
7
|
-
class BookWithXmlInitialize < BookWithDepth
|
8
|
-
attr_reader :created_at, :creator
|
9
|
-
|
10
|
-
def initialize(created_at, creator = "Unknown")
|
11
|
-
@created_at = created_at
|
12
|
-
@creator = creator
|
13
|
-
end
|
14
|
-
end
|
15
|
-
|
16
|
-
class TestXMLInitialize < ActiveSupport::TestCase
|
17
|
-
def test_initialize_is_run
|
18
|
-
m = Measurement.from_xml('<measurement units="hundredths-meters">1130</measurement>')
|
19
|
-
assert_equal 11.3, m.value
|
20
|
-
assert_equal 'meters', m.units
|
21
|
-
end
|
22
|
-
|
23
|
-
def test_initialize_is_run_for_nested_type
|
24
|
-
b = BookWithDepth.from_xml(fixture(:book_with_depth))
|
25
|
-
assert_equal Measurement.new(11.3, 'meters'), b.depth
|
26
|
-
end
|
27
|
-
|
28
|
-
def test_initialize_is_run_for_nested_type_with_inheritance
|
29
|
-
b = InheritedBookWithDepth.from_xml(fixture(:book_with_depth))
|
30
|
-
assert_equal Measurement.new(11.3, 'meters'), b.depth
|
31
|
-
end
|
32
|
-
|
33
|
-
def test_initialize_fails_on_missing_required_arg
|
34
|
-
assert_raise ArgumentError do
|
35
|
-
BookWithXmlInitialize.from_xml(fixture(:book_with_depth))
|
36
|
-
end
|
37
|
-
end
|
38
|
-
|
39
|
-
def test_initialize_with_extra_args
|
40
|
-
now = Time.now
|
41
|
-
b = BookWithXmlInitialize.from_xml(fixture(:book_with_depth), now)
|
42
|
-
assert_equal now, b.created_at
|
43
|
-
assert_equal "Unknown", b.creator
|
44
|
-
|
45
|
-
b = BookWithXmlInitialize.from_xml(fixture(:book_with_depth), Time.now, "Joe Librarian")
|
46
|
-
assert now < b.created_at
|
47
|
-
assert_equal "Joe Librarian", b.creator
|
48
|
-
end
|
49
|
-
end
|
data/test/unit/xml_name_test.rb
DELETED
@@ -1,141 +0,0 @@
|
|
1
|
-
require_relative './../test_helper'
|
2
|
-
|
3
|
-
# Parent | Child
|
4
|
-
# :from | no :from |
|
5
|
-
# -------------------|--------------
|
6
|
-
# :from | xml_name | xml_name-d
|
7
|
-
# value | value |
|
8
|
-
# -------------------|--------------
|
9
|
-
# :from | parent's |
|
10
|
-
# value | accessor | un-xml_name-d
|
11
|
-
# | name |
|
12
|
-
|
13
|
-
class Child
|
14
|
-
include ROXML
|
15
|
-
end
|
16
|
-
|
17
|
-
class NamedChild
|
18
|
-
include ROXML
|
19
|
-
|
20
|
-
xml_name :xml_name_of_child
|
21
|
-
end
|
22
|
-
|
23
|
-
class ParentOfNamedChild
|
24
|
-
include ROXML
|
25
|
-
|
26
|
-
xml_name :parent
|
27
|
-
xml_accessor :child_accessor_name, :as => NamedChild
|
28
|
-
end
|
29
|
-
|
30
|
-
class ParentOfNamedChildWithFrom
|
31
|
-
include ROXML
|
32
|
-
|
33
|
-
xml_name :parent
|
34
|
-
xml_accessor :child_accessor_name, :as => NamedChild, :from => 'child_from_name'
|
35
|
-
end
|
36
|
-
|
37
|
-
class ParentOfUnnamedChild
|
38
|
-
include ROXML
|
39
|
-
|
40
|
-
xml_name :parent
|
41
|
-
xml_accessor :child_accessor_name, :as => Child
|
42
|
-
end
|
43
|
-
|
44
|
-
class ParentOfUnnamedChildWithFrom
|
45
|
-
include ROXML
|
46
|
-
|
47
|
-
xml_name :parent
|
48
|
-
xml_accessor :child_accessor_name,:as => Child, :from => 'child_from_name'
|
49
|
-
end
|
50
|
-
|
51
|
-
class TestXMLName < ActiveSupport::TestCase
|
52
|
-
def test_from_always_dominates_attribute_name_xml_name_or_not
|
53
|
-
parent = ParentOfNamedChildWithFrom.new
|
54
|
-
parent.child_accessor_name = Child.new
|
55
|
-
|
56
|
-
assert_equal "<parent><child_from_name/></parent>", parent.to_xml.to_s.gsub(/[\n ]/, '')
|
57
|
-
|
58
|
-
parent = ParentOfUnnamedChildWithFrom.new
|
59
|
-
parent.child_accessor_name = Child.new
|
60
|
-
|
61
|
-
assert_equal "<parent><child_from_name/></parent>", parent.to_xml.to_s.gsub(/[\n ]/, '')
|
62
|
-
end
|
63
|
-
|
64
|
-
def test_attribute_name_comes_from_the_xml_name_value_if_present
|
65
|
-
parent = ParentOfNamedChild.new
|
66
|
-
parent.child_accessor_name = Child.new
|
67
|
-
|
68
|
-
assert_equal "<parent><xml_name_of_child/></parent>", parent.to_xml.to_s.gsub(/[\n ]/, '')
|
69
|
-
end
|
70
|
-
|
71
|
-
def test_attribute_name_comes_from_parent_accessor_by_default
|
72
|
-
parent = ParentOfUnnamedChild.new
|
73
|
-
parent.child_accessor_name = Child.new
|
74
|
-
|
75
|
-
assert_equal "<parent><child_accessor_name/></parent>", parent.to_xml.to_s.gsub(/[\n ]/, '')
|
76
|
-
end
|
77
|
-
|
78
|
-
def test_it_should_be_inherited
|
79
|
-
class_with_inherited_name = Class.new(ParentOfNamedChild)
|
80
|
-
assert_equal :parent, class_with_inherited_name.tag_name
|
81
|
-
end
|
82
|
-
|
83
|
-
def test_it_should_be_inherited_over_multiple_levels
|
84
|
-
class_with_inherited_name = Class.new(Class.new(ParentOfNamedChild))
|
85
|
-
assert_equal :parent, class_with_inherited_name.tag_name
|
86
|
-
end
|
87
|
-
|
88
|
-
def test_named_books_picked_up
|
89
|
-
named = Library.from_xml(fixture(:library))
|
90
|
-
assert named.books
|
91
|
-
assert_equal :book, named.books.first.class.tag_name
|
92
|
-
end
|
93
|
-
|
94
|
-
def test_nameless_books_missing
|
95
|
-
nameless = LibraryWithBooksOfUnderivableName.from_xml(fixture(:library))
|
96
|
-
assert nameless.novels.empty?
|
97
|
-
end
|
98
|
-
|
99
|
-
def test_tag_name
|
100
|
-
assert_equal :dictionary, DictionaryOfTexts.tag_name
|
101
|
-
|
102
|
-
dict = DictionaryOfTexts.from_xml(fixture(:dictionary_of_texts))
|
103
|
-
|
104
|
-
assert_equal :dictionary, dict.class.tag_name
|
105
|
-
end
|
106
|
-
|
107
|
-
def test_roxml_attrs
|
108
|
-
assert_equal 'definition', DictionaryOfTexts.roxml_attrs.first.name
|
109
|
-
assert_equal 'word', DictionaryOfTexts.roxml_attrs.first.hash.key.name
|
110
|
-
assert_equal 'meaning', DictionaryOfTexts.roxml_attrs.first.hash.value.name
|
111
|
-
end
|
112
|
-
|
113
|
-
def test_xml_name_should_not_be_conventionalized_if_explicitly_set
|
114
|
-
reference = ROXML::XMLTextRef.new(ROXML::Definition.new(:name, :from => 'georss:name'), WrapModule::InstanceStandin.new)
|
115
|
-
assert_equal "georss:name", reference.name
|
116
|
-
end
|
117
|
-
|
118
|
-
def test_xml_name_not_screwed_up_by_xml_convention
|
119
|
-
reference = ROXML::XMLTextRef.new(ROXML::Definition.new(:name, :in => './'), WrapModule::InstanceStandin.new)
|
120
|
-
assert_equal "name value", reference.value_in(ROXML::XML.parse_string(%(
|
121
|
-
<Wrapper>
|
122
|
-
<MoreStuff>
|
123
|
-
<DeepWrapper>
|
124
|
-
<Name>name value</Name>
|
125
|
-
</DeepWrapper>
|
126
|
-
</MoreStuff>
|
127
|
-
</Wrapper>
|
128
|
-
)).root)
|
129
|
-
end
|
130
|
-
end
|
131
|
-
|
132
|
-
module WrapModule
|
133
|
-
class BaseClass
|
134
|
-
include ROXML
|
135
|
-
xml_convention :camelcase
|
136
|
-
end
|
137
|
-
|
138
|
-
class InstanceStandin < BaseClass
|
139
|
-
xml_reader :name, :in => './'
|
140
|
-
end
|
141
|
-
end
|