quickbooks 0.0.5 → 0.0.7

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 (294) hide show
  1. data/LICENSE +1 -1
  2. data/Rakefile +4 -2
  3. data/doc/classes/Array.html +333 -40
  4. data/doc/classes/Array.src/M000037.html +18 -0
  5. data/doc/classes/Array.src/M000038.html +21 -0
  6. data/doc/classes/Array.src/M000039.html +18 -0
  7. data/doc/classes/Array.src/M000040.html +19 -0
  8. data/doc/classes/Array.src/M000041.html +18 -0
  9. data/doc/classes/Array.src/{M000004.html → M000042.html} +1 -1
  10. data/doc/classes/Array.src/M000043.html +18 -0
  11. data/doc/classes/Array.src/M000044.html +18 -0
  12. data/doc/classes/Array.src/{M000001.html → M000045.html} +1 -1
  13. data/doc/classes/Array.src/{M000002.html → M000046.html} +1 -1
  14. data/doc/classes/Array.src/{M000003.html → M000047.html} +1 -1
  15. data/doc/classes/Array.src/M000048.html +23 -0
  16. data/doc/classes/Array.src/{M000005.html → M000049.html} +1 -1
  17. data/doc/classes/Array.src/{M000006.html → M000050.html} +2 -2
  18. data/doc/classes/Array.src/{M000007.html → M000051.html} +1 -1
  19. data/doc/classes/Array.src/{M000008.html → M000052.html} +1 -1
  20. data/doc/classes/Array.src/M000053.html +18 -0
  21. data/doc/classes/Array.src/M000054.html +20 -0
  22. data/doc/classes/Array.src/M000055.html +18 -0
  23. data/doc/classes/Array.src/M000056.html +34 -0
  24. data/doc/classes/Array.src/M000057.html +19 -0
  25. data/doc/classes/Array.src/M000058.html +29 -0
  26. data/doc/classes/Array.src/M000059.html +18 -0
  27. data/doc/classes/Array.src/M000060.html +20 -0
  28. data/doc/classes/Array.src/M000061.html +18 -0
  29. data/doc/classes/Array.src/M000062.html +18 -0
  30. data/doc/classes/Array.src/M000063.html +19 -0
  31. data/doc/classes/Class.html +25 -6
  32. data/doc/classes/Class.src/M000075.html +18 -0
  33. data/doc/classes/Class.src/M000076.html +18 -0
  34. data/doc/classes/Hash.html +329 -103
  35. data/doc/classes/Hash.src/M000004.html +18 -0
  36. data/doc/classes/Hash.src/M000005.html +21 -0
  37. data/doc/classes/Hash.src/M000006.html +18 -0
  38. data/doc/classes/Hash.src/M000007.html +21 -0
  39. data/doc/classes/Hash.src/M000008.html +18 -0
  40. data/doc/classes/Hash.src/M000009.html +6 -4
  41. data/doc/classes/Hash.src/M000010.html +4 -7
  42. data/doc/classes/Hash.src/M000011.html +8 -4
  43. data/doc/classes/Hash.src/M000012.html +4 -7
  44. data/doc/classes/Hash.src/M000013.html +7 -4
  45. data/doc/classes/Hash.src/M000014.html +4 -7
  46. data/doc/classes/Hash.src/M000015.html +6 -12
  47. data/doc/classes/Hash.src/M000016.html +4 -6
  48. data/doc/classes/Hash.src/M000017.html +7 -4
  49. data/doc/classes/Hash.src/M000018.html +4 -6
  50. data/doc/classes/Hash.src/M000019.html +5 -22
  51. data/doc/classes/Hash.src/M000020.html +14 -5
  52. data/doc/classes/Hash.src/M000021.html +7 -5
  53. data/doc/classes/Hash.src/M000022.html +5 -7
  54. data/doc/classes/Hash.src/M000023.html +7 -5
  55. data/doc/classes/Hash.src/M000024.html +5 -5
  56. data/doc/classes/Hash.src/M000025.html +4 -4
  57. data/doc/classes/Hash.src/M000026.html +4 -8
  58. data/doc/classes/Hash.src/M000027.html +22 -0
  59. data/doc/classes/Hash.src/M000028.html +18 -0
  60. data/doc/classes/Hash.src/M000029.html +20 -0
  61. data/doc/classes/Hash.src/M000030.html +18 -0
  62. data/doc/classes/Hash.src/M000031.html +30 -0
  63. data/doc/classes/Hash.src/M000032.html +19 -0
  64. data/doc/classes/Hash.src/M000033.html +19 -0
  65. data/doc/classes/Hash.src/M000034.html +18 -0
  66. data/doc/classes/Hash.src/M000035.html +18 -0
  67. data/doc/classes/Hash.src/M000036.html +21 -0
  68. data/doc/classes/Object.html +75 -39
  69. data/doc/classes/Object.src/M000077.html +24 -0
  70. data/doc/classes/Object.src/M000078.html +19 -0
  71. data/doc/classes/Object.src/{M000028.html → M000079.html} +1 -1
  72. data/doc/classes/Object.src/{M000029.html → M000080.html} +1 -1
  73. data/doc/classes/Object.src/{M000030.html → M000081.html} +1 -1
  74. data/doc/classes/Object.src/{M000031.html → M000082.html} +1 -1
  75. data/doc/classes/Object.src/{M000032.html → M000083.html} +1 -1
  76. data/doc/classes/Object.src/{M000033.html → M000084.html} +2 -2
  77. data/doc/classes/OrderedArray.html +178 -0
  78. data/doc/classes/OrderedArray.src/M000001.html +18 -0
  79. data/doc/classes/OrderedArray.src/M000002.html +18 -0
  80. data/doc/classes/OrderedArray.src/M000003.html +18 -0
  81. data/doc/classes/OrderedHash.html +324 -0
  82. data/doc/classes/OrderedHash.src/M000064.html +19 -0
  83. data/doc/classes/OrderedHash.src/M000065.html +18 -0
  84. data/doc/classes/OrderedHash.src/M000066.html +18 -0
  85. data/doc/classes/OrderedHash.src/M000067.html +18 -0
  86. data/doc/classes/OrderedHash.src/M000068.html +18 -0
  87. data/doc/classes/OrderedHash.src/M000069.html +18 -0
  88. data/doc/classes/OrderedHash.src/M000070.html +20 -0
  89. data/doc/classes/OrderedHash.src/M000071.html +18 -0
  90. data/doc/classes/OrderedHash.src/M000072.html +18 -0
  91. data/doc/classes/OrderedHash.src/M000073.html +19 -0
  92. data/doc/classes/OrderedHash.src/M000074.html +24 -0
  93. data/doc/classes/{Quickbooks/Qbxml.html → Qbxml.html} +11 -13
  94. data/doc/classes/{Quickbooks/Qbxml → Qbxml}/Request.html +32 -22
  95. data/doc/classes/Qbxml/Request.src/M000184.html +65 -0
  96. data/doc/classes/Qbxml/Request.src/M000185.html +19 -0
  97. data/doc/classes/Qbxml/Request.src/M000186.html +83 -0
  98. data/doc/classes/{Quickbooks/Qbxml → Qbxml}/RequestSet.html +32 -26
  99. data/doc/classes/{Quickbooks/Connection.src/M000104.html → Qbxml/RequestSet.src/M000187.html} +7 -5
  100. data/doc/classes/Qbxml/RequestSet.src/M000188.html +26 -0
  101. data/doc/classes/Qbxml/RequestSet.src/M000189.html +18 -0
  102. data/doc/classes/Qbxml/RequestSet.src/M000190.html +22 -0
  103. data/doc/classes/{Quickbooks/Qbxml → Qbxml}/Response.html +51 -51
  104. data/doc/classes/Qbxml/Response.src/M000175.html +24 -0
  105. data/doc/classes/Qbxml/Response.src/M000176.html +19 -0
  106. data/doc/classes/Qbxml/Response.src/M000177.html +55 -0
  107. data/doc/classes/{Quickbooks/Connection.src/M000097.html → Qbxml/Response.src/M000178.html} +4 -4
  108. data/doc/classes/Qbxml/Response.src/M000179.html +18 -0
  109. data/doc/classes/Qbxml/Response.src/M000180.html +18 -0
  110. data/doc/classes/{Quickbooks/Connection.src/M000100.html → Qbxml/Response.src/M000181.html} +4 -4
  111. data/doc/classes/{Quickbooks/Connection.src/M000101.html → Qbxml/Response.src/M000182.html} +4 -4
  112. data/doc/classes/Qbxml/Response.src/M000183.html +63 -0
  113. data/doc/classes/{Quickbooks/Qbxml → Qbxml}/ResponseSet.html +47 -41
  114. data/doc/classes/Qbxml/ResponseSet.src/M000168.html +22 -0
  115. data/doc/classes/Qbxml/ResponseSet.src/M000169.html +26 -0
  116. data/doc/classes/Qbxml/ResponseSet.src/M000170.html +24 -0
  117. data/doc/classes/Qbxml/ResponseSet.src/M000171.html +20 -0
  118. data/doc/classes/Qbxml/ResponseSet.src/M000172.html +27 -0
  119. data/doc/classes/Qbxml/ResponseSet.src/M000173.html +18 -0
  120. data/doc/classes/Qbxml/ResponseSet.src/M000174.html +18 -0
  121. data/doc/classes/Quickbooks.html +24 -10
  122. data/doc/classes/Quickbooks/Address.html +5 -5
  123. data/doc/classes/Quickbooks/Address.src/{M000107.html → M000150.html} +0 -0
  124. data/doc/classes/Quickbooks/Base.html +133 -120
  125. data/doc/classes/Quickbooks/Base.src/{M000080.html → M000131.html} +1 -1
  126. data/doc/classes/Quickbooks/Base.src/M000132.html +20 -0
  127. data/doc/classes/Quickbooks/Base.src/M000133.html +19 -0
  128. data/doc/classes/Quickbooks/Base.src/{M000082.html → M000134.html} +1 -1
  129. data/doc/classes/Quickbooks/Base.src/{M000083.html → M000135.html} +2 -2
  130. data/doc/classes/Quickbooks/Base.src/M000136.html +30 -0
  131. data/doc/classes/Quickbooks/Base.src/{M000085.html → M000137.html} +1 -1
  132. data/doc/classes/Quickbooks/Base.src/{M000086.html → M000138.html} +2 -2
  133. data/doc/classes/Quickbooks/Base.src/{M000087.html → M000139.html} +2 -2
  134. data/doc/classes/Quickbooks/Base.src/{M000088.html → M000140.html} +2 -2
  135. data/doc/classes/Quickbooks/Base.src/{M000089.html → M000141.html} +1 -1
  136. data/doc/classes/Quickbooks/Base.src/{M000090.html → M000142.html} +1 -1
  137. data/doc/classes/Quickbooks/Base.src/{M000091.html → M000143.html} +1 -1
  138. data/doc/classes/Quickbooks/Base.src/{M000092.html → M000144.html} +3 -3
  139. data/doc/classes/Quickbooks/Base.src/{M000093.html → M000145.html} +2 -2
  140. data/doc/classes/Quickbooks/Base.src/{M000094.html → M000146.html} +2 -2
  141. data/doc/classes/Quickbooks/Base.src/{M000095.html → M000147.html} +1 -1
  142. data/doc/classes/Quickbooks/{Qbxml/ResponseSetArrayExt.html → Deleted.html} +14 -6
  143. data/doc/classes/Quickbooks/ListDeleted.html +139 -0
  144. data/doc/classes/Quickbooks/ListDeleted.src/M000149.html +18 -0
  145. data/doc/classes/Quickbooks/ListItem.html +11 -11
  146. data/doc/classes/Quickbooks/ListItem.src/M000129.html +19 -0
  147. data/doc/classes/Quickbooks/ListItem.src/{M000079.html → M000130.html} +4 -4
  148. data/doc/classes/Quickbooks/Model.html +110 -110
  149. data/doc/classes/Quickbooks/Model.src/{M000059.html → M000109.html} +4 -3
  150. data/doc/classes/Quickbooks/Model.src/{M000060.html → M000110.html} +2 -2
  151. data/doc/classes/Quickbooks/Model.src/{M000061.html → M000111.html} +2 -2
  152. data/doc/classes/Quickbooks/Model.src/{M000062.html → M000112.html} +3 -2
  153. data/doc/classes/Quickbooks/Model.src/{M000063.html → M000113.html} +1 -1
  154. data/doc/classes/Quickbooks/Model.src/M000114.html +22 -0
  155. data/doc/classes/Quickbooks/Model.src/{M000065.html → M000115.html} +2 -2
  156. data/doc/classes/Quickbooks/Model.src/{M000066.html → M000116.html} +2 -2
  157. data/doc/classes/Quickbooks/Model.src/{M000067.html → M000117.html} +1 -1
  158. data/doc/classes/Quickbooks/Model.src/{M000068.html → M000118.html} +1 -1
  159. data/doc/classes/Quickbooks/Model.src/{M000069.html → M000119.html} +1 -1
  160. data/doc/classes/Quickbooks/Model.src/{M000070.html → M000120.html} +1 -1
  161. data/doc/classes/Quickbooks/Model.src/{M000071.html → M000121.html} +1 -1
  162. data/doc/classes/Quickbooks/Model.src/{M000072.html → M000122.html} +1 -1
  163. data/doc/classes/Quickbooks/Model.src/{M000073.html → M000123.html} +2 -2
  164. data/doc/classes/Quickbooks/Model.src/{M000074.html → M000124.html} +3 -3
  165. data/doc/classes/Quickbooks/Model.src/{M000075.html → M000125.html} +3 -3
  166. data/doc/classes/Quickbooks/Model.src/{M000076.html → M000126.html} +1 -1
  167. data/doc/classes/Quickbooks/Model.src/{M000077.html → M000127.html} +1 -1
  168. data/doc/classes/{QBHelpers.html → Quickbooks/OleAdapter.html} +19 -9
  169. data/doc/classes/Quickbooks/{Connection.html → OleAdapter/Connection.html} +80 -106
  170. data/doc/classes/Quickbooks/{Qbxml/Response.src/M000044.html → OleAdapter/Connection.src/M000094.html} +4 -4
  171. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000095.html +19 -0
  172. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000096.html +24 -0
  173. data/doc/classes/Quickbooks/{Qbxml/Response.src/M000047.html → OleAdapter/Connection.src/M000097.html} +4 -4
  174. data/doc/classes/Quickbooks/{Qbxml/Response.src/M000048.html → OleAdapter/Connection.src/M000098.html} +4 -4
  175. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000099.html +21 -0
  176. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000100.html +24 -0
  177. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000101.html +20 -0
  178. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000102.html +24 -0
  179. data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000103.html +24 -0
  180. data/doc/classes/{QBHelpers → Quickbooks/OleAdapter}/Ole.html +24 -24
  181. data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000104.html +21 -0
  182. data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000105.html +22 -0
  183. data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000106.html +18 -0
  184. data/doc/classes/Quickbooks/{Qbxml/RequestSetArrayExt.html → QbxmlDebugAdapter.html} +11 -5
  185. data/doc/classes/Quickbooks/QbxmlDebugAdapter/Connection.html +139 -0
  186. data/doc/classes/Quickbooks/{Qbxml/RequestSet.src/M000055.html → QbxmlDebugAdapter/Connection.src/M000093.html} +4 -4
  187. data/doc/classes/Quickbooks/Ref.html +5 -5
  188. data/doc/classes/Quickbooks/Ref.src/{M000096.html → M000148.html} +0 -0
  189. data/doc/classes/Quickbooks/Transaction.html +10 -10
  190. data/doc/classes/Quickbooks/Transaction.src/{M000057.html → M000107.html} +0 -0
  191. data/doc/classes/Quickbooks/Transaction.src/{M000058.html → M000108.html} +0 -0
  192. data/doc/classes/Quickbooks/TxnDeleted.html +139 -0
  193. data/doc/classes/Quickbooks/TxnDeleted.src/M000128.html +18 -0
  194. data/doc/classes/SlashedArray.html +226 -0
  195. data/doc/classes/SlashedArray.src/M000161.html +23 -0
  196. data/doc/classes/SlashedArray.src/M000162.html +18 -0
  197. data/doc/classes/SlashedArray.src/M000163.html +18 -0
  198. data/doc/classes/SlashedArray.src/M000164.html +22 -0
  199. data/doc/classes/SlashedArray.src/M000165.html +22 -0
  200. data/doc/classes/SlashedArray.src/M000166.html +18 -0
  201. data/doc/classes/SlashedArray.src/M000167.html +22 -0
  202. data/doc/classes/SlashedHash.html +193 -0
  203. data/doc/classes/SlashedHash.src/M000156.html +22 -0
  204. data/doc/classes/SlashedHash.src/M000157.html +18 -0
  205. data/doc/classes/SlashedHash.src/M000158.html +18 -0
  206. data/doc/classes/SlashedHash.src/M000159.html +27 -0
  207. data/doc/classes/SlashedHash.src/M000160.html +22 -0
  208. data/doc/classes/String.html +269 -0
  209. data/doc/classes/String.src/M000085.html +18 -0
  210. data/doc/classes/String.src/M000086.html +18 -0
  211. data/doc/classes/String.src/M000087.html +18 -0
  212. data/doc/classes/String.src/M000088.html +18 -0
  213. data/doc/classes/String.src/M000089.html +18 -0
  214. data/doc/classes/String.src/M000090.html +18 -0
  215. data/doc/classes/String.src/M000091.html +18 -0
  216. data/doc/classes/String.src/M000092.html +97 -0
  217. data/doc/classes/UniqueArray.html +193 -0
  218. data/doc/classes/UniqueArray.src/M000151.html +25 -0
  219. data/doc/classes/UniqueArray.src/M000152.html +18 -0
  220. data/doc/classes/UniqueArray.src/M000153.html +20 -0
  221. data/doc/classes/UniqueArray.src/M000154.html +20 -0
  222. data/doc/classes/UniqueArray.src/M000155.html +20 -0
  223. data/doc/created.rid +1 -1
  224. data/doc/files/LICENSE.html +2 -2
  225. data/doc/files/lib/{quickbooks/connection_rb.html → qbxml/request_rb.html} +6 -6
  226. data/doc/files/lib/{quickbooks/qbxml_rb.html → qbxml/response_rb.html} +6 -6
  227. data/doc/files/lib/{quickbooks/qbxml/request_rb.html → qbxml/support_rb.html} +6 -7
  228. data/doc/files/lib/qbxml_rb.html +109 -0
  229. data/doc/files/lib/quickbooks/{qbxml/response_rb.html → adapters/ole_adapter_rb.html} +5 -5
  230. data/doc/files/lib/quickbooks/adapters/qbxml_debug_adapter_rb.html +108 -0
  231. data/doc/files/lib/quickbooks/base_rb.html +2 -4
  232. data/doc/files/lib/quickbooks/model_rb.html +2 -1
  233. data/doc/files/lib/quickbooks/models/customer_rb.html +1 -1
  234. data/doc/files/lib/quickbooks/models/deleted_rb.html +101 -0
  235. data/doc/files/lib/quickbooks/models/list_item_rb.html +1 -1
  236. data/doc/files/lib/quickbooks/ruby_magic_rb.html +9 -1
  237. data/doc/files/lib/quickbooks/{ole_helper_rb.html → structure_rb.html} +20 -7
  238. data/doc/files/lib/quickbooks_rb.html +2 -3
  239. data/doc/fr_class_index.html +19 -10
  240. data/doc/fr_file_index.html +8 -5
  241. data/doc/fr_method_index.html +190 -110
  242. data/lib/qbxml.rb +2 -0
  243. data/lib/qbxml/request.rb +205 -0
  244. data/lib/qbxml/response.rb +197 -0
  245. data/lib/qbxml/support.rb +130 -0
  246. data/lib/quickbooks.rb +1 -2
  247. data/lib/quickbooks/adapters/ole_adapter.rb +148 -0
  248. data/lib/quickbooks/adapters/qbxml_debug_adapter.rb +10 -0
  249. data/lib/quickbooks/base.rb +33 -24
  250. data/lib/quickbooks/model.rb +20 -13
  251. data/lib/quickbooks/models/customer.rb +1 -1
  252. data/lib/quickbooks/models/deleted.rb +22 -0
  253. data/lib/quickbooks/models/list_item.rb +29 -27
  254. data/lib/quickbooks/ruby_magic.rb +31 -28
  255. data/lib/quickbooks/structure.rb +393 -0
  256. metadata +242 -127
  257. data/doc/classes/Class.src/M000027.html +0 -18
  258. data/doc/classes/QBHelpers/Ole.src/M000108.html +0 -21
  259. data/doc/classes/QBHelpers/Ole.src/M000109.html +0 -22
  260. data/doc/classes/QBHelpers/Ole.src/M000110.html +0 -18
  261. data/doc/classes/Quickbooks/Base.src/M000081.html +0 -18
  262. data/doc/classes/Quickbooks/Base.src/M000084.html +0 -23
  263. data/doc/classes/Quickbooks/Connection.src/M000098.html +0 -19
  264. data/doc/classes/Quickbooks/Connection.src/M000099.html +0 -24
  265. data/doc/classes/Quickbooks/Connection.src/M000102.html +0 -21
  266. data/doc/classes/Quickbooks/Connection.src/M000103.html +0 -24
  267. data/doc/classes/Quickbooks/Connection.src/M000105.html +0 -24
  268. data/doc/classes/Quickbooks/Connection.src/M000106.html +0 -24
  269. data/doc/classes/Quickbooks/ListItem.src/M000078.html +0 -19
  270. data/doc/classes/Quickbooks/Model.src/M000064.html +0 -18
  271. data/doc/classes/Quickbooks/Qbxml/Request.src/M000050.html +0 -34
  272. data/doc/classes/Quickbooks/Qbxml/Request.src/M000051.html +0 -19
  273. data/doc/classes/Quickbooks/Qbxml/Request.src/M000052.html +0 -81
  274. data/doc/classes/Quickbooks/Qbxml/RequestSet.src/M000053.html +0 -22
  275. data/doc/classes/Quickbooks/Qbxml/RequestSet.src/M000054.html +0 -26
  276. data/doc/classes/Quickbooks/Qbxml/RequestSet.src/M000056.html +0 -22
  277. data/doc/classes/Quickbooks/Qbxml/Response.src/M000041.html +0 -24
  278. data/doc/classes/Quickbooks/Qbxml/Response.src/M000042.html +0 -19
  279. data/doc/classes/Quickbooks/Qbxml/Response.src/M000043.html +0 -44
  280. data/doc/classes/Quickbooks/Qbxml/Response.src/M000045.html +0 -18
  281. data/doc/classes/Quickbooks/Qbxml/Response.src/M000046.html +0 -18
  282. data/doc/classes/Quickbooks/Qbxml/Response.src/M000049.html +0 -63
  283. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000034.html +0 -22
  284. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000035.html +0 -26
  285. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000036.html +0 -24
  286. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000037.html +0 -18
  287. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000038.html +0 -27
  288. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000039.html +0 -18
  289. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000040.html +0 -18
  290. data/lib/quickbooks/connection.rb +0 -105
  291. data/lib/quickbooks/ole_helper.rb +0 -47
  292. data/lib/quickbooks/qbxml.rb +0 -2
  293. data/lib/quickbooks/qbxml/request.rb +0 -169
  294. data/lib/quickbooks/qbxml/response.rb +0 -185
@@ -1,47 +0,0 @@
1
- # QBHelpers::Ole is a simple helper class that wraps an OLE object and provides methods that make it easier to deal with certain things that OLE makes complicated.
2
-
3
- module QBHelpers
4
- class Ole
5
- # Simply holds the actual OLE object.
6
- attr_reader :ole
7
-
8
- # Pass in the OLE name of the application you want connected to, and the name of a type library, if you need one.
9
- def initialize(ole_app, type_library=nil)
10
- @ole_app = ole_app
11
- @type_library = type_library
12
- @ole = WIN32OLE.new(ole_app)
13
- self.classes
14
- end
15
-
16
- # Finds an OLE variable in the OLE type library, if you specified one in new().
17
- # This navigates the OLE classes and constants for you and returns the variable that matches the _var_name_ you specify.
18
- # This is used with Quickbooks to get the qbFileOpenDoNotCare parameter to pass to the OpenConnection2 method:
19
- # @quickbooks = Ole.new('QBXMLRP2.RequestProcessor', 'QBXMLRP2 1.0 Type Library')
20
- # @quickbooks.OpenConnection2('','Sample Application',@quickbooks.get_variable('localQBD'))
21
- # @session = @quickbooks.BeginSession('',@quickbooks.get_variable('qbFileOpenDoNotCare'))
22
- # ...
23
- def get_variable(var_name)
24
- return nil unless @type_library
25
- self.classes.each do |class_name|
26
- found = self.constant_for(class_name.name).variables.find {|var| var.name == var_name}
27
- return found if found
28
- end
29
- end
30
-
31
- def classes #:nodoc:
32
- return nil unless @type_library
33
- @classes ||= WIN32OLE_TYPE.ole_classes(@type_library)
34
- end
35
-
36
- def constant_for(class_name) #:nodoc:
37
- return nil unless @type_library
38
- @constant_for ||= {}
39
- @constant_for[class_name] ||= WIN32OLE_TYPE.new(@type_library, class_name)
40
- end
41
-
42
- # method_missing sends all other methods to the OLE object, so you can treat this object as your OLE object.
43
- def method_missing(method_name, *args)
44
- @ole.send(method_name, *args)
45
- end
46
- end
47
- end
@@ -1,2 +0,0 @@
1
- require 'quickbooks/qbxml/request'
2
- require 'quickbooks/qbxml/response'
@@ -1,169 +0,0 @@
1
- require 'quickbooks/ruby_magic'
2
- require 'builder'
3
-
4
- module Quickbooks
5
- module Qbxml
6
- VERSION = '6.0'
7
- class RequestSet
8
- include Enumerable
9
- def set
10
- unless @set.is_a?(Array)
11
- @set = []
12
- @set.extend(Quickbooks::Qbxml::RequestSetArrayExt)
13
- end
14
- @set
15
- end
16
- delegate_methods [:each, :length, :first, :last, :[], :map, :join] => :set
17
- def <<(qbxml_request)
18
- if qbxml_request.is_a?(Quickbooks::Qbxml::Request)
19
- set << qbxml_request
20
- elsif qbxml_request.respond_to?(:each)
21
- qbxml_request.each do |request|
22
- self << request
23
- end
24
- else
25
- raise ArgumentError, "Cannot add object of type #{qbxml_request.class.name} to a Quickbooks::Qbxml::RequestSet"
26
- end
27
- end
28
-
29
- def initialize(*requests)
30
- self << requests
31
- end
32
-
33
- def to_xml
34
- pre = <<-thequickbooks_qbxmlrequestsetxml
35
- <?xml version="1.0" ?>
36
- <?qbxml version="#{Quickbooks::Qbxml::VERSION}" ?>
37
- <QBXML>
38
- <QBXMLMsgsRq onError="stopOnError">
39
- thequickbooks_qbxmlrequestsetxml
40
- requests = map {|x| x.to_xml(false)}.join
41
- post = <<-thequickbooks_qbxmlrequestsetxml
42
- </QBXMLMsgsRq>
43
- </QBXML>
44
- thequickbooks_qbxmlrequestsetxml
45
- # puts pre + requests + post
46
- pre + requests + post
47
- end
48
- end
49
-
50
- class Request
51
- # 1. List queries (:query)
52
- # Request.new(object, :query) # <= will return the record matching the object supplied (automatically searches by list_id or txn_id)
53
- # Request.new(Customer, :query, :limit => 1) # <= will return the first customer
54
- # Request.new(Customer, :query, /some match/) # <= will return all customers matching the regexp
55
- # 2. Object-specific transaction query (:transaction)
56
- # Request.new(Transaction, :query) # <= will return the transaction matching the object supplied
57
- # 3. Mod requests (:mod)
58
- # Request.new(object, :mod) # <= will update the object
59
- # 4. Delete requests (:delete)
60
- # Request.new(object, :delete) # <= will delete the object
61
- # We want the attributes of the object when we are updating, but no other time.
62
- def initialize(object, type, options_or_regexp={})
63
- options = options_or_regexp.is_a?(Regexp) ? {:matches => options_or_regexp} : options_or_regexp
64
- @type = type
65
- raise ArgumentError, "Quickbooks::Qbxml::Requests can only be of one of the following types: :query, :transaction, :any_transaction, :mod, :add, :delete, or :report" unless @type.is_one_of?(:query, :transaction, :any_transaction, :mod, :report, :add, :delete)
66
- @klass = object.is_a?(Class) ? object : object.class
67
- @object = object
68
- @options = options
69
-
70
- # Return only specific properties: Request.new(Customer, :query, :only => [:list_id, :full_name]); Quickbooks::Customer.first(:only => :list_id)
71
- @ret_elements = @options.delete(:only).to_a.only(@klass.properties).order!(@klass.properties).stringify_values.camelize_values!(Quickbooks::CAMELIZE_EXCEPTIONS) if @options.has_key?(:only)
72
-
73
- # Includes only valid filters + aliases for valid filters, then transforms aliased filters to real filters, then camelizes keys to prepare for writing to XML, lastly orders the keys to a valid filter order.
74
- # You may optionally have ListID OR FullName OR ( MaxReturned AND ActiveStatus AND FromModifiedDate AND ToModifiedDate AND ( NameFilter OR NameRangeFilter ) )
75
- @filters = options.stringify_keys.only(@klass.valid_filters + @klass.filter_aliases.keys).transform_keys!(@klass.filter_aliases).camelize_keys!(Quickbooks::CAMELIZE_EXCEPTIONS).order!(@klass.camelized_valid_filters)
76
-
77
- # Complain if:
78
- # 1) type is :mod or :delete, and object supplied is not a valid model
79
- raise ArgumentError, "A Quickbooks record object must be supplied to perform an add, mod or del action" if @type.is_one_of?(:add, :mod, :delete) && !@object.is_a?(Quickbooks::Base)
80
- end
81
-
82
- def self.next_request_id
83
- @request_id ||= 0
84
- @request_id += 1
85
- end
86
-
87
- # This is where the magic happens to convert a request object into xml worthy of quickbooks.
88
- def to_xml(as_set=true)
89
- return (RequestSet.new(self)).to_xml if as_set # Simple call yields xml as a single request in a request set. However, if the xml for the lone request is required, pass false.
90
- req = Builder::XmlMarkup.new(:indent => 2)
91
- request_root, container = case
92
- when @type.is_one_of?(:query)
93
- ["#{@klass.class_leaf_name}QueryRq", nil]
94
- when @type == :add
95
- ["#{@klass.class_leaf_name}AddRq", "#{@klass.class_leaf_name}Add"]
96
- when @type == :mod
97
- ["#{@klass.class_leaf_name}ModRq", "#{@klass.class_leaf_name}Mod"]
98
- when @type == :delete
99
- ["#{@klass.ListOrTxn}DelRq", nil]
100
- else
101
- raise RuntimeError, "Could not convert this request to qbxml!\n#{self.inspect}"
102
- end
103
- inner_stuff = lambda {
104
- deep_tag = lambda {|k,v|
105
- if v.is_a?(Hash)
106
- if k == ''
107
- v.each { |k,v|
108
- deep_tag.call(k,v)
109
- }
110
- else
111
- req.tag!(k.camelcase) { v.each { |k,v| deep_tag.call(k,v) } }
112
- end
113
- else
114
- req.tag!(k.camelcase,uncast(v))
115
- end
116
- }
117
-
118
- # Add the specific elements for the respective request type
119
- if @type.is_one_of?(:add, :mod)
120
- if @type == :mod
121
- # First the ObjectId:
122
- req.tag!(@klass.ListOrTxn + 'ID', @object.send("#{@klass.ListOrTxn}Id".underscore))
123
- # Second the EditSequence
124
- req.tag!('EditSequence', @object.send(:edit_sequence))
125
- end
126
- # Then, all the dirty_attributes
127
- deep_tag.call('',@object.to_dirty_hash) # (this is an hash statically ordered to the model's qbxml attribute order)
128
- elsif @type == :query && @object.class == @klass
129
- # Sent an instance object for a query - we should include the ListId/TxnId (then other filters?)
130
- req.tag!(@klass.ListOrTxn + 'ID', @object.send("#{@klass.ListOrTxn}Id".underscore))
131
- deep_tag.call('', @filters)
132
- elsif @type == :delete
133
- req.tag!(@klass.ListOrTxn + 'DelType', @klass.class_leaf_name)
134
- req.tag!(@klass.ListOrTxn + 'ID', @object.send("#{@klass.ListOrTxn}Id".underscore))
135
- else
136
- # just filters
137
- deep_tag.call('', @filters)
138
- end
139
- # Lastly, specify the fields to return, if desired
140
- @ret_elements.each { |r| req.tag!('IncludeRetElement', r) } if !@ret_elements.blank?
141
- }
142
- req.tag!(request_root, :requestID => self.class.next_request_id) {
143
- if container
144
- req.tag!(container) {
145
- inner_stuff.call
146
- }
147
- else
148
- inner_stuff.call
149
- end
150
- }
151
- # puts req.target!
152
- req.target!
153
- end
154
-
155
- private
156
- def uncast(v)
157
- case
158
- when v.is_a?(Time)
159
- v.xmlschema
160
- else
161
- v
162
- end
163
- end
164
- end
165
-
166
- module RequestSetArrayExt
167
- end
168
- end
169
- end
@@ -1,185 +0,0 @@
1
- require 'quickbooks/ruby_magic'
2
-
3
- module Quickbooks
4
- module Qbxml
5
- class ResponseSet
6
- include Enumerable
7
- def set
8
- unless @set.is_a?(Array)
9
- @set = []
10
- @set.extend(Quickbooks::Qbxml::ResponseSetArrayExt)
11
- end
12
- @set
13
- end
14
- delegate_methods [:each, :length, :first, :last, :[], :map, :join] => :set
15
- def <<(qbxml_response)
16
- if qbxml_response.is_a?(Quickbooks::Qbxml::Response)
17
- set << qbxml_response
18
- elsif qbxml_response.respond_to?(:each)
19
- qbxml_response.each do |response|
20
- self << response
21
- end
22
- else
23
- raise ArgumentError, "Cannot add object of type #{qbxml_response.class.name} to a Quickbooks::Qbxml::ResponseSet"
24
- end
25
- end
26
-
27
- def initialize(xml_or_hash)
28
- if(xml_or_hash.is_a?(Hash))
29
- self.append_from_hash(xml_or_hash)
30
- elsif(xml_or_hash.is_a?(String))
31
- self.append_from_xml(xml_or_hash)
32
- else
33
- raise ArgumentError, "Quickbooks::Qbxml::ResponseSet must be initialized with either a Hash or an xml-formatted String."
34
- end
35
- end
36
-
37
- def append_from_xml(xml)
38
- self.append_from_hash(Hash.from_xml(xml))
39
- end
40
- def append_from_hash(hsh)
41
- to_append = []
42
- hsh = hsh['QBXML'] if hsh.has_key?('QBXML')
43
- hsh = hsh['QBXMLMsgsRs'] if hsh.has_key?('QBXMLMsgsRs')
44
- # responses will contain one or more keys.
45
- hsh.each_key do |name|
46
- # response_type is either a single response object, or an array of response objects. Force it into an array:
47
- responses = hsh[name].is_a?(Array) ? hsh[name] : [hsh[name]]
48
- responses.each { |response| to_append << Response.new(name => response) }
49
- end
50
- self << to_append
51
- end
52
-
53
- class << self
54
- def from_xml(xml)
55
- new.append_from_xml(xml)
56
- end
57
- def from_hash(hsh)
58
- new.append_from_hash(hsh)
59
- end
60
- end
61
- end
62
-
63
- class Response
64
- attr_accessor :response_type, :status, :message, :severity, :ret_items
65
- # For Development purposes:
66
- attr_accessor :raw_response
67
-
68
- def initialize(xml_or_hash)
69
- if(xml_or_hash.is_a?(Hash))
70
- self.import_from_hash(xml_or_hash)
71
- elsif(xml_or_hash.is_a?(String))
72
- self.import_from_xml(xml_or_hash)
73
- else
74
- raise ArgumentError, "Quickbooks::Qbxml::ResponseSet must be initialized with either a Hash or an xml-formatted String."
75
- end
76
- end
77
-
78
- def import_from_xml(xml)
79
- self.import_from_hash(Hash.from_xml(xml))
80
- self
81
- end
82
- def import_from_hash(hsh)
83
- raise ArgumentError, "Hash passed to Quickbooks::Qbxml::Response.from_hash must contain only one top-level key" unless hsh.keys.length == 1
84
- name = hsh.keys.first
85
- # for development
86
- self.raw_response = hsh
87
- # * * * *
88
- hsh = hsh[name]
89
-
90
- self.status = hsh['statusCode'].to_i
91
- self.severity = hsh['statusSeverity']
92
- self.message = hsh['statusMessage']
93
- # if self.status == 0 # Status is good, proceed with eating the request.
94
- if m = name.match(/^(List|Txn)Del(etedQuery)?Rs$/)
95
- # (List|Txn)DelRs, or (List|Txn)DeletedQueryRs - both return just a few attributes, like ListID / TxnID and TimeDeleted
96
- self.response_type = hsh.delete(m[1]+'DelType')
97
- # self.ret_items = ResponseObject.new(self.response_type, hsh.dup)
98
- self.ret_items = hsh.dup
99
- elsif m = name.match(/^([A-Za-z][a-z]+)(Query|Mod|Add)Rs$/)
100
- self.response_type = m[1]
101
- self.ret_items = hsh[self.response_type+'Ret']
102
- else
103
- raise "Could not read this response:\n#{self.raw_response.inspect}"
104
- end
105
- # else # Status is bad.
106
-
107
- # end
108
- # puts self.inspect
109
- self
110
- end
111
-
112
-
113
- class << self
114
- def from_xml(xml)
115
- new.import_from_xml(xml)
116
- end
117
- def from_hash(hsh)
118
- new.import_from_hash(hsh)
119
- end
120
- end
121
-
122
- def instantiatable? # Just checks to see if it can create an object of this type, and if there is actually data to instantiate
123
- self.response_type ? (Quickbooks.const_defined?(self.response_type) && self.ret_items.is_a?(Hash) || (self.ret_items.is_a?(Array) && self.ret_items[0].is_a?(Hash))) : false
124
- end
125
- def success?
126
- self.status == 0
127
- end
128
- def error?
129
- !success?
130
- end
131
-
132
- def instantiate(reinstantiate=nil)
133
- objs = []
134
- (self.ret_items.is_a?(Array) ? self.ret_items : [self.ret_items]).each do |ret_item|
135
- obj = reinstantiate if reinstantiate
136
- if instantiatable?
137
- if self.status == 0
138
- if obj.nil?
139
- obj = "Quickbooks::#{self.response_type}".constantize.instantiate(ret_item)
140
- else
141
- obj.class.instantiate(obj, ret_item)
142
- end
143
- else
144
- # Instantiatable, but some error status. For any error status
145
- if obj.nil? # Must be a new object. Just as well, create a new object WITHOUT any original_attributes.
146
- obj = "Quickbooks::#{self.response_type}".constantize.new(ret_item)
147
- else # An existing object. Must be an update or delete request. Update object's original_attributes.
148
- updated = []
149
- ret_item.each do |k,v|
150
- k = k.underscore
151
- if obj.original_values[k] != v
152
- updated << k
153
- if obj.class.instance_variable_get('@object_properties').has_key?(k.to_sym)
154
- obj.original_values[k] = obj.class.instance_variable_get('@object_properties')[k.to_sym].new(v)
155
- else
156
- obj.original_values[k] = v
157
- end
158
- end
159
- end
160
- # Update object's 'read-only' attributes (as well as in the original_values):
161
- obj.class.read_only.stringify_values.camelize_values.each do |k|
162
- obj.send(k.underscore + '=', ret_item[k]) if ret_item.has_key?(k) && obj.respond_to?(k.underscore + '=')
163
- end
164
- self.message = self.message + " Other properties were out of date: [" + updated.join(', ') + '].'
165
- end
166
- obj.errors << {:code => self.status, :message => self.message, :response => self}
167
- end
168
- else
169
- if self.status == 0
170
- obj.errors << {:code => nil, :message => "Cannot instantiate object of type #{self.response_type}!", :response => self}
171
- else
172
- obj.errors << {:code => self.status, :message => self.message, :response => self}
173
- end
174
- end
175
- obj.response_log << self unless obj.nil?
176
- objs << obj
177
- end
178
- objs.length > 1 ? objs : objs[0] # Single or nil if not more than one.
179
- end
180
- end
181
-
182
- module ResponseSetArrayExt
183
- end
184
- end
185
- end