representable 0.0.1.alpha1 → 0.0.1

Sign up to get free protection for your applications and to get access to all the features.
Files changed (102) hide show
  1. data/README.rdoc +58 -153
  2. data/lib/representable.rb +18 -42
  3. data/lib/representable/bindings/json_bindings.rb +69 -0
  4. data/lib/representable/bindings/xml_bindings.rb +152 -0
  5. data/lib/representable/definition.rb +1 -12
  6. data/lib/representable/json.rb +66 -0
  7. data/lib/representable/version.rb +1 -1
  8. data/lib/representable/xml.rb +32 -38
  9. data/representable.gemspec +3 -2
  10. data/test/bindings_test.rb +110 -0
  11. data/test/json_test.rb +130 -0
  12. data/test/{roxml_test.rb → representable_test.rb} +28 -9
  13. data/test/test_helper.rb +2 -0
  14. data/test/xml_test.rb +192 -0
  15. metadata +32 -105
  16. data/History.txt +0 -354
  17. data/TODO +0 -37
  18. data/VERSION +0 -1
  19. data/examples/amazon.rb +0 -35
  20. data/examples/current_weather.rb +0 -27
  21. data/examples/dashed_elements.rb +0 -20
  22. data/examples/library.rb +0 -40
  23. data/examples/posts.rb +0 -27
  24. data/examples/rails.rb +0 -70
  25. data/examples/twitter.rb +0 -37
  26. data/examples/xml/active_record.xml +0 -70
  27. data/examples/xml/amazon.xml +0 -133
  28. data/examples/xml/current_weather.xml +0 -89
  29. data/examples/xml/dashed_elements.xml +0 -52
  30. data/examples/xml/posts.xml +0 -23
  31. data/examples/xml/twitter.xml +0 -422
  32. data/lib/representable/references.rb +0 -153
  33. data/spec/definition_spec.rb +0 -495
  34. data/spec/examples/active_record_spec.rb +0 -41
  35. data/spec/examples/amazon_spec.rb +0 -54
  36. data/spec/examples/current_weather_spec.rb +0 -37
  37. data/spec/examples/dashed_elements_spec.rb +0 -20
  38. data/spec/examples/library_spec.rb +0 -46
  39. data/spec/examples/post_spec.rb +0 -24
  40. data/spec/examples/twitter_spec.rb +0 -32
  41. data/spec/roxml_integration_test.rb +0 -289
  42. data/spec/roxml_spec.rb +0 -372
  43. data/spec/shared_specs.rb +0 -15
  44. data/spec/spec_helper.rb +0 -5
  45. data/spec/support/libxml.rb +0 -3
  46. data/spec/support/nokogiri.rb +0 -3
  47. data/spec/xml/array_spec.rb +0 -36
  48. data/spec/xml/attributes_spec.rb +0 -71
  49. data/spec/xml/encoding_spec.rb +0 -53
  50. data/spec/xml/namespace_spec.rb +0 -270
  51. data/spec/xml/namespaces_spec.rb +0 -67
  52. data/spec/xml/object_spec.rb +0 -82
  53. data/spec/xml/parser_spec.rb +0 -21
  54. data/spec/xml/text_spec.rb +0 -71
  55. data/test/fixtures/book_malformed.xml +0 -5
  56. data/test/fixtures/book_pair.xml +0 -8
  57. data/test/fixtures/book_text_with_attribute.xml +0 -5
  58. data/test/fixtures/book_valid.xml +0 -5
  59. data/test/fixtures/book_with_authors.xml +0 -7
  60. data/test/fixtures/book_with_contributions.xml +0 -9
  61. data/test/fixtures/book_with_contributors.xml +0 -7
  62. data/test/fixtures/book_with_contributors_attrs.xml +0 -7
  63. data/test/fixtures/book_with_default_namespace.xml +0 -9
  64. data/test/fixtures/book_with_depth.xml +0 -6
  65. data/test/fixtures/book_with_octal_pages.xml +0 -4
  66. data/test/fixtures/book_with_publisher.xml +0 -7
  67. data/test/fixtures/book_with_wrapped_attr.xml +0 -3
  68. data/test/fixtures/dictionary_of_attr_name_clashes.xml +0 -8
  69. data/test/fixtures/dictionary_of_attrs.xml +0 -6
  70. data/test/fixtures/dictionary_of_guarded_names.xml +0 -6
  71. data/test/fixtures/dictionary_of_mixeds.xml +0 -4
  72. data/test/fixtures/dictionary_of_name_clashes.xml +0 -10
  73. data/test/fixtures/dictionary_of_names.xml +0 -4
  74. data/test/fixtures/dictionary_of_texts.xml +0 -10
  75. data/test/fixtures/library.xml +0 -30
  76. data/test/fixtures/library_uppercase.xml +0 -30
  77. data/test/fixtures/muffins.xml +0 -3
  78. data/test/fixtures/nameless_ageless_youth.xml +0 -2
  79. data/test/fixtures/node_with_attr_name_conflicts.xml +0 -1
  80. data/test/fixtures/node_with_name_conflicts.xml +0 -4
  81. data/test/fixtures/numerology.xml +0 -4
  82. data/test/fixtures/person.xml +0 -1
  83. data/test/fixtures/person_with_guarded_mothers.xml +0 -13
  84. data/test/fixtures/person_with_mothers.xml +0 -10
  85. data/test/mocks/dictionaries.rb +0 -57
  86. data/test/mocks/mocks.rb +0 -279
  87. data/test/support/fixtures.rb +0 -11
  88. data/test/unit/definition_test.rb +0 -235
  89. data/test/unit/deprecations_test.rb +0 -24
  90. data/test/unit/to_xml_test.rb +0 -81
  91. data/test/unit/xml_attribute_test.rb +0 -39
  92. data/test/unit/xml_block_test.rb +0 -81
  93. data/test/unit/xml_bool_test.rb +0 -122
  94. data/test/unit/xml_convention_test.rb +0 -150
  95. data/test/unit/xml_hash_test.rb +0 -115
  96. data/test/unit/xml_initialize_test.rb +0 -49
  97. data/test/unit/xml_name_test.rb +0 -141
  98. data/test/unit/xml_namespace_test.rb +0 -31
  99. data/test/unit/xml_object_test.rb +0 -206
  100. data/test/unit/xml_required_test.rb +0 -94
  101. data/test/unit/xml_text_test.rb +0 -71
  102. data/website/index.html +0 -98
@@ -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
@@ -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
@@ -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