quickbooks 0.0.3 → 0.0.5

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (186) hide show
  1. data/README +9 -5
  2. data/Rakefile +2 -2
  3. data/doc/classes/Array.html +244 -0
  4. data/doc/classes/Array.src/M000001.html +18 -0
  5. data/doc/classes/Array.src/M000002.html +19 -0
  6. data/doc/classes/Array.src/M000003.html +18 -0
  7. data/doc/classes/Array.src/M000004.html +23 -0
  8. data/doc/classes/Array.src/M000005.html +18 -0
  9. data/doc/classes/Array.src/M000006.html +21 -0
  10. data/doc/classes/Array.src/M000007.html +18 -0
  11. data/doc/classes/Array.src/M000008.html +18 -0
  12. data/doc/classes/Class.html +5 -5
  13. data/doc/classes/Class.src/{M000003.html → M000027.html} +1 -1
  14. data/doc/classes/Hash.html +264 -14
  15. data/doc/classes/Hash.src/M000009.html +18 -0
  16. data/doc/classes/Hash.src/M000010.html +21 -0
  17. data/doc/classes/Hash.src/M000011.html +18 -0
  18. data/doc/classes/Hash.src/M000012.html +21 -0
  19. data/doc/classes/Hash.src/M000013.html +18 -0
  20. data/doc/classes/Hash.src/{M000001.html → M000014.html} +6 -5
  21. data/doc/classes/Hash.src/{M000002.html → M000015.html} +6 -2
  22. data/doc/classes/Hash.src/M000016.html +20 -0
  23. data/doc/classes/Hash.src/M000017.html +18 -0
  24. data/doc/classes/Hash.src/M000018.html +20 -0
  25. data/doc/classes/Hash.src/M000019.html +38 -0
  26. data/doc/classes/{Quickbooks/Qbxml/Error.src/M000031.html → Hash.src/M000020.html} +5 -5
  27. data/doc/classes/Hash.src/M000021.html +18 -0
  28. data/doc/classes/Hash.src/M000022.html +20 -0
  29. data/doc/classes/Hash.src/M000023.html +18 -0
  30. data/doc/classes/Hash.src/M000024.html +18 -0
  31. data/doc/classes/Hash.src/M000025.html +18 -0
  32. data/doc/classes/Hash.src/M000026.html +22 -0
  33. data/doc/classes/Object.html +56 -22
  34. data/doc/classes/Object.src/{M000004.html → M000028.html} +0 -0
  35. data/doc/classes/Object.src/{M000005.html → M000029.html} +0 -0
  36. data/doc/classes/Object.src/{M000006.html → M000030.html} +1 -1
  37. data/doc/classes/Object.src/{M000007.html → M000031.html} +0 -0
  38. data/doc/classes/Object.src/M000032.html +18 -0
  39. data/doc/classes/Object.src/M000033.html +18 -0
  40. data/doc/classes/QBHelpers/Ole.html +17 -17
  41. data/doc/classes/QBHelpers/Ole.src/{M000066.html → M000108.html} +0 -0
  42. data/doc/classes/QBHelpers/Ole.src/{M000067.html → M000109.html} +0 -0
  43. data/doc/classes/QBHelpers/Ole.src/{M000068.html → M000110.html} +0 -0
  44. data/doc/classes/Quickbooks.html +44 -4
  45. data/doc/classes/Quickbooks/{Qbxml/Error.html → Address.html} +14 -43
  46. data/doc/classes/Quickbooks/Address.src/M000107.html +19 -0
  47. data/doc/classes/Quickbooks/Base.html +118 -243
  48. data/doc/classes/Quickbooks/Base.src/{M000034.html → M000080.html} +1 -1
  49. data/doc/classes/Quickbooks/Base.src/{M000035.html → M000081.html} +1 -1
  50. data/doc/classes/Quickbooks/Base.src/{M000036.html → M000082.html} +1 -1
  51. data/doc/classes/Quickbooks/Base.src/{M000037.html → M000083.html} +1 -1
  52. data/doc/classes/Quickbooks/Base.src/M000084.html +23 -0
  53. data/doc/classes/Quickbooks/Base.src/{M000041.html → M000085.html} +1 -1
  54. data/doc/classes/Quickbooks/Base.src/{M000042.html → M000086.html} +2 -2
  55. data/doc/classes/Quickbooks/Base.src/{M000043.html → M000087.html} +3 -2
  56. data/doc/classes/Quickbooks/Base.src/M000088.html +19 -0
  57. data/doc/classes/Quickbooks/Base.src/{M000045.html → M000089.html} +1 -1
  58. data/doc/classes/Quickbooks/Base.src/M000090.html +19 -0
  59. data/doc/classes/Quickbooks/Base.src/{M000052.html → M000091.html} +1 -1
  60. data/doc/classes/Quickbooks/Base.src/M000092.html +45 -0
  61. data/doc/classes/Quickbooks/Base.src/{M000054.html → M000093.html} +2 -2
  62. data/doc/classes/Quickbooks/Base.src/M000094.html +18 -0
  63. data/doc/classes/Quickbooks/Base.src/M000095.html +20 -0
  64. data/doc/classes/Quickbooks/BillAddress.html +113 -0
  65. data/doc/classes/Quickbooks/Connection.html +68 -68
  66. data/doc/classes/Quickbooks/Connection.src/{M000056.html → M000097.html} +0 -0
  67. data/doc/classes/Quickbooks/Connection.src/{M000057.html → M000098.html} +0 -0
  68. data/doc/classes/Quickbooks/Connection.src/{M000058.html → M000099.html} +0 -1
  69. data/doc/classes/Quickbooks/Connection.src/{M000059.html → M000100.html} +1 -1
  70. data/doc/classes/Quickbooks/Connection.src/{M000060.html → M000101.html} +1 -1
  71. data/doc/classes/Quickbooks/Connection.src/{M000061.html → M000102.html} +2 -2
  72. data/doc/classes/Quickbooks/Connection.src/{M000062.html → M000103.html} +1 -1
  73. data/doc/classes/Quickbooks/Connection.src/{M000063.html → M000104.html} +1 -1
  74. data/doc/classes/Quickbooks/Connection.src/{M000064.html → M000105.html} +1 -1
  75. data/doc/classes/Quickbooks/Connection.src/{M000065.html → M000106.html} +2 -2
  76. data/doc/classes/Quickbooks/CreditCardInfo.html +113 -0
  77. data/doc/classes/Quickbooks/CustomerTypeRef.html +113 -0
  78. data/doc/classes/Quickbooks/ItemSalesTaxRef.html +113 -0
  79. data/doc/classes/Quickbooks/JobTypeRef.html +113 -0
  80. data/doc/classes/Quickbooks/ListItem.html +21 -44
  81. data/doc/classes/Quickbooks/ListItem.src/M000078.html +19 -0
  82. data/doc/classes/Quickbooks/ListItem.src/M000079.html +18 -0
  83. data/doc/classes/Quickbooks/Model.html +469 -0
  84. data/doc/classes/Quickbooks/Model.src/M000059.html +24 -0
  85. data/doc/classes/Quickbooks/Model.src/M000060.html +18 -0
  86. data/doc/classes/Quickbooks/Model.src/M000061.html +18 -0
  87. data/doc/classes/Quickbooks/Model.src/M000062.html +18 -0
  88. data/doc/classes/Quickbooks/Model.src/M000063.html +18 -0
  89. data/doc/classes/Quickbooks/Model.src/M000064.html +18 -0
  90. data/doc/classes/Quickbooks/Model.src/M000065.html +32 -0
  91. data/doc/classes/Quickbooks/Model.src/M000066.html +32 -0
  92. data/doc/classes/Quickbooks/Model.src/M000067.html +18 -0
  93. data/doc/classes/Quickbooks/{Base.src/M000046.html → Model.src/M000068.html} +2 -3
  94. data/doc/classes/Quickbooks/{Base.src/M000047.html → Model.src/M000069.html} +4 -4
  95. data/doc/classes/Quickbooks/{Base.src/M000048.html → Model.src/M000070.html} +2 -2
  96. data/doc/classes/Quickbooks/{Base.src/M000049.html → Model.src/M000071.html} +2 -2
  97. data/doc/classes/Quickbooks/{Base.src/M000050.html → Model.src/M000072.html} +3 -3
  98. data/doc/classes/Quickbooks/{Base.src/M000051.html → Model.src/M000073.html} +6 -5
  99. data/doc/classes/Quickbooks/Model.src/M000074.html +28 -0
  100. data/doc/classes/Quickbooks/Model.src/M000075.html +28 -0
  101. data/doc/classes/Quickbooks/Model.src/M000076.html +21 -0
  102. data/doc/classes/Quickbooks/Model.src/M000077.html +23 -0
  103. data/doc/classes/Quickbooks/ParentRef.html +113 -0
  104. data/doc/classes/Quickbooks/PreferredPaymentMethodRef.html +113 -0
  105. data/doc/classes/Quickbooks/PriceLevelRef.html +113 -0
  106. data/doc/classes/Quickbooks/Qbxml.html +0 -5
  107. data/doc/classes/Quickbooks/Qbxml/Request.html +55 -23
  108. data/doc/classes/Quickbooks/Qbxml/Request.src/M000050.html +34 -0
  109. data/doc/classes/Quickbooks/Qbxml/Request.src/{M000025.html → M000051.html} +2 -2
  110. data/doc/classes/Quickbooks/Qbxml/Request.src/M000052.html +81 -0
  111. data/doc/classes/Quickbooks/Qbxml/RequestSet.html +20 -20
  112. data/doc/classes/Quickbooks/Qbxml/RequestSet.src/{M000027.html → M000053.html} +0 -0
  113. data/doc/classes/Quickbooks/Qbxml/RequestSet.src/{M000028.html → M000054.html} +0 -0
  114. data/doc/classes/Quickbooks/Qbxml/RequestSet.src/{M000029.html → M000055.html} +0 -0
  115. data/doc/classes/Quickbooks/Qbxml/RequestSet.src/{M000030.html → M000056.html} +0 -0
  116. data/doc/classes/Quickbooks/Qbxml/Response.html +46 -46
  117. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000015.html → M000041.html} +1 -1
  118. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000016.html → M000042.html} +1 -1
  119. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000017.html → M000043.html} +1 -2
  120. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000018.html → M000044.html} +1 -1
  121. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000019.html → M000045.html} +1 -1
  122. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000020.html → M000046.html} +1 -1
  123. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000021.html → M000047.html} +1 -1
  124. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000022.html → M000048.html} +1 -1
  125. data/doc/classes/Quickbooks/Qbxml/Response.src/{M000023.html → M000049.html} +22 -11
  126. data/doc/classes/Quickbooks/Qbxml/ResponseSet.html +35 -35
  127. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000008.html → M000034.html} +1 -1
  128. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000009.html → M000035.html} +1 -1
  129. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000010.html → M000036.html} +1 -1
  130. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000011.html → M000037.html} +1 -1
  131. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000012.html → M000038.html} +1 -1
  132. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000013.html → M000039.html} +1 -1
  133. data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/{M000014.html → M000040.html} +1 -1
  134. data/doc/classes/Quickbooks/Ref.html +139 -0
  135. data/doc/classes/Quickbooks/Ref.src/M000096.html +18 -0
  136. data/doc/classes/Quickbooks/SalesRepRef.html +113 -0
  137. data/doc/classes/Quickbooks/SalesTaxCodeRef.html +113 -0
  138. data/doc/classes/Quickbooks/ShipAddress.html +113 -0
  139. data/doc/classes/Quickbooks/TermsRef.html +113 -0
  140. data/doc/classes/Quickbooks/Transaction.html +21 -62
  141. data/doc/classes/Quickbooks/Transaction.src/M000057.html +19 -0
  142. data/doc/classes/Quickbooks/Transaction.src/M000058.html +18 -0
  143. data/doc/created.rid +1 -1
  144. data/doc/files/README.html +15 -4
  145. data/doc/files/lib/quickbooks/base_rb.html +15 -8
  146. data/doc/files/lib/quickbooks/connection_rb.html +1 -1
  147. data/doc/files/lib/quickbooks/model_rb.html +108 -0
  148. data/doc/files/lib/quickbooks/{qbxml/error_rb.html → models/common/address_rb.html} +5 -5
  149. data/doc/files/lib/quickbooks/models/common/all_refs_rb.html +101 -0
  150. data/doc/files/lib/quickbooks/models/customer/credit_card_info_rb.html +101 -0
  151. data/doc/files/lib/quickbooks/models/customer_rb.html +10 -1
  152. data/doc/files/lib/quickbooks/models/list_item_rb.html +1 -1
  153. data/doc/files/lib/quickbooks/models/transaction_rb.html +1 -1
  154. data/doc/files/lib/quickbooks/ole_helper_rb.html +1 -1
  155. data/doc/files/lib/quickbooks/qbxml/request_rb.html +1 -1
  156. data/doc/files/lib/quickbooks/qbxml/response_rb.html +1 -2
  157. data/doc/files/lib/quickbooks/qbxml_rb.html +109 -0
  158. data/doc/files/lib/quickbooks/ruby_magic_rb.html +1 -1
  159. data/doc/fr_class_index.html +16 -1
  160. data/doc/fr_file_index.html +5 -1
  161. data/doc/fr_method_index.html +110 -68
  162. data/lib/quickbooks/base.rb +54 -95
  163. data/lib/quickbooks/connection.rb +2 -3
  164. data/lib/quickbooks/model.rb +176 -0
  165. data/lib/quickbooks/models/common/address.rb +14 -0
  166. data/lib/quickbooks/models/common/all_refs.rb +36 -0
  167. data/lib/quickbooks/models/customer.rb +30 -31
  168. data/lib/quickbooks/models/customer/credit_card_info.rb +5 -0
  169. data/lib/quickbooks/models/list_item.rb +27 -16
  170. data/lib/quickbooks/models/transaction.rb +21 -12
  171. data/lib/quickbooks/qbxml.rb +2 -0
  172. data/lib/quickbooks/qbxml/request.rb +80 -31
  173. data/lib/quickbooks/qbxml/response.rb +21 -12
  174. data/lib/quickbooks/ruby_magic.rb +130 -4
  175. metadata +146 -74
  176. data/doc/classes/Quickbooks/Base.src/M000038.html +0 -19
  177. data/doc/classes/Quickbooks/Base.src/M000039.html +0 -25
  178. data/doc/classes/Quickbooks/Base.src/M000040.html +0 -27
  179. data/doc/classes/Quickbooks/Base.src/M000044.html +0 -19
  180. data/doc/classes/Quickbooks/Base.src/M000053.html +0 -36
  181. data/doc/classes/Quickbooks/Base.src/M000055.html +0 -18
  182. data/doc/classes/Quickbooks/ListItem.src/M000033.html +0 -31
  183. data/doc/classes/Quickbooks/Qbxml/Request.src/M000024.html +0 -23
  184. data/doc/classes/Quickbooks/Qbxml/Request.src/M000026.html +0 -57
  185. data/doc/classes/Quickbooks/Transaction.src/M000032.html +0 -26
  186. data/lib/quickbooks/qbxml/error.rb +0 -20
@@ -56,7 +56,7 @@
56
56
  </tr>
57
57
  <tr class="top-aligned-row">
58
58
  <td><strong>Last Update:</strong></td>
59
- <td>Fri Jan 11 16:22:32 -0500 2008</td>
59
+ <td>Tue Jan 29 14:08:00 -0500 2008</td>
60
60
  </tr>
61
61
  </table>
62
62
  </div>
@@ -20,24 +20,39 @@
20
20
  <div id="index">
21
21
  <h1 class="section-bar">Classes</h1>
22
22
  <div id="index-entries">
23
+ <a href="classes/Array.html">Array</a><br />
23
24
  <a href="classes/Class.html">Class</a><br />
24
25
  <a href="classes/Hash.html">Hash</a><br />
25
26
  <a href="classes/Object.html">Object</a><br />
26
27
  <a href="classes/QBHelpers.html">QBHelpers</a><br />
27
28
  <a href="classes/QBHelpers/Ole.html">QBHelpers::Ole</a><br />
28
29
  <a href="classes/Quickbooks.html">Quickbooks</a><br />
30
+ <a href="classes/Quickbooks/Address.html">Quickbooks::Address</a><br />
29
31
  <a href="classes/Quickbooks/Base.html">Quickbooks::Base</a><br />
32
+ <a href="classes/Quickbooks/BillAddress.html">Quickbooks::BillAddress</a><br />
30
33
  <a href="classes/Quickbooks/Connection.html">Quickbooks::Connection</a><br />
34
+ <a href="classes/Quickbooks/CreditCardInfo.html">Quickbooks::CreditCardInfo</a><br />
31
35
  <a href="classes/Quickbooks/Customer.html">Quickbooks::Customer</a><br />
36
+ <a href="classes/Quickbooks/CustomerTypeRef.html">Quickbooks::CustomerTypeRef</a><br />
37
+ <a href="classes/Quickbooks/ItemSalesTaxRef.html">Quickbooks::ItemSalesTaxRef</a><br />
38
+ <a href="classes/Quickbooks/JobTypeRef.html">Quickbooks::JobTypeRef</a><br />
32
39
  <a href="classes/Quickbooks/ListItem.html">Quickbooks::ListItem</a><br />
40
+ <a href="classes/Quickbooks/Model.html">Quickbooks::Model</a><br />
41
+ <a href="classes/Quickbooks/ParentRef.html">Quickbooks::ParentRef</a><br />
42
+ <a href="classes/Quickbooks/PreferredPaymentMethodRef.html">Quickbooks::PreferredPaymentMethodRef</a><br />
43
+ <a href="classes/Quickbooks/PriceLevelRef.html">Quickbooks::PriceLevelRef</a><br />
33
44
  <a href="classes/Quickbooks/Qbxml.html">Quickbooks::Qbxml</a><br />
34
- <a href="classes/Quickbooks/Qbxml/Error.html">Quickbooks::Qbxml::Error</a><br />
35
45
  <a href="classes/Quickbooks/Qbxml/Request.html">Quickbooks::Qbxml::Request</a><br />
36
46
  <a href="classes/Quickbooks/Qbxml/RequestSet.html">Quickbooks::Qbxml::RequestSet</a><br />
37
47
  <a href="classes/Quickbooks/Qbxml/RequestSetArrayExt.html">Quickbooks::Qbxml::RequestSetArrayExt</a><br />
38
48
  <a href="classes/Quickbooks/Qbxml/Response.html">Quickbooks::Qbxml::Response</a><br />
39
49
  <a href="classes/Quickbooks/Qbxml/ResponseSet.html">Quickbooks::Qbxml::ResponseSet</a><br />
40
50
  <a href="classes/Quickbooks/Qbxml/ResponseSetArrayExt.html">Quickbooks::Qbxml::ResponseSetArrayExt</a><br />
51
+ <a href="classes/Quickbooks/Ref.html">Quickbooks::Ref</a><br />
52
+ <a href="classes/Quickbooks/SalesRepRef.html">Quickbooks::SalesRepRef</a><br />
53
+ <a href="classes/Quickbooks/SalesTaxCodeRef.html">Quickbooks::SalesTaxCodeRef</a><br />
54
+ <a href="classes/Quickbooks/ShipAddress.html">Quickbooks::ShipAddress</a><br />
55
+ <a href="classes/Quickbooks/TermsRef.html">Quickbooks::TermsRef</a><br />
41
56
  <a href="classes/Quickbooks/Transaction.html">Quickbooks::Transaction</a><br />
42
57
  </div>
43
58
  </div>
@@ -25,11 +25,15 @@
25
25
  <a href="files/lib/quickbooks_rb.html">lib/quickbooks.rb</a><br />
26
26
  <a href="files/lib/quickbooks/base_rb.html">lib/quickbooks/base.rb</a><br />
27
27
  <a href="files/lib/quickbooks/connection_rb.html">lib/quickbooks/connection.rb</a><br />
28
+ <a href="files/lib/quickbooks/model_rb.html">lib/quickbooks/model.rb</a><br />
29
+ <a href="files/lib/quickbooks/models/common/address_rb.html">lib/quickbooks/models/common/address.rb</a><br />
30
+ <a href="files/lib/quickbooks/models/common/all_refs_rb.html">lib/quickbooks/models/common/all_refs.rb</a><br />
28
31
  <a href="files/lib/quickbooks/models/customer_rb.html">lib/quickbooks/models/customer.rb</a><br />
32
+ <a href="files/lib/quickbooks/models/customer/credit_card_info_rb.html">lib/quickbooks/models/customer/credit_card_info.rb</a><br />
29
33
  <a href="files/lib/quickbooks/models/list_item_rb.html">lib/quickbooks/models/list_item.rb</a><br />
30
34
  <a href="files/lib/quickbooks/models/transaction_rb.html">lib/quickbooks/models/transaction.rb</a><br />
31
35
  <a href="files/lib/quickbooks/ole_helper_rb.html">lib/quickbooks/ole_helper.rb</a><br />
32
- <a href="files/lib/quickbooks/qbxml/error_rb.html">lib/quickbooks/qbxml/error.rb</a><br />
36
+ <a href="files/lib/quickbooks/qbxml_rb.html">lib/quickbooks/qbxml.rb</a><br />
33
37
  <a href="files/lib/quickbooks/qbxml/request_rb.html">lib/quickbooks/qbxml/request.rb</a><br />
34
38
  <a href="files/lib/quickbooks/qbxml/response_rb.html">lib/quickbooks/qbxml/response.rb</a><br />
35
39
  <a href="files/lib/quickbooks/ruby_magic_rb.html">lib/quickbooks/ruby_magic.rb</a><br />
@@ -20,74 +20,116 @@
20
20
  <div id="index">
21
21
  <h1 class="section-bar">Methods</h1>
22
22
  <div id="index-entries">
23
- <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000009"><< (Quickbooks::Qbxml::ResponseSet)</a><br />
24
- <a href="classes/Quickbooks/Qbxml/RequestSet.html#M000028"><< (Quickbooks::Qbxml::RequestSet)</a><br />
25
- <a href="classes/Quickbooks/Base.html#M000043">all (Quickbooks::Base)</a><br />
26
- <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000012">append_from_hash (Quickbooks::Qbxml::ResponseSet)</a><br />
27
- <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000011">append_from_xml (Quickbooks::Qbxml::ResponseSet)</a><br />
28
- <a href="classes/Quickbooks/Base.html#M000047">attributes (Quickbooks::Base)</a><br />
29
- <a href="classes/Quickbooks/Base.html#M000048">attributes= (Quickbooks::Base)</a><br />
30
- <a href="classes/Hash.html#M000001">camelize_keys! (Hash)</a><br />
31
- <a href="classes/Quickbooks/Transaction.html#M000032">child_types (Quickbooks::Transaction)</a><br />
32
- <a href="classes/Quickbooks/ListItem.html#M000033">child_types (Quickbooks::ListItem)</a><br />
33
- <a href="classes/Class.html#M000003">class_leaf_name (Class)</a><br />
34
- <a href="classes/Quickbooks/Connection.html#M000065">close (Quickbooks::Connection)</a><br />
35
- <a href="classes/Quickbooks/Connection.html#M000059">connected? (Quickbooks::Connection)</a><br />
36
- <a href="classes/Quickbooks/Base.html#M000036">connection (Quickbooks::Base)</a><br />
37
- <a href="classes/Quickbooks/Connection.html#M000062">connection (Quickbooks::Connection)</a><br />
38
- <a href="classes/Quickbooks/Base.html#M000037">connection= (Quickbooks::Base)</a><br />
39
- <a href="classes/Quickbooks/Connection.html#M000056">connections (Quickbooks::Connection)</a><br />
40
- <a href="classes/Quickbooks/Connection.html#M000057">connections= (Quickbooks::Connection)</a><br />
41
- <a href="classes/Quickbooks/Base.html#M000045">create (Quickbooks::Base)</a><br />
42
- <a href="classes/Object.html#M000004">delegate_methods (Object)</a><br />
43
- <a href="classes/Quickbooks/Base.html#M000055">destroy (Quickbooks::Base)</a><br />
44
- <a href="classes/Hash.html#M000002">diff (Hash)</a><br />
45
- <a href="classes/Quickbooks/Base.html#M000050">dirty? (Quickbooks::Base)</a><br />
46
- <a href="classes/Quickbooks/Base.html#M000051">dirty_attributes (Quickbooks::Base)</a><br />
47
- <a href="classes/Quickbooks/Connection.html#M000064">end_session (Quickbooks::Connection)</a><br />
48
- <a href="classes/Quickbooks/Qbxml/Response.html#M000022">error? (Quickbooks::Qbxml::Response)</a><br />
49
- <a href="classes/Quickbooks/Base.html#M000035">establish_connection (Quickbooks::Base)</a><br />
50
- <a href="classes/Quickbooks/Base.html#M000044">first (Quickbooks::Base)</a><br />
51
- <a href="classes/Quickbooks/Qbxml/Response.html#M000019">from_hash (Quickbooks::Qbxml::Response)</a><br />
52
- <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000014">from_hash (Quickbooks::Qbxml::ResponseSet)</a><br />
53
- <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000013">from_xml (Quickbooks::Qbxml::ResponseSet)</a><br />
54
- <a href="classes/Quickbooks/Qbxml/Response.html#M000018">from_xml (Quickbooks::Qbxml::Response)</a><br />
55
- <a href="classes/QBHelpers/Ole.html#M000067">get_variable (QBHelpers::Ole)</a><br />
56
- <a href="classes/Quickbooks/Qbxml/Response.html#M000017">import_from_hash (Quickbooks::Qbxml::Response)</a><br />
57
- <a href="classes/Quickbooks/Qbxml/Response.html#M000016">import_from_xml (Quickbooks::Qbxml::Response)</a><br />
58
- <a href="classes/Quickbooks/Qbxml/Response.html#M000020">instantiatable? (Quickbooks::Qbxml::Response)</a><br />
59
- <a href="classes/Quickbooks/Qbxml/Response.html#M000023">instantiate (Quickbooks::Qbxml::Response)</a><br />
60
- <a href="classes/Quickbooks/Base.html#M000042">instantiate (Quickbooks::Base)</a><br />
61
- <a href="classes/Object.html#M000007">is_not_one_of? (Object)</a><br />
62
- <a href="classes/Object.html#M000006">is_one_of? (Object)</a><br />
63
- <a href="classes/QBHelpers/Ole.html#M000068">method_missing (QBHelpers::Ole)</a><br />
64
- <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000010">new (Quickbooks::Qbxml::ResponseSet)</a><br />
65
- <a href="classes/QBHelpers/Ole.html#M000066">new (QBHelpers::Ole)</a><br />
66
- <a href="classes/Quickbooks/Qbxml/RequestSet.html#M000029">new (Quickbooks::Qbxml::RequestSet)</a><br />
67
- <a href="classes/Quickbooks/Qbxml/Request.html#M000024">new (Quickbooks::Qbxml::Request)</a><br />
68
- <a href="classes/Quickbooks/Base.html#M000046">new (Quickbooks::Base)</a><br />
69
- <a href="classes/Quickbooks/Connection.html#M000058">new (Quickbooks::Connection)</a><br />
70
- <a href="classes/Quickbooks/Qbxml/Response.html#M000015">new (Quickbooks::Qbxml::Response)</a><br />
71
- <a href="classes/Quickbooks/Base.html#M000052">new_record? (Quickbooks::Base)</a><br />
72
- <a href="classes/Quickbooks/Qbxml/Request.html#M000025">next_request_id (Quickbooks::Qbxml::Request)</a><br />
73
- <a href="classes/Quickbooks/Base.html#M000049">original_values (Quickbooks::Base)</a><br />
74
- <a href="classes/Quickbooks/Base.html#M000039">properties (Quickbooks::Base)</a><br />
75
- <a href="classes/Quickbooks/Base.html#M000038">property (Quickbooks::Base)</a><br />
76
- <a href="classes/Quickbooks/Base.html#M000054">reload (Quickbooks::Base)</a><br />
77
- <a href="classes/Quickbooks/Base.html#M000041">request (Quickbooks::Base)</a><br />
78
- <a href="classes/Quickbooks/Base.html#M000040">request_and_instantiate (Quickbooks::Base)</a><br />
79
- <a href="classes/Quickbooks/Base.html#M000053">save (Quickbooks::Base)</a><br />
80
- <a href="classes/Quickbooks/Connection.html#M000061">send_xml (Quickbooks::Connection)</a><br />
81
- <a href="classes/Quickbooks/Connection.html#M000063">session (Quickbooks::Connection)</a><br />
82
- <a href="classes/Quickbooks/Connection.html#M000060">session? (Quickbooks::Connection)</a><br />
83
- <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000008">set (Quickbooks::Qbxml::ResponseSet)</a><br />
84
- <a href="classes/Quickbooks/Qbxml/RequestSet.html#M000027">set (Quickbooks::Qbxml::RequestSet)</a><br />
85
- <a href="classes/Quickbooks/Qbxml/Response.html#M000021">success? (Quickbooks::Qbxml::Response)</a><br />
86
- <a href="classes/Quickbooks/Base.html#M000034">success? (Quickbooks::Base)</a><br />
87
- <a href="classes/Quickbooks/Qbxml/Error.html#M000031">success? (Quickbooks::Qbxml::Error)</a><br />
88
- <a href="classes/Object.html#M000005">to_a (Object)</a><br />
89
- <a href="classes/Quickbooks/Qbxml/RequestSet.html#M000030">to_xml (Quickbooks::Qbxml::RequestSet)</a><br />
90
- <a href="classes/Quickbooks/Qbxml/Request.html#M000026">to_xml (Quickbooks::Qbxml::Request)</a><br />
23
+ <a href="classes/Hash.html#M000016">- (Hash)</a><br />
24
+ <a href="classes/Quickbooks/Qbxml/RequestSet.html#M000054"><< (Quickbooks::Qbxml::RequestSet)</a><br />
25
+ <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000035"><< (Quickbooks::Qbxml::ResponseSet)</a><br />
26
+ <a href="classes/Quickbooks/Model.html#M000076">== (Quickbooks::Model)</a><br />
27
+ <a href="classes/Quickbooks/Base.html#M000095">== (Quickbooks::Base)</a><br />
28
+ <a href="classes/Quickbooks/Model.html#M000077">=== (Quickbooks::Model)</a><br />
29
+ <a href="classes/Quickbooks/Transaction.html#M000058">ListOrTxn (Quickbooks::Transaction)</a><br />
30
+ <a href="classes/Quickbooks/ListItem.html#M000079">ListOrTxn (Quickbooks::ListItem)</a><br />
31
+ <a href="classes/Quickbooks/Base.html#M000087">all (Quickbooks::Base)</a><br />
32
+ <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000038">append_from_hash (Quickbooks::Qbxml::ResponseSet)</a><br />
33
+ <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000037">append_from_xml (Quickbooks::Qbxml::ResponseSet)</a><br />
34
+ <a href="classes/Quickbooks/Model.html#M000069">attributes (Quickbooks::Model)</a><br />
35
+ <a href="classes/Quickbooks/Model.html#M000070">attributes= (Quickbooks::Model)</a><br />
36
+ <a href="classes/Hash.html#M000009">camelize_keys (Hash)</a><br />
37
+ <a href="classes/Hash.html#M000010">camelize_keys! (Hash)</a><br />
38
+ <a href="classes/Array.html#M000005">camelize_values (Array)</a><br />
39
+ <a href="classes/Array.html#M000006">camelize_values! (Array)</a><br />
40
+ <a href="classes/Quickbooks/Model.html#M000064">camelized_valid_filters (Quickbooks::Model)</a><br />
41
+ <a href="classes/Class.html#M000027">class_leaf_name (Class)</a><br />
42
+ <a href="classes/Quickbooks/Connection.html#M000106">close (Quickbooks::Connection)</a><br />
43
+ <a href="classes/Quickbooks/Connection.html#M000100">connected? (Quickbooks::Connection)</a><br />
44
+ <a href="classes/Quickbooks/Connection.html#M000103">connection (Quickbooks::Connection)</a><br />
45
+ <a href="classes/Quickbooks/Base.html#M000082">connection (Quickbooks::Base)</a><br />
46
+ <a href="classes/Quickbooks/Base.html#M000083">connection= (Quickbooks::Base)</a><br />
47
+ <a href="classes/Quickbooks/Connection.html#M000097">connections (Quickbooks::Connection)</a><br />
48
+ <a href="classes/Quickbooks/Connection.html#M000098">connections= (Quickbooks::Connection)</a><br />
49
+ <a href="classes/Quickbooks/Base.html#M000089">create (Quickbooks::Base)</a><br />
50
+ <a href="classes/Object.html#M000028">delegate_methods (Object)</a><br />
51
+ <a href="classes/Quickbooks/Base.html#M000094">destroy (Quickbooks::Base)</a><br />
52
+ <a href="classes/Hash.html#M000015">diff (Hash)</a><br />
53
+ <a href="classes/Quickbooks/Model.html#M000072">dirty? (Quickbooks::Model)</a><br />
54
+ <a href="classes/Quickbooks/Model.html#M000073">dirty_attributes (Quickbooks::Model)</a><br />
55
+ <a href="classes/Hash.html#M000022">each (Hash)</a><br />
56
+ <a href="classes/Hash.html#M000023">each_key (Hash)</a><br />
57
+ <a href="classes/Hash.html#M000024">each_value (Hash)</a><br />
58
+ <a href="classes/Quickbooks/Connection.html#M000105">end_session (Quickbooks::Connection)</a><br />
59
+ <a href="classes/Object.html#M000033">error? (Object)</a><br />
60
+ <a href="classes/Quickbooks/Qbxml/Response.html#M000048">error? (Quickbooks::Qbxml::Response)</a><br />
61
+ <a href="classes/Object.html#M000032">errors (Object)</a><br />
62
+ <a href="classes/Quickbooks/Base.html#M000081">establish_connection (Quickbooks::Base)</a><br />
63
+ <a href="classes/Quickbooks/Model.html#M000063">filter_aliases (Quickbooks::Model)</a><br />
64
+ <a href="classes/Quickbooks/Model.html#M000062">filter_aliases= (Quickbooks::Model)</a><br />
65
+ <a href="classes/Quickbooks/Base.html#M000088">first (Quickbooks::Base)</a><br />
66
+ <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000040">from_hash (Quickbooks::Qbxml::ResponseSet)</a><br />
67
+ <a href="classes/Quickbooks/Qbxml/Response.html#M000045">from_hash (Quickbooks::Qbxml::Response)</a><br />
68
+ <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000039">from_xml (Quickbooks::Qbxml::ResponseSet)</a><br />
69
+ <a href="classes/Quickbooks/Qbxml/Response.html#M000044">from_xml (Quickbooks::Qbxml::Response)</a><br />
70
+ <a href="classes/QBHelpers/Ole.html#M000109">get_variable (QBHelpers::Ole)</a><br />
71
+ <a href="classes/Quickbooks/Qbxml/Response.html#M000043">import_from_hash (Quickbooks::Qbxml::Response)</a><br />
72
+ <a href="classes/Quickbooks/Qbxml/Response.html#M000042">import_from_xml (Quickbooks::Qbxml::Response)</a><br />
73
+ <a href="classes/Quickbooks/Ref.html#M000096">inherited (Quickbooks::Ref)</a><br />
74
+ <a href="classes/Quickbooks/ListItem.html#M000078">inherited (Quickbooks::ListItem)</a><br />
75
+ <a href="classes/Quickbooks/Model.html#M000059">inherited (Quickbooks::Model)</a><br />
76
+ <a href="classes/Quickbooks/Address.html#M000107">inherited (Quickbooks::Address)</a><br />
77
+ <a href="classes/Quickbooks/Transaction.html#M000057">inherited (Quickbooks::Transaction)</a><br />
78
+ <a href="classes/Quickbooks/Qbxml/Response.html#M000046">instantiatable? (Quickbooks::Qbxml::Response)</a><br />
79
+ <a href="classes/Quickbooks/Base.html#M000086">instantiate (Quickbooks::Base)</a><br />
80
+ <a href="classes/Quickbooks/Qbxml/Response.html#M000049">instantiate (Quickbooks::Qbxml::Response)</a><br />
81
+ <a href="classes/Object.html#M000031">is_not_one_of? (Object)</a><br />
82
+ <a href="classes/Object.html#M000030">is_one_of? (Object)</a><br />
83
+ <a href="classes/Hash.html#M000020">keys (Hash)</a><br />
84
+ <a href="classes/QBHelpers/Ole.html#M000110">method_missing (QBHelpers::Ole)</a><br />
85
+ <a href="classes/Quickbooks/Qbxml/RequestSet.html#M000055">new (Quickbooks::Qbxml::RequestSet)</a><br />
86
+ <a href="classes/Quickbooks/Qbxml/Response.html#M000041">new (Quickbooks::Qbxml::Response)</a><br />
87
+ <a href="classes/Quickbooks/Connection.html#M000099">new (Quickbooks::Connection)</a><br />
88
+ <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000036">new (Quickbooks::Qbxml::ResponseSet)</a><br />
89
+ <a href="classes/QBHelpers/Ole.html#M000108">new (QBHelpers::Ole)</a><br />
90
+ <a href="classes/Quickbooks/Model.html#M000068">new (Quickbooks::Model)</a><br />
91
+ <a href="classes/Quickbooks/Base.html#M000090">new (Quickbooks::Base)</a><br />
92
+ <a href="classes/Quickbooks/Qbxml/Request.html#M000050">new (Quickbooks::Qbxml::Request)</a><br />
93
+ <a href="classes/Quickbooks/Base.html#M000091">new_record? (Quickbooks::Base)</a><br />
94
+ <a href="classes/Quickbooks/Qbxml/Request.html#M000051">next_request_id (Quickbooks::Qbxml::Request)</a><br />
95
+ <a href="classes/Hash.html#M000017">only (Hash)</a><br />
96
+ <a href="classes/Array.html#M000003">only (Array)</a><br />
97
+ <a href="classes/Array.html#M000004">only! (Array)</a><br />
98
+ <a href="classes/Hash.html#M000018">only! (Hash)</a><br />
99
+ <a href="classes/Array.html#M000007">order (Array)</a><br />
100
+ <a href="classes/Hash.html#M000019">order! (Hash)</a><br />
101
+ <a href="classes/Array.html#M000008">order! (Array)</a><br />
102
+ <a href="classes/Quickbooks/Model.html#M000071">original_values (Quickbooks::Model)</a><br />
103
+ <a href="classes/Quickbooks/Model.html#M000067">properties (Quickbooks::Model)</a><br />
104
+ <a href="classes/Quickbooks/Model.html#M000066">read_only (Quickbooks::Model)</a><br />
105
+ <a href="classes/Quickbooks/Model.html#M000065">read_write (Quickbooks::Model)</a><br />
106
+ <a href="classes/Quickbooks/Base.html#M000093">reload (Quickbooks::Base)</a><br />
107
+ <a href="classes/Quickbooks/Base.html#M000085">request (Quickbooks::Base)</a><br />
108
+ <a href="classes/Quickbooks/Base.html#M000084">request_and_instantiate (Quickbooks::Base)</a><br />
109
+ <a href="classes/Quickbooks/Base.html#M000092">save (Quickbooks::Base)</a><br />
110
+ <a href="classes/Quickbooks/Connection.html#M000102">send_xml (Quickbooks::Connection)</a><br />
111
+ <a href="classes/Quickbooks/Connection.html#M000104">session (Quickbooks::Connection)</a><br />
112
+ <a href="classes/Quickbooks/Connection.html#M000101">session? (Quickbooks::Connection)</a><br />
113
+ <a href="classes/Quickbooks/Qbxml/ResponseSet.html#M000034">set (Quickbooks::Qbxml::ResponseSet)</a><br />
114
+ <a href="classes/Quickbooks/Qbxml/RequestSet.html#M000053">set (Quickbooks::Qbxml::RequestSet)</a><br />
115
+ <a href="classes/Hash.html#M000013">stringify_values (Hash)</a><br />
116
+ <a href="classes/Array.html#M000001">stringify_values (Array)</a><br />
117
+ <a href="classes/Array.html#M000002">stringify_values! (Array)</a><br />
118
+ <a href="classes/Hash.html#M000014">stringify_values! (Hash)</a><br />
119
+ <a href="classes/Quickbooks/Qbxml/Response.html#M000047">success? (Quickbooks::Qbxml::Response)</a><br />
120
+ <a href="classes/Quickbooks/Base.html#M000080">success? (Quickbooks::Base)</a><br />
121
+ <a href="classes/Object.html#M000029">to_a (Object)</a><br />
122
+ <a href="classes/Quickbooks/Model.html#M000074">to_dirty_hash (Quickbooks::Model)</a><br />
123
+ <a href="classes/Quickbooks/Model.html#M000075">to_hash (Quickbooks::Model)</a><br />
124
+ <a href="classes/Quickbooks/Qbxml/RequestSet.html#M000056">to_xml (Quickbooks::Qbxml::RequestSet)</a><br />
125
+ <a href="classes/Quickbooks/Qbxml/Request.html#M000052">to_xml (Quickbooks::Qbxml::Request)</a><br />
126
+ <a href="classes/Hash.html#M000025">transform_keys (Hash)</a><br />
127
+ <a href="classes/Hash.html#M000026">transform_keys! (Hash)</a><br />
128
+ <a href="classes/Hash.html#M000011">underscore_keys (Hash)</a><br />
129
+ <a href="classes/Hash.html#M000012">underscore_keys! (Hash)</a><br />
130
+ <a href="classes/Quickbooks/Model.html#M000061">valid_filters (Quickbooks::Model)</a><br />
131
+ <a href="classes/Quickbooks/Model.html#M000060">valid_filters= (Quickbooks::Model)</a><br />
132
+ <a href="classes/Hash.html#M000021">values (Hash)</a><br />
91
133
  </div>
92
134
  </div>
93
135
  </body>
@@ -1,7 +1,8 @@
1
- # Contains Quickbooks::Base. Two models inherit directly from Quickbooks::Base: ListItem and Transaction.
2
- # All other models inherit from one of these.
1
+ # Contains Quickbooks::Base, which inherits from Quickbooks::Model. Simple objects like BillAddress and CreditCardInfo also
2
+ # inherit from Quickbooks::Model, but any whole-entity objects are below Quickbooks::Base in the inheritance tree. Two models
3
+ # inherit directly from Quickbooks::Base: ListItem and Transaction. All other whole-entity models inherit from either of these.
3
4
  #
4
- # Inheriting from ListItem:
5
+ # Inherits from ListItem:
5
6
  # - Account
6
7
  # - Account List
7
8
  # - BillingRate
@@ -40,7 +41,7 @@
40
41
  # - Vehicle
41
42
  # - Vendor
42
43
  # - VendorType
43
- # Inheriting from Transaction:
44
+ # Inherits from Transaction:
44
45
  # - Bill
45
46
  # - BillPaymentCheck
46
47
  # - BillPaymentCreditCard
@@ -68,11 +69,15 @@
68
69
 
69
70
  require 'activesupport'
70
71
  require 'quickbooks/connection'
71
- require 'quickbooks/qbxml/request'
72
- require 'quickbooks/qbxml/response'
72
+ require 'quickbooks/model'
73
+ require 'quickbooks/qbxml'
73
74
 
74
75
  module Quickbooks
75
- class Base
76
+ # Base is just base for ListItem and Transaction. It inherits from Model, just as Ref does.
77
+ class Base < Model
78
+
79
+ self.filter_aliases = {:limit => :max_returned}
80
+
76
81
  # Stores a log of Quickbooks::Qbxml::Response objects that were a result of methods performed on this object.
77
82
  attr_accessor :response_log
78
83
  def response_log #:nodoc:
@@ -88,6 +93,10 @@ module Quickbooks
88
93
  end
89
94
  class << self
90
95
 
96
+ # def inherited(klass)
97
+ # super
98
+ # end
99
+
91
100
  # Establishes a connection to the Quickbooks RDS Server for all Model Classes
92
101
  def establish_connection(application_name='RubyApplication', file='', user='', password='', connection_type='localQBD', connection_mode='DoNotCare')
93
102
  @@connection = Connection.new(application_name, file, user, password, connection_type, connection_mode)
@@ -108,40 +117,17 @@ module Quickbooks
108
117
  @connection = conn
109
118
  end
110
119
 
111
- # Register a property in the current class. For example in the Customer class:
112
- # property :first_name
113
- def property(*args)
114
- raise ArgumentError, "must include a property name" unless args.length > 0
115
- properties(*args)
116
- end
117
- # Register multiple properties at once. For example:
118
- # properties :first_name, :last_name, :phone, :alt_phone
119
- def properties(*args)
120
- if args.blank?
121
- @properties || (@properties = [])
122
- else
123
- args.each do |property|
124
- properties << property
125
- attr_accessor property
126
- end
127
- end
128
- end
129
-
130
120
  # Generates a request by sending *args to Quickbooks::Qbxml::Request.new, sends the request over the current connection,
131
121
  # and interprets the response using Quickbooks::Qbxml::ResponseSet.
132
122
  # The response is then instantiated into an object or an array of objects.
133
123
  #
134
124
  # This method is used mostly internally, but it is the yoke of this library - use it to perform custom requests.
135
125
  def request_and_instantiate(obj_or_args,*args)
136
- if obj_or_args.is_a?(Quickbooks::Base)
137
- reinstantiate = obj_or_args
138
- else
139
- reinstantiate = nil
140
- args.unshift(obj_or_args)
141
- end
142
-
126
+ # If an object is sent, we need to reinstantiate the response into that object
127
+ reinstantiate = obj_or_args.is_a?(Quickbooks::Base) ? obj_or_args : nil
143
128
  objects = [] # This will hold and return the instantiated objects from the quickbooks response
144
- self.request(*args).each { |response| objects << response.instantiate(reinstantiate) } # Does not instantiate if it's an error, but simply records response into response_log
129
+ # The following is subject to bugginess, IF the response contains more than one object: it will instantiate only the last one.
130
+ self.request(obj_or_args, *args).each { |response| objects << response.instantiate(reinstantiate) } # Does not instantiate if it's an error, but simply records response into response_log
145
131
  objects.length == 1 ? objects[0] : objects
146
132
  end
147
133
 
@@ -165,7 +151,7 @@ module Quickbooks
165
151
  attrs.each do |key,value|
166
152
  if obj.respond_to?(key.to_s.underscore+'=')
167
153
  obj.send(key.to_s.underscore+'=', value)
168
- obj.original_values[key.to_s.underscore] = value
154
+ obj.original_values[key.to_s.underscore] = obj.instance_variable_get('@' + key.to_s.underscore).dup
169
155
  end
170
156
  end if attrs
171
157
  obj # Will be either a nice object, or a Quickbooks::Qbxml::Error object.
@@ -173,13 +159,14 @@ module Quickbooks
173
159
 
174
160
  # Queries Quickbooks for all of the objects of the current class's type. For example, Quickbooks::Customer.all will return an array of Quickbooks::Customer objects representing all customers.
175
161
  def all(filters={})
176
- [request_and_instantiate(self.class_leaf_name, :query, filters)].flatten
162
+ filters.reverse_merge!(:active_status => 'All')
163
+ [request_and_instantiate(self, :query, filters)].flatten
177
164
  end
178
165
 
179
166
  # Queries Quickbooks for the first object of the current class's type. For example, Quickbooks::Customer.first will return a Quickbooks::Customer object representing the first customer.
180
167
  def first(filters={})
181
- filters.merge!(:MaxReturned => 1) unless filters.keys.include?(:ListID) || filters.keys.include?(:TxnID) || filters.keys.include?(:FullName)
182
- request_and_instantiate(self.class_leaf_name, :query, filters)
168
+ (filters.merge!(:max_returned => 1) unless filters.keys.include?(:list_id) || filters.keys.include?(:txn_id) || filters.keys.include?(:full_name)) if filters.is_a?(Hash)
169
+ request_and_instantiate(self, :query, filters)
183
170
  end
184
171
 
185
172
  # Creates a new object of the current class's type. For example, Quickbooks::Customer.create(:name => 'Tommy') will create a customer object with a Name of Tommy.
@@ -188,55 +175,11 @@ module Quickbooks
188
175
  end
189
176
  end
190
177
 
191
- # The default for all subclasses is simply to apply the attributes given, and mark the object as a new_record?
192
- def initialize(args={})
193
- self.attributes = args
178
+ def initialize(*args)
179
+ super # from Quickbooks::Model - sets the *args into attributes
194
180
  @new_record = true
195
181
  end
196
182
 
197
- # Returns a hash that represents all this object's attributes.
198
- def attributes
199
- attrs = {}
200
- self.class.properties.each do |column|
201
- attrs[column.to_s] = instance_variable_get('@' + column.to_s)
202
- end
203
- attrs
204
- end
205
- # Updates all attributes included in _attrs_ to the values given. The object will now be dirty?.
206
- def attributes=(attrs)
207
- raise ArgumentError, "attributes can only be set to a hash of attributes" unless attrs.is_a?(Hash)
208
- attrs.each do |key,value|
209
- if self.respond_to?(key.to_s.underscore+'=')
210
- self.send(key.to_s.underscore+'=', value)
211
- end
212
- end
213
- end
214
-
215
- # Keeps track of the original values the object had when it was instantiated from a quickbooks response. dirty? and dirty_attributes compare the current values with these ones.
216
- def original_values
217
- @original_values || (@original_values = {})
218
- end
219
-
220
- # Returns true if any attributes have changed since the object was last loaded or updated from Quickbooks.
221
- def dirty?
222
- # Concept: For each column that the current model includes, has the value been changed?
223
- self.class.properties.any? do |column|
224
- self.instance_variable_get('@' + column.to_s) != original_values[column.to_s]
225
- end
226
- end
227
-
228
- # Returns a hash of the attributes and their (new) values that have been changed since the object was last loaded or updated from Quickbooks.
229
- def dirty_attributes
230
- pairs = {}
231
- self.class.properties.each do |column|
232
- value = instance_variable_get('@' + column.to_s)
233
- if value != original_values[column.to_s]
234
- pairs[column.to_s] = value
235
- end
236
- end
237
- pairs
238
- end
239
-
240
183
  # Returns true if the object is a new object (that doesn't represent an existing object in Quickbooks).
241
184
  def new_record?
242
185
  @new_record
@@ -249,34 +192,50 @@ module Quickbooks
249
192
  # This way you can deal with the differences (conflicts), if you so desire, and simply call save again to commit your changes.
250
193
  def save
251
194
  return false unless dirty?
195
+ self.errors.clear # Clear out any errors: start with a clean slate!
252
196
  if new_record?
253
- self.class.request_and_instantiate(self, self.class.class_leaf_name, :add, dirty_attributes.camelize_keys!)
254
- @new_record = false if !dirty?
197
+ self.class.request_and_instantiate(self, :add)
198
+ ret = !dirty?
199
+ @new_record = false if ret
255
200
  else
256
201
  # Smart system that respects EditSequences and other people's changes.
257
202
  # 1) Try to save
258
203
  # 2) When we get a status of 3200, that means our EditSequence is not up to date
259
204
  # 3) Replace self's original_attributes with those just retrieved, and update the automatic attributes, like EditSequence and TimeModified
260
205
  # 4) Return false, return the object dirty but ready to save
261
- old_originals = original_values.dup
262
- self.class.request_and_instantiate(self, self.class.class_leaf_name, :mod, dirty_attributes.camelize_keys!.merge(:ListID => self.list_id, :EditSequence => self.edit_sequence))
263
- # If save failed because of old record, but none of the fields conflict, re-save.
264
- if dirty? && self.response_log.last.status == 3200
265
- # puts "Now Dirty: #{dirty_attributes.keys.join(', ')}\nUpdated: #{old_originals.diff(original_values).keys.join(', ')}"
266
- return self.save if dirty_attributes.keys.length == (dirty_attributes.keys - old_originals.diff(original_values).keys).length
206
+ old_originals = original_values.dup # Save the old_originals so we can detect any attributes that changed since we last loaded the object
207
+ ret = self.class.request_and_instantiate(self, :mod).error? ? false : true # Saves if possible, if EditSequence is out of date, it will read the up-to-date object into original_values
208
+ # If save failed (dirty?) because of old record (status 3200), but none of the fields conflict (attributes I've modified and are still different aren't the same attributes as any of the attributes someone else updated), then re-save!
209
+ if dirty? && self.response_log.last.status == 3200 && (dirty_attributes.only(dirty_attributes(old_originals).keys).keys - self.class.read_only.stringify_values).length == (dirty_attributes(old_originals).keys - old_originals.diff(original_values).keys - self.class.read_only.stringify_values).length
210
+ # 'Revert' fields I didn't modify to equal the values of the more up-to-date record just loaded.
211
+ # Fields I didn't modify: dirty_attributes - dirty_attributes(old_originals).keys
212
+ (dirty_attributes - dirty_attributes(old_originals).keys).each_key do |at|
213
+ self.send(at + '=', original_values[at]) if respond_to?(at + '=')
214
+ end
215
+ ret = self.save
267
216
  end
268
217
  end
269
- !dirty?
218
+ # ret should be a false value if self has errors. Either way, ret gets the errors too.
219
+ ret.errors << self.errors if self.error?
220
+ # Should be true or false with an error attached.
221
+ ret
270
222
  end
271
223
 
272
224
  # Reloads the record from Quickbooks, discarding any changes that have been made to it.
273
225
  def reload
274
- self.class.request_and_instantiate(self, self.class.class_leaf_name, :query, :ListID => self.list_id)
226
+ self.class.request_and_instantiate(self, :query)
275
227
  end
276
228
 
277
229
  # Destroys a record in Quickbooks. Note that even though Quickbooks will destroy the record, the record's ListID and DeletedTime can be accessed by doing a query for deleted objects of the appropriate type.
278
230
  def destroy
279
- self.class.request_and_instantiate(self, self.class.class_leaf_name, :delete, self.is_a?(Quickbooks::ListItem) ? {:ListID => self.list_id} : {:TxnID => self.txn_id}).success?
231
+ self.class.request_and_instantiate(self, :delete).success?
232
+ end
233
+
234
+ # Usual comparison (super), but add in false if either is a new record.
235
+ def ==(other)
236
+ return false unless other.is_a?(self.class)
237
+ return false if self.new_record? || other.new_record?
238
+ super
280
239
  end
281
240
  end
282
241
  end