quickbooks 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. data/README +9 -5
  2. data/Rakefile +2 -2
  3. data/doc/classes/Array.html +244 -0
  4. data/doc/classes/Array.src/M000001.html +18 -0
  5. data/doc/classes/Array.src/M000002.html +19 -0
  6. data/doc/classes/Array.src/M000003.html +18 -0
  7. data/doc/classes/Array.src/M000004.html +23 -0
  8. data/doc/classes/Array.src/M000005.html +18 -0
  9. data/doc/classes/Array.src/M000006.html +21 -0
  10. data/doc/classes/Array.src/M000007.html +18 -0
  11. data/doc/classes/Array.src/M000008.html +18 -0
  12. data/doc/classes/Class.html +5 -5
  13. data/doc/classes/Class.src/{M000003.html → M000027.html} +1 -1
  14. data/doc/classes/Hash.html +264 -14
  15. data/doc/classes/Hash.src/M000009.html +18 -0
  16. data/doc/classes/Hash.src/M000010.html +21 -0
  17. data/doc/classes/Hash.src/M000011.html +18 -0
  18. data/doc/classes/Hash.src/M000012.html +21 -0
  19. data/doc/classes/Hash.src/M000013.html +18 -0
  20. data/doc/classes/Hash.src/{M000001.html → M000014.html} +6 -5
  21. data/doc/classes/Hash.src/{M000002.html → M000015.html} +6 -2
  22. data/doc/classes/Hash.src/M000016.html +20 -0
  23. data/doc/classes/Hash.src/M000017.html +18 -0
  24. data/doc/classes/Hash.src/M000018.html +20 -0
  25. data/doc/classes/Hash.src/M000019.html +38 -0
  26. data/doc/classes/{Quickbooks/Qbxml/Error.src/M000031.html → Hash.src/M000020.html} +5 -5
  27. data/doc/classes/Hash.src/M000021.html +18 -0
  28. data/doc/classes/Hash.src/M000022.html +20 -0
  29. data/doc/classes/Hash.src/M000023.html +18 -0
  30. data/doc/classes/Hash.src/M000024.html +18 -0
  31. data/doc/classes/Hash.src/M000025.html +18 -0
  32. data/doc/classes/Hash.src/M000026.html +22 -0
  33. data/doc/classes/Object.html +56 -22
  34. data/doc/classes/Object.src/{M000004.html → M000028.html} +0 -0
  35. data/doc/classes/Object.src/{M000005.html → M000029.html} +0 -0
  36. data/doc/classes/Object.src/{M000006.html → M000030.html} +1 -1
  37. data/doc/classes/Object.src/{M000007.html → M000031.html} +0 -0
  38. data/doc/classes/Object.src/M000032.html +18 -0
  39. data/doc/classes/Object.src/M000033.html +18 -0
  40. data/doc/classes/QBHelpers/Ole.html +17 -17
  41. data/doc/classes/QBHelpers/Ole.src/{M000066.html → M000108.html} +0 -0
  42. data/doc/classes/QBHelpers/Ole.src/{M000067.html → M000109.html} +0 -0
  43. data/doc/classes/QBHelpers/Ole.src/{M000068.html → M000110.html} +0 -0
  44. data/doc/classes/Quickbooks.html +44 -4
  45. data/doc/classes/Quickbooks/{Qbxml/Error.html → Address.html} +14 -43
  46. data/doc/classes/Quickbooks/Address.src/M000107.html +19 -0
  47. data/doc/classes/Quickbooks/Base.html +118 -243
  48. data/doc/classes/Quickbooks/Base.src/{M000034.html → M000080.html} +1 -1
  49. data/doc/classes/Quickbooks/Base.src/{M000035.html → M000081.html} +1 -1
  50. data/doc/classes/Quickbooks/Base.src/{M000036.html → M000082.html} +1 -1
  51. data/doc/classes/Quickbooks/Base.src/{M000037.html → M000083.html} +1 -1
  52. data/doc/classes/Quickbooks/Base.src/M000084.html +23 -0
  53. data/doc/classes/Quickbooks/Base.src/{M000041.html → M000085.html} +1 -1
  54. data/doc/classes/Quickbooks/Base.src/{M000042.html → M000086.html} +2 -2
  55. data/doc/classes/Quickbooks/Base.src/{M000043.html → M000087.html} +3 -2
  56. data/doc/classes/Quickbooks/Base.src/M000088.html +19 -0
  57. data/doc/classes/Quickbooks/Base.src/{M000045.html → M000089.html} +1 -1
  58. data/doc/classes/Quickbooks/Base.src/M000090.html +19 -0
  59. data/doc/classes/Quickbooks/Base.src/{M000052.html → M000091.html} +1 -1
  60. data/doc/classes/Quickbooks/Base.src/M000092.html +45 -0
  61. data/doc/classes/Quickbooks/Base.src/{M000054.html → M000093.html} +2 -2
  62. data/doc/classes/Quickbooks/Base.src/M000094.html +18 -0
  63. data/doc/classes/Quickbooks/Base.src/M000095.html +20 -0
  64. data/doc/classes/Quickbooks/BillAddress.html +113 -0
  65. data/doc/classes/Quickbooks/Connection.html +68 -68
  66. data/doc/classes/Quickbooks/Connection.src/{M000056.html → M000097.html} +0 -0
  67. data/doc/classes/Quickbooks/Connection.src/{M000057.html → M000098.html} +0 -0
  68. data/doc/classes/Quickbooks/Connection.src/{M000058.html → M000099.html} +0 -1
  69. data/doc/classes/Quickbooks/Connection.src/{M000059.html → M000100.html} +1 -1
  70. data/doc/classes/Quickbooks/Connection.src/{M000060.html → M000101.html} +1 -1
  71. data/doc/classes/Quickbooks/Connection.src/{M000061.html → M000102.html} +2 -2
  72. data/doc/classes/Quickbooks/Connection.src/{M000062.html → M000103.html} +1 -1
  73. data/doc/classes/Quickbooks/Connection.src/{M000063.html → M000104.html} +1 -1
  74. data/doc/classes/Quickbooks/Connection.src/{M000064.html → M000105.html} +1 -1
  75. data/doc/classes/Quickbooks/Connection.src/{M000065.html → M000106.html} +2 -2
  76. data/doc/classes/Quickbooks/CreditCardInfo.html +113 -0
  77. data/doc/classes/Quickbooks/CustomerTypeRef.html +113 -0
  78. data/doc/classes/Quickbooks/ItemSalesTaxRef.html +113 -0
  79. data/doc/classes/Quickbooks/JobTypeRef.html +113 -0
  80. data/doc/classes/Quickbooks/ListItem.html +21 -44
  81. data/doc/classes/Quickbooks/ListItem.src/M000078.html +19 -0
  82. data/doc/classes/Quickbooks/ListItem.src/M000079.html +18 -0
  83. data/doc/classes/Quickbooks/Model.html +469 -0
  84. data/doc/classes/Quickbooks/Model.src/M000059.html +24 -0
  85. data/doc/classes/Quickbooks/Model.src/M000060.html +18 -0
  86. data/doc/classes/Quickbooks/Model.src/M000061.html +18 -0
  87. data/doc/classes/Quickbooks/Model.src/M000062.html +18 -0
  88. data/doc/classes/Quickbooks/Model.src/M000063.html +18 -0
  89. data/doc/classes/Quickbooks/Model.src/M000064.html +18 -0
  90. data/doc/classes/Quickbooks/Model.src/M000065.html +32 -0
  91. data/doc/classes/Quickbooks/Model.src/M000066.html +32 -0
  92. data/doc/classes/Quickbooks/Model.src/M000067.html +18 -0
  93. data/doc/classes/Quickbooks/{Base.src/M000046.html → Model.src/M000068.html} +2 -3
  94. data/doc/classes/Quickbooks/{Base.src/M000047.html → Model.src/M000069.html} +4 -4
  95. data/doc/classes/Quickbooks/{Base.src/M000048.html → Model.src/M000070.html} +2 -2
  96. data/doc/classes/Quickbooks/{Base.src/M000049.html → Model.src/M000071.html} +2 -2
  97. data/doc/classes/Quickbooks/{Base.src/M000050.html → Model.src/M000072.html} +3 -3
  98. data/doc/classes/Quickbooks/{Base.src/M000051.html → Model.src/M000073.html} +6 -5
  99. data/doc/classes/Quickbooks/Model.src/M000074.html +28 -0
  100. data/doc/classes/Quickbooks/Model.src/M000075.html +28 -0
  101. data/doc/classes/Quickbooks/Model.src/M000076.html +21 -0
  102. data/doc/classes/Quickbooks/Model.src/M000077.html +23 -0
  103. data/doc/classes/Quickbooks/ParentRef.html +113 -0
  104. data/doc/classes/Quickbooks/PreferredPaymentMethodRef.html +113 -0
  105. data/doc/classes/Quickbooks/PriceLevelRef.html +113 -0
  106. data/doc/classes/Quickbooks/Qbxml.html +0 -5
  107. data/doc/classes/Quickbooks/Qbxml/Request.html +55 -23
  108. data/doc/classes/Quickbooks/Qbxml/Request.src/M000050.html +34 -0
  109. data/doc/classes/Quickbooks/Qbxml/Request.src/{M000025.html → M000051.html} +2 -2
  110. data/doc/classes/Quickbooks/Qbxml/Request.src/M000052.html +81 -0
  111. data/doc/classes/Quickbooks/Qbxml/RequestSet.html +20 -20
  112. data/doc/classes/Quickbooks/Qbxml/RequestSet.src/{M000027.html → M000053.html} +0 -0
  113. data/doc/classes/Quickbooks/Qbxml/RequestSet.src/{M000028.html → M000054.html} +0 -0
  114. data/doc/classes/Quickbooks/Qbxml/RequestSet.src/{M000029.html → M000055.html} +0 -0
  115. data/doc/classes/Quickbooks/Qbxml/RequestSet.src/{M000030.html → M000056.html} +0 -0
  116. data/doc/classes/Quickbooks/Qbxml/Response.html +46 -46
  117. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000015.html → M000041.html} +1 -1
  118. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000016.html → M000042.html} +1 -1
  119. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000017.html → M000043.html} +1 -2
  120. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000018.html → M000044.html} +1 -1
  121. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000019.html → M000045.html} +1 -1
  122. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000020.html → M000046.html} +1 -1
  123. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000021.html → M000047.html} +1 -1
  124. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000022.html → M000048.html} +1 -1
  125. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000023.html → M000049.html} +22 -11
  126. data/doc/classes/Quickbooks/Qbxml/ResponseSet.html +35 -35
  127. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000008.html → M000034.html} +1 -1
  128. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000009.html → M000035.html} +1 -1
  129. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000010.html → M000036.html} +1 -1
  130. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000011.html → M000037.html} +1 -1
  131. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000012.html → M000038.html} +1 -1
  132. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000013.html → M000039.html} +1 -1
  133. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000014.html → M000040.html} +1 -1
  134. data/doc/classes/Quickbooks/Ref.html +139 -0
  135. data/doc/classes/Quickbooks/Ref.src/M000096.html +18 -0
  136. data/doc/classes/Quickbooks/SalesRepRef.html +113 -0
  137. data/doc/classes/Quickbooks/SalesTaxCodeRef.html +113 -0
  138. data/doc/classes/Quickbooks/ShipAddress.html +113 -0
  139. data/doc/classes/Quickbooks/TermsRef.html +113 -0
  140. data/doc/classes/Quickbooks/Transaction.html +21 -62
  141. data/doc/classes/Quickbooks/Transaction.src/M000057.html +19 -0
  142. data/doc/classes/Quickbooks/Transaction.src/M000058.html +18 -0
  143. data/doc/created.rid +1 -1
  144. data/doc/files/README.html +15 -4
  145. data/doc/files/lib/quickbooks/base_rb.html +15 -8
  146. data/doc/files/lib/quickbooks/connection_rb.html +1 -1
  147. data/doc/files/lib/quickbooks/model_rb.html +108 -0
  148. data/doc/files/lib/quickbooks/{qbxml/error_rb.html → models/common/address_rb.html} +5 -5
  149. data/doc/files/lib/quickbooks/models/common/all_refs_rb.html +101 -0
  150. data/doc/files/lib/quickbooks/models/customer/credit_card_info_rb.html +101 -0
  151. data/doc/files/lib/quickbooks/models/customer_rb.html +10 -1
  152. data/doc/files/lib/quickbooks/models/list_item_rb.html +1 -1
  153. data/doc/files/lib/quickbooks/models/transaction_rb.html +1 -1
  154. data/doc/files/lib/quickbooks/ole_helper_rb.html +1 -1
  155. data/doc/files/lib/quickbooks/qbxml/request_rb.html +1 -1
  156. data/doc/files/lib/quickbooks/qbxml/response_rb.html +1 -2
  157. data/doc/files/lib/quickbooks/qbxml_rb.html +109 -0
  158. data/doc/files/lib/quickbooks/ruby_magic_rb.html +1 -1
  159. data/doc/fr_class_index.html +16 -1
  160. data/doc/fr_file_index.html +5 -1
  161. data/doc/fr_method_index.html +110 -68
  162. data/lib/quickbooks/base.rb +54 -95
  163. data/lib/quickbooks/connection.rb +2 -3
  164. data/lib/quickbooks/model.rb +176 -0
  165. data/lib/quickbooks/models/common/address.rb +14 -0
  166. data/lib/quickbooks/models/common/all_refs.rb +36 -0
  167. data/lib/quickbooks/models/customer.rb +30 -31
  168. data/lib/quickbooks/models/customer/credit_card_info.rb +5 -0
  169. data/lib/quickbooks/models/list_item.rb +27 -16
  170. data/lib/quickbooks/models/transaction.rb +21 -12
  171. data/lib/quickbooks/qbxml.rb +2 -0
  172. data/lib/quickbooks/qbxml/request.rb +80 -31
  173. data/lib/quickbooks/qbxml/response.rb +21 -12
  174. data/lib/quickbooks/ruby_magic.rb +130 -4
  175. metadata +146 -74
  176. data/doc/classes/Quickbooks/Base.src/M000038.html +0 -19
  177. data/doc/classes/Quickbooks/Base.src/M000039.html +0 -25
  178. data/doc/classes/Quickbooks/Base.src/M000040.html +0 -27
  179. data/doc/classes/Quickbooks/Base.src/M000044.html +0 -19
  180. data/doc/classes/Quickbooks/Base.src/M000053.html +0 -36
  181. data/doc/classes/Quickbooks/Base.src/M000055.html +0 -18
  182. data/doc/classes/Quickbooks/ListItem.src/M000033.html +0 -31
  183. data/doc/classes/Quickbooks/Qbxml/Request.src/M000024.html +0 -23
  184. data/doc/classes/Quickbooks/Qbxml/Request.src/M000026.html +0 -57
  185. data/doc/classes/Quickbooks/Transaction.src/M000032.html +0 -26
  186. data/lib/quickbooks/qbxml/error.rb +0 -20
@@ -0,0 +1,113 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Quickbooks::PreferredPaymentMethodRef</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Quickbooks::PreferredPaymentMethodRef</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../files/lib/quickbooks/models/common/all_refs_rb.html">
59
+ lib/quickbooks/models/common/all_refs.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ <a href="Ref.html">
69
+ Ref
70
+ </a>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+ </div>
75
+ <!-- banner header -->
76
+
77
+ <div id="bodyContent">
78
+
79
+
80
+
81
+ <div id="contextContent">
82
+
83
+
84
+
85
+ </div>
86
+
87
+
88
+ </div>
89
+
90
+
91
+ <!-- if includes -->
92
+
93
+ <div id="section">
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+ <!-- if method_list -->
103
+
104
+
105
+ </div>
106
+
107
+
108
+ <div id="validator-badges">
109
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
110
+ </div>
111
+
112
+ </body>
113
+ </html>
@@ -0,0 +1,113 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en" lang="en">
7
+ <head>
8
+ <title>Class: Quickbooks::PriceLevelRef</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <meta http-equiv="Content-Script-Type" content="text/javascript" />
11
+ <link rel="stylesheet" href="../.././rdoc-style.css" type="text/css" media="screen" />
12
+ <script type="text/javascript">
13
+ // <![CDATA[
14
+
15
+ function popupCode( url ) {
16
+ window.open(url, "Code", "resizable=yes,scrollbars=yes,toolbar=no,status=no,height=150,width=400")
17
+ }
18
+
19
+ function toggleCode( id ) {
20
+ if ( document.getElementById )
21
+ elem = document.getElementById( id );
22
+ else if ( document.all )
23
+ elem = eval( "document.all." + id );
24
+ else
25
+ return false;
26
+
27
+ elemStyle = elem.style;
28
+
29
+ if ( elemStyle.display != "block" ) {
30
+ elemStyle.display = "block"
31
+ } else {
32
+ elemStyle.display = "none"
33
+ }
34
+
35
+ return true;
36
+ }
37
+
38
+ // Make codeblocks hidden by default
39
+ document.writeln( "<style type=\"text/css\">div.method-source-code { display: none }</style>" )
40
+
41
+ // ]]>
42
+ </script>
43
+
44
+ </head>
45
+ <body>
46
+
47
+
48
+
49
+ <div id="classHeader">
50
+ <table class="header-table">
51
+ <tr class="top-aligned-row">
52
+ <td><strong>Class</strong></td>
53
+ <td class="class-name-in-header">Quickbooks::PriceLevelRef</td>
54
+ </tr>
55
+ <tr class="top-aligned-row">
56
+ <td><strong>In:</strong></td>
57
+ <td>
58
+ <a href="../../files/lib/quickbooks/models/common/all_refs_rb.html">
59
+ lib/quickbooks/models/common/all_refs.rb
60
+ </a>
61
+ <br />
62
+ </td>
63
+ </tr>
64
+
65
+ <tr class="top-aligned-row">
66
+ <td><strong>Parent:</strong></td>
67
+ <td>
68
+ <a href="Ref.html">
69
+ Ref
70
+ </a>
71
+ </td>
72
+ </tr>
73
+ </table>
74
+ </div>
75
+ <!-- banner header -->
76
+
77
+ <div id="bodyContent">
78
+
79
+
80
+
81
+ <div id="contextContent">
82
+
83
+
84
+
85
+ </div>
86
+
87
+
88
+ </div>
89
+
90
+
91
+ <!-- if includes -->
92
+
93
+ <div id="section">
94
+
95
+
96
+
97
+
98
+
99
+
100
+
101
+
102
+ <!-- if method_list -->
103
+
104
+
105
+ </div>
106
+
107
+
108
+ <div id="validator-badges">
109
+ <p><small><a href="http://validator.w3.org/check/referer">[Validate]</a></small></p>
110
+ </div>
111
+
112
+ </body>
113
+ </html>
@@ -55,10 +55,6 @@
55
55
  <tr class="top-aligned-row">
56
56
  <td><strong>In:</strong></td>
57
57
  <td>
58
- <a href="../../files/lib/quickbooks/qbxml/error_rb.html">
59
- lib/quickbooks/qbxml/error.rb
60
- </a>
61
- <br />
62
58
  <a href="../../files/lib/quickbooks/qbxml/request_rb.html">
63
59
  lib/quickbooks/qbxml/request.rb
64
60
  </a>
@@ -97,7 +93,6 @@
97
93
 
98
94
  Module <a href="Qbxml/RequestSetArrayExt.html" class="link">Quickbooks::Qbxml::RequestSetArrayExt</a><br />
99
95
  Module <a href="Qbxml/ResponseSetArrayExt.html" class="link">Quickbooks::Qbxml::ResponseSetArrayExt</a><br />
100
- Class <a href="Qbxml/Error.html" class="link">Quickbooks::Qbxml::Error</a><br />
101
96
  Class <a href="Qbxml/Request.html" class="link">Quickbooks::Qbxml::Request</a><br />
102
97
  Class <a href="Qbxml/RequestSet.html" class="link">Quickbooks::Qbxml::RequestSet</a><br />
103
98
  Class <a href="Qbxml/Response.html" class="link">Quickbooks::Qbxml::Response</a><br />
@@ -88,9 +88,9 @@
88
88
  <h3 class="section-bar">Methods</h3>
89
89
 
90
90
  <div class="name-list">
91
- <a href="#M000024">new</a>&nbsp;&nbsp;
92
- <a href="#M000025">next_request_id</a>&nbsp;&nbsp;
93
- <a href="#M000026">to_xml</a>&nbsp;&nbsp;
91
+ <a href="#M000050">new</a>&nbsp;&nbsp;
92
+ <a href="#M000051">next_request_id</a>&nbsp;&nbsp;
93
+ <a href="#M000052">to_xml</a>&nbsp;&nbsp;
94
94
  </div>
95
95
  </div>
96
96
 
@@ -112,33 +112,65 @@
112
112
  <div id="methods">
113
113
  <h3 class="section-bar">Public Class methods</h3>
114
114
 
115
- <div id="method-M000024" class="method-detail">
116
- <a name="M000024"></a>
115
+ <div id="method-M000050" class="method-detail">
116
+ <a name="M000050"></a>
117
117
 
118
118
  <div class="method-heading">
119
- <a href="Request.src/M000024.html" target="Code" class="method-signature"
120
- onclick="popupCode('Request.src/M000024.html');return false;">
121
- <span class="method-name">new</span><span class="method-args">(object, type, options={})</span>
119
+ <a href="Request.src/M000050.html" target="Code" class="method-signature"
120
+ onclick="popupCode('Request.src/M000050.html');return false;">
121
+ <span class="method-name">new</span><span class="method-args">(object, type, options_or_regexp={})</span>
122
122
  </a>
123
123
  </div>
124
124
 
125
125
  <div class="method-description">
126
- <p>
127
- @type = there are four types of queries&#8230; 1) List queries (:query) 2)
128
- <a href="../../Object.html">Object</a>-specific transaction query
129
- (:transaction) 3) Generic transaction query (:any_transaction) 4) Reports
130
- (:report) &#8230;and then there are Mod requests&#8230; # 1) Mod request
131
- (:mod)
126
+ <ol>
127
+ <li>List queries (:query)
128
+
129
+ </li>
130
+ </ol>
131
+ <pre>
132
+ Request.new(object, :query) # &lt;= will return the record matching the object supplied (automatically searches by list_id or txn_id)
133
+ Request.new(Customer, :query, :limit =&gt; 1) # &lt;= will return the first customer
134
+ Request.new(Customer, :query, /some match/) # &lt;= will return all customers matching the regexp
135
+ </pre>
136
+ <ol>
137
+ <li><a href="../../Object.html">Object</a>-specific transaction query
138
+ (:transaction)
139
+
140
+ </li>
141
+ </ol>
142
+ <pre>
143
+ Request.new(Transaction, :query) # &lt;= will return the transaction matching the object supplied
144
+ </pre>
145
+ <ol>
146
+ <li>Mod requests (:mod)
147
+
148
+ </li>
149
+ </ol>
150
+ <pre>
151
+ Request.new(object, :mod) # &lt;= will update the object
152
+ </pre>
153
+ <ol>
154
+ <li>Delete requests (:delete)
155
+
156
+ </li>
157
+ </ol>
158
+ <pre>
159
+ Request.new(object, :delete) # &lt;= will delete the object
160
+ </pre>
161
+ <p>
162
+ We want the attributes of the object when we are updating, but no other
163
+ time.
132
164
  </p>
133
165
  </div>
134
166
  </div>
135
167
 
136
- <div id="method-M000025" class="method-detail">
137
- <a name="M000025"></a>
168
+ <div id="method-M000051" class="method-detail">
169
+ <a name="M000051"></a>
138
170
 
139
171
  <div class="method-heading">
140
- <a href="Request.src/M000025.html" target="Code" class="method-signature"
141
- onclick="popupCode('Request.src/M000025.html');return false;">
172
+ <a href="Request.src/M000051.html" target="Code" class="method-signature"
173
+ onclick="popupCode('Request.src/M000051.html');return false;">
142
174
  <span class="method-name">next_request_id</span><span class="method-args">()</span>
143
175
  </a>
144
176
  </div>
@@ -149,12 +181,12 @@
149
181
 
150
182
  <h3 class="section-bar">Public Instance methods</h3>
151
183
 
152
- <div id="method-M000026" class="method-detail">
153
- <a name="M000026"></a>
184
+ <div id="method-M000052" class="method-detail">
185
+ <a name="M000052"></a>
154
186
 
155
187
  <div class="method-heading">
156
- <a href="Request.src/M000026.html" target="Code" class="method-signature"
157
- onclick="popupCode('Request.src/M000026.html');return false;">
188
+ <a href="Request.src/M000052.html" target="Code" class="method-signature"
189
+ onclick="popupCode('Request.src/M000052.html');return false;">
158
190
  <span class="method-name">to_xml</span><span class="method-args">(as_set=true)</span>
159
191
  </a>
160
192
  </div>
@@ -162,7 +194,7 @@
162
194
  <div class="method-description">
163
195
  <p>
164
196
  This is where the magic happens to convert a request object into xml worthy
165
- of sending off to quickbooks.
197
+ of quickbooks.
166
198
  </p>
167
199
  </div>
168
200
  </div>
@@ -0,0 +1,34 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>new (Quickbooks::Qbxml::Request)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/quickbooks/qbxml/request.rb, line 64</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">initialize</span>(<span class="ruby-identifier">object</span>, <span class="ruby-identifier">type</span>, <span class="ruby-identifier">options_or_regexp</span>={})
15
+ <span class="ruby-identifier">options</span> = <span class="ruby-identifier">options_or_regexp</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Regexp</span>) <span class="ruby-operator">?</span> {<span class="ruby-identifier">:matches</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-identifier">options_or_regexp</span>} <span class="ruby-operator">:</span> <span class="ruby-identifier">options_or_regexp</span>
16
+ <span class="ruby-ivar">@type</span> = <span class="ruby-identifier">type</span>
17
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">&quot;Quickbooks::Qbxml::Requests can only be of one of the following types: :query, :transaction, :any_transaction, :mod, :add, :delete, or :report&quot;</span> <span class="ruby-keyword kw">unless</span> <span class="ruby-ivar">@type</span>.<span class="ruby-identifier">is_one_of?</span>(<span class="ruby-identifier">:query</span>, <span class="ruby-identifier">:transaction</span>, <span class="ruby-identifier">:any_transaction</span>, <span class="ruby-identifier">:mod</span>, <span class="ruby-identifier">:report</span>, <span class="ruby-identifier">:add</span>, <span class="ruby-identifier">:delete</span>)
18
+ <span class="ruby-ivar">@klass</span> = <span class="ruby-identifier">object</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Class</span>) <span class="ruby-operator">?</span> <span class="ruby-identifier">object</span> <span class="ruby-operator">:</span> <span class="ruby-identifier">object</span>.<span class="ruby-identifier">class</span>
19
+ <span class="ruby-ivar">@object</span> = <span class="ruby-identifier">object</span>
20
+ <span class="ruby-ivar">@options</span> = <span class="ruby-identifier">options</span>
21
+
22
+ <span class="ruby-comment cmt"># Return only specific properties: Request.new(Customer, :query, :only =&gt; [:list_id, :full_name]); Quickbooks::Customer.first(:only =&gt; :list_id)</span>
23
+ <span class="ruby-ivar">@ret_elements</span> = <span class="ruby-ivar">@options</span>.<span class="ruby-identifier">delete</span>(<span class="ruby-identifier">:only</span>).<span class="ruby-identifier">to_a</span>.<span class="ruby-identifier">only</span>(<span class="ruby-ivar">@klass</span>.<span class="ruby-identifier">properties</span>).<span class="ruby-identifier">order!</span>(<span class="ruby-ivar">@klass</span>.<span class="ruby-identifier">properties</span>).<span class="ruby-identifier">stringify_values</span>.<span class="ruby-identifier">camelize_values!</span>(<span class="ruby-constant">Quickbooks</span><span class="ruby-operator">::</span><span class="ruby-constant">CAMELIZE_EXCEPTIONS</span>) <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@options</span>.<span class="ruby-identifier">has_key?</span>(<span class="ruby-identifier">:only</span>)
24
+
25
+ <span class="ruby-comment cmt"># Includes only valid filters + aliases for valid filters, then transforms aliased filters to real filters, then camelizes keys to prepare for writing to XML, lastly orders the keys to a valid filter order.</span>
26
+ <span class="ruby-comment cmt"># You may optionally have ListID OR FullName OR ( MaxReturned AND ActiveStatus AND FromModifiedDate AND ToModifiedDate AND ( NameFilter OR NameRangeFilter ) )</span>
27
+ <span class="ruby-ivar">@filters</span> = <span class="ruby-identifier">options</span>.<span class="ruby-identifier">stringify_keys</span>.<span class="ruby-identifier">only</span>(<span class="ruby-ivar">@klass</span>.<span class="ruby-identifier">valid_filters</span> <span class="ruby-operator">+</span> <span class="ruby-ivar">@klass</span>.<span class="ruby-identifier">filter_aliases</span>.<span class="ruby-identifier">keys</span>).<span class="ruby-identifier">transform_keys!</span>(<span class="ruby-ivar">@klass</span>.<span class="ruby-identifier">filter_aliases</span>).<span class="ruby-identifier">camelize_keys!</span>(<span class="ruby-constant">Quickbooks</span><span class="ruby-operator">::</span><span class="ruby-constant">CAMELIZE_EXCEPTIONS</span>).<span class="ruby-identifier">order!</span>(<span class="ruby-ivar">@klass</span>.<span class="ruby-identifier">camelized_valid_filters</span>)
28
+
29
+ <span class="ruby-comment cmt"># Complain if:</span>
30
+ <span class="ruby-comment cmt"># 1) type is :mod or :delete, and object supplied is not a valid model</span>
31
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">ArgumentError</span>, <span class="ruby-value str">&quot;A Quickbooks record object must be supplied to perform an add, mod or del action&quot;</span> <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@type</span>.<span class="ruby-identifier">is_one_of?</span>(<span class="ruby-identifier">:add</span>, <span class="ruby-identifier">:mod</span>, <span class="ruby-identifier">:delete</span>) <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@object</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Quickbooks</span><span class="ruby-operator">::</span><span class="ruby-constant">Base</span>)
32
+ <span class="ruby-keyword kw">end</span></pre>
33
+ </body>
34
+ </html>
@@ -10,9 +10,9 @@
10
10
  <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
11
  </head>
12
12
  <body class="standalone-code">
13
- <pre><span class="ruby-comment cmt"># File lib/quickbooks/qbxml/request.rb, line 69</span>
13
+ <pre><span class="ruby-comment cmt"># File lib/quickbooks/qbxml/request.rb, line 84</span>
14
14
  <span class="ruby-keyword kw">def</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">next_request_id</span>
15
- <span class="ruby-ivar">@request_id</span> <span class="ruby-operator">||=</span> <span class="ruby-value">5000</span>
15
+ <span class="ruby-ivar">@request_id</span> <span class="ruby-operator">||=</span> <span class="ruby-value">0</span>
16
16
  <span class="ruby-ivar">@request_id</span> <span class="ruby-operator">+=</span> <span class="ruby-value">1</span>
17
17
  <span class="ruby-keyword kw">end</span></pre>
18
18
  </body>
@@ -0,0 +1,81 @@
1
+ <?xml version="1.0" encoding="iso-8859-1"?>
2
+ <!DOCTYPE html
3
+ PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
4
+ "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
5
+
6
+ <html>
7
+ <head>
8
+ <title>to_xml (Quickbooks::Qbxml::Request)</title>
9
+ <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
10
+ <link rel="stylesheet" href="../../../.././rdoc-style.css" type="text/css" media="screen" />
11
+ </head>
12
+ <body class="standalone-code">
13
+ <pre><span class="ruby-comment cmt"># File lib/quickbooks/qbxml/request.rb, line 90</span>
14
+ <span class="ruby-keyword kw">def</span> <span class="ruby-identifier">to_xml</span>(<span class="ruby-identifier">as_set</span>=<span class="ruby-keyword kw">true</span>)
15
+ <span class="ruby-keyword kw">return</span> (<span class="ruby-constant">RequestSet</span>.<span class="ruby-identifier">new</span>(<span class="ruby-keyword kw">self</span>)).<span class="ruby-identifier">to_xml</span> <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">as_set</span> <span class="ruby-comment cmt"># Simple call yields xml as a single request in a request set. However, if the xml for the lone request is required, pass false.</span>
16
+ <span class="ruby-identifier">req</span> = <span class="ruby-constant">Builder</span><span class="ruby-operator">::</span><span class="ruby-constant">XmlMarkup</span>.<span class="ruby-identifier">new</span>(<span class="ruby-identifier">:indent</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-value">2</span>)
17
+ <span class="ruby-identifier">request_root</span>, <span class="ruby-identifier">container</span> = <span class="ruby-keyword kw">case</span>
18
+ <span class="ruby-keyword kw">when</span> <span class="ruby-ivar">@type</span>.<span class="ruby-identifier">is_one_of?</span>(<span class="ruby-identifier">:query</span>)
19
+ [<span class="ruby-node">&quot;#{@klass.class_leaf_name}QueryRq&quot;</span>, <span class="ruby-keyword kw">nil</span>]
20
+ <span class="ruby-keyword kw">when</span> <span class="ruby-ivar">@type</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:add</span>
21
+ [<span class="ruby-node">&quot;#{@klass.class_leaf_name}AddRq&quot;</span>, <span class="ruby-node">&quot;#{@klass.class_leaf_name}Add&quot;</span>]
22
+ <span class="ruby-keyword kw">when</span> <span class="ruby-ivar">@type</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:mod</span>
23
+ [<span class="ruby-node">&quot;#{@klass.class_leaf_name}ModRq&quot;</span>, <span class="ruby-node">&quot;#{@klass.class_leaf_name}Mod&quot;</span>]
24
+ <span class="ruby-keyword kw">when</span> <span class="ruby-ivar">@type</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:delete</span>
25
+ [<span class="ruby-node">&quot;#{@klass.ListOrTxn}DelRq&quot;</span>, <span class="ruby-keyword kw">nil</span>]
26
+ <span class="ruby-keyword kw">else</span>
27
+ <span class="ruby-identifier">raise</span> <span class="ruby-constant">RuntimeError</span>, <span class="ruby-node">&quot;Could not convert this request to qbxml!\n#{self.inspect}&quot;</span>
28
+ <span class="ruby-keyword kw">end</span>
29
+ <span class="ruby-identifier">inner_stuff</span> = <span class="ruby-identifier">lambda</span> {
30
+ <span class="ruby-identifier">deep_tag</span> = <span class="ruby-identifier">lambda</span> {<span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
31
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">v</span>.<span class="ruby-identifier">is_a?</span>(<span class="ruby-constant">Hash</span>)
32
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">k</span> <span class="ruby-operator">==</span> <span class="ruby-value str">''</span>
33
+ <span class="ruby-identifier">v</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span>
34
+ <span class="ruby-identifier">deep_tag</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span>)
35
+ }
36
+ <span class="ruby-keyword kw">else</span>
37
+ <span class="ruby-identifier">req</span>.<span class="ruby-identifier">tag!</span>(<span class="ruby-identifier">k</span>.<span class="ruby-identifier">camelcase</span>) { <span class="ruby-identifier">v</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span><span class="ruby-operator">|</span> <span class="ruby-identifier">deep_tag</span>.<span class="ruby-identifier">call</span>(<span class="ruby-identifier">k</span>,<span class="ruby-identifier">v</span>) } }
38
+ <span class="ruby-keyword kw">end</span>
39
+ <span class="ruby-keyword kw">else</span>
40
+ <span class="ruby-identifier">req</span>.<span class="ruby-identifier">tag!</span>(<span class="ruby-identifier">k</span>.<span class="ruby-identifier">camelcase</span>,<span class="ruby-identifier">uncast</span>(<span class="ruby-identifier">v</span>))
41
+ <span class="ruby-keyword kw">end</span>
42
+ }
43
+
44
+ <span class="ruby-comment cmt"># Add the specific elements for the respective request type</span>
45
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@type</span>.<span class="ruby-identifier">is_one_of?</span>(<span class="ruby-identifier">:add</span>, <span class="ruby-identifier">:mod</span>)
46
+ <span class="ruby-keyword kw">if</span> <span class="ruby-ivar">@type</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:mod</span>
47
+ <span class="ruby-comment cmt"># First the ObjectId:</span>
48
+ <span class="ruby-identifier">req</span>.<span class="ruby-identifier">tag!</span>(<span class="ruby-ivar">@klass</span>.<span class="ruby-constant">ListOrTxn</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'ID'</span>, <span class="ruby-ivar">@object</span>.<span class="ruby-identifier">send</span>(<span class="ruby-node">&quot;#{@klass.ListOrTxn}Id&quot;</span>.<span class="ruby-identifier">underscore</span>))
49
+ <span class="ruby-comment cmt"># Second the EditSequence</span>
50
+ <span class="ruby-identifier">req</span>.<span class="ruby-identifier">tag!</span>(<span class="ruby-value str">'EditSequence'</span>, <span class="ruby-ivar">@object</span>.<span class="ruby-identifier">send</span>(<span class="ruby-identifier">:edit_sequence</span>))
51
+ <span class="ruby-keyword kw">end</span>
52
+ <span class="ruby-comment cmt"># Then, all the dirty_attributes</span>
53
+ <span class="ruby-identifier">deep_tag</span>.<span class="ruby-identifier">call</span>(<span class="ruby-value str">''</span>,<span class="ruby-ivar">@object</span>.<span class="ruby-identifier">to_dirty_hash</span>) <span class="ruby-comment cmt"># (this is an hash statically ordered to the model's qbxml attribute order)</span>
54
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@type</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:query</span> <span class="ruby-operator">&amp;&amp;</span> <span class="ruby-ivar">@object</span>.<span class="ruby-identifier">class</span> <span class="ruby-operator">==</span> <span class="ruby-ivar">@klass</span>
55
+ <span class="ruby-comment cmt"># Sent an instance object for a query - we should include the ListId/TxnId (then other filters?)</span>
56
+ <span class="ruby-identifier">req</span>.<span class="ruby-identifier">tag!</span>(<span class="ruby-ivar">@klass</span>.<span class="ruby-constant">ListOrTxn</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'ID'</span>, <span class="ruby-ivar">@object</span>.<span class="ruby-identifier">send</span>(<span class="ruby-node">&quot;#{@klass.ListOrTxn}Id&quot;</span>.<span class="ruby-identifier">underscore</span>))
57
+ <span class="ruby-identifier">deep_tag</span>.<span class="ruby-identifier">call</span>(<span class="ruby-value str">''</span>, <span class="ruby-ivar">@filters</span>)
58
+ <span class="ruby-keyword kw">elsif</span> <span class="ruby-ivar">@type</span> <span class="ruby-operator">==</span> <span class="ruby-identifier">:delete</span>
59
+ <span class="ruby-identifier">req</span>.<span class="ruby-identifier">tag!</span>(<span class="ruby-ivar">@klass</span>.<span class="ruby-constant">ListOrTxn</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'DelType'</span>, <span class="ruby-ivar">@klass</span>.<span class="ruby-identifier">class_leaf_name</span>)
60
+ <span class="ruby-identifier">req</span>.<span class="ruby-identifier">tag!</span>(<span class="ruby-ivar">@klass</span>.<span class="ruby-constant">ListOrTxn</span> <span class="ruby-operator">+</span> <span class="ruby-value str">'ID'</span>, <span class="ruby-ivar">@object</span>.<span class="ruby-identifier">send</span>(<span class="ruby-node">&quot;#{@klass.ListOrTxn}Id&quot;</span>.<span class="ruby-identifier">underscore</span>))
61
+ <span class="ruby-keyword kw">else</span>
62
+ <span class="ruby-comment cmt"># just filters</span>
63
+ <span class="ruby-identifier">deep_tag</span>.<span class="ruby-identifier">call</span>(<span class="ruby-value str">''</span>, <span class="ruby-ivar">@filters</span>)
64
+ <span class="ruby-keyword kw">end</span>
65
+ <span class="ruby-comment cmt"># Lastly, specify the fields to return, if desired</span>
66
+ <span class="ruby-ivar">@ret_elements</span>.<span class="ruby-identifier">each</span> { <span class="ruby-operator">|</span><span class="ruby-identifier">r</span><span class="ruby-operator">|</span> <span class="ruby-identifier">req</span>.<span class="ruby-identifier">tag!</span>(<span class="ruby-value str">'IncludeRetElement'</span>, <span class="ruby-identifier">r</span>) } <span class="ruby-keyword kw">if</span> <span class="ruby-operator">!</span><span class="ruby-ivar">@ret_elements</span>.<span class="ruby-identifier">blank?</span>
67
+ }
68
+ <span class="ruby-identifier">req</span>.<span class="ruby-identifier">tag!</span>(<span class="ruby-identifier">request_root</span>, <span class="ruby-identifier">:requestID</span> =<span class="ruby-operator">&gt;</span> <span class="ruby-keyword kw">self</span>.<span class="ruby-identifier">class</span>.<span class="ruby-identifier">next_request_id</span>) {
69
+ <span class="ruby-keyword kw">if</span> <span class="ruby-identifier">container</span>
70
+ <span class="ruby-identifier">req</span>.<span class="ruby-identifier">tag!</span>(<span class="ruby-identifier">container</span>) {
71
+ <span class="ruby-identifier">inner_stuff</span>.<span class="ruby-identifier">call</span>
72
+ }
73
+ <span class="ruby-keyword kw">else</span>
74
+ <span class="ruby-identifier">inner_stuff</span>.<span class="ruby-identifier">call</span>
75
+ <span class="ruby-keyword kw">end</span>
76
+ }
77
+ <span class="ruby-comment cmt"># puts req.target!</span>
78
+ <span class="ruby-identifier">req</span>.<span class="ruby-identifier">target!</span>
79
+ <span class="ruby-keyword kw">end</span></pre>
80
+ </body>
81
+ </html>