sdl4r 0.9.9 → 0.9.11

Sign up to get free protection for your applications and to get access to all the features.
Files changed (81) hide show
  1. data/CHANGELOG +70 -1
  2. data/LICENSE +499 -497
  3. data/Rakefile +38 -28
  4. data/TODO +194 -45
  5. data/doc/classes/SDL4R/AbbreviationTimezoneProxy.html +151 -0
  6. data/doc/classes/SDL4R/ConstantTimezone.html +129 -0
  7. data/doc/classes/SDL4R/Element.html +148 -0
  8. data/doc/classes/SDL4R/Reader.html +683 -0
  9. data/doc/classes/SDL4R/RelativeTimezone.html +187 -0
  10. data/doc/classes/SDL4R/SdlBinary.html +188 -0
  11. data/doc/classes/SDL4R/SdlParseError.html +110 -0
  12. data/doc/classes/SDL4R/SdlTimeSpan.html +651 -0
  13. data/doc/classes/SDL4R/Serializer.html +557 -0
  14. data/doc/classes/SDL4R/Serializer/Ref.html +138 -0
  15. data/doc/classes/SDL4R/TZAbbreviationDB/Record.html +117 -0
  16. data/doc/classes/SDL4R/Tag.html +1274 -0
  17. data/doc/classes/SDL4R/Token.html +131 -0
  18. data/doc/created.rid +1 -0
  19. data/doc/files/CHANGELOG.html +290 -0
  20. data/doc/files/LICENSE.html +53 -0
  21. data/doc/files/README.html +405 -0
  22. data/doc/files/lib/sdl4r/abbreviation_timezone_proxy_rb.html +63 -0
  23. data/doc/files/lib/sdl4r/constant_timezone_rb.html +54 -0
  24. data/doc/files/lib/sdl4r/element_rb.html +54 -0
  25. data/doc/files/lib/sdl4r/reader_rb.html +68 -0
  26. data/doc/files/lib/sdl4r/relative_timezone_rb.html +62 -0
  27. data/doc/files/lib/sdl4r/sdl4r_rb.html +66 -0
  28. data/doc/files/lib/sdl4r/sdl4r_tzinfo_rb.html +64 -0
  29. data/doc/files/lib/sdl4r/sdl4r_version_rb.html +54 -0
  30. data/doc/files/lib/sdl4r/sdl_binary_rb.html +54 -0
  31. data/doc/files/lib/sdl4r/sdl_parse_error_rb.html +54 -0
  32. data/doc/files/lib/sdl4r/sdl_time_span_rb.html +54 -0
  33. data/doc/files/lib/sdl4r/serializer_rb.html +62 -0
  34. data/doc/files/lib/sdl4r/tag_rb.html +66 -0
  35. data/doc/files/lib/sdl4r/token_rb.html +54 -0
  36. data/doc/files/lib/sdl4r/tokenizer_rb.html +64 -0
  37. data/doc/files/lib/sdl4r/tz_abbreviation_db_rb.html +67 -0
  38. data/doc/files/lib/sdl4r_rb.html +54 -0
  39. data/doc/files/lib/sdl4r_tzinfo_rb.html +54 -0
  40. data/doc/fr_class_index.html +23 -0
  41. data/doc/fr_file_index.html +40 -0
  42. data/doc/fr_method_index.html +4711 -0
  43. data/doc/index.html +15 -0
  44. data/doc/rdoc-style.css +328 -0
  45. data/lib/sdl4r.rb +3 -1
  46. data/lib/sdl4r/abbreviation_timezone_proxy.rb +38 -0
  47. data/lib/sdl4r/constant_timezone.rb +58 -0
  48. data/{test/sdl4r/sdl_test.rb → lib/sdl4r/element.rb} +19 -14
  49. data/lib/sdl4r/reader.rb +772 -0
  50. data/lib/sdl4r/relative_timezone.rb +156 -0
  51. data/lib/sdl4r/sdl4r.rb +187 -45
  52. data/lib/sdl4r/sdl4r_tzinfo.rb +75 -0
  53. data/lib/sdl4r/sdl4r_version.rb +24 -0
  54. data/lib/sdl4r/sdl_parse_error.rb +1 -1
  55. data/lib/sdl4r/sdl_time_span.rb +5 -1
  56. data/lib/sdl4r/serializer.rb +473 -60
  57. data/lib/sdl4r/tag.rb +126 -51
  58. data/lib/sdl4r/token.rb +49 -0
  59. data/lib/sdl4r/tokenizer.rb +431 -0
  60. data/lib/sdl4r/tz_abbreviation_db.rb +266 -0
  61. data/read_jprof.html +16934 -0
  62. data/read_jprof_pull.html +14451 -0
  63. data/read_prof.html +4983 -0
  64. data/read_prof_pull.html +4896 -0
  65. data/test/sdl4r/parser_test.rb +577 -503
  66. data/test/sdl4r/read_jprof.rb +58 -0
  67. data/test/sdl4r/read_prof.rb +70 -0
  68. data/test/sdl4r/reader_test.rb +173 -0
  69. data/test/sdl4r/relative_timezone_test.rb +102 -0
  70. data/test/sdl4r/sdl4r_test.rb +611 -528
  71. data/test/sdl4r/sdl4r_tzinfo_test.rb +108 -0
  72. data/test/sdl4r/sdl_test_case.rb +60 -0
  73. data/test/sdl4r/serializer_test.rb +448 -11
  74. data/test/sdl4r/tag_test.rb +84 -5
  75. data/test/sdl4r/tokenizer_test.rb +128 -0
  76. metadata +69 -11
  77. data/lib/sdl4r/parser.rb +0 -648
  78. data/lib/sdl4r/parser/reader.rb +0 -184
  79. data/lib/sdl4r/parser/time_span_with_zone.rb +0 -57
  80. data/lib/sdl4r/parser/token.rb +0 -138
  81. data/lib/sdl4r/parser/tokenizer.rb +0 -507
@@ -0,0 +1,557 @@
1
+ <!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
2
+ <html lang='en'>
3
+ <head>
4
+ <title>: SDL4R::Serializer [RDoc: Simple Declarative Language for Ruby]</title>
5
+ <meta content='text/html; charset=utf-8' http-equiv='Content-Type'>
6
+ <link href='../../rdoc-style.css' media='screen' rel='stylesheet' type='text/css'>
7
+ <script type='text/javascript'>
8
+ //<![CDATA[
9
+ function popupCode(url) {
10
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
11
+ }
12
+
13
+ function toggleCode(id) {
14
+ var code = document.getElementById(id)
15
+
16
+ code.style.display = code.style.display != 'block' ? 'block' : 'none'
17
+ return true
18
+ }
19
+
20
+ // Make codeblocks hidden by default
21
+ document.writeln('<' + 'style type="text/css">.method .source pre { display: none }<\/style>')
22
+ //]]>
23
+ </script>
24
+ </head>
25
+ <body class='page'>
26
+ <div class='class' id='wrapper'>
27
+ <div class='header'>
28
+ <h1 class='name'>
29
+ <span class='type'>Class</span>
30
+ SDL4R::Serializer
31
+ </h1>
32
+ <ol class='paths'>
33
+ <li>
34
+ <a href="../../files/lib/sdl4r/serializer_rb.html">lib/sdl4r/serializer.rb</a>
35
+ </li>
36
+ </ol>
37
+ <div class='parent'>
38
+ Parent:
39
+ <strong>Object</strong>
40
+ </div>
41
+ </div>
42
+ <div id='content'>
43
+ <div id='text'>
44
+ <div id='description'>
45
+ <p>
46
+ Allows to serialize/deserialize between SDL and Ruby objects.
47
+ </p>
48
+ <p>
49
+ Classes which need to implement custom serialization/deserialization should
50
+ define the +to_sdl()+ and +from_sdl()+ methods as follows:
51
+ </p>
52
+ <pre>class MyClass&#x000A;&#x000A; attr_accessor :firstname&#x000A;&#x000A; def from_sdl(tag, serializer = Serializer.new)&#x000A; self.firstname = tag.attribute(&quot;name&quot;)&#x000A; self&#x000A; end&#x000A;&#x000A; def to_sdl(serializer = Serializer.new, tag = serializer.new_tag(nil, self, nil))&#x000A; tag.set_attribute(&quot;name&quot;, self.firstname)&#x000A; tag&#x000A; end&#x000A;&#x000A;end</pre>
53
+ <p>
54
+ Custom serialization (using +to_sdl()+) or deserialization (using
55
+ +from_sdl()+) can be more efficient than the standard one as its logic is
56
+ more straightforward).
57
+ </p>
58
+ <h2>Author</h2>
59
+ <p>
60
+ Philippe Vosges
61
+ </p>
62
+ </div>
63
+ <div id='method-list'>
64
+ <h2>Methods</h2>
65
+ <h3>public class</h3>
66
+ <ol>
67
+ <li><a href="#M000083">new</a></li>
68
+ </ol>
69
+ <h3>public instance</h3>
70
+ <ol>
71
+ <li><a href="#M000097">deserialize</a></li>
72
+ <li><a href="#M000100">deserialize_from_attributes</a></li>
73
+ <li><a href="#M000102">deserialize_from_child_tags</a></li>
74
+ <li><a href="#M000099">deserialize_from_values</a></li>
75
+ <li><a href="#M000098">deserialize_object</a></li>
76
+ <li><a href="#M000101">get_deserialized_property_name</a></li>
77
+ <li><a href="#M000090">get_method</a></li>
78
+ <li><a href="#M000096">new_plain_object</a></li>
79
+ <li><a href="#M000086">new_ref_tag</a></li>
80
+ <li><a href="#M000085">new_tag</a></li>
81
+ <li><a href="#M000084">reference_object</a></li>
82
+ <li><a href="#M000091">serializable_property?</a></li>
83
+ <li><a href="#M000087">serialize</a></li>
84
+ <li><a href="#M000093">serialize_array</a></li>
85
+ <li><a href="#M000094">serialize_array_as_child_tags</a></li>
86
+ <li><a href="#M000088">serialize_hash</a></li>
87
+ <li><a href="#M000095">serialize_object_or_ref</a></li>
88
+ <li><a href="#M000089">serialize_plain_object</a></li>
89
+ <li><a href="#M000092">serialize_property</a></li>
90
+ <li><a href="#M000103">set_serializable_property</a></li>
91
+ </ol>
92
+ </div>
93
+ <div id='section'>
94
+ <div id='class-list'>
95
+ <h2>Classes and Modules</h2>
96
+ Class <a href="Serializer/Ref.html" class="link">SDL4R::Serializer::Ref</a><br />
97
+ </div>
98
+ <div id='constants-list'>
99
+ <h2>Constants</h2>
100
+ <div class='name-list'>
101
+ <table summary='Constants'>
102
+ <tr class='top-aligned-row context-row'>
103
+ <td class='context-item-name'>OBJECT_ID_ATTR_NAME</td>
104
+ <td>=</td>
105
+ <td class='context-item-value'>'oid'</td>
106
+ </tr>
107
+ <tr class='top-aligned-row context-row'>
108
+ <td class='context-item-name'>OBJECT_REF_ATTR_NAME</td>
109
+ <td>=</td>
110
+ <td class='context-item-value'>'oref'</td>
111
+ </tr>
112
+ </table>
113
+ </div>
114
+ </div>
115
+ <div id='methods'>
116
+ <h2>Public class methods</h2>
117
+ <div class='method public-class' id='method-M000083'>
118
+ <a name='M000083'></a>
119
+ <div class='synopsis'>
120
+ <span class='name'>new</span>
121
+ <span class='arguments'>(options = {})</span>
122
+ </div>
123
+ <div class='description'>
124
+ <h3>options:</h3>
125
+ <pre>[:omit_nil_properties]&#x000A;if true, nil object properties are not exported to the serialized SDL (default: false)&#x000A;[:default_namespace]&#x000A;the default namespace of the generated tags (default: &quot;&quot;). This namespace doesn't apply to&#x000A;attributes.</pre>
126
+ </div>
127
+ <div class='source'>
128
+ <a class='source-toggle' href='#' onclick="toggleCode('M000083-source'); return false">
129
+ [show source]
130
+ </a>
131
+ <pre id='M000083-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 73</span>&#x000A;73: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">options</span> = {})&#x000A;74: <span class="ruby-ivar">@options</span> = {}.<span class="ruby-identifier">merge</span>(<span class="ruby-ivar">@@DEFAULT_OPTIONS</span>).<span class="ruby-identifier">merge!</span>(<span class="ruby-identifier">options</span>)&#x000A;75: <span class="ruby-ivar">@next_oid</span> = <span class="ruby-value">1</span>&#x000A;76: <span class="ruby-ivar">@ref_by_oid</span> = {}&#x000A;77: <span class="ruby-ivar">@ref_by_object</span> = {}&#x000A;78: <span class="ruby-keyword kw">end</span></pre>
132
+ </div>
133
+ </div>
134
+ <h2>Public instance methods</h2>
135
+ <div class='method public-instance' id='method-M000097'>
136
+ <a name='M000097'></a>
137
+ <div class='synopsis'>
138
+ <span class='name'>deserialize</span>
139
+ <span class='arguments'>(tag, o = new_plain_object(tag))</span>
140
+ </div>
141
+ <div class='source'>
142
+ <a class='source-toggle' href='#' onclick="toggleCode('M000097-source'); return false">
143
+ [show source]
144
+ </a>
145
+ <pre id='M000097-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 363</span>&#x000A;363: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">deserialize</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span> = <span class="ruby-identifier">new_plain_object</span>(<span class="ruby-identifier">tag</span>))&#x000A;364: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">respond_to?</span> <span class="ruby-identifier">:from_sdl</span>&#x000A;365: <span class="ruby-identifier">o</span> = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">from_sdl</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-keyword kw">self</span>)&#x000A;366: &#x000A;367: <span class="ruby-keyword kw">else</span>&#x000A;368: <span class="ruby-identifier">o</span> = <span class="ruby-identifier">deserialize_object</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span>)&#x000A;369: <span class="ruby-keyword kw">end</span>&#x000A;370: &#x000A;371: <span class="ruby-identifier">o</span>&#x000A;372: <span class="ruby-keyword kw">end</span></pre>
146
+ </div>
147
+ </div>
148
+ <div class='method public-instance' id='method-M000100'>
149
+ <a name='M000100'></a>
150
+ <div class='synopsis'>
151
+ <span class='name'>deserialize_from_attributes</span>
152
+ <span class='arguments'>(tag, o)</span>
153
+ </div>
154
+ <div class='source'>
155
+ <a class='source-toggle' href='#' onclick="toggleCode('M000100-source'); return false">
156
+ [show source]
157
+ </a>
158
+ <pre id='M000100-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 412</span>&#x000A;412: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">deserialize_from_attributes</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span>)&#x000A;413: <span class="ruby-identifier">tag</span>.<span class="ruby-identifier">attributes</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">attribute_namespace</span>, <span class="ruby-identifier">attribute_name</span>, <span class="ruby-identifier">attribute_value</span><span class="ruby-operator">|</span>&#x000A;414: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">attribute_namespace</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">attribute_name</span> <span class="ruby-operator">==</span> <span class="ruby-constant">OBJECT_REF_ATTR_NAME</span>&#x000A;415: <span class="ruby-comment cmt"># ignore this technical attribute</span>&#x000A;416: &#x000A;417: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">attribute_namespace</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">attribute_name</span> <span class="ruby-operator">==</span> <span class="ruby-constant">OBJECT_ID_ATTR_NAME</span>&#x000A;418: <span class="ruby-comment cmt"># reference and make no impact on 'o'</span>&#x000A;419: <span class="ruby-identifier">ref</span> = <span class="ruby-identifier">reference_object</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">attribute_value</span>)&#x000A;420: <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">inc</span>&#x000A;421: &#x000A;422: <span class="ruby-keyword kw">else</span>&#x000A;423: <span class="ruby-identifier">set_serializable_property</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">attribute_name</span>, <span class="ruby-identifier">attribute_value</span>)&#x000A;424: <span class="ruby-keyword kw">end</span>&#x000A;425: <span class="ruby-keyword kw">end</span>&#x000A;426: <span class="ruby-keyword kw">end</span></pre>
159
+ </div>
160
+ </div>
161
+ <div class='method public-instance' id='method-M000102'>
162
+ <a name='M000102'></a>
163
+ <div class='synopsis'>
164
+ <span class='name'>deserialize_from_child_tags</span>
165
+ <span class='arguments'>(tag, o, handle_anonymous)</span>
166
+ </div>
167
+ <div class='description'>
168
+ <table>
169
+ <tr><td valign="top"><em>handle_anonymous</em>:</td><td>if true, this method only handles anonymous child tags, if false, it only
170
+ handles named child tags
171
+
172
+ </td></tr>
173
+ </table>
174
+ </div>
175
+ <div class='source'>
176
+ <a class='source-toggle' href='#' onclick="toggleCode('M000102-source'); return false">
177
+ [show source]
178
+ </a>
179
+ <pre id='M000102-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 440</span>&#x000A;440: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">deserialize_from_child_tags</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span>, <span class="ruby-identifier">handle_anonymous</span>)&#x000A;441: <span class="ruby-comment cmt"># Group the homonym tags together</span>&#x000A;442: <span class="ruby-identifier">child_tags_by_name</span> = {}&#x000A;443: <span class="ruby-identifier">tag</span>.<span class="ruby-identifier">children</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">child</span><span class="ruby-operator">|</span>&#x000A;444: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">handle_anonymous</span> <span class="ruby-operator">==</span> (<span class="ruby-identifier">child</span>.<span class="ruby-identifier">namespace</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span> <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">child</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-constant">SDL4R</span><span class="ruby-operator">::</span><span class="ruby-constant">ANONYMOUS_TAG_NAME</span>)&#x000A;445: <span class="ruby-identifier">property_name</span> = <span class="ruby-identifier">get_deserialized_property_name</span>(<span class="ruby-identifier">child</span>, <span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span>)&#x000A;446: <span class="ruby-identifier">homonymous_children</span> = (<span class="ruby-identifier">child_tags_by_name</span>[<span class="ruby-identifier">property_name</span>] <span class="ruby-operator">||=</span> [])&#x000A;447: <span class="ruby-identifier">homonymous_children</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">child</span>&#x000A;448: <span class="ruby-keyword kw">end</span>&#x000A;449: <span class="ruby-keyword kw">end</span>&#x000A;450: &#x000A;451: <span class="ruby-identifier">child_tags_by_name</span>.<span class="ruby-identifier">each_pair</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">property_name</span>, <span class="ruby-identifier">homonymous_children</span><span class="ruby-operator">|</span>&#x000A;452: <span class="ruby-comment cmt"># Check wether this variable is assignable</span>&#x000A;453: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Array</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">serializable_property?</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">property_name</span>)&#x000A;454: <span class="ruby-identifier">property_values</span> = []&#x000A;455: &#x000A;456: <span class="ruby-identifier">homonymous_children</span>.<span class="ruby-identifier">each</span> <span class="ruby-keyword kw">do</span> <span class="ruby-operator">|</span><span class="ruby-identifier">child</span><span class="ruby-operator">|</span>&#x000A;457: <span class="ruby-identifier">property_value</span> = <span class="ruby-keyword kw">nil</span>&#x000A;458: &#x000A;459: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">child</span>.<span class="ruby-identifier">has_attribute?</span>(<span class="ruby-constant">OBJECT_REF_ATTR_NAME</span>)&#x000A;460: <span class="ruby-comment cmt"># Object reference</span>&#x000A;461: <span class="ruby-identifier">ref</span> = <span class="ruby-ivar">@ref_by_oid</span>[<span class="ruby-identifier">child</span>.<span class="ruby-identifier">attribute</span>(<span class="ruby-constant">OBJECT_REF_ATTR_NAME</span>)]&#x000A;462: <span class="ruby-identifier">property_value</span> = <span class="ruby-identifier">deserialize</span>(<span class="ruby-identifier">child</span>, <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">o</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ref</span>&#x000A;463: &#x000A;464: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">child</span>.<span class="ruby-identifier">has_values?</span> <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">child</span>.<span class="ruby-identifier">has_children?</span> <span class="ruby-keyword kw">and</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">child</span>.<span class="ruby-identifier">has_attributes?</span>&#x000A;465: <span class="ruby-comment cmt"># If the object only has values (no children, no atttributes):</span>&#x000A;466: <span class="ruby-comment cmt"># then the values are the variable value</span>&#x000A;467: <span class="ruby-identifier">property_value</span> = <span class="ruby-identifier">child</span>.<span class="ruby-identifier">values</span>&#x000A;468: <span class="ruby-identifier">property_value</span> = <span class="ruby-identifier">property_value</span>[<span class="ruby-value">0</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">property_value</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>&#x000A;469: &#x000A;470: <span class="ruby-keyword kw">else</span>&#x000A;471: <span class="ruby-comment cmt"># Consider this tag as a plain object</span>&#x000A;472: <span class="ruby-identifier">variable_name</span> = <span class="ruby-node">&quot;@#{property_name}&quot;</span>&#x000A;473: <span class="ruby-identifier">previous_value</span> =&#x000A;474: (<span class="ruby-identifier">o</span>.<span class="ruby-identifier">instance_variable_defined?</span> <span class="ruby-identifier">variable_name</span>) <span class="ruby-operator">?</span>&#x000A;475: <span class="ruby-identifier">o</span>.<span class="ruby-identifier">instance_variable_get</span>(<span class="ruby-identifier">variable_name</span>) <span class="ruby-operator">:</span>&#x000A;476: <span class="ruby-keyword kw">nil</span>&#x000A;477: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">previous_value</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">or</span> <span class="ruby-constant">SDL4R</span><span class="ruby-operator">::</span><span class="ruby-identifier">is_coercible?</span>(<span class="ruby-identifier">previous_value</span>)&#x000A;478: <span class="ruby-identifier">property_value</span> = <span class="ruby-identifier">deserialize</span>(<span class="ruby-identifier">child</span>, <span class="ruby-identifier">new_plain_object</span>(<span class="ruby-identifier">child</span>, <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">o</span>))&#x000A;479: <span class="ruby-keyword kw">else</span>&#x000A;480: <span class="ruby-identifier">property_value</span> = <span class="ruby-identifier">deserialize</span>(<span class="ruby-identifier">child</span>, <span class="ruby-identifier">new_plain_object</span>(<span class="ruby-identifier">child</span>, <span class="ruby-identifier">previous_value</span>, <span class="ruby-identifier">o</span>))&#x000A;481: <span class="ruby-keyword kw">end</span>&#x000A;482: <span class="ruby-keyword kw">end</span>&#x000A;483: &#x000A;484: <span class="ruby-identifier">property_values</span> <span class="ruby-operator">&lt;&lt;</span> <span class="ruby-identifier">property_value</span>&#x000A;485: <span class="ruby-keyword kw">end</span>&#x000A;486: &#x000A;487: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Array</span>&#x000A;488: <span class="ruby-identifier">o</span>.<span class="ruby-identifier">concat</span>(<span class="ruby-identifier">property_values</span>)&#x000A;489: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">property_values</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>&#x000A;490: <span class="ruby-identifier">set_serializable_property</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">property_name</span>, <span class="ruby-identifier">property_values</span>[<span class="ruby-value">0</span>])&#x000A;491: <span class="ruby-keyword kw">elsif</span> <span class="ruby-identifier">property_values</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span>&#x000A;492: <span class="ruby-identifier">set_serializable_property</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">property_name</span>, <span class="ruby-identifier">property_values</span>)&#x000A;493: <span class="ruby-keyword kw">end</span>&#x000A;494: <span class="ruby-keyword kw">end</span>&#x000A;495: <span class="ruby-keyword kw">end</span>&#x000A;496: <span class="ruby-keyword kw">end</span></pre>
180
+ </div>
181
+ </div>
182
+ <div class='method public-instance' id='method-M000099'>
183
+ <a name='M000099'></a>
184
+ <div class='synopsis'>
185
+ <span class='name'>deserialize_from_values</span>
186
+ <span class='arguments'>(tag, o)</span>
187
+ </div>
188
+ <div class='source'>
189
+ <a class='source-toggle' href='#' onclick="toggleCode('M000099-source'); return false">
190
+ [show source]
191
+ </a>
192
+ <pre id='M000099-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 388</span>&#x000A;388: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">deserialize_from_values</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span>)&#x000A;389: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tag</span>.<span class="ruby-identifier">has_values?</span>&#x000A;390: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">tag</span>.<span class="ruby-identifier">has_children?</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">tag</span>.<span class="ruby-identifier">has_attributes?</span>&#x000A;391: <span class="ruby-identifier">property_value</span> = <span class="ruby-identifier">tag</span>.<span class="ruby-identifier">values</span>&#x000A;392: &#x000A;393: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value str">&quot;@value&quot;</span>) <span class="ruby-keyword kw">or</span> <span class="ruby-keyword kw">not</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-value str">&quot;@values&quot;</span>)&#x000A;394: <span class="ruby-comment cmt"># value is preferred</span>&#x000A;395: <span class="ruby-identifier">property_name</span> = <span class="ruby-value str">&quot;value&quot;</span>&#x000A;396: <span class="ruby-identifier">property_value</span> = <span class="ruby-identifier">property_value</span>[<span class="ruby-value">0</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">property_value</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>&#x000A;397: <span class="ruby-keyword kw">else</span>&#x000A;398: <span class="ruby-identifier">property_name</span> = <span class="ruby-value str">&quot;values&quot;</span>&#x000A;399: <span class="ruby-keyword kw">end</span>&#x000A;400: &#x000A;401: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">serializable_property?</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">property_name</span>)&#x000A;402: <span class="ruby-identifier">set_serializable_property</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">property_name</span>, <span class="ruby-identifier">property_value</span>)&#x000A;403: <span class="ruby-keyword kw">end</span>&#x000A;404: &#x000A;405: <span class="ruby-keyword kw">else</span>&#x000A;406: <span class="ruby-comment cmt"># the tag only has values</span>&#x000A;407: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">property_value</span>.<span class="ruby-identifier">length</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span> <span class="ruby-operator">?</span> <span class="ruby-identifier">property_value</span>[<span class="ruby-value">0</span>] <span class="ruby-operator">:</span> <span class="ruby-identifier">property_value</span>&#x000A;408: <span class="ruby-keyword kw">end</span>&#x000A;409: <span class="ruby-keyword kw">end</span>&#x000A;410: <span class="ruby-keyword kw">end</span></pre>
193
+ </div>
194
+ </div>
195
+ <div class='method public-instance' id='method-M000098'>
196
+ <a name='M000098'></a>
197
+ <div class='synopsis'>
198
+ <span class='name'>deserialize_object</span>
199
+ <span class='arguments'>(tag, o = new_plain_object(tag))</span>
200
+ </div>
201
+ <div class='description'>
202
+ <p>
203
+ Called by <a href="Serializer.html#M000097">deserialize</a> when not using
204
+ +from_sdl()+. Deserializes the specified tag into an object using values,
205
+ attributes, child tags, etc.
206
+ </p>
207
+ </div>
208
+ <div class='source'>
209
+ <a class='source-toggle' href='#' onclick="toggleCode('M000098-source'); return false">
210
+ [show source]
211
+ </a>
212
+ <pre id='M000098-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 377</span>&#x000A;377: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">deserialize_object</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span> = <span class="ruby-identifier">new_plain_object</span>(<span class="ruby-identifier">tag</span>))&#x000A;378: <span class="ruby-identifier">deserialize_from_child_tags</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span>, <span class="ruby-keyword kw">true</span>)&#x000A;379: <span class="ruby-identifier">deserialize_from_values</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span>)&#x000A;380: <span class="ruby-identifier">deserialize_from_attributes</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span>)&#x000A;381: <span class="ruby-identifier">deserialize_from_child_tags</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span>, <span class="ruby-keyword kw">false</span>)&#x000A;382: &#x000A;383: <span class="ruby-identifier">o</span> = <span class="ruby-identifier">apply_anonymous_tag_list_idiom</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span>)&#x000A;384: &#x000A;385: <span class="ruby-identifier">o</span>&#x000A;386: <span class="ruby-keyword kw">end</span></pre>
213
+ </div>
214
+ </div>
215
+ <div class='method public-instance' id='method-M000101'>
216
+ <a name='M000101'></a>
217
+ <div class='synopsis'>
218
+ <span class='name'>get_deserialized_property_name</span>
219
+ <span class='arguments'>(tag, parent_tag, parent_object)</span>
220
+ </div>
221
+ <div class='description'>
222
+ <p>
223
+ Returns the name of the property to which the specified <a
224
+ href="Tag.html">Tag</a> is supposed to be assigned in the parent object.
225
+ Default behavior: this implementation returns the tag&#8217;s name
226
+ (ignoring the namespace).
227
+ </p>
228
+ </div>
229
+ <div class='source'>
230
+ <a class='source-toggle' href='#' onclick="toggleCode('M000101-source'); return false">
231
+ [show source]
232
+ </a>
233
+ <pre id='M000101-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 432</span>&#x000A;432: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_deserialized_property_name</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">parent_tag</span>, <span class="ruby-identifier">parent_object</span>)&#x000A;433: <span class="ruby-identifier">tag</span>.<span class="ruby-identifier">name</span>&#x000A;434: <span class="ruby-keyword kw">end</span></pre>
234
+ </div>
235
+ </div>
236
+ <div class='method public-instance' id='method-M000090'>
237
+ <a name='M000090'></a>
238
+ <div class='synopsis'>
239
+ <span class='name'>get_method</span>
240
+ <span class='arguments'>(o, method_name, arity)</span>
241
+ </div>
242
+ <div class='description'>
243
+ <p>
244
+ Returns the method of object &#8216;o&#8217;, which has the specified name
245
+ and arity (with or without default parameters). Returns nil if no such
246
+ method corresponds.
247
+ </p>
248
+ </div>
249
+ <div class='source'>
250
+ <a class='source-toggle' href='#' onclick="toggleCode('M000090-source'); return false">
251
+ [show source]
252
+ </a>
253
+ <pre id='M000090-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 254</span>&#x000A;254: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">get_method</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">method_name</span>, <span class="ruby-identifier">arity</span>)&#x000A;255: <span class="ruby-keyword kw">begin</span>&#x000A;256: <span class="ruby-identifier">m</span> = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">method</span>(<span class="ruby-identifier">method_name</span>)&#x000A;257: <span class="ruby-keyword kw">rescue</span> <span class="ruby-constant">NameError</span>&#x000A;258: <span class="ruby-identifier">m</span> = <span class="ruby-keyword kw">nil</span>&#x000A;259: <span class="ruby-keyword kw">end</span>&#x000A;260: &#x000A;261: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">arity</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">arity</span> <span class="ruby-keyword kw">or</span> <span class="ruby-identifier">m</span>.<span class="ruby-identifier">arity</span> <span class="ruby-operator">==</span> (<span class="ruby-operator">-</span><span class="ruby-identifier">arity</span> <span class="ruby-operator">-</span> <span class="ruby-value">1</span>)&#x000A;262: <span class="ruby-identifier">m</span> = <span class="ruby-keyword kw">nil</span>&#x000A;263: <span class="ruby-keyword kw">end</span>&#x000A;264: &#x000A;265: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">m</span>&#x000A;266: <span class="ruby-keyword kw">end</span></pre>
254
+ </div>
255
+ </div>
256
+ <div class='method public-instance' id='method-M000096'>
257
+ <a name='M000096'></a>
258
+ <div class='synopsis'>
259
+ <span class='name'>new_plain_object</span>
260
+ <span class='arguments'>(tag, o = nil, parent_object = nil)</span>
261
+ </div>
262
+ <div class='description'>
263
+ <p>
264
+ Provides deserialized new plain object instances (i.e. &#8220;plain
265
+ object&#8221; as opposed to special cases like SDL values). By default,
266
+ returns &#8216;o&#8217; or a new instance of OpenStruct if &#8216;o&#8217;
267
+ is <tt>nil</tt>.
268
+ </p>
269
+ <table>
270
+ <tr><td valign="top"><em>tag</em>:</td><td>the deserialized <a href="Tag.html">Tag</a>
271
+
272
+ </td></tr>
273
+ <tr><td valign="top"><em>o</em>:</td><td>the currently used object or nil if there is none yet
274
+
275
+ </td></tr>
276
+ <tr><td valign="top"><em>parent_object</em>:</td><td>the parent object or <tt>nil</tt> if root
277
+
278
+ </td></tr>
279
+ </table>
280
+ </div>
281
+ <div class='source'>
282
+ <a class='source-toggle' href='#' onclick="toggleCode('M000096-source'); return false">
283
+ [show source]
284
+ </a>
285
+ <pre id='M000096-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 355</span>&#x000A;355: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">new_plain_object</span>(<span class="ruby-identifier">tag</span>, <span class="ruby-identifier">o</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">parent_object</span> = <span class="ruby-keyword kw">nil</span>)&#x000A;356: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">nil?</span>&#x000A;357: <span class="ruby-constant">OpenStruct</span>.<span class="ruby-identifier">new</span>&#x000A;358: <span class="ruby-keyword kw">else</span>&#x000A;359: <span class="ruby-identifier">o</span>&#x000A;360: <span class="ruby-keyword kw">end</span>&#x000A;361: <span class="ruby-keyword kw">end</span></pre>
286
+ </div>
287
+ </div>
288
+ <div class='method public-instance' id='method-M000086'>
289
+ <a name='M000086'></a>
290
+ <div class='synopsis'>
291
+ <span class='name'>new_ref_tag</span>
292
+ <span class='arguments'>(name, ref, parent_tag)</span>
293
+ </div>
294
+ <div class='description'>
295
+ <p>
296
+ Returns a <a href="Tag.html">Tag</a> representing the provided <a
297
+ href="Serializer/Ref.html">Ref</a>.
298
+ </p>
299
+ <table>
300
+ <tr><td valign="top"><em>name</em>:</td><td>name of the created <a href="Tag.html">Tag</a> (if <tt>nil</tt>, the
301
+ definition <a href="Tag.html">Tag</a> name - i.e. the name of the
302
+
303
+ </td></tr>
304
+ </table>
305
+ <pre>first Tag representing the referenced object - is used)</pre>
306
+ <table>
307
+ <tr><td valign="top"><em>ref</em>:</td><td>represented reference (<a href="Serializer/Ref.html">Ref</a>)
308
+
309
+ </td></tr>
310
+ <tr><td valign="top"><em>parent_tag</em>:</td><td>parent <a href="Tag.html">Tag</a> of the created <a href="Tag.html">Tag</a>
311
+
312
+ </td></tr>
313
+ </table>
314
+ </div>
315
+ <div class='source'>
316
+ <a class='source-toggle' href='#' onclick="toggleCode('M000086-source'); return false">
317
+ [show source]
318
+ </a>
319
+ <pre id='M000086-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 153</span>&#x000A;153: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">new_ref_tag</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">ref</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;154: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">tag</span>.<span class="ruby-identifier">name</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>.<span class="ruby-identifier">nil?</span>&#x000A;155: &#x000A;156: <span class="ruby-identifier">ref_tag</span> = <span class="ruby-identifier">parent_tag</span>.<span class="ruby-identifier">new_child</span>(<span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:default_namespace</span>], <span class="ruby-identifier">name</span>)&#x000A;157: <span class="ruby-identifier">ref_tag</span>.<span class="ruby-identifier">set_attribute</span>(<span class="ruby-value str">''</span>, <span class="ruby-constant">OBJECT_REF_ATTR_NAME</span>, <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">oid</span>)&#x000A;158: <span class="ruby-identifier">ref_tag</span>&#x000A;159: <span class="ruby-keyword kw">end</span></pre>
320
+ </div>
321
+ </div>
322
+ <div class='method public-instance' id='method-M000085'>
323
+ <a name='M000085'></a>
324
+ <div class='synopsis'>
325
+ <span class='name'>new_tag</span>
326
+ <span class='arguments'>(name, o, parent_tag = nil)</span>
327
+ </div>
328
+ <div class='description'>
329
+ <p>
330
+ Returns a new <a href="Tag.html">Tag</a> to be used for serializing
331
+ &#8216;o&#8217;.
332
+ </p>
333
+ <table>
334
+ <tr><td valign="top"><em>name</em>:</td><td>name of the <a href="Tag.html">Tag</a> to create (can be <tt>nil</tt> for a
335
+ root <a href="Tag.html">Tag</a>)
336
+
337
+ </td></tr>
338
+ </table>
339
+ <pre>_o_:: object/value that the new tag will represent</pre>
340
+ <table>
341
+ <tr><td valign="top"><em>parent_tag</em>:</td><td>parent <a href="Tag.html">Tag</a> of the new tag
342
+
343
+ </td></tr>
344
+ </table>
345
+ </div>
346
+ <div class='source'>
347
+ <a class='source-toggle' href='#' onclick="toggleCode('M000085-source'); return false">
348
+ [show source]
349
+ </a>
350
+ <pre id='M000085-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 131</span>&#x000A;131: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">new_tag</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">o</span>, <span class="ruby-identifier">parent_tag</span> = <span class="ruby-keyword kw">nil</span>)&#x000A;132: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span>&#x000A;133: <span class="ruby-identifier">namespace</span> = <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:default_namespace</span>]&#x000A;134: <span class="ruby-keyword kw">else</span>&#x000A;135: <span class="ruby-identifier">namespace</span> = <span class="ruby-value str">''</span>&#x000A;136: <span class="ruby-identifier">name</span> = <span class="ruby-constant">SDL4R</span><span class="ruby-operator">::</span><span class="ruby-constant">ROOT_TAG_NAME</span>&#x000A;137: <span class="ruby-keyword kw">end</span>&#x000A;138: &#x000A;139: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">parent_tag</span>.<span class="ruby-identifier">nil?</span>&#x000A;140: <span class="ruby-constant">Tag</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">namespace</span>, <span class="ruby-identifier">name</span>)&#x000A;141: <span class="ruby-keyword kw">else</span>&#x000A;142: <span class="ruby-identifier">parent_tag</span>.<span class="ruby-identifier">new_child</span>(<span class="ruby-identifier">namespace</span>, <span class="ruby-identifier">name</span>)&#x000A;143: <span class="ruby-keyword kw">end</span>&#x000A;144: <span class="ruby-keyword kw">end</span></pre>
351
+ </div>
352
+ </div>
353
+ <div class='method public-instance' id='method-M000084'>
354
+ <a name='M000084'></a>
355
+ <div class='synopsis'>
356
+ <span class='name'>reference_object</span>
357
+ <span class='arguments'>(o, oid = nil)</span>
358
+ </div>
359
+ <div class='description'>
360
+ <p>
361
+ References the provided object if it is not already referenced. If the
362
+ object is referenced already, returns the corresponding <a
363
+ href="Serializer/Ref.html">Ref</a>. The reference counter is not
364
+ incremented by this method.
365
+ </p>
366
+ <table>
367
+ <tr><td valign="top"><em>oid</em>:</td><td>the Object ID (ignore if serializing, provide if deserializing).
368
+
369
+ </td></tr>
370
+ </table>
371
+ </div>
372
+ <div class='source'>
373
+ <a class='source-toggle' href='#' onclick="toggleCode('M000084-source'); return false">
374
+ [show source]
375
+ </a>
376
+ <pre id='M000084-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 109</span>&#x000A;109: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">reference_object</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">oid</span> = <span class="ruby-keyword kw">nil</span>)&#x000A;110: <span class="ruby-identifier">ref</span> = <span class="ruby-ivar">@ref_by_object</span>[<span class="ruby-identifier">o</span>]&#x000A;111: &#x000A;112: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">ref</span>&#x000A;113: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">oid</span>&#x000A;114: <span class="ruby-identifier">oid</span> = <span class="ruby-ivar">@next_oid</span>&#x000A;115: <span class="ruby-ivar">@next_oid</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>&#x000A;116: <span class="ruby-keyword kw">end</span>&#x000A;117: &#x000A;118: <span class="ruby-identifier">ref</span> = <span class="ruby-constant">Ref</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">oid</span>)&#x000A;119: <span class="ruby-ivar">@ref_by_oid</span>[<span class="ruby-identifier">oid</span>] = <span class="ruby-ivar">@ref_by_object</span>[<span class="ruby-identifier">o</span>] = <span class="ruby-identifier">ref</span>&#x000A;120: <span class="ruby-keyword kw">end</span>&#x000A;121: &#x000A;122: <span class="ruby-identifier">ref</span>&#x000A;123: <span class="ruby-keyword kw">end</span></pre>
377
+ </div>
378
+ </div>
379
+ <div class='method public-instance' id='method-M000091'>
380
+ <a name='M000091'></a>
381
+ <div class='synopsis'>
382
+ <span class='name'>serializable_property?</span>
383
+ <span class='arguments'>(o, property_name)</span>
384
+ </div>
385
+ <div class='description'>
386
+ <p>
387
+ Indicates whether the specified property is a serializable property for the
388
+ given object.
389
+ </p>
390
+ </div>
391
+ <div class='source'>
392
+ <a class='source-toggle' href='#' onclick="toggleCode('M000091-source'); return false">
393
+ [show source]
394
+ </a>
395
+ <pre id='M000091-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 270</span>&#x000A;270: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serializable_property?</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">property_name</span>)&#x000A;271: <span class="ruby-keyword kw">return</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">OpenStruct</span>) <span class="ruby-operator">||</span>&#x000A;272: <span class="ruby-identifier">o</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>) <span class="ruby-operator">||</span>&#x000A;273: <span class="ruby-identifier">o</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-node">&quot;@#{property_name}&quot;</span>) <span class="ruby-operator">||</span>&#x000A;274: (<span class="ruby-identifier">get_method</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">property_name</span>, <span class="ruby-value">0</span>) <span class="ruby-keyword kw">and</span> <span class="ruby-identifier">get_method</span>(<span class="ruby-identifier">o</span>, <span class="ruby-node">&quot;#{property_name}=&quot;</span>, <span class="ruby-value">1</span>))&#x000A;275: <span class="ruby-keyword kw">end</span></pre>
396
+ </div>
397
+ </div>
398
+ <div class='method public-instance' id='method-M000087'>
399
+ <a name='M000087'></a>
400
+ <div class='synopsis'>
401
+ <span class='name'>serialize</span>
402
+ <span class='arguments'>(o, tag = nil, parent_tag = nil)</span>
403
+ </div>
404
+ <div class='description'>
405
+ <p>
406
+ Serializes the given object into a returned <a href="Tag.html">Tag</a>.
407
+ </p>
408
+ <table>
409
+ <tr><td valign="top"><em>tag</em>:</td><td>a <a href="Tag.html">Tag</a> representing &#8216;o&#8217; (if not provided,
410
+ one will be created).
411
+
412
+ </td></tr>
413
+ </table>
414
+ </div>
415
+ <div class='source'>
416
+ <a class='source-toggle' href='#' onclick="toggleCode('M000087-source'); return false">
417
+ [show source]
418
+ </a>
419
+ <pre id='M000087-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 165</span>&#x000A;165: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serialize</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">tag</span> = <span class="ruby-keyword kw">nil</span>, <span class="ruby-identifier">parent_tag</span> = <span class="ruby-keyword kw">nil</span>)&#x000A;166: <span class="ruby-identifier">root</span> = <span class="ruby-identifier">serialize_impl</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">tag</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;167: &#x000A;168: <span class="ruby-comment cmt"># Assign an OID attribute to tags of objects referenced more than once</span>&#x000A;169: <span class="ruby-ivar">@ref_by_object</span>.<span class="ruby-identifier">each_value</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">ref</span><span class="ruby-operator">|</span>&#x000A;170: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">&gt;</span> <span class="ruby-value">1</span>&#x000A;171: <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">tag</span>.<span class="ruby-identifier">set_attribute</span>(<span class="ruby-value str">''</span>, <span class="ruby-constant">OBJECT_ID_ATTR_NAME</span>, <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">oid</span>)&#x000A;172: <span class="ruby-keyword kw">end</span>&#x000A;173: }&#x000A;174: &#x000A;175: <span class="ruby-identifier">root</span>&#x000A;176: <span class="ruby-keyword kw">end</span></pre>
420
+ </div>
421
+ </div>
422
+ <div class='method public-instance' id='method-M000093'>
423
+ <a name='M000093'></a>
424
+ <div class='synopsis'>
425
+ <span class='name'>serialize_array</span>
426
+ <span class='arguments'>(name, array, parent_tag)</span>
427
+ </div>
428
+ <div class='source'>
429
+ <a class='source-toggle' href='#' onclick="toggleCode('M000093-source'); return false">
430
+ [show source]
431
+ </a>
432
+ <pre id='M000093-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 305</span>&#x000A;305: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serialize_array</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">array</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;306: <span class="ruby-identifier">not_literal_values</span> = <span class="ruby-identifier">array</span>.<span class="ruby-identifier">reject</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">item</span><span class="ruby-operator">|</span> <span class="ruby-constant">SDL4R</span><span class="ruby-operator">::</span><span class="ruby-identifier">is_coercible?</span>(<span class="ruby-identifier">item</span>) }&#x000A;307: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">not_literal_values</span>.<span class="ruby-identifier">empty?</span>&#x000A;308: <span class="ruby-comment cmt"># If it is an array of SDL-compatible values, we use SDL values.</span>&#x000A;309: <span class="ruby-identifier">array_tag</span> = <span class="ruby-identifier">new_tag</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">array</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;310: <span class="ruby-identifier">array_tag</span>.<span class="ruby-identifier">values</span> = <span class="ruby-identifier">array</span>&#x000A;311: &#x000A;312: <span class="ruby-keyword kw">else</span>&#x000A;313: <span class="ruby-comment cmt"># Otherwise, we use separate child tags.</span>&#x000A;314: <span class="ruby-identifier">serialize_array_as_child_tags</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">array</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;315: <span class="ruby-keyword kw">end</span>&#x000A;316: <span class="ruby-keyword kw">end</span></pre>
433
+ </div>
434
+ </div>
435
+ <div class='method public-instance' id='method-M000094'>
436
+ <a name='M000094'></a>
437
+ <div class='synopsis'>
438
+ <span class='name'>serialize_array_as_child_tags</span>
439
+ <span class='arguments'>(name, array, parent_tag)</span>
440
+ </div>
441
+ <div class='source'>
442
+ <a class='source-toggle' href='#' onclick="toggleCode('M000094-source'); return false">
443
+ [show source]
444
+ </a>
445
+ <pre id='M000094-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 318</span>&#x000A;318: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serialize_array_as_child_tags</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">array</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;319: <span class="ruby-identifier">array</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">item</span><span class="ruby-operator">|</span>&#x000A;320: <span class="ruby-keyword kw">if</span> <span class="ruby-constant">SDL4R</span><span class="ruby-operator">::</span><span class="ruby-identifier">is_coercible?</span>(<span class="ruby-identifier">item</span>)&#x000A;321: <span class="ruby-identifier">value_tag</span> = <span class="ruby-identifier">new_tag</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">item</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;322: <span class="ruby-identifier">value_tag</span>.<span class="ruby-identifier">values</span> = [<span class="ruby-identifier">item</span>]&#x000A;323: <span class="ruby-keyword kw">else</span>&#x000A;324: <span class="ruby-identifier">serialize_object_or_ref</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">item</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;325: <span class="ruby-keyword kw">end</span>&#x000A;326: }&#x000A;327: <span class="ruby-keyword kw">end</span></pre>
446
+ </div>
447
+ </div>
448
+ <div class='method public-instance' id='method-M000088'>
449
+ <a name='M000088'></a>
450
+ <div class='synopsis'>
451
+ <span class='name'>serialize_hash</span>
452
+ <span class='arguments'>(hash, tag)</span>
453
+ </div>
454
+ <div class='source'>
455
+ <a class='source-toggle' href='#' onclick="toggleCode('M000088-source'); return false">
456
+ [show source]
457
+ </a>
458
+ <pre id='M000088-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 211</span>&#x000A;211: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serialize_hash</span>(<span class="ruby-identifier">hash</span>, <span class="ruby-identifier">tag</span>)&#x000A;212: <span class="ruby-identifier">hash</span>.<span class="ruby-identifier">each_pair</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">key</span>, <span class="ruby-identifier">value</span><span class="ruby-operator">|</span>&#x000A;213: <span class="ruby-identifier">serialize_property</span>(<span class="ruby-identifier">key</span>.<span class="ruby-identifier">to_s</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">tag</span>)&#x000A;214: }&#x000A;215: <span class="ruby-identifier">tag</span>&#x000A;216: <span class="ruby-keyword kw">end</span></pre>
459
+ </div>
460
+ </div>
461
+ <div class='method public-instance' id='method-M000095'>
462
+ <a name='M000095'></a>
463
+ <div class='synopsis'>
464
+ <span class='name'>serialize_object_or_ref</span>
465
+ <span class='arguments'>(name, value, parent_tag)</span>
466
+ </div>
467
+ <div class='description'>
468
+ <p>
469
+ Serializes an object (possibly using a reference).
470
+ </p>
471
+ <table>
472
+ <tr><td valign="top"><em>name</em>:</td><td>name used for the object in the parent <a href="Tag.html">Tag</a>
473
+
474
+ </td></tr>
475
+ </table>
476
+ </div>
477
+ <div class='source'>
478
+ <a class='source-toggle' href='#' onclick="toggleCode('M000095-source'); return false">
479
+ [show source]
480
+ </a>
481
+ <pre id='M000095-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 333</span>&#x000A;333: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serialize_object_or_ref</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;334: <span class="ruby-identifier">ref</span> = <span class="ruby-identifier">reference_object</span>(<span class="ruby-identifier">value</span>)&#x000A;335: <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">inc</span>&#x000A;336: &#x000A;337: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">count</span> <span class="ruby-operator">==</span> <span class="ruby-value">1</span>&#x000A;338: <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">tag</span> = <span class="ruby-identifier">new_tag</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;339: <span class="ruby-identifier">serialize_impl</span>(<span class="ruby-identifier">value</span>, <span class="ruby-identifier">ref</span>.<span class="ruby-identifier">tag</span>)&#x000A;340: <span class="ruby-keyword kw">else</span>&#x000A;341: <span class="ruby-identifier">new_ref_tag</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">ref</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;342: <span class="ruby-keyword kw">end</span>&#x000A;343: <span class="ruby-keyword kw">end</span></pre>
482
+ </div>
483
+ </div>
484
+ <div class='method public-instance' id='method-M000089'>
485
+ <a name='M000089'></a>
486
+ <div class='synopsis'>
487
+ <span class='name'>serialize_plain_object</span>
488
+ <span class='arguments'>(o, tag)</span>
489
+ </div>
490
+ <div class='source'>
491
+ <a class='source-toggle' href='#' onclick="toggleCode('M000089-source'); return false">
492
+ [show source]
493
+ </a>
494
+ <pre id='M000089-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 218</span>&#x000A;218: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serialize_plain_object</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">tag</span>)&#x000A;219: <span class="ruby-identifier">processed_properties</span> = {}&#x000A;220: &#x000A;221: <span class="ruby-comment cmt"># Read+write attributes are used rather than variables</span>&#x000A;222: <span class="ruby-identifier">o</span>.<span class="ruby-identifier">methods</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">name</span><span class="ruby-operator">|</span>&#x000A;223: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">name</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/\w/</span> <span class="ruby-keyword kw">and</span> <span class="ruby-comment cmt"># check this is not an operator</span>&#x000A;224: <span class="ruby-identifier">name</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^([^=]+)=$/</span> <span class="ruby-comment cmt"># check setter name pattern</span>&#x000A;225: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">get_method</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">name</span>, <span class="ruby-value">1</span>)&#x000A;226: <span class="ruby-identifier">getter_name</span> = <span class="ruby-identifier">$1</span>&#x000A;227: <span class="ruby-identifier">getter</span> = <span class="ruby-identifier">get_method</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">getter_name</span>, <span class="ruby-value">0</span>)&#x000A;228: &#x000A;229: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">getter</span>&#x000A;230: <span class="ruby-comment cmt"># read and write accessors are defined</span>&#x000A;231: <span class="ruby-identifier">value</span> = <span class="ruby-identifier">getter</span>.<span class="ruby-identifier">call</span>&#x000A;232: <span class="ruby-identifier">serialize_property</span>(<span class="ruby-identifier">getter_name</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">tag</span>)&#x000A;233: <span class="ruby-identifier">processed_properties</span>[<span class="ruby-identifier">getter_name</span>] = <span class="ruby-keyword kw">true</span>&#x000A;234: <span class="ruby-keyword kw">end</span>&#x000A;235: <span class="ruby-keyword kw">end</span>&#x000A;236: <span class="ruby-keyword kw">end</span>&#x000A;237: }&#x000A;238: &#x000A;239: <span class="ruby-comment cmt"># Otherwise, we read instance variables</span>&#x000A;240: <span class="ruby-identifier">o</span>.<span class="ruby-identifier">instance_variables</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">variable_name</span><span class="ruby-operator">|</span>&#x000A;241: <span class="ruby-identifier">name</span> = <span class="ruby-identifier">variable_name</span>[<span class="ruby-value">1</span><span class="ruby-operator">..</span><span class="ruby-identifier">variable_name</span>.<span class="ruby-identifier">size</span>] <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">variable_name</span> <span class="ruby-operator">=~</span> <span class="ruby-regexp re">/^@/</span>&#x000A;242: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">processed_properties</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">name</span>)&#x000A;243: <span class="ruby-identifier">value</span> = <span class="ruby-identifier">o</span>.<span class="ruby-identifier">instance_variable_get</span>(<span class="ruby-identifier">variable_name</span>)&#x000A;244: <span class="ruby-identifier">serialize_property</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">tag</span>)&#x000A;245: <span class="ruby-keyword kw">end</span>&#x000A;246: }&#x000A;247: &#x000A;248: <span class="ruby-identifier">tag</span>&#x000A;249: <span class="ruby-keyword kw">end</span></pre>
495
+ </div>
496
+ </div>
497
+ <div class='method public-instance' id='method-M000092'>
498
+ <a name='M000092'></a>
499
+ <div class='synopsis'>
500
+ <span class='name'>serialize_property</span>
501
+ <span class='arguments'>(name, value, parent_tag)</span>
502
+ </div>
503
+ <div class='description'>
504
+ <p>
505
+ Serializes a property under a given <a href="Tag.html">Tag</a>. Ignores any
506
+ property whose name is not a valid SDL name.
507
+ </p>
508
+ <table>
509
+ <tr><td valign="top"><em>name</em>:</td><td>property name
510
+
511
+ </td></tr>
512
+ <tr><td valign="top"><em>value</em>:</td><td>property value (SDL value, plain object or Array)
513
+
514
+ </td></tr>
515
+ </table>
516
+ </div>
517
+ <div class='source'>
518
+ <a class='source-toggle' href='#' onclick="toggleCode('M000092-source'); return false">
519
+ [show source]
520
+ </a>
521
+ <pre id='M000092-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 283</span>&#x000A;283: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">serialize_property</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;284: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-constant">SDL4R</span><span class="ruby-operator">::</span><span class="ruby-identifier">valid_identifier?</span>(<span class="ruby-identifier">name</span>)&#x000A;285: &#x000A;286: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">is_a?</span> <span class="ruby-constant">Array</span>&#x000A;287: <span class="ruby-identifier">serialize_array</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;288: &#x000A;289: <span class="ruby-keyword kw">elsif</span> <span class="ruby-constant">SDL4R</span><span class="ruby-operator">::</span><span class="ruby-identifier">is_coercible?</span>(<span class="ruby-identifier">value</span>)&#x000A;290: <span class="ruby-comment cmt"># SDL literal type</span>&#x000A;291: <span class="ruby-keyword kw">unless</span> <span class="ruby-identifier">value</span>.<span class="ruby-identifier">nil?</span> <span class="ruby-keyword kw">and</span> <span class="ruby-ivar">@options</span>[<span class="ruby-identifier">:omit_nil_properties</span>]&#x000A;292: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">parent_tag</span>.<span class="ruby-identifier">name</span> <span class="ruby-operator">==</span> <span class="ruby-constant">SDL4R</span><span class="ruby-operator">::</span><span class="ruby-constant">ROOT_TAG_NAME</span>&#x000A;293: <span class="ruby-identifier">value_tag</span> = <span class="ruby-identifier">new_tag</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;294: <span class="ruby-identifier">value_tag</span>.<span class="ruby-identifier">values</span> = [<span class="ruby-identifier">value</span>]&#x000A;295: <span class="ruby-keyword kw">else</span>&#x000A;296: <span class="ruby-identifier">parent_tag</span>.<span class="ruby-identifier">set_attribute</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>)&#x000A;297: <span class="ruby-keyword kw">end</span>&#x000A;298: <span class="ruby-keyword kw">end</span>&#x000A;299: &#x000A;300: <span class="ruby-keyword kw">else</span>&#x000A;301: <span class="ruby-identifier">serialize_object_or_ref</span>(<span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>, <span class="ruby-identifier">parent_tag</span>)&#x000A;302: <span class="ruby-keyword kw">end</span>&#x000A;303: <span class="ruby-keyword kw">end</span></pre>
522
+ </div>
523
+ </div>
524
+ <div class='method public-instance' id='method-M000103'>
525
+ <a name='M000103'></a>
526
+ <div class='synopsis'>
527
+ <span class='name'>set_serializable_property</span>
528
+ <span class='arguments'>(o, name, value)</span>
529
+ </div>
530
+ <div class='description'>
531
+ <p>
532
+ Sets the given property in the given object. Returns whether the property
533
+ has been assigned or not.
534
+ </p>
535
+ <p>
536
+ This method could be redefined in order to convert a value to a custom one,
537
+ for instance.
538
+ </p>
539
+ </div>
540
+ <div class='source'>
541
+ <a class='source-toggle' href='#' onclick="toggleCode('M000103-source'); return false">
542
+ [show source]
543
+ </a>
544
+ <pre id='M000103-source'> <span class="ruby-comment cmt"># File lib/sdl4r/serializer.rb, line 536</span>&#x000A;536: <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">set_serializable_property</span>(<span class="ruby-identifier">o</span>, <span class="ruby-identifier">name</span>, <span class="ruby-identifier">value</span>)&#x000A;537: <span class="ruby-keyword kw">case</span> <span class="ruby-identifier">o</span>&#x000A;538: <span class="ruby-keyword kw">when</span> <span class="ruby-constant">Hash</span>&#x000A;539: <span class="ruby-identifier">o</span>[<span class="ruby-identifier">name</span>] = <span class="ruby-identifier">value</span>&#x000A;540: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>&#x000A;541: &#x000A;542: <span class="ruby-keyword kw">when</span> <span class="ruby-constant">OpenStruct</span>&#x000A;543: <span class="ruby-identifier">o</span>.<span class="ruby-identifier">send</span> <span class="ruby-node">&quot;#{name}=&quot;</span>, <span class="ruby-identifier">value</span>&#x000A;544: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>&#x000A;545: &#x000A;546: <span class="ruby-keyword kw">else</span>&#x000A;547: <span class="ruby-identifier">accessor_name</span> = <span class="ruby-node">&quot;#{name}=&quot;</span>&#x000A;548: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">respond_to?</span>(<span class="ruby-identifier">accessor_name</span>)&#x000A;549: <span class="ruby-identifier">o</span>.<span class="ruby-identifier">send</span> <span class="ruby-identifier">accessor_name</span>, <span class="ruby-identifier">value</span>&#x000A;550: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>&#x000A;551: &#x000A;552: <span class="ruby-keyword kw">else</span>&#x000A;553: <span class="ruby-identifier">variable_name</span> = <span class="ruby-node">&quot;@#{name}&quot;</span>&#x000A;554: <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">o</span>.<span class="ruby-identifier">instance_variable_defined?</span>(<span class="ruby-identifier">variable_name</span>)&#x000A;555: <span class="ruby-identifier">o</span>.<span class="ruby-identifier">instance_variable_set</span>(<span class="ruby-identifier">variable_name</span>, <span class="ruby-identifier">value</span>)&#x000A;556: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">true</span>&#x000A;557: &#x000A;558: <span class="ruby-keyword kw">else</span>&#x000A;559: <span class="ruby-keyword kw">return</span> <span class="ruby-keyword kw">false</span>&#x000A;560: <span class="ruby-keyword kw">end</span>&#x000A;561: <span class="ruby-keyword kw">end</span>&#x000A;562: <span class="ruby-keyword kw">end</span>&#x000A;563: <span class="ruby-keyword kw">end</span></pre>
545
+ </div>
546
+ </div>
547
+ </div>
548
+ </div>
549
+ </div>
550
+ </div>
551
+ <div id='footer-push'></div>
552
+ </div>
553
+ <div id='footer'>
554
+ <a href="http://github.com/mislav/hanna/tree/master"><strong>Hanna</strong> RDoc template</a>
555
+ </div>
556
+ </body>
557
+ </html>