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,52 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe QB::Customer do
4
+ before(:all) { Quickbooks.use_adapter(:test) }
5
+ before(:each) { $DEBUG = nil }
6
+
7
+ it "should generate a proper query for quickbooks to retrieve a Customer by ListID" do
8
+ Quickbooks.connection.next_response("<QBXML><QBXMLMsgsRs><CustomerQueryRs>\n <CustomerRet>\n <ListID>12345</ListID>\n <TimeCreated>#{Time.now.xmlschema}</TimeCreated>\n <TimeModified>#{Time.now.xmlschema}</TimeModified>\n <EditSequence>2348761234</EditSequence>\n <Name>Joe Schmoe</Name>\n <FullName>Schmoe, Joe</FullName>\n <IsActive>true</IsActive>\n <CompanyName>Schmoe's Camping</CompanyName>\n <Salutation>Mr.</Salutation>\n <FirstName>Joe</FirstName>\n <LastName>Schmoe</LastName>\n <Suffix>Jr.</Suffix>\n <BillAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </BillAddress>\n <Phone>(554) 682-2291</Phone>\n <SalesTaxCodeRef>\n <ListID>2983723</ListID>\n <FullName>foo</FullName>\n </SalesTaxCodeRef>\n <SalesTaxCountry>USA</SalesTaxCountry>\n <CreditLimit>500</CreditLimit>\n <CreditCardInfo>\n <CreditCardNumber>9898-1323-9882-9918</CreditCardNumber>\n <ExpirationMonth>8</ExpirationMonth>\n <ExpirationYear>2010</ExpirationYear>\n <NameOnCard>Joe E. Schmoe</NameOnCard>\n <CreditCardAddress>999 Some Rd, Other City, TX</CreditCardAddress>\n <CreditCardPostalCode>88888</CreditCardPostalCode>\n </CreditCardInfo>\n <Notes>This is a test record, do not consider all values as possible values from Quickbooks.</Notes>\n <DeliveryMethod>Email</DeliveryMethod>\n <DataExtRet>\n <OwnerID>293861</OwnerID>\n <DataExtName>happiness level</DataExtName>\n <DataExtType>INTTYPE</DataExtType>\n <DataExtValue>7</DataExtValue>\n </DataExtRet>\n <DataExtRet>\n <OwnerID>293823</OwnerID>\n <DataExtName>sadness level</DataExtName>\n <DataExtType>INTTYPE</DataExtType>\n <DataExtValue>4</DataExtValue>\n </DataExtRet>\n </CustomerRet>\n</CustomerQueryRs></QBXMLMsgsRs></QBXML>") do |request_xml|
9
+ called = true
10
+ request_xml.should eql("<?xml version=\"1.0\" ?>\n<?qbxml version=\"6.0\" ?>\n<QBXML>\n <QBXMLMsgsRq onError=\"stopOnError\">\n <CustomerQueryRq>\n <MaxReturned>1</MaxReturned>\n </CustomerQueryRq>\n </QBXMLMsgsRq>\n</QBXML>")
11
+ end
12
+ QB::Customer.first.should be_is_a(QB::Customer)
13
+ end
14
+
15
+ it "should not allow me to save an invalid object" do
16
+ a = QB::Customer.new
17
+ a.should_not be_valid
18
+ lambda { a.save }.should raise_error(Quickbooks::ValidationError)
19
+ a[:Name] = "Hobo"
20
+ lambda { a.save }.should_not raise_error(Quickbooks::ValidationError)
21
+ end
22
+
23
+ it "should reload the object from Quickbooks when it saves" do
24
+ Quickbooks.connection.next_response("<QBXML><QBXMLMsgsRs><CustomerQueryRs>\n <CustomerRet>\n <ListID>12345</ListID>\n <TimeCreated>#{Time.now.xmlschema}</TimeCreated>\n <TimeModified>#{Time.now.xmlschema}</TimeModified>\n <EditSequence>2348761234</EditSequence>\n <Name>Joe Schmoe</Name>\n <FullName>Schmoe, Joe</FullName>\n <IsActive>true</IsActive>\n <CompanyName>Schmoe's Camping</CompanyName>\n <Salutation>Mr.</Salutation>\n <FirstName>Joe</FirstName>\n <LastName>Schmoe</LastName>\n <Suffix>Jr.</Suffix>\n <BillAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </BillAddress>\n <Phone>(554) 682-2291</Phone>\n <SalesTaxCodeRef>\n <ListID>2983723</ListID>\n <FullName>foo</FullName>\n </SalesTaxCodeRef>\n <SalesTaxCountry>USA</SalesTaxCountry>\n <CreditLimit>500</CreditLimit>\n <CreditCardInfo>\n <CreditCardNumber>9898-1323-9882-9918</CreditCardNumber>\n <ExpirationMonth>8</ExpirationMonth>\n <ExpirationYear>2010</ExpirationYear>\n <NameOnCard>Joe E. Schmoe</NameOnCard>\n <CreditCardAddress>999 Some Rd, Other City, TX</CreditCardAddress>\n <CreditCardPostalCode>88888</CreditCardPostalCode>\n </CreditCardInfo>\n <Notes>This is a test record, do not consider all values as possible values from Quickbooks.</Notes>\n <DeliveryMethod>Email</DeliveryMethod>\n <DataExtRet>\n <OwnerID>293861</OwnerID>\n <DataExtName>happiness level</DataExtName>\n <DataExtType>INTTYPE</DataExtType>\n <DataExtValue>7</DataExtValue>\n </DataExtRet>\n <DataExtRet>\n <OwnerID>293823</OwnerID>\n <DataExtName>sadness level</DataExtName>\n <DataExtType>INTTYPE</DataExtType>\n <DataExtValue>4</DataExtValue>\n </DataExtRet>\n </CustomerRet>\n</CustomerQueryRs></QBXMLMsgsRs></QBXML>")
25
+ a = QB::Customer.first
26
+ b = QB::Customer.first
27
+ a[:IsActive] = false
28
+ Quickbooks.connection.next_response("<QBXML><QBXMLMsgsRs><CustomerModRs>\n <CustomerRet>\n <ListID>12345</ListID>\n <TimeCreated>#{Time.now.xmlschema}</TimeCreated>\n <TimeModified>#{Time.now.xmlschema}</TimeModified>\n <EditSequence>2348761234</EditSequence>\n <Name>Joe Schmoe</Name>\n <FullName>Schmoe, Joe</FullName>\n <IsActive>false</IsActive>\n <CompanyName>Schmoe's Camping</CompanyName>\n <Salutation>Mr.</Salutation>\n <FirstName>Joe</FirstName>\n <LastName>Schmoe</LastName>\n <Suffix>Jr.</Suffix>\n <BillAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </BillAddress>\n <Phone>(554) 682-2291</Phone>\n <SalesTaxCodeRef>\n <ListID>2983723</ListID>\n <FullName>foo</FullName>\n </SalesTaxCodeRef>\n <SalesTaxCountry>USA</SalesTaxCountry>\n <CreditLimit>500</CreditLimit>\n <CreditCardInfo>\n <CreditCardNumber>9898-1323-9882-9918</CreditCardNumber>\n <ExpirationMonth>8</ExpirationMonth>\n <ExpirationYear>2010</ExpirationYear>\n <NameOnCard>Joe E. Schmoe</NameOnCard>\n <CreditCardAddress>999 Some Rd, Other City, TX</CreditCardAddress>\n <CreditCardPostalCode>88888</CreditCardPostalCode>\n </CreditCardInfo>\n <Notes>This is a test record, do not consider all values as possible values from Quickbooks.</Notes>\n <DeliveryMethod>Email</DeliveryMethod>\n <DataExtRet>\n <OwnerID>293861</OwnerID>\n <DataExtName>happiness level</DataExtName>\n <DataExtType>INTTYPE</DataExtType>\n <DataExtValue>7</DataExtValue>\n </DataExtRet>\n <DataExtRet>\n <OwnerID>293823</OwnerID>\n <DataExtName>sadness level</DataExtName>\n <DataExtType>INTTYPE</DataExtType>\n <DataExtValue>4</DataExtValue>\n </DataExtRet>\n </CustomerRet>\n</CustomerModRs></QBXMLMsgsRs></QBXML>")
29
+ a.save
30
+ b[:Suffix] = ''
31
+ Quickbooks.connection.next_response("<QBXML><QBXMLMsgsRs><CustomerModRs>\n <CustomerRet>\n <ListID>12345</ListID>\n <TimeCreated>#{Time.now.xmlschema}</TimeCreated>\n <TimeModified>#{Time.now.xmlschema}</TimeModified>\n <EditSequence>2348761234</EditSequence>\n <Name>Joe Schmoe</Name>\n <FullName>Schmoe, Joe</FullName>\n <IsActive>false</IsActive>\n <CompanyName>Schmoe's Camping</CompanyName>\n <Salutation>Mr.</Salutation>\n <FirstName>Joe</FirstName>\n <LastName>Schmoe</LastName>\n <Suffix></Suffix>\n <BillAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </BillAddress>\n <Phone>(554) 682-2291</Phone>\n <SalesTaxCodeRef>\n <ListID>2983723</ListID>\n <FullName>foo</FullName>\n </SalesTaxCodeRef>\n <SalesTaxCountry>USA</SalesTaxCountry>\n <CreditLimit>500</CreditLimit>\n <CreditCardInfo>\n <CreditCardNumber>9898-1323-9882-9918</CreditCardNumber>\n <ExpirationMonth>8</ExpirationMonth>\n <ExpirationYear>2010</ExpirationYear>\n <NameOnCard>Joe E. Schmoe</NameOnCard>\n <CreditCardAddress>999 Some Rd, Other City, TX</CreditCardAddress>\n <CreditCardPostalCode>88888</CreditCardPostalCode>\n </CreditCardInfo>\n <Notes>This is a test record, do not consider all values as possible values from Quickbooks.</Notes>\n <DeliveryMethod>Email</DeliveryMethod>\n <DataExtRet>\n <OwnerID>293861</OwnerID>\n <DataExtName>happiness level</DataExtName>\n <DataExtType>INTTYPE</DataExtType>\n <DataExtValue>7</DataExtValue>\n </DataExtRet>\n <DataExtRet>\n <OwnerID>293823</OwnerID>\n <DataExtName>sadness level</DataExtName>\n <DataExtType>INTTYPE</DataExtType>\n <DataExtValue>4</DataExtValue>\n </DataExtRet>\n </CustomerRet>\n</CustomerModRs></QBXMLMsgsRs></QBXML>")
32
+ b.save
33
+ b[:IsActive].to_s.should eql('false')
34
+ end
35
+
36
+ it "should generate a proper query for quickbooks to retrieve a Customer by FullName" do
37
+ Quickbooks.connection.next_response("<QBXML><QBXMLMsgsRs><CustomerQueryRs>\n <CustomerRet>\n <ListID>12345</ListID>\n <TimeCreated>#{Time.now.xmlschema}</TimeCreated>\n <TimeModified>#{Time.now.xmlschema}</TimeModified>\n <EditSequence>2348761234</EditSequence>\n <Name>Joe Schmoe</Name>\n <FullName>Bob</FullName>\n <IsActive>true</IsActive>\n <CompanyName>Schmoe's Camping</CompanyName>\n <Salutation>Mr.</Salutation>\n <FirstName>Joe</FirstName>\n <LastName>Schmoe</LastName>\n <Suffix>Jr.</Suffix>\n <BillAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </BillAddress>\n <Phone>(554) 682-2291</Phone>\n <SalesTaxCodeRef>\n <ListID>2983729</ListID>\n <FullName>foo</FullName>\n </SalesTaxCodeRef>\n <SalesTaxCountry>USA</SalesTaxCountry>\n <CreditLimit>500</CreditLimit>\n <CreditCardInfo>\n <CreditCardNumber>9898-1323-9882-9918</CreditCardNumber>\n <ExpirationMonth>8</ExpirationMonth>\n <ExpirationYear>2010</ExpirationYear>\n <NameOnCard>Joe E. Schmoe</NameOnCard>\n <CreditCardAddress>999 Some Rd, Other City, TX</CreditCardAddress>\n <CreditCardPostalCode>88888</CreditCardPostalCode>\n </CreditCardInfo>\n <Notes>This is a test record, do not consider all values as possible values from Quickbooks.</Notes>\n <DeliveryMethod>Email</DeliveryMethod>\n </CustomerRet>\n</CustomerQueryRs></QBXMLMsgsRs></QBXML>") do |request_xml|
38
+ # Doesn't include MaxReturned because it would be invalid with it.
39
+ request_xml.should eql("<?xml version=\"1.0\" ?>\n<?qbxml version=\"6.0\" ?>\n<QBXML>\n <QBXMLMsgsRq onError=\"stopOnError\">\n <CustomerQueryRq>\n <FullName>Bob</FullName>\n </CustomerQueryRq>\n </QBXMLMsgsRq>\n</QBXML>")
40
+ end
41
+ QB::Customer.first(:FullName => ['Bob'])
42
+ end
43
+
44
+ # it "should generate a proper query for quickbooks to retrieve a Customer by various Filters"
45
+
46
+ it "should be able to convert to a CustomerRef" do
47
+ cust = QB::Customer.instantiate(:FullName => 'Bob LeCray', :ListID => '12776')
48
+ ref = cust.to_ref
49
+ ref.should be_is_a(QB::CustomerRef)
50
+ ref[:ListID].to_s.should eql('12776')
51
+ end
52
+ end
@@ -0,0 +1,12 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe QB::Invoice do
4
+ before(:all) { Quickbooks.use_adapter(:test) }
5
+ before(:each) { $DEBUG = nil }
6
+
7
+ it "should contain InvoiceLine items when requested" do
8
+ Quickbooks.connection.next_response("<?xml version=\"1.0\" ?>\n<QBXML>\n<QBXMLMsgsRs>\n<InvoiceQueryRs statusCode=\"0\" statusSeverity=\"Info\" statusMessage=\"Status OK\">\n<InvoiceRet>\n<TxnID>13-1224128259</TxnID>\n<TimeCreated>2008-10-15T23:37:39-05:00</TimeCreated>\n<TimeModified>2008-10-15T23:39:57-05:00</TimeModified>\n<EditSequence>1224128259</EditSequence>\n<TxnNumber>7</TxnNumber>\n<CustomerRef>\n<ListID>80000005-1223667820</ListID>\n<FullName>Someone</FullName>\n</CustomerRef>\n<ARAccountRef>\n<ListID>80000025-1223059667</ListID>\n<FullName>Accounts Receivable</FullName>\n</ARAccountRef>\n<TemplateRef>\n<ListID>80000001-1223046053</ListID>\n<FullName>This n That</FullName>\n</TemplateRef>\n<TxnDate>2008-10-10</TxnDate>\n<RefNumber>1</RefNumber>\n<BillAddress>\n<Addr1>Someone</Addr1>\n</BillAddress>\n<BillAddressBlock>\n<Addr1>Someone</Addr1>\n</BillAddressBlock>\n<IsPending>false</IsPending>\n<IsFinanceCharge>false</IsFinanceCharge>\n<TermsRef>\n<ListID>80000004-1223053322</ListID>\n<FullName>Due on receipt</FullName>\n</TermsRef>\n<DueDate>2008-10-10</DueDate>\n<ShipDate>2008-10-10</ShipDate>\n<Subtotal>300.00</Subtotal>\n<ItemSalesTaxRef>\n<ListID>80000001-1223053323</ListID>\n<FullName>Out of State</FullName>\n</ItemSalesTaxRef>\n<SalesTaxPercentage>0.00</SalesTaxPercentage>\n<SalesTaxTotal>0.00</SalesTaxTotal>\n<AppliedAmount>0.00</AppliedAmount>\n<BalanceRemaining>300.00</BalanceRemaining>\n<IsPaid>false</IsPaid>\n<CustomerMsgRef>\n<ListID>80000005-1223053322</ListID>\n<FullName>We appreciate your prompt payment.</FullName>\n</CustomerMsgRef>\n<IsToBePrinted>true</IsToBePrinted>\n<IsToBeEmailed>false</IsToBeEmailed>\n<CustomerSalesTaxCodeRef>\n<ListID>80000001-1223046054</ListID>\n<FullName>Tax</FullName>\n</CustomerSalesTaxCodeRef>\n<InvoiceLineRet>\n<TxnLineID>15-1224128259</TxnLineID>\n<ItemRef>\n<ListID>80000003-1224128228</ListID>\n<FullName>Quickbooks gem</FullName>\n</ItemRef>\n<Quantity>1</Quantity>\n<Rate>300.00</Rate>\n<Amount>300.00</Amount>\n<SalesTaxCodeRef>\n<ListID>80000002-1223046054</ListID>\n<FullName>Non</FullName>\n</SalesTaxCodeRef>\n</InvoiceLineRet>\n</InvoiceRet>\n</InvoiceQueryRs>\n</QBXMLMsgsRs>\n</QBXML>\n")
9
+ invoice = QB::Invoice.first(:IncludeLineItems => true)
10
+ invoice[:InvoiceLine].length.should eql(1)
11
+ end
12
+ end
@@ -0,0 +1,145 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe QB::SalesOrder do
4
+
5
+ before(:all) { Quickbooks.use_adapter(:test) }
6
+ before(:each) { Quickbooks.connection.clear_responses! }
7
+ after(:each) { $DEBUG = nil }
8
+
9
+ it "should have certain attributes that act as read-only, write-only, or mod-only." do
10
+ QB::SalesOrder.properties[:CustomerRef].should be_addable
11
+ QB::SalesOrder.properties[:CustomerRef].should be_writable
12
+ QB::SalesOrder.properties[:CustomerRef].should be_readable
13
+ QB::SalesOrder.properties[:Subtotal].should_not be_addable
14
+ QB::SalesOrder.properties[:Subtotal].should_not be_writable
15
+ QB::SalesOrder.properties[:Subtotal].should be_readable
16
+ end
17
+
18
+ it "should be able to assign attributes to an object" do
19
+ so = QB::SalesOrder.new
20
+ so[:CustomerRef] = {:ListID => '12345'}
21
+ so[:CustomerRef].should be_is_a(QB::CustomerRef)
22
+ so[:CustomerRef][:ListID].to_xml.should eql("<ListID>12345</ListID>")
23
+ end
24
+
25
+ it "should initialize a new object with attributes" do
26
+ so = QB::SalesOrder.new(:CustomerRef => {:ListID => '12345'})
27
+ so[:CustomerRef].should be_is_a(QB::CustomerRef)
28
+ so[:CustomerRef][:ListID].to_xml.should eql("<ListID>12345</ListID>")
29
+ end
30
+
31
+ it "should instantiate a new (clean) object with attributes" do
32
+ nso = QB::SalesOrder.new(:CustomerRef => {:ListID => '12345'})
33
+ nso.should be_dirty
34
+ eso = QB::SalesOrder.instantiate(:CustomerRef => {:ListID => '12345'})
35
+ eso.should_not be_dirty
36
+ end
37
+
38
+ it "should render xml from new and existing objects" do
39
+ new_so = QB::SalesOrder.new(:CustomerRef => {:ListID => '12345'})
40
+ ex_so = QB::SalesOrder.instantiate(:CustomerRef => {:ListID => '12345'})
41
+ new_so.to_xml.should eql("<SalesOrderAdd>\n <CustomerRef>\n <ListID>12345</ListID>\n </CustomerRef>\n</SalesOrderAdd>")
42
+ ex_so.to_xml.should eql("<SalesOrderMod>\n <CustomerRef>\n <ListID>12345</ListID>\n </CustomerRef>\n</SalesOrderMod>")
43
+ end
44
+
45
+ it "should change child elements with -Add, -Mod and -Ret suffixes into their model equivalents" do
46
+ QB::SalesOrder.properties.should have_key(:SalesOrderLine)
47
+ QB::SalesOrder.properties.should_not have_key(:SalesOrderLineAdd)
48
+ QB::SalesOrder.properties.should_not have_key(:SalesOrderLineMod)
49
+ QB::SalesOrder.properties.should_not have_key(:SalesOrderLineRet)
50
+ end
51
+
52
+ it "should be invalid when adding existing SalesOrderLines to a new SalesOrder" do
53
+ ex_so = QB::SalesOrder.new(:CustomerRef => {:ListID => '12345'})
54
+ lambda { ex_so[:SalesOrderLine] << QB::SalesOrderLine.instantiate(:TxnLineID => '54321') }.should raise_error
55
+ end
56
+
57
+ it "should be invalid when adding a new SalesOrderLine to an existing SalesOrder" do
58
+ # Not sure if this spec is still a valid spec. Second line should read QB::SalesOrderLine.new.
59
+ ex_so = QB::SalesOrder.instantiate(:CustomerRef => {:ListID => '12345'})
60
+ ex_so[:SalesOrderLine] << QB::SalesOrderLine.instantiate(:TxnLineID => '54321')
61
+ ex_so.should_not be_valid
62
+ end
63
+
64
+ it "should be valid when adding an existing SalesOrderLine to an existing SalesOrder" do
65
+ # Not sure if this spec is still a valid spec
66
+ ex_so = QB::SalesOrder.instantiate(:CustomerRef => {:ListID => '12345'}, :TxnID => '54321', :EditSequence => '44444')
67
+ ex_so[:SalesOrderLine] << QB::SalesOrderLine.instantiate(:TxnLineID => '54322')
68
+ ex_so[:SalesOrderLine][0].should be_valid
69
+ ex_so.should be_valid
70
+ end
71
+
72
+ it "should be invalid when applying an invalid SalesOrderLine to an existing SalesOrder" do
73
+ ex_so = QB::SalesOrder.instantiate(:CustomerRef => {:ListID => '12345'}, :TxnID => '54321', :EditSequence => '44444')
74
+ ex_so[:SalesOrderLine] << QB::SalesOrderLine.instantiate()
75
+ ex_so[:SalesOrderLine][0].should_not be_valid
76
+ ex_so[:SalesOrderLine].should_not be_valid
77
+ ex_so.should_not be_valid
78
+ end
79
+
80
+ it "should respond properly to :to_element" do
81
+ ex_so = QB::SalesOrder.new(:CustomerRef => {:ListID => '12345'})
82
+ ex_so[:SalesOrderLine] << QB::SalesOrderLine.new(:Desc => 'something')
83
+ element = ex_so.to_element
84
+ element[:SalesOrderLineAdd].should be_is_a(Array)
85
+ element[:SalesOrderLineAdd].length.should eql(1)
86
+ ex_so[:SalesOrderLine] << QB::SalesOrderLine.new(:Desc => 'else')
87
+ element = ex_so.to_element
88
+ element[:SalesOrderLineAdd].length.should eql(2)
89
+ element[:CustomerRef][:ListID].should eql('12345')
90
+ end
91
+
92
+ it "should render a SalesOrderAdd with embedded SalesOrderLineAdd's when adding new lines" do
93
+ ex_so = QB::SalesOrder.new(:CustomerRef => {:ListID => '12345'})
94
+ ex_so[:SalesOrderLine] << {}
95
+ ex_so[:SalesOrderLine] << {}
96
+ ex_so[:SalesOrderLine].length.should eql(2)
97
+ ex_so.to_xml.should eql("<SalesOrderAdd>\n <CustomerRef>\n <ListID>12345</ListID>\n </CustomerRef>\n <SalesOrderLineAdd>\n \n </SalesOrderLineAdd>\n <SalesOrderLineAdd>\n \n </SalesOrderLineAdd>\n</SalesOrderAdd>")
98
+ end
99
+
100
+ it "should render a SalesOrderAdd with one embedded SalesOrderLineAdd when adding one new line" do
101
+ ex_so = QB::SalesOrder.new(:CustomerRef => {:ListID => '12345'})
102
+ ex_so[:SalesOrderLine] << {}
103
+ ex_so[:SalesOrderLine].length.should eql(1)
104
+ ex_so.to_xml.should eql("<SalesOrderAdd>\n <CustomerRef>\n <ListID>12345</ListID>\n </CustomerRef>\n <SalesOrderLineAdd>\n \n </SalesOrderLineAdd>\n</SalesOrderAdd>")
105
+ end
106
+
107
+ it "should render a SalesOrderMod with embedded SalesOrderLineMod's when modifying lines" do
108
+ ex_so = QB::SalesOrder.instantiate(:CustomerRef => {:ListID => '12345'})
109
+ ex_so[:SalesOrderLine] << QB::SalesOrderLine.instantiate(:TxnLineID => '54321')
110
+ ex_so.to_xml.should eql("<SalesOrderMod>\n <CustomerRef>\n <ListID>12345</ListID>\n </CustomerRef>\n <SalesOrderLineMod>\n <TxnLineID>54321</TxnLineID>\n </SalesOrderLineMod>\n</SalesOrderMod>")
111
+ end
112
+
113
+ it "should keep ElementCollection items in order when converting to_element" do
114
+ so = QB::SalesOrder.new(:TxnDate => Date.today, :RefNumber => '12345678901')
115
+ so[:CustomerRef] = {:ListID => '12345', :FullName => 'Schmoe, Joe'}
116
+ so[:BillAddress] = {:Addr1 => '999 Some Rd', :City => 'Other City', :State => 'TX', :PostalCode => '88888'}
117
+ so[:ShipAddress] = {:Addr1 => '999 Some Rd', :City => 'Other City', :State => 'TX', :PostalCode => '88888'}
118
+ so[:PONumber] = '99999-111-ABCDE-00000'
119
+ so.attributes = {:ShipDate => Date.today, :Memo => 'This is a test SalesOrder Add request.', :IsToBePrinted => true}
120
+ so.attributes = {:IsToBeEmailed => false, :CustomerSalesTaxCodeRef => {:ListID => '3987235'}}
121
+ so[:SalesOrderLine] << {:ItemRef => {:ListID => '8887778'}, :Desc => 'Some odd item', :Quantity => 1, :Rate => '25.00', :Amount => '25.00'}
122
+ so[:SalesOrderLine] << {:ItemRef => {:ListID => '8887779'}, :Desc => 'Some other odd item', :Quantity => 2, :Rate => '21.00', :Amount => '42.00'}
123
+ so.to_element[:SalesOrderLineAdd][0].instance_variable_get(:@collection_index).should eql(0)
124
+ so.to_element[:SalesOrderLineAdd][1].instance_variable_get(:@collection_index).should eql(1)
125
+ end
126
+
127
+ it "should render a large SalesOrder object with many attributes" do
128
+ so = QB::SalesOrder.new(:TxnDate => Date.today, :RefNumber => '12345678901')
129
+ so[:CustomerRef] = {:ListID => '12345', :FullName => 'Schmoe, Joe'}
130
+ so[:BillAddress] = {:Addr1 => '999 Some Rd', :City => 'Other City', :State => 'TX', :PostalCode => '88888'}
131
+ so[:ShipAddress] = {:Addr1 => '999 Some Rd', :City => 'Other City', :State => 'TX', :PostalCode => '88888'}
132
+ so[:PONumber] = '99999-111-ABCDE-00000'
133
+ so.attributes = {:ShipDate => Date.today, :Memo => 'This is a test SalesOrder Add request.', :IsToBePrinted => true}
134
+ so.attributes = {:IsToBeEmailed => false, :CustomerSalesTaxCodeRef => {:ListID => '3987235'}}
135
+ so[:SalesOrderLine] << {:ItemRef => {:ListID => '8887778'}, :Desc => 'Some odd item', :Quantity => 1, :Rate => '25.00', :Amount => '25.00'}
136
+ so[:SalesOrderLine] << {:ItemRef => {:ListID => '8887779'}, :Desc => 'Some other odd item', :Quantity => 2, :Rate => '21.00', :Amount => '42.00'}
137
+ so.to_xml.should eql("<SalesOrderAdd>\n <CustomerRef>\n <ListID>12345</ListID>\n <FullName>Schmoe, Joe</FullName>\n </CustomerRef>\n <TxnDate>#{Date.today.strftime("%Y-%m-%d")}</TxnDate>\n <RefNumber>12345678901</RefNumber>\n <BillAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </BillAddress>\n <ShipAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </ShipAddress>\n <PONumber>99999-111-ABCDE-00000</PONumber>\n <ShipDate>#{Date.today.strftime("%Y-%m-%d")}</ShipDate>\n <Memo>This is a test SalesOrder Add request.</Memo>\n <IsToBePrinted>true</IsToBePrinted>\n <IsToBeEmailed>false</IsToBeEmailed>\n <CustomerSalesTaxCodeRef>\n <ListID>3987235</ListID>\n </CustomerSalesTaxCodeRef>\n <SalesOrderLineAdd>\n <ItemRef>\n <ListID>8887778</ListID>\n </ItemRef>\n <Desc>Some odd item</Desc>\n <Quantity>1</Quantity>\n <Rate>25.00</Rate>\n <Amount>25.00</Amount>\n </SalesOrderLineAdd>\n <SalesOrderLineAdd>\n <ItemRef>\n <ListID>8887779</ListID>\n </ItemRef>\n <Desc>Some other odd item</Desc>\n <Quantity>2</Quantity>\n <Rate>21.00</Rate>\n <Amount>42.00</Amount>\n </SalesOrderLineAdd>\n</SalesOrderAdd>")
138
+ end
139
+
140
+ it "should raise a QuickbooksApiError when Quickbooks returns an error message" do
141
+ so = QB::SalesOrder.new(:CustomerRef => {:ListID => '12345'}, :SalesOrderLine => [{:Desc => 'Some item'}])
142
+ Quickbooks.connection.next_response("<?xml version=\"1.0\" ?><QBXML><QBXMLMsgsRs><SalesOrderAddRs statusCode=\"3270\" statusSeverity=\"Error\" statusMessage=\"Missing posting account.\" /></QBXMLMsgsRs></QBXML>")
143
+ lambda { so.save }.should raise_error(Quickbooks::QuickbooksAPIError)
144
+ end
145
+ end
@@ -0,0 +1,18 @@
1
+ require File.dirname(__FILE__) + '/../../../spec_helper'
2
+
3
+ describe "Validation - Choice" do
4
+ after(:each) {$DEBUG = nil}
5
+ it "should validate a Choice object correctly" do
6
+ QB.xsd.groups['ListFilter'].items[0].items[4].items.any? {|i| i.exists_in?('NameFilter' => {'MatchCriterion' => 'StartsWith', 'Name' => 'Jo'})}.should eql(true)
7
+ QB.xsd.groups['ListFilter'].validate('NameRangeFilter' => {'FromName' => 'Jo', 'ToName' => 'Ju'}).perfect?.should eql(true)
8
+ QB.xsd.groups['ListFilter'].validate('NameFilter' => {'MatchCriterion' => 'StartsWith', 'Name' => 'Jo'}).perfect?.should eql(true)
9
+ QB.xsd.groups['ListFilter'].validate('NameFilter' => {'MatchCriterion' => 'StartsWith'}).perfect?.should eql(false)
10
+ QB.xsd.groups['ListFilter'].validate('NameRangeFilter' => {'FromName' => 'Jo'}).perfect?.should eql(true)
11
+ QB.xsd.groups['ListFilter'].validate('NameRangeFilter' => {'ToName' => 'Jo'}).perfect?.should eql(true)
12
+ end
13
+
14
+ it "should return workable error messages when validation fails" do
15
+ QB.xsd.groups['ListFilter'].validate('NameFilter' => {'MatchCriterion' => 'StartsWith'}).errors.should eql(["missing required element Name"])
16
+ QB.xsd.elements['FirstMonthFiscalYear'].validate({'FirstMonthFiscalYear' => 'Jan'}).errors.should eql(["is not one of (January, February, March, April, May, June, July, August, September, October, November, December)"])
17
+ end
18
+ end
@@ -0,0 +1,11 @@
1
+ describe "QuickbooksMeta Specs" do
2
+ # it "should test PEG validations that include ElementCollections"
3
+ # it "should test the conversion of Model objects to Element objects, with various combinations of new/instantiated objects"
4
+ # it "has problems converting to_element when you set an element as not a new_record but it has children that are"
5
+ # it "should test the validation of Model objects more thoroughly"
6
+ # it "should test the validation of Element objects more thoroughly -- including ElementCollections"
7
+ # it "should test Element.instantiate better"
8
+ # it "should test destroying Txn and List items"
9
+ # it "should properly import InvoiceLine's from InvoiceLineRet inside an InvoiceRet"
10
+ # it "should test casting and dumping of all types"
11
+ end
@@ -0,0 +1,38 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ require 'date'
4
+
5
+ describe Quickbooks do
6
+ before(:all) { Quickbooks.use_adapter(:test) }
7
+ before(:each) { $DEBUG = nil }
8
+
9
+ it "should create a connection and perform a request" do
10
+ so = QB::SalesOrder.new(:TxnDate => Date.today, :RefNumber => '12345678901')
11
+ so[:CustomerRef] = {:ListID => '12345', :FullName => 'Schmoe, Joe'}
12
+ so[:BillAddress] = {:Addr1 => '999 Some Rd', :City => 'Other City', :State => 'TX', :PostalCode => '88888'}
13
+ so[:ShipAddress] = {:Addr1 => '999 Some Rd', :City => 'Other City', :State => 'TX', :PostalCode => '88888'}
14
+ so[:PONumber] = '99999-111-ABCDE-00000'
15
+ so.attributes = {:ShipDate => Date.today, :Memo => 'This is a test SalesOrder Add request.', :IsToBePrinted => true}
16
+ so.attributes = {:IsToBeEmailed => false, :CustomerSalesTaxCodeRef => {:ListID => '3987235'}}
17
+ so[:SalesOrderLine] << {:ItemRef => {:ListID => '8887778'}, :Desc => 'Some odd item', :Quantity => 1, :Rate => '25.00', :Amount => '25.00'}
18
+ so[:SalesOrderLine] << {:ItemRef => {:ListID => '8887779'}, :Desc => 'Some other odd item', :Quantity => 2, :Rate => '21.00', :Amount => '42.00'}
19
+
20
+ called = false
21
+ Quickbooks.connection.should be_is_a(Quickbooks::Adapters::TestAdapter::Connection)
22
+ Quickbooks.connection.next_response("<?xml version=\"1.0\" ?>\n<?qbxml version=\"6.0\" ?>\n<QBXML>\n <QBXMLMsgsRs>\n <SalesOrderAddRs>\n <SalesOrderRet>\n <TxnID>7728173</TxnID>\n \n<CustomerRef>\n <ListID>12345</ListID>\n <FullName>Schmoe, Joe</FullName>\n </CustomerRef>\n <TxnDate>#{Date.today.strftime("%Y-%m-%d")}</TxnDate>\n <RefNumber>12345678901</RefNumber>\n <BillAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </BillAddress>\n <ShipAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </ShipAddress>\n <PONumber>99999-111-ABCDE-00000</PONumber>\n <ShipDate>#{Date.today.strftime("%Y-%m-%d")}</ShipDate>\n <Memo>This is a test SalesOrder Add request.</Memo>\n <IsToBePrinted>true</IsToBePrinted>\n <IsToBeEmailed>false</IsToBeEmailed>\n <CustomerSalesTaxCodeRef>\n <ListID>3987235</ListID>\n </CustomerSalesTaxCodeRef>\n <SalesOrderLineRet>\n <ItemRef>\n <ListID>8887778</ListID>\n </ItemRef>\n <Desc>Some odd item</Desc>\n <Quantity>1</Quantity>\n <Rate>25.00</Rate>\n <Amount>25.00</Amount>\n </SalesOrderLineRet>\n <SalesOrderLineRet>\n <ItemRef>\n <ListID>8887779</ListID>\n </ItemRef>\n <Desc>Some other odd item</Desc>\n <Quantity>2</Quantity>\n <Rate>21.00</Rate>\n <Amount>42.00</Amount>\n </SalesOrderLineRet>\n </SalesOrderRet>\n </SalesOrderAddRs>\n </QBXMLMsgsRs>\n</QBXML>") do |request_xml|
23
+ called = true
24
+ request_xml.should eql("<?xml version=\"1.0\" ?>\n<?qbxml version=\"6.0\" ?>\n<QBXML>\n <QBXMLMsgsRq onError=\"stopOnError\">\n <SalesOrderAddRq>\n <SalesOrderAdd>\n <CustomerRef>\n <ListID>12345</ListID>\n <FullName>Schmoe, Joe</FullName>\n </CustomerRef>\n <TxnDate>#{Date.today.strftime("%Y-%m-%d")}</TxnDate>\n <RefNumber>12345678901</RefNumber>\n <BillAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </BillAddress>\n <ShipAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </ShipAddress>\n <PONumber>99999-111-ABCDE-00000</PONumber>\n <ShipDate>#{Date.today.strftime("%Y-%m-%d")}</ShipDate>\n <Memo>This is a test SalesOrder Add request.</Memo>\n <IsToBePrinted>true</IsToBePrinted>\n <IsToBeEmailed>false</IsToBeEmailed>\n <CustomerSalesTaxCodeRef>\n <ListID>3987235</ListID>\n </CustomerSalesTaxCodeRef>\n <SalesOrderLineAdd>\n <ItemRef>\n <ListID>8887778</ListID>\n </ItemRef>\n <Desc>Some odd item</Desc>\n <Quantity>1</Quantity>\n <Rate>25.00</Rate>\n <Amount>25.00</Amount>\n </SalesOrderLineAdd>\n <SalesOrderLineAdd>\n <ItemRef>\n <ListID>8887779</ListID>\n </ItemRef>\n <Desc>Some other odd item</Desc>\n <Quantity>2</Quantity>\n <Rate>21.00</Rate>\n <Amount>42.00</Amount>\n </SalesOrderLineAdd>\n </SalesOrderAdd>\n </SalesOrderAddRq>\n </QBXMLMsgsRq>\n</QBXML>")
25
+ end
26
+ so.save.should eql(true)
27
+ called.should eql(true)
28
+ end
29
+
30
+ it "should parse xml into intelligent ruby objects" do
31
+ sales_order_add = Quickbooks::Support.parse_xml("<SalesOrderAdd>\n <CustomerRef>\n <ListID>12345</ListID>\n <FullName>Schmoe, Joe</FullName>\n </CustomerRef>\n <TxnDate>#{Date.today.strftime("%Y-%m-%d")}</TxnDate>\n <RefNumber>12345678901</RefNumber>\n <BillAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </BillAddress>\n <ShipAddress>\n <Addr1>999 Some Rd</Addr1>\n <City>Other City</City>\n <State>TX</State>\n <PostalCode>88888</PostalCode>\n </ShipAddress>\n <PONumber>99999-111-ABCDE-00000</PONumber>\n <ShipDate>#{Date.today.strftime("%Y-%m-%d")}</ShipDate>\n <Memo>This is a test SalesOrder Add request.</Memo>\n <IsToBePrinted>true</IsToBePrinted>\n <IsToBeEmailed>false</IsToBeEmailed>\n <CustomerSalesTaxCodeRef>\n <ListID>3987235</ListID>\n </CustomerSalesTaxCodeRef>\n <SalesOrderLineAdd>\n <ItemRef>\n <ListID>8887778</ListID>\n </ItemRef>\n <Desc>Some odd item</Desc>\n <Quantity>1</Quantity>\n <Rate>25.00</Rate>\n <Amount>25.00</Amount>\n </SalesOrderLineAdd>\n <SalesOrderLineAdd>\n <ItemRef>\n <ListID>8887779</ListID>\n </ItemRef>\n <Desc>Some other odd item</Desc>\n <Quantity>2</Quantity>\n <Rate>21.00</Rate>\n <Amount>42.00</Amount>\n </SalesOrderLineAdd>\n</SalesOrderAdd>")
32
+ sales_order_add.should be_is_a(QB::SalesOrderAdd)
33
+ sales_order_add[:CustomerRef].should be_is_a(QB::CustomerRef)
34
+ sales_order_add[:CustomerRef][:ListID].to_s.should eql('12345')
35
+ sales_order_add[:SalesOrderLineAdd].length.to_i.should eql(2)
36
+ sales_order_add[:SalesOrderLineAdd][1][:Quantity].to_i.should eql(2)
37
+ end
38
+ end
@@ -0,0 +1,20 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "repeatable attributes" do
4
+ it "should recognize SalesOrderAdd/SalesOrderLineAdd" do
5
+ QB.xsd['SalesOrderAdd'].repeatable?('SalesOrderLineAdd').should eql(true)
6
+ end
7
+ it "should recognize DataEventSubscriptionAdd/ListEventSubscription" do
8
+ QB.xsd['DataEventSubscriptionAdd'].repeatable?('DeliverOwnEvents').should eql(false)
9
+ QB.xsd['DataEventSubscriptionAdd'].repeatable?('ListEventSubscription').should eql(true)
10
+ end
11
+ it "should recognize QBXMLMsgsRq/HostQueryRq" do
12
+ QB.xsd['QBXMLMsgsRq'].repeatable?('HostQueryRq').should eql(true)
13
+ end
14
+ it "should recognize TermsQueryRsType/DateDrivenTermsRet" do
15
+ QB.xsd.types['TermsQueryRsType'].repeatable?('DateDrivenTermsRet').should eql(true)
16
+ end
17
+ it "should recognize ItemSalesTaxGroupAdd/ItemSalesTaxRef" do
18
+ QB.xsd['ItemSalesTaxGroupAdd'].repeatable?('ItemSalesTaxRef').should eql(false)
19
+ end
20
+ end
@@ -0,0 +1,10 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "required attributes" do
4
+ it "should require SalesOrderAdd/CustomerRef" do
5
+ QB.xsd['SalesOrderAdd'].required?('CustomerRef').should eql(true)
6
+ end
7
+ it "should not require SalesOrderAdd/RefNumber" do
8
+ QB.xsd['SalesOrderAdd'].required?('RefNumber').should eql(false)
9
+ end
10
+ end
@@ -0,0 +1,5 @@
1
+ require 'lib/quickbooks'
2
+ require 'quickbooks/extlib/hook'
3
+ Quickbooks.qbxml_version = '6.0'
4
+ Quickbooks.xsd(true)
5
+ $TESTING = true
@@ -0,0 +1,24 @@
1
+ require File.dirname(__FILE__) + '/spec_helper'
2
+
3
+ describe "validations" do
4
+ after(:each) {$DEBUG = nil}
5
+ it "should validate (A)..." do
6
+ QB::SalesOrderAdd.new(:CustomerRef => {:ListID => '12345'}).should_not be_valid
7
+ # Beware, because even though this is valid, QuickBooks still requires a few of the attributes in the SalesOrderLine
8
+ QB::SalesOrderAdd.new(:CustomerRef => {:ListID => '12345'}, :SalesOrderLineAdd => [{:Rate => '123.00'}]).should be_valid
9
+ QB::QBXMLMsgsRq.options[:onError].default = 'stopOnError'
10
+ QB::QBXML.new(:QBXMLMsgsRq => [QB::CustomerQueryRq.new(:MaxReturned => 1)]).should be_valid
11
+ end
12
+
13
+ it "should validate (B)..." do
14
+ QB::DataExtModRq.new(
15
+ :DataExtMod => {
16
+ :OwnerID => '0',
17
+ :DataExtName => 'A',
18
+ :DataExtValue => 'B',
19
+ :ListDataExtType => 'Customer',
20
+ :ListObjRef => {:FullName => 'C'}
21
+ }
22
+ ).should be_valid
23
+ end
24
+ end
metadata CHANGED
@@ -1,310 +1,142 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: quickbooks
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.4.0
4
+ version: 0.9.9
5
5
  platform: ruby
6
6
  authors:
7
- - Daniel Parker
7
+ - BehindLogic
8
8
  autorequire:
9
9
  bindir: bin
10
- cert_chain: []
10
+ cert_chain:
11
+ - |
12
+ -----BEGIN CERTIFICATE-----
13
+ MIIDNjCCAh6gAwIBAgIBADANBgkqhkiG9w0BAQUFADBBMQ0wCwYDVQQDDARnZW1z
14
+ MRswGQYKCZImiZPyLGQBGRYLYmVoaW5kbG9naWMxEzARBgoJkiaJk/IsZAEZFgNj
15
+ b20wHhcNMDkxMTE5MDQ0NzIzWhcNMTAxMTE5MDQ0NzIzWjBBMQ0wCwYDVQQDDARn
16
+ ZW1zMRswGQYKCZImiZPyLGQBGRYLYmVoaW5kbG9naWMxEzARBgoJkiaJk/IsZAEZ
17
+ FgNjb20wggEiMA0GCSqGSIb3DQEBAQUAA4IBDwAwggEKAoIBAQDs+2PvSoBC5mCz
18
+ Nm95RXKOb/u+CmPA70DoG9cF0zipCie003Vm0DYL3Rtobcr32eMvHxkWoJ6xoz0I
19
+ h74yNKtHjTTCxj86HWBPsE6xVMxVCftClndjCyKsiMiqvvp1wDNO0FFK+6LijmL3
20
+ 2Xkp4brWq1JO92y9vYct34R7o2X//+nwZs+sss+EYhNdvdUJfWy7tA5dghGdLvRn
21
+ UhJJSAtTefkBCwO7bufLEt+n7wIRbiJJ5dDCwE3NIX4wUSrNeYwXGXA/Ybki+BUl
22
+ 3KJF9IC0XR9fY9DGF0FXBKrkfDlZRrnQOem2aIxeuln0KQLJXXJuDTQPHO+mK3EG
23
+ UPhR7IAHAgMBAAGjOTA3MAkGA1UdEwQCMAAwCwYDVR0PBAQDAgSwMB0GA1UdDgQW
24
+ BBQn32ZStKmqwFqs2vuglYzkvDzBZjANBgkqhkiG9w0BAQUFAAOCAQEAe3Z+iMmy
25
+ IX9ChQW4hNNb1HOpgCMc2RL+vUwku9WE95dZ+BE4A6mOYTj5JXdYf4R4Z2vavr+d
26
+ nwJWtXPeIBWxireb8gUU0DwqodYTpsmkj5LD1zIaZ59rXlwDA9O0V4fwE1iRG5MD
27
+ mB7m8fT8WNOeg4AfjH4aSiHI1+HX1RQkc7KFdLotKnCevzYU6Jza5VUbXyJ+yCEH
28
+ DFARN3mkfGI+18MRDEi39nK2O/bBd6Wf0cYPEKsGQjNNAIBtv9belepSMd1KKfQ2
29
+ L7j8CnNDCrsHDe7/251D85wSvTH4Q/41NE5ahdCkkHwzDJeyhXpmNuUSswdn7woz
30
+ teST6sOe8lUhZQ==
31
+ -----END CERTIFICATE-----
11
32
 
12
- date: 2008-04-15 00:00:00 -04:00
33
+ date: 2010-01-16 00:00:00 -05:00
13
34
  default_executable:
14
35
  dependencies:
15
36
  - !ruby/object:Gem::Dependency
16
- name: formattedstring
37
+ name: hoe
38
+ type: :development
17
39
  version_requirement:
18
40
  version_requirements: !ruby/object:Gem::Requirement
19
41
  requirements:
20
42
  - - ">="
21
43
  - !ruby/object:Gem::Version
22
- version: 0.1.0
44
+ version: 1.8.3
23
45
  version:
24
- - !ruby/object:Gem::Dependency
25
- name: hash_magic
26
- version_requirement:
27
- version_requirements: !ruby/object:Gem::Requirement
28
- requirements:
29
- - - ">="
30
- - !ruby/object:Gem::Version
31
- version: 0.1.0
32
- version:
33
- description: A module to connect to QuickBooks through the QuickBooks SDK using WIN32OLE (other connection types to come).
34
- email: gems@behindlogic.com
46
+ description: The only comprehensive Ruby interface to Quickbooks. THIS IS A DEMO VERSION. Visit behindlogic.com for the full version, which works with all versions of QuickBooks.
47
+ email:
48
+ - gems@behindlogic.com
35
49
  executables: []
36
50
 
37
51
  extensions: []
38
52
 
39
53
  extra_rdoc_files:
40
- - README
41
- - LICENSE
54
+ - History.txt
55
+ - License.txt
56
+ - Manifest.txt
57
+ - README.txt
42
58
  files:
43
- - lib/qbxml
44
- - lib/qbxml/request.rb
45
- - lib/qbxml/response.rb
46
- - lib/qbxml/support.rb
47
- - lib/qbxml.rb
48
- - lib/quickbooks
49
- - lib/quickbooks/adapters
59
+ - History.txt
60
+ - License.txt
61
+ - Manifest.txt
62
+ - README.txt
63
+ - Rakefile
64
+ - lib/quickbooks.rb
65
+ - lib/quickbooks/adaptability.rb
66
+ - lib/quickbooks/adapters/http_adapter.rb
67
+ - lib/quickbooks/adapters/https_adapter.rb
50
68
  - lib/quickbooks/adapters/ole_adapter.rb
51
- - lib/quickbooks/adapters/qbxml_debug_adapter.rb
52
- - lib/quickbooks/base.rb
69
+ - lib/quickbooks/adapters/spew_adapter.rb
70
+ - lib/quickbooks/adapters/tcp_adapter.rb
71
+ - lib/quickbooks/adapters/test_adapter.rb
72
+ - lib/quickbooks/element.rb
73
+ - lib/quickbooks/element_collection.rb
74
+ - lib/quickbooks/extlib.rb
75
+ - lib/quickbooks/extlib/assertions.rb
76
+ - lib/quickbooks/extlib/class.rb
77
+ - lib/quickbooks/extlib/days_and_times.rb
78
+ - lib/quickbooks/extlib/days_and_times/duration.rb
79
+ - lib/quickbooks/extlib/days_and_times/numeric.rb
80
+ - lib/quickbooks/extlib/days_and_times/object.rb
81
+ - lib/quickbooks/extlib/days_and_times/time.rb
82
+ - lib/quickbooks/extlib/hash.rb
83
+ - lib/quickbooks/extlib/hook.rb
84
+ - lib/quickbooks/extlib/inflection.rb
85
+ - lib/quickbooks/extlib/logger.rb
86
+ - lib/quickbooks/extlib/object.rb
87
+ - lib/quickbooks/extlib/pathname.rb
88
+ - lib/quickbooks/extlib/rubygems.rb
89
+ - lib/quickbooks/extlib/string.rb
90
+ - lib/quickbooks/extlib/time.rb
53
91
  - lib/quickbooks/model.rb
54
- - lib/quickbooks/models
55
- - lib/quickbooks/models/common
56
- - lib/quickbooks/models/common/address.rb
57
- - lib/quickbooks/models/common/all_refs.rb
58
- - lib/quickbooks/models/customer
59
- - lib/quickbooks/models/customer/credit_card_info.rb
60
- - lib/quickbooks/models/customer.rb
61
- - lib/quickbooks/models/deleted.rb
62
- - lib/quickbooks/models/list_item.rb
63
- - lib/quickbooks/models/transaction.rb
64
- - lib/quickbooks/ruby_magic.rb
65
- - lib/quickbooks.rb
66
- - LICENSE
67
- - Rakefile
68
- - README
69
- - doc/classes
70
- - doc/classes/Array.html
71
- - doc/classes/Array.src
72
- - doc/classes/Array.src/M000026.html
73
- - doc/classes/Array.src/M000027.html
74
- - doc/classes/Array.src/M000028.html
75
- - doc/classes/Array.src/M000029.html
76
- - doc/classes/Array.src/M000030.html
77
- - doc/classes/Array.src/M000031.html
78
- - doc/classes/Array.src/M000032.html
79
- - doc/classes/Array.src/M000033.html
80
- - doc/classes/Array.src/M000034.html
81
- - doc/classes/Array.src/M000035.html
82
- - doc/classes/Array.src/M000036.html
83
- - doc/classes/Array.src/M000037.html
84
- - doc/classes/Array.src/M000038.html
85
- - doc/classes/Array.src/M000039.html
86
- - doc/classes/Array.src/M000040.html
87
- - doc/classes/Array.src/M000041.html
88
- - doc/classes/Class.html
89
- - doc/classes/Class.src
90
- - doc/classes/Class.src/M000042.html
91
- - doc/classes/Class.src/M000043.html
92
- - doc/classes/Hash.html
93
- - doc/classes/Hash.src
94
- - doc/classes/Hash.src/M000001.html
95
- - doc/classes/Hash.src/M000002.html
96
- - doc/classes/Hash.src/M000003.html
97
- - doc/classes/Hash.src/M000004.html
98
- - doc/classes/Hash.src/M000005.html
99
- - doc/classes/Hash.src/M000006.html
100
- - doc/classes/Hash.src/M000007.html
101
- - doc/classes/Hash.src/M000008.html
102
- - doc/classes/Hash.src/M000009.html
103
- - doc/classes/Hash.src/M000010.html
104
- - doc/classes/Hash.src/M000011.html
105
- - doc/classes/Hash.src/M000012.html
106
- - doc/classes/Hash.src/M000013.html
107
- - doc/classes/Hash.src/M000014.html
108
- - doc/classes/Hash.src/M000015.html
109
- - doc/classes/Hash.src/M000016.html
110
- - doc/classes/Hash.src/M000017.html
111
- - doc/classes/Hash.src/M000018.html
112
- - doc/classes/Hash.src/M000019.html
113
- - doc/classes/Hash.src/M000020.html
114
- - doc/classes/Hash.src/M000021.html
115
- - doc/classes/Hash.src/M000022.html
116
- - doc/classes/Hash.src/M000023.html
117
- - doc/classes/Hash.src/M000024.html
118
- - doc/classes/Hash.src/M000025.html
119
- - doc/classes/Object.html
120
- - doc/classes/Object.src
121
- - doc/classes/Object.src/M000044.html
122
- - doc/classes/Object.src/M000045.html
123
- - doc/classes/Object.src/M000046.html
124
- - doc/classes/Object.src/M000047.html
125
- - doc/classes/Object.src/M000048.html
126
- - doc/classes/Object.src/M000049.html
127
- - doc/classes/Object.src/M000050.html
128
- - doc/classes/Object.src/M000051.html
129
- - doc/classes/Qbxml
130
- - doc/classes/Qbxml/Request.html
131
- - doc/classes/Qbxml/Request.src
132
- - doc/classes/Qbxml/Request.src/M000132.html
133
- - doc/classes/Qbxml/Request.src/M000133.html
134
- - doc/classes/Qbxml/Request.src/M000134.html
135
- - doc/classes/Qbxml/RequestSet.html
136
- - doc/classes/Qbxml/RequestSet.src
137
- - doc/classes/Qbxml/RequestSet.src/M000135.html
138
- - doc/classes/Qbxml/RequestSet.src/M000136.html
139
- - doc/classes/Qbxml/RequestSet.src/M000137.html
140
- - doc/classes/Qbxml/RequestSet.src/M000138.html
141
- - doc/classes/Qbxml/Response.html
142
- - doc/classes/Qbxml/Response.src
143
- - doc/classes/Qbxml/Response.src/M000123.html
144
- - doc/classes/Qbxml/Response.src/M000124.html
145
- - doc/classes/Qbxml/Response.src/M000125.html
146
- - doc/classes/Qbxml/Response.src/M000126.html
147
- - doc/classes/Qbxml/Response.src/M000127.html
148
- - doc/classes/Qbxml/Response.src/M000128.html
149
- - doc/classes/Qbxml/Response.src/M000129.html
150
- - doc/classes/Qbxml/Response.src/M000130.html
151
- - doc/classes/Qbxml/Response.src/M000131.html
152
- - doc/classes/Qbxml/ResponseSet.html
153
- - doc/classes/Qbxml/ResponseSet.src
154
- - doc/classes/Qbxml/ResponseSet.src/M000116.html
155
- - doc/classes/Qbxml/ResponseSet.src/M000117.html
156
- - doc/classes/Qbxml/ResponseSet.src/M000118.html
157
- - doc/classes/Qbxml/ResponseSet.src/M000119.html
158
- - doc/classes/Qbxml/ResponseSet.src/M000120.html
159
- - doc/classes/Qbxml/ResponseSet.src/M000121.html
160
- - doc/classes/Qbxml/ResponseSet.src/M000122.html
161
- - doc/classes/Qbxml.html
162
- - doc/classes/Quickbooks
163
- - doc/classes/Quickbooks/Address.html
164
- - doc/classes/Quickbooks/Address.src
165
- - doc/classes/Quickbooks/Address.src/M000115.html
166
- - doc/classes/Quickbooks/Base.html
167
- - doc/classes/Quickbooks/Base.src
168
- - doc/classes/Quickbooks/Base.src/M000095.html
169
- - doc/classes/Quickbooks/Base.src/M000096.html
170
- - doc/classes/Quickbooks/Base.src/M000097.html
171
- - doc/classes/Quickbooks/Base.src/M000098.html
172
- - doc/classes/Quickbooks/Base.src/M000099.html
173
- - doc/classes/Quickbooks/Base.src/M000100.html
174
- - doc/classes/Quickbooks/Base.src/M000101.html
175
- - doc/classes/Quickbooks/Base.src/M000102.html
176
- - doc/classes/Quickbooks/Base.src/M000103.html
177
- - doc/classes/Quickbooks/Base.src/M000104.html
178
- - doc/classes/Quickbooks/Base.src/M000105.html
179
- - doc/classes/Quickbooks/Base.src/M000106.html
180
- - doc/classes/Quickbooks/Base.src/M000107.html
181
- - doc/classes/Quickbooks/Base.src/M000108.html
182
- - doc/classes/Quickbooks/Base.src/M000109.html
183
- - doc/classes/Quickbooks/Base.src/M000110.html
184
- - doc/classes/Quickbooks/Base.src/M000111.html
185
- - doc/classes/Quickbooks/Base.src/M000112.html
186
- - doc/classes/Quickbooks/BillAddress.html
187
- - doc/classes/Quickbooks/CreditCardInfo.html
188
- - doc/classes/Quickbooks/Customer.html
189
- - doc/classes/Quickbooks/CustomerTypeRef.html
190
- - doc/classes/Quickbooks/Deleted.html
191
- - doc/classes/Quickbooks/ItemSalesTaxRef.html
192
- - doc/classes/Quickbooks/JobTypeRef.html
193
- - doc/classes/Quickbooks/ListDeleted.html
194
- - doc/classes/Quickbooks/ListDeleted.src
195
- - doc/classes/Quickbooks/ListDeleted.src/M000114.html
196
- - doc/classes/Quickbooks/ListItem.html
197
- - doc/classes/Quickbooks/ListItem.src
198
- - doc/classes/Quickbooks/ListItem.src/M000093.html
199
- - doc/classes/Quickbooks/ListItem.src/M000094.html
200
- - doc/classes/Quickbooks/Model.html
201
- - doc/classes/Quickbooks/Model.src
202
- - doc/classes/Quickbooks/Model.src/M000073.html
203
- - doc/classes/Quickbooks/Model.src/M000074.html
204
- - doc/classes/Quickbooks/Model.src/M000075.html
205
- - doc/classes/Quickbooks/Model.src/M000076.html
206
- - doc/classes/Quickbooks/Model.src/M000077.html
207
- - doc/classes/Quickbooks/Model.src/M000078.html
208
- - doc/classes/Quickbooks/Model.src/M000079.html
209
- - doc/classes/Quickbooks/Model.src/M000080.html
210
- - doc/classes/Quickbooks/Model.src/M000081.html
211
- - doc/classes/Quickbooks/Model.src/M000082.html
212
- - doc/classes/Quickbooks/Model.src/M000083.html
213
- - doc/classes/Quickbooks/Model.src/M000084.html
214
- - doc/classes/Quickbooks/Model.src/M000085.html
215
- - doc/classes/Quickbooks/Model.src/M000086.html
216
- - doc/classes/Quickbooks/Model.src/M000087.html
217
- - doc/classes/Quickbooks/Model.src/M000088.html
218
- - doc/classes/Quickbooks/Model.src/M000089.html
219
- - doc/classes/Quickbooks/Model.src/M000090.html
220
- - doc/classes/Quickbooks/Model.src/M000091.html
221
- - doc/classes/Quickbooks/OleAdapter
222
- - doc/classes/Quickbooks/OleAdapter/Connection.html
223
- - doc/classes/Quickbooks/OleAdapter/Connection.src
224
- - doc/classes/Quickbooks/OleAdapter/Connection.src/M000058.html
225
- - doc/classes/Quickbooks/OleAdapter/Connection.src/M000059.html
226
- - doc/classes/Quickbooks/OleAdapter/Connection.src/M000060.html
227
- - doc/classes/Quickbooks/OleAdapter/Connection.src/M000061.html
228
- - doc/classes/Quickbooks/OleAdapter/Connection.src/M000062.html
229
- - doc/classes/Quickbooks/OleAdapter/Connection.src/M000063.html
230
- - doc/classes/Quickbooks/OleAdapter/Connection.src/M000064.html
231
- - doc/classes/Quickbooks/OleAdapter/Connection.src/M000065.html
232
- - doc/classes/Quickbooks/OleAdapter/Connection.src/M000066.html
233
- - doc/classes/Quickbooks/OleAdapter/Connection.src/M000067.html
234
- - doc/classes/Quickbooks/OleAdapter/Ole.html
235
- - doc/classes/Quickbooks/OleAdapter/Ole.src
236
- - doc/classes/Quickbooks/OleAdapter/Ole.src/M000068.html
237
- - doc/classes/Quickbooks/OleAdapter/Ole.src/M000069.html
238
- - doc/classes/Quickbooks/OleAdapter/Ole.src/M000070.html
239
- - doc/classes/Quickbooks/OleAdapter.html
240
- - doc/classes/Quickbooks/ParentRef.html
241
- - doc/classes/Quickbooks/PreferredPaymentMethodRef.html
242
- - doc/classes/Quickbooks/PriceLevelRef.html
243
- - doc/classes/Quickbooks/QbxmlDebugAdapter
244
- - doc/classes/Quickbooks/QbxmlDebugAdapter/Connection.html
245
- - doc/classes/Quickbooks/QbxmlDebugAdapter/Connection.src
246
- - doc/classes/Quickbooks/QbxmlDebugAdapter/Connection.src/M000057.html
247
- - doc/classes/Quickbooks/QbxmlDebugAdapter.html
248
- - doc/classes/Quickbooks/Ref.html
249
- - doc/classes/Quickbooks/Ref.src
250
- - doc/classes/Quickbooks/Ref.src/M000113.html
251
- - doc/classes/Quickbooks/SalesRepRef.html
252
- - doc/classes/Quickbooks/SalesTaxCodeRef.html
253
- - doc/classes/Quickbooks/ShipAddress.html
254
- - doc/classes/Quickbooks/TermsRef.html
255
- - doc/classes/Quickbooks/Transaction.html
256
- - doc/classes/Quickbooks/Transaction.src
257
- - doc/classes/Quickbooks/Transaction.src/M000071.html
258
- - doc/classes/Quickbooks/Transaction.src/M000072.html
259
- - doc/classes/Quickbooks/TxnDeleted.html
260
- - doc/classes/Quickbooks/TxnDeleted.src
261
- - doc/classes/Quickbooks/TxnDeleted.src/M000092.html
262
- - doc/classes/Quickbooks.html
263
- - doc/classes/String.html
264
- - doc/classes/String.src
265
- - doc/classes/String.src/M000052.html
266
- - doc/classes/String.src/M000053.html
267
- - doc/classes/String.src/M000054.html
268
- - doc/classes/String.src/M000055.html
269
- - doc/classes/String.src/M000056.html
270
- - doc/created.rid
271
- - doc/files
272
- - doc/files/lib
273
- - doc/files/lib/qbxml
274
- - doc/files/lib/qbxml/request_rb.html
275
- - doc/files/lib/qbxml/response_rb.html
276
- - doc/files/lib/qbxml/support_rb.html
277
- - doc/files/lib/qbxml_rb.html
278
- - doc/files/lib/quickbooks
279
- - doc/files/lib/quickbooks/adapters
280
- - doc/files/lib/quickbooks/adapters/ole_adapter_rb.html
281
- - doc/files/lib/quickbooks/adapters/qbxml_debug_adapter_rb.html
282
- - doc/files/lib/quickbooks/base_rb.html
283
- - doc/files/lib/quickbooks/model_rb.html
284
- - doc/files/lib/quickbooks/models
285
- - doc/files/lib/quickbooks/models/common
286
- - doc/files/lib/quickbooks/models/common/address_rb.html
287
- - doc/files/lib/quickbooks/models/common/all_refs_rb.html
288
- - doc/files/lib/quickbooks/models/customer
289
- - doc/files/lib/quickbooks/models/customer/credit_card_info_rb.html
290
- - doc/files/lib/quickbooks/models/customer_rb.html
291
- - doc/files/lib/quickbooks/models/deleted_rb.html
292
- - doc/files/lib/quickbooks/models/list_item_rb.html
293
- - doc/files/lib/quickbooks/models/transaction_rb.html
294
- - doc/files/lib/quickbooks/ruby_magic_rb.html
295
- - doc/files/lib/quickbooks_rb.html
296
- - doc/files/LICENSE.html
297
- - doc/files/README.html
298
- - doc/fr_class_index.html
299
- - doc/fr_file_index.html
300
- - doc/fr_method_index.html
301
- - doc/index.html
302
- - doc/rdoc-style.css
92
+ - lib/quickbooks/option.rb
93
+ - lib/quickbooks/property.rb
94
+ - lib/quickbooks/ruby_ext.rb
95
+ - lib/quickbooks/type.rb
96
+ - lib/quickbooks/types.rb
97
+ - lib/quickbooks/version.rb
98
+ - lib/quickbooks/xsd.rb
99
+ - lib/quickbooks/xsd/attribute.rb
100
+ - lib/quickbooks/xsd/choice.rb
101
+ - lib/quickbooks/xsd/complex_type.rb
102
+ - lib/quickbooks/xsd/element.rb
103
+ - lib/quickbooks/xsd/group.rb
104
+ - lib/quickbooks/xsd/restriction.rb
105
+ - lib/quickbooks/xsd/sequence.rb
106
+ - lib/quickbooks/xsd/simple_type.rb
107
+ - lib/quickbooks/xsd/union.rb
108
+ - lib/quickbooks/xsd/validation.rb
109
+ - lib/quickbooks/xsd/xml_parse.rb
110
+ - quickbooks.gemspec
111
+ - source/qbxml21_demo.xsd
112
+ - source/qbxmlops_demo.xsd
113
+ - source/qbxmltypes.xsd
114
+ - spec/association_spec.rb
115
+ - spec/element_collection_spec.rb
116
+ - spec/find_spec.rb
117
+ - spec/lib/quickbooks/element_spec.rb
118
+ - spec/lib/quickbooks/elements/sales_order_add_spec.rb
119
+ - spec/lib/quickbooks/elements/vendor_add_spec.rb
120
+ - spec/lib/quickbooks/model_spec.rb
121
+ - spec/lib/quickbooks/models/customer_spec.rb
122
+ - spec/lib/quickbooks/models/invoice_spec.rb
123
+ - spec/lib/quickbooks/models/sales_order_line_spec.rb
124
+ - spec/lib/quickbooks/models/sales_order_spec.rb
125
+ - spec/lib/quickbooks/xsd/choice_spec.rb
126
+ - spec/pending_spec.rb
127
+ - spec/quickbooks_spec.rb
128
+ - spec/repeatable_spec.rb
129
+ - spec/requires_spec.rb
130
+ - spec/spec_helper.rb
131
+ - spec/validation_spec.rb
303
132
  has_rdoc: true
304
- homepage: http://quickbooks.rubyforge.org
305
- post_install_message:
306
- rdoc_options: []
133
+ homepage: http://behindlogic.com
134
+ licenses: []
307
135
 
136
+ post_install_message:
137
+ rdoc_options:
138
+ - --main
139
+ - README.txt
308
140
  require_paths:
309
141
  - lib
310
142
  required_ruby_version: !ruby/object:Gem::Requirement
@@ -322,9 +154,25 @@ required_rubygems_version: !ruby/object:Gem::Requirement
322
154
  requirements: []
323
155
 
324
156
  rubyforge_project: quickbooks
325
- rubygems_version: 1.0.1
157
+ rubygems_version: 1.3.5
326
158
  signing_key:
327
- specification_version: 2
328
- summary: A module to connect to QuickBooks through the QuickBooks SDK using WIN32OLE (other connection types to come).
329
- test_files: []
330
-
159
+ specification_version: 3
160
+ summary: The only comprehensive Ruby interface to Quickbooks
161
+ test_files:
162
+ - spec/association_spec.rb
163
+ - spec/element_collection_spec.rb
164
+ - spec/find_spec.rb
165
+ - spec/lib/quickbooks/element_spec.rb
166
+ - spec/lib/quickbooks/elements/sales_order_add_spec.rb
167
+ - spec/lib/quickbooks/elements/vendor_add_spec.rb
168
+ - spec/lib/quickbooks/model_spec.rb
169
+ - spec/lib/quickbooks/models/customer_spec.rb
170
+ - spec/lib/quickbooks/models/invoice_spec.rb
171
+ - spec/lib/quickbooks/models/sales_order_line_spec.rb
172
+ - spec/lib/quickbooks/models/sales_order_spec.rb
173
+ - spec/lib/quickbooks/xsd/choice_spec.rb
174
+ - spec/pending_spec.rb
175
+ - spec/quickbooks_spec.rb
176
+ - spec/repeatable_spec.rb
177
+ - spec/requires_spec.rb
178
+ - spec/validation_spec.rb