quickbooks 0.4.0 → 0.9.9

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 (293) hide show
  1. data.tar.gz.sig +0 -0
  2. data/History.txt +23 -0
  3. data/License.txt +54 -0
  4. data/Manifest.txt +73 -0
  5. data/README.txt +79 -0
  6. data/Rakefile +17 -78
  7. data/lib/quickbooks.rb +153 -7
  8. data/lib/quickbooks/adaptability.rb +67 -0
  9. data/lib/quickbooks/adapters/http_adapter.rb +94 -0
  10. data/lib/quickbooks/adapters/https_adapter.rb +57 -0
  11. data/lib/quickbooks/adapters/ole_adapter.rb +141 -110
  12. data/lib/quickbooks/adapters/spew_adapter.rb +39 -0
  13. data/lib/quickbooks/adapters/tcp_adapter.rb +71 -0
  14. data/lib/quickbooks/adapters/test_adapter.rb +62 -0
  15. data/lib/quickbooks/element.rb +385 -0
  16. data/lib/quickbooks/element_collection.rb +105 -0
  17. data/lib/quickbooks/extlib.rb +8 -0
  18. data/lib/quickbooks/extlib/assertions.rb +8 -0
  19. data/lib/quickbooks/extlib/class.rb +98 -0
  20. data/lib/quickbooks/extlib/days_and_times.rb +10 -0
  21. data/lib/quickbooks/extlib/days_and_times/duration.rb +362 -0
  22. data/lib/quickbooks/extlib/days_and_times/numeric.rb +48 -0
  23. data/lib/quickbooks/extlib/days_and_times/object.rb +19 -0
  24. data/lib/quickbooks/extlib/days_and_times/time.rb +137 -0
  25. data/lib/quickbooks/extlib/hash.rb +327 -0
  26. data/lib/quickbooks/extlib/hook.rb +366 -0
  27. data/lib/quickbooks/extlib/inflection.rb +436 -0
  28. data/lib/quickbooks/extlib/logger.rb +202 -0
  29. data/lib/quickbooks/extlib/object.rb +162 -0
  30. data/lib/quickbooks/extlib/pathname.rb +15 -0
  31. data/lib/quickbooks/extlib/rubygems.rb +38 -0
  32. data/lib/quickbooks/extlib/string.rb +32 -0
  33. data/lib/quickbooks/extlib/time.rb +41 -0
  34. data/lib/quickbooks/model.rb +503 -121
  35. data/lib/quickbooks/option.rb +95 -0
  36. data/lib/quickbooks/property.rb +69 -0
  37. data/lib/quickbooks/ruby_ext.rb +251 -0
  38. data/lib/quickbooks/type.rb +75 -0
  39. data/lib/quickbooks/types.rb +58 -0
  40. data/lib/quickbooks/version.rb +10 -0
  41. data/lib/quickbooks/xsd.rb +243 -0
  42. data/lib/quickbooks/xsd/attribute.rb +57 -0
  43. data/lib/quickbooks/xsd/choice.rb +94 -0
  44. data/lib/quickbooks/xsd/complex_type.rb +77 -0
  45. data/lib/quickbooks/xsd/element.rb +214 -0
  46. data/lib/quickbooks/xsd/group.rb +94 -0
  47. data/lib/quickbooks/xsd/restriction.rb +51 -0
  48. data/lib/quickbooks/xsd/sequence.rb +85 -0
  49. data/lib/quickbooks/xsd/simple_type.rb +87 -0
  50. data/lib/quickbooks/xsd/union.rb +70 -0
  51. data/lib/quickbooks/xsd/validation.rb +89 -0
  52. data/lib/quickbooks/xsd/xml_parse.rb +80 -0
  53. data/quickbooks.gemspec +36 -0
  54. data/source/qbxml21_demo.xsd +2223 -0
  55. data/source/qbxmlops_demo.xsd +483 -0
  56. data/source/qbxmltypes.xsd +160 -0
  57. data/spec/association_spec.rb +5 -0
  58. data/spec/element_collection_spec.rb +8 -0
  59. data/spec/find_spec.rb +30 -0
  60. data/spec/lib/quickbooks/element_spec.rb +83 -0
  61. data/spec/lib/quickbooks/elements/sales_order_add_spec.rb +14 -0
  62. data/spec/lib/quickbooks/elements/vendor_add_spec.rb +78 -0
  63. data/spec/lib/quickbooks/model_spec.rb +89 -0
  64. data/spec/lib/quickbooks/models/customer_spec.rb +52 -0
  65. data/spec/lib/quickbooks/models/invoice_spec.rb +12 -0
  66. data/spec/lib/quickbooks/models/sales_order_line_spec.rb +0 -0
  67. data/spec/lib/quickbooks/models/sales_order_spec.rb +145 -0
  68. data/spec/lib/quickbooks/xsd/choice_spec.rb +18 -0
  69. data/spec/pending_spec.rb +11 -0
  70. data/spec/quickbooks_spec.rb +38 -0
  71. data/spec/repeatable_spec.rb +20 -0
  72. data/spec/requires_spec.rb +10 -0
  73. data/spec/spec_helper.rb +5 -0
  74. data/spec/validation_spec.rb +24 -0
  75. metadata +133 -285
  76. metadata.gz.sig +0 -0
  77. data/LICENSE +0 -16
  78. data/README +0 -49
  79. data/doc/classes/Array.html +0 -368
  80. data/doc/classes/Array.src/M000026.html +0 -18
  81. data/doc/classes/Array.src/M000027.html +0 -21
  82. data/doc/classes/Array.src/M000028.html +0 -18
  83. data/doc/classes/Array.src/M000029.html +0 -19
  84. data/doc/classes/Array.src/M000030.html +0 -18
  85. data/doc/classes/Array.src/M000031.html +0 -23
  86. data/doc/classes/Array.src/M000032.html +0 -18
  87. data/doc/classes/Array.src/M000033.html +0 -18
  88. data/doc/classes/Array.src/M000034.html +0 -18
  89. data/doc/classes/Array.src/M000035.html +0 -19
  90. data/doc/classes/Array.src/M000036.html +0 -18
  91. data/doc/classes/Array.src/M000037.html +0 -23
  92. data/doc/classes/Array.src/M000038.html +0 -18
  93. data/doc/classes/Array.src/M000039.html +0 -21
  94. data/doc/classes/Array.src/M000040.html +0 -18
  95. data/doc/classes/Array.src/M000041.html +0 -18
  96. data/doc/classes/Class.html +0 -171
  97. data/doc/classes/Class.src/M000042.html +0 -18
  98. data/doc/classes/Class.src/M000043.html +0 -18
  99. data/doc/classes/Hash.html +0 -516
  100. data/doc/classes/Hash.src/M000001.html +0 -18
  101. data/doc/classes/Hash.src/M000002.html +0 -21
  102. data/doc/classes/Hash.src/M000003.html +0 -18
  103. data/doc/classes/Hash.src/M000004.html +0 -21
  104. data/doc/classes/Hash.src/M000005.html +0 -18
  105. data/doc/classes/Hash.src/M000006.html +0 -20
  106. data/doc/classes/Hash.src/M000007.html +0 -18
  107. data/doc/classes/Hash.src/M000008.html +0 -22
  108. data/doc/classes/Hash.src/M000009.html +0 -18
  109. data/doc/classes/Hash.src/M000010.html +0 -21
  110. data/doc/classes/Hash.src/M000011.html +0 -24
  111. data/doc/classes/Hash.src/M000012.html +0 -18
  112. data/doc/classes/Hash.src/M000013.html +0 -21
  113. data/doc/classes/Hash.src/M000014.html +0 -18
  114. data/doc/classes/Hash.src/M000015.html +0 -21
  115. data/doc/classes/Hash.src/M000016.html +0 -18
  116. data/doc/classes/Hash.src/M000017.html +0 -21
  117. data/doc/classes/Hash.src/M000018.html +0 -27
  118. data/doc/classes/Hash.src/M000019.html +0 -20
  119. data/doc/classes/Hash.src/M000020.html +0 -18
  120. data/doc/classes/Hash.src/M000021.html +0 -18
  121. data/doc/classes/Hash.src/M000022.html +0 -18
  122. data/doc/classes/Hash.src/M000023.html +0 -18
  123. data/doc/classes/Hash.src/M000024.html +0 -18
  124. data/doc/classes/Hash.src/M000025.html +0 -28
  125. data/doc/classes/Object.html +0 -278
  126. data/doc/classes/Object.src/M000044.html +0 -24
  127. data/doc/classes/Object.src/M000045.html +0 -19
  128. data/doc/classes/Object.src/M000046.html +0 -24
  129. data/doc/classes/Object.src/M000047.html +0 -18
  130. data/doc/classes/Object.src/M000048.html +0 -19
  131. data/doc/classes/Object.src/M000049.html +0 -18
  132. data/doc/classes/Object.src/M000050.html +0 -18
  133. data/doc/classes/Object.src/M000051.html +0 -18
  134. data/doc/classes/Qbxml.html +0 -131
  135. data/doc/classes/Qbxml/Request.html +0 -224
  136. data/doc/classes/Qbxml/Request.src/M000132.html +0 -66
  137. data/doc/classes/Qbxml/Request.src/M000133.html +0 -19
  138. data/doc/classes/Qbxml/Request.src/M000134.html +0 -83
  139. data/doc/classes/Qbxml/RequestSet.html +0 -199
  140. data/doc/classes/Qbxml/RequestSet.src/M000135.html +0 -22
  141. data/doc/classes/Qbxml/RequestSet.src/M000136.html +0 -26
  142. data/doc/classes/Qbxml/RequestSet.src/M000137.html +0 -18
  143. data/doc/classes/Qbxml/RequestSet.src/M000138.html +0 -22
  144. data/doc/classes/Qbxml/Response.html +0 -302
  145. data/doc/classes/Qbxml/Response.src/M000123.html +0 -24
  146. data/doc/classes/Qbxml/Response.src/M000124.html +0 -19
  147. data/doc/classes/Qbxml/Response.src/M000125.html +0 -55
  148. data/doc/classes/Qbxml/Response.src/M000126.html +0 -18
  149. data/doc/classes/Qbxml/Response.src/M000127.html +0 -18
  150. data/doc/classes/Qbxml/Response.src/M000128.html +0 -18
  151. data/doc/classes/Qbxml/Response.src/M000129.html +0 -18
  152. data/doc/classes/Qbxml/Response.src/M000130.html +0 -18
  153. data/doc/classes/Qbxml/Response.src/M000131.html +0 -63
  154. data/doc/classes/Qbxml/ResponseSet.html +0 -244
  155. data/doc/classes/Qbxml/ResponseSet.src/M000116.html +0 -22
  156. data/doc/classes/Qbxml/ResponseSet.src/M000117.html +0 -26
  157. data/doc/classes/Qbxml/ResponseSet.src/M000118.html +0 -24
  158. data/doc/classes/Qbxml/ResponseSet.src/M000119.html +0 -20
  159. data/doc/classes/Qbxml/ResponseSet.src/M000120.html +0 -27
  160. data/doc/classes/Qbxml/ResponseSet.src/M000121.html +0 -18
  161. data/doc/classes/Qbxml/ResponseSet.src/M000122.html +0 -18
  162. data/doc/classes/Quickbooks.html +0 -196
  163. data/doc/classes/Quickbooks/Address.html +0 -139
  164. data/doc/classes/Quickbooks/Address.src/M000115.html +0 -19
  165. data/doc/classes/Quickbooks/Base.html +0 -567
  166. data/doc/classes/Quickbooks/Base.src/M000095.html +0 -18
  167. data/doc/classes/Quickbooks/Base.src/M000096.html +0 -20
  168. data/doc/classes/Quickbooks/Base.src/M000097.html +0 -19
  169. data/doc/classes/Quickbooks/Base.src/M000098.html +0 -18
  170. data/doc/classes/Quickbooks/Base.src/M000099.html +0 -19
  171. data/doc/classes/Quickbooks/Base.src/M000100.html +0 -30
  172. data/doc/classes/Quickbooks/Base.src/M000101.html +0 -22
  173. data/doc/classes/Quickbooks/Base.src/M000102.html +0 -30
  174. data/doc/classes/Quickbooks/Base.src/M000103.html +0 -19
  175. data/doc/classes/Quickbooks/Base.src/M000104.html +0 -19
  176. data/doc/classes/Quickbooks/Base.src/M000105.html +0 -18
  177. data/doc/classes/Quickbooks/Base.src/M000106.html +0 -18
  178. data/doc/classes/Quickbooks/Base.src/M000107.html +0 -19
  179. data/doc/classes/Quickbooks/Base.src/M000108.html +0 -18
  180. data/doc/classes/Quickbooks/Base.src/M000109.html +0 -45
  181. data/doc/classes/Quickbooks/Base.src/M000110.html +0 -18
  182. data/doc/classes/Quickbooks/Base.src/M000111.html +0 -18
  183. data/doc/classes/Quickbooks/Base.src/M000112.html +0 -20
  184. data/doc/classes/Quickbooks/BillAddress.html +0 -113
  185. data/doc/classes/Quickbooks/CreditCardInfo.html +0 -113
  186. data/doc/classes/Quickbooks/Customer.html +0 -113
  187. data/doc/classes/Quickbooks/CustomerTypeRef.html +0 -113
  188. data/doc/classes/Quickbooks/Deleted.html +0 -113
  189. data/doc/classes/Quickbooks/ItemSalesTaxRef.html +0 -113
  190. data/doc/classes/Quickbooks/JobTypeRef.html +0 -113
  191. data/doc/classes/Quickbooks/ListDeleted.html +0 -139
  192. data/doc/classes/Quickbooks/ListDeleted.src/M000114.html +0 -18
  193. data/doc/classes/Quickbooks/ListItem.html +0 -170
  194. data/doc/classes/Quickbooks/ListItem.src/M000093.html +0 -20
  195. data/doc/classes/Quickbooks/ListItem.src/M000094.html +0 -18
  196. data/doc/classes/Quickbooks/Model.html +0 -462
  197. data/doc/classes/Quickbooks/Model.src/M000073.html +0 -24
  198. data/doc/classes/Quickbooks/Model.src/M000074.html +0 -19
  199. data/doc/classes/Quickbooks/Model.src/M000075.html +0 -18
  200. data/doc/classes/Quickbooks/Model.src/M000076.html +0 -18
  201. data/doc/classes/Quickbooks/Model.src/M000077.html +0 -18
  202. data/doc/classes/Quickbooks/Model.src/M000078.html +0 -22
  203. data/doc/classes/Quickbooks/Model.src/M000079.html +0 -32
  204. data/doc/classes/Quickbooks/Model.src/M000080.html +0 -32
  205. data/doc/classes/Quickbooks/Model.src/M000081.html +0 -18
  206. data/doc/classes/Quickbooks/Model.src/M000082.html +0 -18
  207. data/doc/classes/Quickbooks/Model.src/M000083.html +0 -22
  208. data/doc/classes/Quickbooks/Model.src/M000084.html +0 -23
  209. data/doc/classes/Quickbooks/Model.src/M000085.html +0 -18
  210. data/doc/classes/Quickbooks/Model.src/M000086.html +0 -21
  211. data/doc/classes/Quickbooks/Model.src/M000087.html +0 -26
  212. data/doc/classes/Quickbooks/Model.src/M000088.html +0 -26
  213. data/doc/classes/Quickbooks/Model.src/M000089.html +0 -26
  214. data/doc/classes/Quickbooks/Model.src/M000090.html +0 -21
  215. data/doc/classes/Quickbooks/Model.src/M000091.html +0 -23
  216. data/doc/classes/Quickbooks/OleAdapter.html +0 -129
  217. data/doc/classes/Quickbooks/OleAdapter/Connection.html +0 -343
  218. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000058.html +0 -18
  219. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000059.html +0 -19
  220. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000060.html +0 -24
  221. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000061.html +0 -18
  222. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000062.html +0 -18
  223. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000063.html +0 -21
  224. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000064.html +0 -24
  225. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000065.html +0 -20
  226. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000066.html +0 -24
  227. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000067.html +0 -24
  228. data/doc/classes/Quickbooks/OleAdapter/Ole.html +0 -209
  229. data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000068.html +0 -21
  230. data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000069.html +0 -22
  231. data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000070.html +0 -18
  232. data/doc/classes/Quickbooks/ParentRef.html +0 -113
  233. data/doc/classes/Quickbooks/PreferredPaymentMethodRef.html +0 -113
  234. data/doc/classes/Quickbooks/PriceLevelRef.html +0 -113
  235. data/doc/classes/Quickbooks/QbxmlDebugAdapter.html +0 -111
  236. data/doc/classes/Quickbooks/QbxmlDebugAdapter/Connection.html +0 -139
  237. data/doc/classes/Quickbooks/QbxmlDebugAdapter/Connection.src/M000057.html +0 -18
  238. data/doc/classes/Quickbooks/Ref.html +0 -146
  239. data/doc/classes/Quickbooks/Ref.src/M000113.html +0 -18
  240. data/doc/classes/Quickbooks/SalesRepRef.html +0 -113
  241. data/doc/classes/Quickbooks/SalesTaxCodeRef.html +0 -113
  242. data/doc/classes/Quickbooks/ShipAddress.html +0 -113
  243. data/doc/classes/Quickbooks/TermsRef.html +0 -113
  244. data/doc/classes/Quickbooks/Transaction.html +0 -154
  245. data/doc/classes/Quickbooks/Transaction.src/M000071.html +0 -19
  246. data/doc/classes/Quickbooks/Transaction.src/M000072.html +0 -18
  247. data/doc/classes/Quickbooks/TxnDeleted.html +0 -139
  248. data/doc/classes/Quickbooks/TxnDeleted.src/M000092.html +0 -18
  249. data/doc/classes/String.html +0 -203
  250. data/doc/classes/String.src/M000052.html +0 -18
  251. data/doc/classes/String.src/M000053.html +0 -18
  252. data/doc/classes/String.src/M000054.html +0 -18
  253. data/doc/classes/String.src/M000055.html +0 -18
  254. data/doc/classes/String.src/M000056.html +0 -18
  255. data/doc/created.rid +0 -1
  256. data/doc/files/LICENSE.html +0 -129
  257. data/doc/files/README.html +0 -225
  258. data/doc/files/lib/qbxml/request_rb.html +0 -110
  259. data/doc/files/lib/qbxml/response_rb.html +0 -109
  260. data/doc/files/lib/qbxml/support_rb.html +0 -101
  261. data/doc/files/lib/qbxml_rb.html +0 -122
  262. data/doc/files/lib/quickbooks/adapters/ole_adapter_rb.html +0 -108
  263. data/doc/files/lib/quickbooks/adapters/qbxml_debug_adapter_rb.html +0 -108
  264. data/doc/files/lib/quickbooks/base_rb.html +0 -327
  265. data/doc/files/lib/quickbooks/model_rb.html +0 -108
  266. data/doc/files/lib/quickbooks/models/common/address_rb.html +0 -101
  267. data/doc/files/lib/quickbooks/models/common/all_refs_rb.html +0 -101
  268. data/doc/files/lib/quickbooks/models/customer/credit_card_info_rb.html +0 -101
  269. data/doc/files/lib/quickbooks/models/customer_rb.html +0 -110
  270. data/doc/files/lib/quickbooks/models/deleted_rb.html +0 -101
  271. data/doc/files/lib/quickbooks/models/list_item_rb.html +0 -101
  272. data/doc/files/lib/quickbooks/models/transaction_rb.html +0 -101
  273. data/doc/files/lib/quickbooks/ruby_magic_rb.html +0 -120
  274. data/doc/files/lib/quickbooks_rb.html +0 -125
  275. data/doc/fr_class_index.html +0 -64
  276. data/doc/fr_file_index.html +0 -45
  277. data/doc/fr_method_index.html +0 -164
  278. data/doc/index.html +0 -24
  279. data/doc/rdoc-style.css +0 -208
  280. data/lib/qbxml.rb +0 -3
  281. data/lib/qbxml/request.rb +0 -207
  282. data/lib/qbxml/response.rb +0 -197
  283. data/lib/qbxml/support.rb +0 -130
  284. data/lib/quickbooks/adapters/qbxml_debug_adapter.rb +0 -10
  285. data/lib/quickbooks/base.rb +0 -277
  286. data/lib/quickbooks/models/common/address.rb +0 -14
  287. data/lib/quickbooks/models/common/all_refs.rb +0 -37
  288. data/lib/quickbooks/models/customer.rb +0 -70
  289. data/lib/quickbooks/models/customer/credit_card_info.rb +0 -5
  290. data/lib/quickbooks/models/deleted.rb +0 -22
  291. data/lib/quickbooks/models/list_item.rb +0 -41
  292. data/lib/quickbooks/models/transaction.rb +0 -49
  293. data/lib/quickbooks/ruby_magic.rb +0 -213
@@ -0,0 +1,160 @@
1
+
2
+ <!-- ============================================================================= -->
3
+ <!-- qbXML version 3.0 -->
4
+ <!-- -->
5
+ <!-- -->
6
+ <!-- Unpublished work. INTUIT CONFIDENTIAL. -->
7
+ <!-- Copyright 2001 Intuit Inc. All rights reserved. -->
8
+ <!-- -->
9
+ <!-- Use is subject to a qbXML Developer Agreement available at: -->
10
+ <!-- http://developer.intuit.com/legal/qbXML_021201.asp -->
11
+ <!-- and the terms specified at: -->
12
+ <!-- http://developer.intuit.com/legal/devsite_tos.html -->
13
+ <!-- -->
14
+ <!-- NOTICE: THE API IS A PRELIMINARY SPECIFICATION, AND IS SUBJECT TO CHANGE. -->
15
+ <!-- IT IS NOT FOR USE IN PRODUCTION. ANY USE OF THE API -->
16
+ <!-- IS AT YOUR OWN RISK. -->
17
+ <!-- -->
18
+ <!-- ============================================================================= -->
19
+ <!-- -->
20
+ <!-- qbxmltypes.xsd -->
21
+ <!-- -->
22
+ <!-- Unpublished work. INTUIT CONFIDENTIAL. -->
23
+ <!-- Copyright 2001 Intuit Inc. All rights reserved. -->
24
+ <!-- Use is subject to the terms specified at: -->
25
+ <!-- http://developer.intuit.com/legal/devsite_tos.html -->
26
+ <!-- -->
27
+ <!-- ============================================================================= -->
28
+
29
+ <xsd:schema xmlns:xsd="http://www.w3.org/2001/XMLSchema" elementFormDefault="qualified">
30
+
31
+ <xsd:simpleType name="IDTYPE">
32
+ <xsd:restriction base="xsd:string">
33
+ <xsd:maxLength value="36"/>
34
+ </xsd:restriction>
35
+ </xsd:simpleType>
36
+
37
+ <xsd:simpleType name="STRTYPE">
38
+ <xsd:restriction base="xsd:string">
39
+ </xsd:restriction>
40
+ </xsd:simpleType>
41
+
42
+ <xsd:simpleType name="BOOLTYPE">
43
+ <xsd:union>
44
+ <xsd:simpleType>
45
+ <xsd:restriction base="xsd:boolean">
46
+ </xsd:restriction>
47
+ </xsd:simpleType>
48
+ <xsd:simpleType>
49
+ <xsd:restriction base="xsd:token">
50
+ <xsd:enumeration value=""/>
51
+ </xsd:restriction>
52
+ </xsd:simpleType>
53
+ </xsd:union>
54
+ </xsd:simpleType>
55
+
56
+ <xsd:simpleType name="DATETYPE">
57
+ <xsd:union>
58
+ <xsd:simpleType>
59
+ <xsd:restriction base="xsd:date">
60
+ </xsd:restriction>
61
+ </xsd:simpleType>
62
+ <xsd:simpleType>
63
+ <xsd:restriction base="xsd:token">
64
+ <xsd:enumeration value=""/>
65
+ </xsd:restriction>
66
+ </xsd:simpleType>
67
+ </xsd:union>
68
+ </xsd:simpleType>
69
+
70
+ <xsd:simpleType name="DATETIMETYPE">
71
+ <xsd:union>
72
+ <xsd:simpleType>
73
+ <xsd:restriction base="xsd:string">
74
+ <xsd:pattern value="([0-9]{4}\-[0-9]{1,2}\-[0-9]{1,2}(T[0-9]{1,2}(:[0-9]{1,2}(:[0-9]{1,2}([+\-]{1}[0-9]{1,2}:[0-9]{1,2})?)?)?)?)?" />
75
+ </xsd:restriction>
76
+ </xsd:simpleType>
77
+ <xsd:simpleType>
78
+ <xsd:restriction base="xsd:token">
79
+ <xsd:enumeration value=""/>
80
+ </xsd:restriction>
81
+ </xsd:simpleType>
82
+ </xsd:union>
83
+ </xsd:simpleType>
84
+
85
+ <xsd:simpleType name="TIMEINTERVALTYPE">
86
+ <xsd:union>
87
+ <xsd:simpleType>
88
+ <xsd:restriction base="xsd:duration">
89
+ <xsd:pattern value="PT([0-9]+H)?([0-9]+M)?([0-9]+S)?" />
90
+ </xsd:restriction>
91
+ </xsd:simpleType>
92
+ <xsd:simpleType>
93
+ <xsd:restriction base="xsd:token">
94
+ <xsd:enumeration value=""/>
95
+ </xsd:restriction>
96
+ </xsd:simpleType>
97
+ </xsd:union>
98
+ </xsd:simpleType>
99
+
100
+ <xsd:simpleType name="AMTTYPE">
101
+ <xsd:restriction base="xsd:string">
102
+ <xsd:pattern value="([+\-]?[0-9]{1,8}\.[0-9]{2})?"/>
103
+ </xsd:restriction>
104
+ </xsd:simpleType>
105
+
106
+ <xsd:simpleType name="PRICETYPE">
107
+ <xsd:restriction base="xsd:string">
108
+ <xsd:pattern value="([+\-]?[0-9]{1,7}\.[0-9]{1,5})?|([+\-]?[0-9]{1,8}\.[0-9]{1,2})?|([+\-]?[0-9]{1,8})?" />
109
+ </xsd:restriction>
110
+ </xsd:simpleType>
111
+
112
+ <xsd:simpleType name="QUANTYPE">
113
+ <xsd:restriction base="xsd:string">
114
+ <xsd:pattern value="([+\-]?[0-9]{1,7}(\.[0-9]{1,5})?)?"/>
115
+ </xsd:restriction>
116
+ </xsd:simpleType>
117
+
118
+ <xsd:simpleType name="PERCENTTYPE">
119
+ <xsd:restriction base="xsd:string">
120
+ <xsd:pattern value="([+\-]?[0-9]{1,7}(\.[0-9]{1,5})?)?"/>
121
+ </xsd:restriction>
122
+ </xsd:simpleType>
123
+
124
+ <xsd:simpleType name="ENUMTYPE">
125
+ <xsd:restriction base="xsd:string">
126
+ </xsd:restriction>
127
+ </xsd:simpleType>
128
+
129
+ <xsd:simpleType name="INTTYPE">
130
+ <xsd:restriction base="xsd:integer">
131
+ </xsd:restriction>
132
+ </xsd:simpleType>
133
+
134
+ <xsd:simpleType name="GUIDTYPE">
135
+ <xsd:restriction base="xsd:string">
136
+ <xsd:pattern value="0|(\{[0-9a-fA-F]{8}(\-([0-9a-fA-F]{4})){3}\-[0-9a-fA-F]{12}\})"/>
137
+ </xsd:restriction>
138
+ </xsd:simpleType>
139
+
140
+ <xsd:simpleType name="MACROTYPE">
141
+ <xsd:restriction base="xsd:string">
142
+ </xsd:restriction>
143
+ </xsd:simpleType>
144
+
145
+ <xsd:simpleType name="FLOATTYPE">
146
+ <xsd:union>
147
+ <xsd:simpleType>
148
+ <xsd:restriction base="xsd:decimal">
149
+ </xsd:restriction>
150
+ </xsd:simpleType>
151
+ <xsd:simpleType>
152
+ <xsd:restriction base="xsd:token">
153
+ <xsd:enumeration value=""/>
154
+ </xsd:restriction>
155
+ </xsd:simpleType>
156
+ </xsd:union>
157
+ </xsd:simpleType>
158
+
159
+
160
+ </xsd:schema>
@@ -0,0 +1,5 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "associations" do
4
+ it "should ..."
5
+ end
@@ -0,0 +1,8 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "element collections" do
4
+ it "should assign an element collection to all repeatable elements" do
5
+ q = QB::SalesOrder.new(:SalesOrderLine => [{}])
6
+ q[:SalesOrderLine].should be_is_a(ElementCollection)
7
+ end
8
+ end
@@ -0,0 +1,30 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "find elements" do
4
+ it "should find SalesOrderAdd/SalesOrderLineAdd" do
5
+ QB.xsd['SalesOrderAdd'].find('SalesOrderLineAdd').name.should eql('SalesOrderLineAdd')
6
+ end
7
+ it "should recognize DataEventSubscriptionAdd/ListEventSubscription" do
8
+ QB.xsd['DataEventSubscriptionAdd'].find('DeliverOwnEvents').name.should eql('DeliverOwnEvents')
9
+ QB.xsd['DataEventSubscriptionAdd'].find('ListEventSubscription').name.should eql('ListEventSubscription')
10
+ end
11
+ it "should recognize QBXMLMsgsRq/HostQueryRq" do
12
+ QB.xsd['QBXMLMsgsRq'].find('HostQueryRq').name.should eql('HostQueryRq')
13
+ end
14
+ it "should recognize TermsQueryRsType/DateDrivenTermsRet" do
15
+ QB.xsd.types['TermsQueryRsType'].find('DateDrivenTermsRet').name.should eql('DateDrivenTermsRet')
16
+ end
17
+ it "should still work after using gsub" do
18
+ QB.xsd['DataEventSubscriptionAdd'].find('DeliverOwnEvents').should_not be_nil
19
+ newstuff = QB.xsd['DataEventSubscriptionAdd'].gsub(/Events/,'Evans')
20
+ newstuff.find('DeliverOwnEvans').should_not be_nil
21
+ QB.xsd['DataEventSubscriptionAdd'].find('DeliverOwnEvents').should_not be_nil
22
+ end
23
+ end
24
+
25
+ describe "gsub test" do
26
+ it "should gsub all names" do
27
+ QB.xsd['CustomerRet'].gsub!(/Ret$/,'RRet').find('DataExtRRet').should_not be_nil
28
+ QB.xsd['CustomerRet'].gsub(/RRet$/,'').find('DataExt').should_not be_nil
29
+ end
30
+ end
@@ -0,0 +1,83 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Quickbooks::Element do
4
+ it 'should enumerate the associations properly' do
5
+ pending "associations"
6
+ QB::SalesOrderMod.associations.should include('Class')
7
+ QB::SalesOrderMod.associations.should include('CustomerMsg')
8
+ QB::SalesOrderMod.associations.should include('Customer')
9
+ QB::SalesOrderMod.associations.should include('CustomerSalesTaxCode')
10
+ QB::SalesOrderMod.associations.should include('ItemSalesTax')
11
+ QB::SalesOrderMod.associations.should include('SalesRep')
12
+ QB::SalesOrderMod.associations.should include('ShipMethod')
13
+ QB::SalesOrderMod.associations.should include('Template')
14
+ QB::SalesOrderMod.associations.should include('Terms')
15
+ QB::SalesOrderMod.associations.length.should eql(9)
16
+ end
17
+
18
+ it 'should define working association accessor methods' do
19
+ pending "associations"
20
+ # pending 'make the methods auto-generate: read will auto-load the associated object, if one not already attached; write will simply attach associated object.'
21
+ so = QB::SalesOrderMod.new
22
+ so[:Customer].should eql(nil)
23
+ so[:Customer] = QB::Customer.new
24
+ so[:Customer].should be_is_a(QB::Customer)
25
+ end
26
+
27
+ it 'should grab the associated member when the corresponding ref has a value' do
28
+ pending "associations"
29
+ so = QB::SalesOrderMod.new
30
+ so[:Customer].should eql(nil)
31
+ so[:CustomerRef] = {:FullName => 'Tom Jones'}
32
+ Quickbooks.use_adapter(:spew)
33
+ so[:Customer].should eql("<?xml version=\"1.0\" ?>\n<?qbxml version=\"6.0\" ?>\n<QBXML>\n <QBXMLMsgsRq onError=\"stopOnError\">\n <CustomerQueryRq>\n <FullName>Tom Jones</FullName>\n </CustomerQueryRq>\n </QBXMLMsgsRq>\n</QBXML>")
34
+ Quickbooks.use_adapter(:test)
35
+ end
36
+
37
+ it 'should update the corresponding ref when the association attribute is updated' do
38
+ pending "associations"
39
+ so = QB::SalesOrderMod.new
40
+ # Should blank the ref if there is none
41
+ so[:Customer] = QB::Customer.new
42
+ so[:CustomerRef].should eql(nil)
43
+ # Should assign the ref if there is one
44
+ so[:Customer] = QB::Customer.instantiate(:ListID => '12345')
45
+ so[:CustomerRef].should be_is_a(QB::CustomerRef)
46
+ so[:CustomerRef][:ListID].to_s.should eql('12345')
47
+ end
48
+
49
+ it 'should create dependent associated records before saving current record, if possible' do
50
+ pending "associations"
51
+ so = QB::SalesOrderMod.new
52
+ so[:Customer] = QB::Customer.new(:Name => 'Joe Smith')
53
+ so[:SalesOrderLine] = [{:Item => QB::ItemInventory.new(
54
+ :Name => 'Some Item',
55
+ :IncomeAccountRef => {:FullName => 'Sales'},
56
+ :AssetAccountRef => {:FullName => 'Inventory Asset'},
57
+ :COGSAccountRef => {:FullName => 'Cost of Goods Sold'},
58
+ :SalesPrice => '25.00',
59
+ :Inactive => true
60
+ )}]
61
+ # Save the Customer
62
+ Quickbooks.connection.next_response("<QBXML>
63
+ <QBXMLMsgsRs>
64
+ <CustomerAddRs>
65
+ <CustomerRet>
66
+ <ListID>12479-02920</ListID>
67
+ </CustomerRet>
68
+ </CustomerAddRs>
69
+ </QBXMLMsgsRs>
70
+ </QBXML>")
71
+ # Save the ItemInventory
72
+ Quickbooks.connection.next_response("<QBXML>
73
+ <QBXMLMsgsRs>
74
+ <ItemInventoryAddRs>
75
+ <ItemInventoryRet>
76
+ <ListID>12479-02920</ListID>
77
+ </ItemInventoryRet>
78
+ </ItemInventoryAddRs>
79
+ </QBXMLMsgsRs>
80
+ </QBXML>")
81
+ so.save_associations # Should save Customer and Item
82
+ end
83
+ end
@@ -0,0 +1,14 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe QB::SalesOrderAdd do
4
+ it "should validate nicely" do
5
+ # Need to determine how to manage elements in models where something like SalesOrderLineAdd is required,
6
+ # but we should be using a SalesOrderLine.
7
+ s = QB::SalesOrderAdd.new(:CustomerRef => {:ListID => '12345'})
8
+ s.should_not be_valid
9
+ lambda { s[:SalesOrderLineAdd] = {} }.should raise_error(RuntimeError)
10
+ s.should_not be_valid
11
+ s.errors.should include("missing required element either of (SalesOrderLineAdd, SalesOrderLineGroupAdd)")
12
+ lambda { s[:SalesOrderLineAdd] = [{}] }.should_not raise_error
13
+ end
14
+ end
@@ -0,0 +1,78 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ module QB
4
+ describe VendorAdd do
5
+ after(:each) {$DEBUG = nil}
6
+
7
+ it "should instantiate a VendorAdd object and validate it" do
8
+ va = VendorAdd.new
9
+ va.valid?.should eql(false)
10
+ va = VendorAdd.new(:Name => 'Herman')
11
+ va.should be_valid
12
+ end
13
+
14
+ it "should be able to set attributes" do
15
+ va = VendorAdd.new
16
+ va[:Name] = 'Herman'
17
+ va[:Name].should eql('Herman')
18
+ end
19
+
20
+ it "should render attributes in the correct order" do
21
+ va = VendorAdd.new(:IsActive => true, :Name => 'Herman', :Salutation => 'Mr. Sir', :Phone => '(123) 456-7890')
22
+ va.attributes.collect {|a| a.class.short_name}.should eql(['Name', 'IsActive', 'Salutation', 'Phone'])
23
+ end
24
+
25
+ it "should be able to assign an attribute twice and retain only the new value" do
26
+ va = VendorAdd.new(:Name => 'Herman')
27
+ va[:Name] = 'Herbert'
28
+ va[:Name].should eql('Herbert')
29
+ va.attributes.select {|a| a.class == va[:Name].class}.length.should eql(1)
30
+ end
31
+
32
+ it "should initialize attributes as arrays also" do
33
+ va = VendorAdd.new([Quickbooks.get_constant('Name').new('Herman'), Quickbooks.get_constant('IsActive').new(true), Quickbooks.get_constant('Salutation').new('Mr. Sir'), Quickbooks.get_constant('Phone').new('(123) 456-7890')])
34
+ va[:Name].should eql('Herman')
35
+ end
36
+
37
+ it "should mark dirty attributes in the record attribute assignment" do
38
+ va = VendorAdd.send(:instantiate, :Name => 'Herman')
39
+ va[:Name].dirty?.should eql(false)
40
+ va[:Name].downcase!
41
+ va[:Name].should be_dirty
42
+ end
43
+
44
+ it "should notice attribute values as dirty when they are modified (mutable values)" do
45
+ va = VendorAdd.send(:instantiate, :Name => 'Herman')
46
+ va[:Name].dirty?.should eql(false)
47
+ va[:Name] = 'Herbert'
48
+ va[:Name].should be_dirty
49
+ end
50
+
51
+ it ":dirty_attributes should operate correctly" do
52
+ va = VendorAdd.send(:instantiate, :Name => 'Herman')
53
+ va[:Name] = 'Herbert'
54
+ va.dirty_attributes.inspect.should eql([va[:Name]].inspect)
55
+ end
56
+
57
+ it "should be able to serialize to_xml" do
58
+ va = VendorAdd.new(:Name => 'Herman', :IsActive => true, :Salutation => 'Mr. Sir', :Phone => '(123) 456-7890')
59
+ va.to_xml.should eql("<VendorAdd>\n <Name>Herman</Name>\n <IsActive>true</IsActive>\n <Salutation>Mr. Sir</Salutation>\n <Phone>(123) 456-7890</Phone>\n</VendorAdd>")
60
+ end
61
+
62
+ it "should be able to serialize to_dirty_xml" do
63
+ va = VendorAdd.new(:Name => 'Herman', :IsActive => true, :Salutation => 'Mr. Sir', :Phone => '(123) 456-7890')
64
+ va.to_dirty_xml.should eql("<VendorAdd>\n <Name>Herman</Name>\n <IsActive>true</IsActive>\n <Salutation>Mr. Sir</Salutation>\n <Phone>(123) 456-7890</Phone>\n</VendorAdd>")
65
+ va.send(:clean!) # inject to manually make it clean
66
+ va[:Name] += " Wonders"
67
+ va.to_dirty_xml.should eql("<VendorAdd>\n <Name>Herman Wonders</Name>\n</VendorAdd>")
68
+ end
69
+
70
+ it "should include required elements with the dirty ones" do
71
+ va = VendorAdd.new(:Name => 'Herman', :IsActive => true, :Salutation => 'Mr. Sir', :Phone => '(123) 456-7890')
72
+ va.send(:clean!) # inject to manually make it clean
73
+ va[:IsActive] = false
74
+ # Name is included because it is a required element, and we passed true into to_dirty_xml
75
+ va.to_dirty_xml(true).should eql("<VendorAdd>\n <Name>Herman</Name>\n <IsActive>false</IsActive>\n</VendorAdd>")
76
+ end
77
+ end
78
+ end
@@ -0,0 +1,89 @@
1
+ require File.dirname(__FILE__) + '/../../spec_helper'
2
+
3
+ describe Quickbooks::Model do
4
+ it 'should enumerate the associations properly' do
5
+ QB::SalesOrder.associations.should include(:Class)
6
+ QB::SalesOrder.associations.should include(:CustomerMsg)
7
+ QB::SalesOrder.associations.should include(:Customer)
8
+ QB::SalesOrder.associations.should include(:CustomerSalesTaxCode)
9
+ QB::SalesOrder.associations.should include(:ItemSalesTax)
10
+ QB::SalesOrder.associations.should include(:SalesRep)
11
+ QB::SalesOrder.associations.should include(:ShipMethod)
12
+ QB::SalesOrder.associations.should include(:Template)
13
+ QB::SalesOrder.associations.should include(:Terms)
14
+ QB::SalesOrder.associations.reject {|k,p| !p.addable?}.length.should eql(9)
15
+ end
16
+
17
+ it 'should define working association accessor methods' do
18
+ # pending 'make the methods auto-generate: read will auto-load the associated object, if one not already attached; write will simply attach associated object.'
19
+ so = QB::SalesOrder.new
20
+ so[:Customer].should eql(nil)
21
+ so[:Customer] = QB::Customer.new
22
+ so[:Customer].should be_is_a(QB::Customer)
23
+ end
24
+
25
+ it 'should grab the associated member when the corresponding ref has a value' do
26
+ pending "associations"
27
+ so = QB::SalesOrder.new
28
+ so[:Customer].should eql(nil)
29
+ so[:CustomerRef] = {:FullName => 'Tom Jones'}
30
+ Quickbooks.use_adapter(:spew)
31
+ so[:Customer].should eql("<?xml version=\"1.0\" ?>\n<?qbxml version=\"6.0\" ?>\n<QBXML>\n <QBXMLMsgsRq onError=\"stopOnError\">\n <CustomerQueryRq>\n <FullName>Tom Jones</FullName>\n </CustomerQueryRq>\n </QBXMLMsgsRq>\n</QBXML>")
32
+ Quickbooks.use_adapter(:test)
33
+ end
34
+
35
+ it 'should update the corresponding ref when the association attribute is updated' do
36
+ so = QB::SalesOrder.new
37
+ # Should blank the ref if there is none
38
+ so[:Customer] = QB::Customer.new
39
+ so[:CustomerRef].should eql(nil)
40
+ # Should assign the ref if there is one
41
+ so[:Customer] = QB::Customer.instantiate(:ListID => '12345')
42
+ so[:CustomerRef].should be_is_a(QB::CustomerRef)
43
+ so[:CustomerRef][:ListID].to_s.should eql('12345')
44
+ end
45
+
46
+ it 'should create dependent associated records before saving current record, if possible' do
47
+ so = QB::SalesOrder.new
48
+ so[:Customer] = QB::Customer.new(:Name => 'Joe Smith')
49
+ so[:SalesOrderLine] = [
50
+ {:Item => QB::ItemInventory.new(
51
+ :Name => 'Some Item',
52
+ :IncomeAccountRef => {:FullName => 'Sales'},
53
+ :AssetAccountRef => {:FullName => 'Inventory Asset'},
54
+ :COGSAccountRef => {:FullName => 'Cost of Goods Sold'},
55
+ :SalesPrice => '25.00',
56
+ :IsActive => false)}
57
+ ]
58
+ # Should save Customer, then Item, then SalesOrder
59
+ Quickbooks.use_adapter(:test)
60
+ Quickbooks.connection.next_response("<QBXML>
61
+ <QBXMLMsgsRs>
62
+ <CustomerAddRs>
63
+ <CustomerRet>
64
+ <ListID>12479-02920</ListID>
65
+ </CustomerRet>
66
+ </CustomerAddRs>
67
+ </QBXMLMsgsRs>
68
+ </QBXML>")
69
+ Quickbooks.connection.next_response("<QBXML>
70
+ <QBXMLMsgsRs>
71
+ <ItemInventoryAddRs>
72
+ <ItemInventoryRet>
73
+ <ListID>12479-02921</ListID>
74
+ </ItemInventoryRet>
75
+ </ItemInventoryAddRs>
76
+ </QBXMLMsgsRs>
77
+ </QBXML>")
78
+ Quickbooks.connection.next_response("<QBXML>
79
+ <QBXMLMsgsRs>
80
+ <SalesOrderAddRs>
81
+ <SalesOrderRet>
82
+ <TxnID>12479-02922</TxnID>
83
+ </SalesOrderRet>
84
+ </SalesOrderAddRs>
85
+ </QBXMLMsgsRs>
86
+ </QBXML>")
87
+ so.save
88
+ end
89
+ end