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.
- data/LICENSE +1 -1
- data/Rakefile +4 -2
- data/doc/classes/Array.html +333 -40
- data/doc/classes/Array.src/M000037.html +18 -0
- data/doc/classes/Array.src/M000038.html +21 -0
- data/doc/classes/Array.src/M000039.html +18 -0
- data/doc/classes/Array.src/M000040.html +19 -0
- data/doc/classes/Array.src/M000041.html +18 -0
- data/doc/classes/Array.src/{M000004.html → M000042.html} +1 -1
- data/doc/classes/Array.src/M000043.html +18 -0
- data/doc/classes/Array.src/M000044.html +18 -0
- data/doc/classes/Array.src/{M000001.html → M000045.html} +1 -1
- data/doc/classes/Array.src/{M000002.html → M000046.html} +1 -1
- data/doc/classes/Array.src/{M000003.html → M000047.html} +1 -1
- data/doc/classes/Array.src/M000048.html +23 -0
- data/doc/classes/Array.src/{M000005.html → M000049.html} +1 -1
- data/doc/classes/Array.src/{M000006.html → M000050.html} +2 -2
- data/doc/classes/Array.src/{M000007.html → M000051.html} +1 -1
- data/doc/classes/Array.src/{M000008.html → M000052.html} +1 -1
- data/doc/classes/Array.src/M000053.html +18 -0
- data/doc/classes/Array.src/M000054.html +20 -0
- data/doc/classes/Array.src/M000055.html +18 -0
- data/doc/classes/Array.src/M000056.html +34 -0
- data/doc/classes/Array.src/M000057.html +19 -0
- data/doc/classes/Array.src/M000058.html +29 -0
- data/doc/classes/Array.src/M000059.html +18 -0
- data/doc/classes/Array.src/M000060.html +20 -0
- data/doc/classes/Array.src/M000061.html +18 -0
- data/doc/classes/Array.src/M000062.html +18 -0
- data/doc/classes/Array.src/M000063.html +19 -0
- data/doc/classes/Class.html +25 -6
- data/doc/classes/Class.src/M000075.html +18 -0
- data/doc/classes/Class.src/M000076.html +18 -0
- data/doc/classes/Hash.html +329 -103
- data/doc/classes/Hash.src/M000004.html +18 -0
- data/doc/classes/Hash.src/M000005.html +21 -0
- data/doc/classes/Hash.src/M000006.html +18 -0
- data/doc/classes/Hash.src/M000007.html +21 -0
- data/doc/classes/Hash.src/M000008.html +18 -0
- data/doc/classes/Hash.src/M000009.html +6 -4
- data/doc/classes/Hash.src/M000010.html +4 -7
- data/doc/classes/Hash.src/M000011.html +8 -4
- data/doc/classes/Hash.src/M000012.html +4 -7
- data/doc/classes/Hash.src/M000013.html +7 -4
- data/doc/classes/Hash.src/M000014.html +4 -7
- data/doc/classes/Hash.src/M000015.html +6 -12
- data/doc/classes/Hash.src/M000016.html +4 -6
- data/doc/classes/Hash.src/M000017.html +7 -4
- data/doc/classes/Hash.src/M000018.html +4 -6
- data/doc/classes/Hash.src/M000019.html +5 -22
- data/doc/classes/Hash.src/M000020.html +14 -5
- data/doc/classes/Hash.src/M000021.html +7 -5
- data/doc/classes/Hash.src/M000022.html +5 -7
- data/doc/classes/Hash.src/M000023.html +7 -5
- data/doc/classes/Hash.src/M000024.html +5 -5
- data/doc/classes/Hash.src/M000025.html +4 -4
- data/doc/classes/Hash.src/M000026.html +4 -8
- data/doc/classes/Hash.src/M000027.html +22 -0
- data/doc/classes/Hash.src/M000028.html +18 -0
- data/doc/classes/Hash.src/M000029.html +20 -0
- data/doc/classes/Hash.src/M000030.html +18 -0
- data/doc/classes/Hash.src/M000031.html +30 -0
- data/doc/classes/Hash.src/M000032.html +19 -0
- data/doc/classes/Hash.src/M000033.html +19 -0
- data/doc/classes/Hash.src/M000034.html +18 -0
- data/doc/classes/Hash.src/M000035.html +18 -0
- data/doc/classes/Hash.src/M000036.html +21 -0
- data/doc/classes/Object.html +75 -39
- data/doc/classes/Object.src/M000077.html +24 -0
- data/doc/classes/Object.src/M000078.html +19 -0
- data/doc/classes/Object.src/{M000028.html → M000079.html} +1 -1
- data/doc/classes/Object.src/{M000029.html → M000080.html} +1 -1
- data/doc/classes/Object.src/{M000030.html → M000081.html} +1 -1
- data/doc/classes/Object.src/{M000031.html → M000082.html} +1 -1
- data/doc/classes/Object.src/{M000032.html → M000083.html} +1 -1
- data/doc/classes/Object.src/{M000033.html → M000084.html} +2 -2
- data/doc/classes/OrderedArray.html +178 -0
- data/doc/classes/OrderedArray.src/M000001.html +18 -0
- data/doc/classes/OrderedArray.src/M000002.html +18 -0
- data/doc/classes/OrderedArray.src/M000003.html +18 -0
- data/doc/classes/OrderedHash.html +324 -0
- data/doc/classes/OrderedHash.src/M000064.html +19 -0
- data/doc/classes/OrderedHash.src/M000065.html +18 -0
- data/doc/classes/OrderedHash.src/M000066.html +18 -0
- data/doc/classes/OrderedHash.src/M000067.html +18 -0
- data/doc/classes/OrderedHash.src/M000068.html +18 -0
- data/doc/classes/OrderedHash.src/M000069.html +18 -0
- data/doc/classes/OrderedHash.src/M000070.html +20 -0
- data/doc/classes/OrderedHash.src/M000071.html +18 -0
- data/doc/classes/OrderedHash.src/M000072.html +18 -0
- data/doc/classes/OrderedHash.src/M000073.html +19 -0
- data/doc/classes/OrderedHash.src/M000074.html +24 -0
- data/doc/classes/{Quickbooks/Qbxml.html → Qbxml.html} +11 -13
- data/doc/classes/{Quickbooks/Qbxml → Qbxml}/Request.html +32 -22
- data/doc/classes/Qbxml/Request.src/M000184.html +65 -0
- data/doc/classes/Qbxml/Request.src/M000185.html +19 -0
- data/doc/classes/Qbxml/Request.src/M000186.html +83 -0
- data/doc/classes/{Quickbooks/Qbxml → Qbxml}/RequestSet.html +32 -26
- data/doc/classes/{Quickbooks/Connection.src/M000104.html → Qbxml/RequestSet.src/M000187.html} +7 -5
- data/doc/classes/Qbxml/RequestSet.src/M000188.html +26 -0
- data/doc/classes/Qbxml/RequestSet.src/M000189.html +18 -0
- data/doc/classes/Qbxml/RequestSet.src/M000190.html +22 -0
- data/doc/classes/{Quickbooks/Qbxml → Qbxml}/Response.html +51 -51
- data/doc/classes/Qbxml/Response.src/M000175.html +24 -0
- data/doc/classes/Qbxml/Response.src/M000176.html +19 -0
- data/doc/classes/Qbxml/Response.src/M000177.html +55 -0
- data/doc/classes/{Quickbooks/Connection.src/M000097.html → Qbxml/Response.src/M000178.html} +4 -4
- data/doc/classes/Qbxml/Response.src/M000179.html +18 -0
- data/doc/classes/Qbxml/Response.src/M000180.html +18 -0
- data/doc/classes/{Quickbooks/Connection.src/M000100.html → Qbxml/Response.src/M000181.html} +4 -4
- data/doc/classes/{Quickbooks/Connection.src/M000101.html → Qbxml/Response.src/M000182.html} +4 -4
- data/doc/classes/Qbxml/Response.src/M000183.html +63 -0
- data/doc/classes/{Quickbooks/Qbxml → Qbxml}/ResponseSet.html +47 -41
- data/doc/classes/Qbxml/ResponseSet.src/M000168.html +22 -0
- data/doc/classes/Qbxml/ResponseSet.src/M000169.html +26 -0
- data/doc/classes/Qbxml/ResponseSet.src/M000170.html +24 -0
- data/doc/classes/Qbxml/ResponseSet.src/M000171.html +20 -0
- data/doc/classes/Qbxml/ResponseSet.src/M000172.html +27 -0
- data/doc/classes/Qbxml/ResponseSet.src/M000173.html +18 -0
- data/doc/classes/Qbxml/ResponseSet.src/M000174.html +18 -0
- data/doc/classes/Quickbooks.html +24 -10
- data/doc/classes/Quickbooks/Address.html +5 -5
- data/doc/classes/Quickbooks/Address.src/{M000107.html → M000150.html} +0 -0
- data/doc/classes/Quickbooks/Base.html +133 -120
- data/doc/classes/Quickbooks/Base.src/{M000080.html → M000131.html} +1 -1
- data/doc/classes/Quickbooks/Base.src/M000132.html +20 -0
- data/doc/classes/Quickbooks/Base.src/M000133.html +19 -0
- data/doc/classes/Quickbooks/Base.src/{M000082.html → M000134.html} +1 -1
- data/doc/classes/Quickbooks/Base.src/{M000083.html → M000135.html} +2 -2
- data/doc/classes/Quickbooks/Base.src/M000136.html +30 -0
- data/doc/classes/Quickbooks/Base.src/{M000085.html → M000137.html} +1 -1
- data/doc/classes/Quickbooks/Base.src/{M000086.html → M000138.html} +2 -2
- data/doc/classes/Quickbooks/Base.src/{M000087.html → M000139.html} +2 -2
- data/doc/classes/Quickbooks/Base.src/{M000088.html → M000140.html} +2 -2
- data/doc/classes/Quickbooks/Base.src/{M000089.html → M000141.html} +1 -1
- data/doc/classes/Quickbooks/Base.src/{M000090.html → M000142.html} +1 -1
- data/doc/classes/Quickbooks/Base.src/{M000091.html → M000143.html} +1 -1
- data/doc/classes/Quickbooks/Base.src/{M000092.html → M000144.html} +3 -3
- data/doc/classes/Quickbooks/Base.src/{M000093.html → M000145.html} +2 -2
- data/doc/classes/Quickbooks/Base.src/{M000094.html → M000146.html} +2 -2
- data/doc/classes/Quickbooks/Base.src/{M000095.html → M000147.html} +1 -1
- data/doc/classes/Quickbooks/{Qbxml/ResponseSetArrayExt.html → Deleted.html} +14 -6
- data/doc/classes/Quickbooks/ListDeleted.html +139 -0
- data/doc/classes/Quickbooks/ListDeleted.src/M000149.html +18 -0
- data/doc/classes/Quickbooks/ListItem.html +11 -11
- data/doc/classes/Quickbooks/ListItem.src/M000129.html +19 -0
- data/doc/classes/Quickbooks/ListItem.src/{M000079.html → M000130.html} +4 -4
- data/doc/classes/Quickbooks/Model.html +110 -110
- data/doc/classes/Quickbooks/Model.src/{M000059.html → M000109.html} +4 -3
- data/doc/classes/Quickbooks/Model.src/{M000060.html → M000110.html} +2 -2
- data/doc/classes/Quickbooks/Model.src/{M000061.html → M000111.html} +2 -2
- data/doc/classes/Quickbooks/Model.src/{M000062.html → M000112.html} +3 -2
- data/doc/classes/Quickbooks/Model.src/{M000063.html → M000113.html} +1 -1
- data/doc/classes/Quickbooks/Model.src/M000114.html +22 -0
- data/doc/classes/Quickbooks/Model.src/{M000065.html → M000115.html} +2 -2
- data/doc/classes/Quickbooks/Model.src/{M000066.html → M000116.html} +2 -2
- data/doc/classes/Quickbooks/Model.src/{M000067.html → M000117.html} +1 -1
- data/doc/classes/Quickbooks/Model.src/{M000068.html → M000118.html} +1 -1
- data/doc/classes/Quickbooks/Model.src/{M000069.html → M000119.html} +1 -1
- data/doc/classes/Quickbooks/Model.src/{M000070.html → M000120.html} +1 -1
- data/doc/classes/Quickbooks/Model.src/{M000071.html → M000121.html} +1 -1
- data/doc/classes/Quickbooks/Model.src/{M000072.html → M000122.html} +1 -1
- data/doc/classes/Quickbooks/Model.src/{M000073.html → M000123.html} +2 -2
- data/doc/classes/Quickbooks/Model.src/{M000074.html → M000124.html} +3 -3
- data/doc/classes/Quickbooks/Model.src/{M000075.html → M000125.html} +3 -3
- data/doc/classes/Quickbooks/Model.src/{M000076.html → M000126.html} +1 -1
- data/doc/classes/Quickbooks/Model.src/{M000077.html → M000127.html} +1 -1
- data/doc/classes/{QBHelpers.html → Quickbooks/OleAdapter.html} +19 -9
- data/doc/classes/Quickbooks/{Connection.html → OleAdapter/Connection.html} +80 -106
- data/doc/classes/Quickbooks/{Qbxml/Response.src/M000044.html → OleAdapter/Connection.src/M000094.html} +4 -4
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000095.html +19 -0
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000096.html +24 -0
- data/doc/classes/Quickbooks/{Qbxml/Response.src/M000047.html → OleAdapter/Connection.src/M000097.html} +4 -4
- data/doc/classes/Quickbooks/{Qbxml/Response.src/M000048.html → OleAdapter/Connection.src/M000098.html} +4 -4
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000099.html +21 -0
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000100.html +24 -0
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000101.html +20 -0
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000102.html +24 -0
- data/doc/classes/Quickbooks/OleAdapter/Connection.src/M000103.html +24 -0
- data/doc/classes/{QBHelpers → Quickbooks/OleAdapter}/Ole.html +24 -24
- data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000104.html +21 -0
- data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000105.html +22 -0
- data/doc/classes/Quickbooks/OleAdapter/Ole.src/M000106.html +18 -0
- data/doc/classes/Quickbooks/{Qbxml/RequestSetArrayExt.html → QbxmlDebugAdapter.html} +11 -5
- data/doc/classes/Quickbooks/QbxmlDebugAdapter/Connection.html +139 -0
- data/doc/classes/Quickbooks/{Qbxml/RequestSet.src/M000055.html → QbxmlDebugAdapter/Connection.src/M000093.html} +4 -4
- data/doc/classes/Quickbooks/Ref.html +5 -5
- data/doc/classes/Quickbooks/Ref.src/{M000096.html → M000148.html} +0 -0
- data/doc/classes/Quickbooks/Transaction.html +10 -10
- data/doc/classes/Quickbooks/Transaction.src/{M000057.html → M000107.html} +0 -0
- data/doc/classes/Quickbooks/Transaction.src/{M000058.html → M000108.html} +0 -0
- data/doc/classes/Quickbooks/TxnDeleted.html +139 -0
- data/doc/classes/Quickbooks/TxnDeleted.src/M000128.html +18 -0
- data/doc/classes/SlashedArray.html +226 -0
- data/doc/classes/SlashedArray.src/M000161.html +23 -0
- data/doc/classes/SlashedArray.src/M000162.html +18 -0
- data/doc/classes/SlashedArray.src/M000163.html +18 -0
- data/doc/classes/SlashedArray.src/M000164.html +22 -0
- data/doc/classes/SlashedArray.src/M000165.html +22 -0
- data/doc/classes/SlashedArray.src/M000166.html +18 -0
- data/doc/classes/SlashedArray.src/M000167.html +22 -0
- data/doc/classes/SlashedHash.html +193 -0
- data/doc/classes/SlashedHash.src/M000156.html +22 -0
- data/doc/classes/SlashedHash.src/M000157.html +18 -0
- data/doc/classes/SlashedHash.src/M000158.html +18 -0
- data/doc/classes/SlashedHash.src/M000159.html +27 -0
- data/doc/classes/SlashedHash.src/M000160.html +22 -0
- data/doc/classes/String.html +269 -0
- data/doc/classes/String.src/M000085.html +18 -0
- data/doc/classes/String.src/M000086.html +18 -0
- data/doc/classes/String.src/M000087.html +18 -0
- data/doc/classes/String.src/M000088.html +18 -0
- data/doc/classes/String.src/M000089.html +18 -0
- data/doc/classes/String.src/M000090.html +18 -0
- data/doc/classes/String.src/M000091.html +18 -0
- data/doc/classes/String.src/M000092.html +97 -0
- data/doc/classes/UniqueArray.html +193 -0
- data/doc/classes/UniqueArray.src/M000151.html +25 -0
- data/doc/classes/UniqueArray.src/M000152.html +18 -0
- data/doc/classes/UniqueArray.src/M000153.html +20 -0
- data/doc/classes/UniqueArray.src/M000154.html +20 -0
- data/doc/classes/UniqueArray.src/M000155.html +20 -0
- data/doc/created.rid +1 -1
- data/doc/files/LICENSE.html +2 -2
- data/doc/files/lib/{quickbooks/connection_rb.html → qbxml/request_rb.html} +6 -6
- data/doc/files/lib/{quickbooks/qbxml_rb.html → qbxml/response_rb.html} +6 -6
- data/doc/files/lib/{quickbooks/qbxml/request_rb.html → qbxml/support_rb.html} +6 -7
- data/doc/files/lib/qbxml_rb.html +109 -0
- data/doc/files/lib/quickbooks/{qbxml/response_rb.html → adapters/ole_adapter_rb.html} +5 -5
- data/doc/files/lib/quickbooks/adapters/qbxml_debug_adapter_rb.html +108 -0
- data/doc/files/lib/quickbooks/base_rb.html +2 -4
- data/doc/files/lib/quickbooks/model_rb.html +2 -1
- data/doc/files/lib/quickbooks/models/customer_rb.html +1 -1
- data/doc/files/lib/quickbooks/models/deleted_rb.html +101 -0
- data/doc/files/lib/quickbooks/models/list_item_rb.html +1 -1
- data/doc/files/lib/quickbooks/ruby_magic_rb.html +9 -1
- data/doc/files/lib/quickbooks/{ole_helper_rb.html → structure_rb.html} +20 -7
- data/doc/files/lib/quickbooks_rb.html +2 -3
- data/doc/fr_class_index.html +19 -10
- data/doc/fr_file_index.html +8 -5
- data/doc/fr_method_index.html +190 -110
- data/lib/qbxml.rb +2 -0
- data/lib/qbxml/request.rb +205 -0
- data/lib/qbxml/response.rb +197 -0
- data/lib/qbxml/support.rb +130 -0
- data/lib/quickbooks.rb +1 -2
- data/lib/quickbooks/adapters/ole_adapter.rb +148 -0
- data/lib/quickbooks/adapters/qbxml_debug_adapter.rb +10 -0
- data/lib/quickbooks/base.rb +33 -24
- data/lib/quickbooks/model.rb +20 -13
- data/lib/quickbooks/models/customer.rb +1 -1
- data/lib/quickbooks/models/deleted.rb +22 -0
- data/lib/quickbooks/models/list_item.rb +29 -27
- data/lib/quickbooks/ruby_magic.rb +31 -28
- data/lib/quickbooks/structure.rb +393 -0
- metadata +242 -127
- data/doc/classes/Class.src/M000027.html +0 -18
- data/doc/classes/QBHelpers/Ole.src/M000108.html +0 -21
- data/doc/classes/QBHelpers/Ole.src/M000109.html +0 -22
- data/doc/classes/QBHelpers/Ole.src/M000110.html +0 -18
- data/doc/classes/Quickbooks/Base.src/M000081.html +0 -18
- data/doc/classes/Quickbooks/Base.src/M000084.html +0 -23
- data/doc/classes/Quickbooks/Connection.src/M000098.html +0 -19
- data/doc/classes/Quickbooks/Connection.src/M000099.html +0 -24
- data/doc/classes/Quickbooks/Connection.src/M000102.html +0 -21
- data/doc/classes/Quickbooks/Connection.src/M000103.html +0 -24
- data/doc/classes/Quickbooks/Connection.src/M000105.html +0 -24
- data/doc/classes/Quickbooks/Connection.src/M000106.html +0 -24
- data/doc/classes/Quickbooks/ListItem.src/M000078.html +0 -19
- data/doc/classes/Quickbooks/Model.src/M000064.html +0 -18
- data/doc/classes/Quickbooks/Qbxml/Request.src/M000050.html +0 -34
- data/doc/classes/Quickbooks/Qbxml/Request.src/M000051.html +0 -19
- data/doc/classes/Quickbooks/Qbxml/Request.src/M000052.html +0 -81
- data/doc/classes/Quickbooks/Qbxml/RequestSet.src/M000053.html +0 -22
- data/doc/classes/Quickbooks/Qbxml/RequestSet.src/M000054.html +0 -26
- data/doc/classes/Quickbooks/Qbxml/RequestSet.src/M000056.html +0 -22
- data/doc/classes/Quickbooks/Qbxml/Response.src/M000041.html +0 -24
- data/doc/classes/Quickbooks/Qbxml/Response.src/M000042.html +0 -19
- data/doc/classes/Quickbooks/Qbxml/Response.src/M000043.html +0 -44
- data/doc/classes/Quickbooks/Qbxml/Response.src/M000045.html +0 -18
- data/doc/classes/Quickbooks/Qbxml/Response.src/M000046.html +0 -18
- data/doc/classes/Quickbooks/Qbxml/Response.src/M000049.html +0 -63
- data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000034.html +0 -22
- data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000035.html +0 -26
- data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000036.html +0 -24
- data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000037.html +0 -18
- data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000038.html +0 -27
- data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000039.html +0 -18
- data/doc/classes/Quickbooks/Qbxml/ResponseSet.src/M000040.html +0 -18
- data/lib/quickbooks/connection.rb +0 -105
- data/lib/quickbooks/ole_helper.rb +0 -47
- data/lib/quickbooks/qbxml.rb +0 -2
- data/lib/quickbooks/qbxml/request.rb +0 -169
- data/lib/quickbooks/qbxml/response.rb +0 -185
data/lib/quickbooks/base.rb
CHANGED
@@ -67,10 +67,8 @@
|
|
67
67
|
# - VehicleMileage
|
68
68
|
# - VendorCredit
|
69
69
|
|
70
|
-
require 'activesupport'
|
71
|
-
require 'quickbooks/connection'
|
72
70
|
require 'quickbooks/model'
|
73
|
-
require '
|
71
|
+
require 'qbxml'
|
74
72
|
|
75
73
|
module Quickbooks
|
76
74
|
# Base is just base for ListItem and Transaction. It inherits from Model, just as Ref does.
|
@@ -78,7 +76,7 @@ module Quickbooks
|
|
78
76
|
|
79
77
|
self.filter_aliases = {:limit => :max_returned}
|
80
78
|
|
81
|
-
# Stores a log of
|
79
|
+
# Stores a log of Qbxml::Response objects that were a result of methods performed on this object.
|
82
80
|
attr_accessor :response_log
|
83
81
|
def response_log #:nodoc:
|
84
82
|
@response_log || (@response_log = [])
|
@@ -93,13 +91,16 @@ module Quickbooks
|
|
93
91
|
end
|
94
92
|
class << self
|
95
93
|
|
96
|
-
|
97
|
-
|
98
|
-
|
94
|
+
def use_adapter(adapter)
|
95
|
+
# Should complain if the adapter doesn't exist.
|
96
|
+
require "#{File.dirname(__FILE__)}/adapters/#{adapter.to_s}_adapter"
|
97
|
+
@@connection_adapter = Object.module_eval("::Quickbooks::#{adapter.to_s.camelize}Adapter::Connection", __FILE__, __LINE__)
|
98
|
+
end
|
99
99
|
|
100
100
|
# Establishes a connection to the Quickbooks RDS Server for all Model Classes
|
101
|
-
def establish_connection(
|
102
|
-
@@
|
101
|
+
def establish_connection(*args)
|
102
|
+
@@connection_adapter ||= use_adapter(:ole)
|
103
|
+
@@connection = @@connection_adapter.new(*args)
|
103
104
|
end
|
104
105
|
|
105
106
|
# Returns the current Connection
|
@@ -113,25 +114,32 @@ module Quickbooks
|
|
113
114
|
# you can use this method to explicitly set the connection in a class that inherits from Quickbooks::Base.
|
114
115
|
# Quickbooks::Models::Base.connection = Quickbooks::Connection.new('My Test App', 'C:\\Some File.QBW', 'user', 'pass')
|
115
116
|
def connection=(conn)
|
116
|
-
raise ArgumentError, "Cannot set connection to anything but a
|
117
|
+
raise ArgumentError, "Cannot set connection to anything but a (*)Adapter::Connection object" unless conn.class.name =~ /Adapter::Connection$/
|
117
118
|
@connection = conn
|
118
119
|
end
|
119
120
|
|
120
|
-
# Generates a request by sending *args to
|
121
|
-
# and interprets the response using
|
121
|
+
# Generates a request by sending *args to Qbxml::Request.new, sends the request over the current connection,
|
122
|
+
# and interprets the response using Qbxml::ResponseSet.
|
122
123
|
# The response is then instantiated into an object or an array of objects.
|
123
124
|
#
|
124
125
|
# This method is used mostly internally, but it is the yoke of this library - use it to perform custom requests.
|
125
|
-
def
|
126
|
+
def query(obj_or_args,*args)
|
126
127
|
# If an object is sent, we need to reinstantiate the response into that object
|
127
|
-
reinstantiate = obj_or_args.is_a?(Quickbooks::Base)
|
128
|
+
reinstantiate = if obj_or_args.is_a?(Quickbooks::Base)
|
129
|
+
obj_or_args
|
130
|
+
elsif obj_or_args.is_a?(Class)
|
131
|
+
nil
|
132
|
+
else
|
133
|
+
args.unshift(obj_or_args)
|
134
|
+
nil
|
135
|
+
end
|
128
136
|
objects = [] # This will hold and return the instantiated objects from the quickbooks response
|
129
137
|
# The following is subject to bugginess, IF the response contains more than one object: it will instantiate only the last one.
|
130
|
-
self.request(
|
138
|
+
self.request(reinstantiate || self, *args).each { |response| objects << response.instantiate(reinstantiate) } # Does not instantiate if it's an error, but simply records response into response_log
|
131
139
|
objects.length == 1 ? objects[0] : objects
|
132
140
|
end
|
133
141
|
|
134
|
-
# Generates a request using
|
142
|
+
# Generates a request using Qbxml::Request, sends it, and returns a Qbxml::ResponseSet object containing the response(s).
|
135
143
|
def request(*args)
|
136
144
|
Qbxml::ResponseSet.new(
|
137
145
|
self.connection.send_xml(
|
@@ -154,19 +162,19 @@ module Quickbooks
|
|
154
162
|
obj.original_values[key.to_s.underscore] = obj.instance_variable_get('@' + key.to_s.underscore).dup
|
155
163
|
end
|
156
164
|
end if attrs
|
157
|
-
obj # Will be either a nice object, or a
|
165
|
+
obj # Will be either a nice object, or a Qbxml::Error object.
|
158
166
|
end
|
159
167
|
|
160
168
|
# 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.
|
161
169
|
def all(filters={})
|
162
170
|
filters.reverse_merge!(:active_status => 'All')
|
163
|
-
[
|
171
|
+
[query(self, :query, filters)].flatten
|
164
172
|
end
|
165
173
|
|
166
174
|
# 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.
|
167
175
|
def first(filters={})
|
168
176
|
(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
|
-
|
177
|
+
query(self, :query, filters)
|
170
178
|
end
|
171
179
|
|
172
180
|
# 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.
|
@@ -194,7 +202,7 @@ module Quickbooks
|
|
194
202
|
return false unless dirty?
|
195
203
|
self.errors.clear # Clear out any errors: start with a clean slate!
|
196
204
|
if new_record?
|
197
|
-
self.class.
|
205
|
+
self.class.query(self, :add)
|
198
206
|
ret = !dirty?
|
199
207
|
@new_record = false if ret
|
200
208
|
else
|
@@ -204,7 +212,7 @@ module Quickbooks
|
|
204
212
|
# 3) Replace self's original_attributes with those just retrieved, and update the automatic attributes, like EditSequence and TimeModified
|
205
213
|
# 4) Return false, return the object dirty but ready to save
|
206
214
|
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.
|
215
|
+
ret = self.class.query(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
216
|
# 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
217
|
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
218
|
# 'Revert' fields I didn't modify to equal the values of the more up-to-date record just loaded.
|
@@ -223,12 +231,13 @@ module Quickbooks
|
|
223
231
|
|
224
232
|
# Reloads the record from Quickbooks, discarding any changes that have been made to it.
|
225
233
|
def reload
|
226
|
-
self.class.
|
234
|
+
self.class.query(self, :query)
|
227
235
|
end
|
228
236
|
|
229
|
-
# Destroys a record in Quickbooks. Note that even though Quickbooks will destroy the record,
|
237
|
+
# Destroys a record in Quickbooks. Note that even though Quickbooks will destroy the record,
|
238
|
+
# the record's ListID and DeletedTime can be accessed by doing a query for deleted objects of the appropriate type.
|
230
239
|
def destroy
|
231
|
-
self.class.
|
240
|
+
self.class.query(self, :delete).success?
|
232
241
|
end
|
233
242
|
|
234
243
|
# Usual comparison (super), but add in false if either is a new record.
|
data/lib/quickbooks/model.rb
CHANGED
@@ -1,4 +1,5 @@
|
|
1
1
|
require 'quickbooks/ruby_magic'
|
2
|
+
require 'quickbooks/structure'
|
2
3
|
module Quickbooks
|
3
4
|
CAMELIZE_EXCEPTIONS = {'list_id' => 'ListID', 'txn_id' => 'TxnID', 'owner_id' => 'OwnerID'}
|
4
5
|
# These were all created from the info in qbxmlops70.xml, found in the docs in the QBSDK package.
|
@@ -7,28 +8,34 @@ module Quickbooks
|
|
7
8
|
|
8
9
|
def inherited(klass)
|
9
10
|
def klass.valid_filters
|
10
|
-
superclass.valid_filters + (@valid_filters ||= [])
|
11
|
+
(superclass.valid_filters + (@valid_filters ||= [])).flatten_slashes
|
11
12
|
end
|
12
13
|
def klass.filter_aliases
|
13
|
-
superclass.filter_aliases.
|
14
|
+
seed = [superclass.filter_aliases].flatten_slashes.expand_slashes.flatten_slashes
|
15
|
+
(seed.empty? ? {} : seed).merge(@filter_aliases ||= {})
|
14
16
|
end
|
15
17
|
klass.instance_variable_set('@object_properties', {})
|
16
18
|
end
|
17
19
|
|
18
20
|
def valid_filters=(v)
|
19
|
-
@valid_filters = v.stringify_values
|
21
|
+
@valid_filters = v.stringify_values!.flatten_slashes
|
20
22
|
end
|
21
23
|
def valid_filters
|
22
|
-
@valid_filters ||= []
|
24
|
+
(@valid_filters ||= []).flatten_slashes
|
23
25
|
end
|
24
26
|
def filter_aliases=(v)
|
25
|
-
|
27
|
+
al = [v].flatten_slashes.expand_slashes.flatten_slashes
|
28
|
+
@filter_aliases = al.empty? ? {} : al
|
26
29
|
end
|
27
30
|
def filter_aliases
|
28
31
|
@filter_aliases ||= {}
|
29
32
|
end
|
30
33
|
def camelized_valid_filters
|
31
|
-
|
34
|
+
cvf = []
|
35
|
+
valid_filters.each do |v|
|
36
|
+
cvf << (Quickbooks::CAMELIZE_EXCEPTIONS.has_key?(v) ? Quickbooks::CAMELIZE_EXCEPTIONS[v] : (v.is_a?(Symbol) ? v.to_s.camelize.to_sym : v.split('/').map {|e| e.camelize}.join('/')))
|
37
|
+
end
|
38
|
+
cvf
|
32
39
|
end
|
33
40
|
|
34
41
|
# Register multiple read/writable properties at once. For example:
|
@@ -36,7 +43,7 @@ module Quickbooks
|
|
36
43
|
# For reference attributes (like parent_ref), use ParentRef - a class constant for that object.
|
37
44
|
# _read_write_ will set the property setter and accessor accordingly.
|
38
45
|
def read_write(*args)
|
39
|
-
if args.
|
46
|
+
if args.empty?
|
40
47
|
@read_write || (@read_write = [])
|
41
48
|
else
|
42
49
|
args.each do |prop|
|
@@ -55,7 +62,7 @@ module Quickbooks
|
|
55
62
|
|
56
63
|
# Read-only attributes: These are attributes, but not modifiable in Quickbooks
|
57
64
|
def read_only(*args)
|
58
|
-
if args.
|
65
|
+
if args.empty?
|
59
66
|
@read_only || (@read_only = [])
|
60
67
|
else
|
61
68
|
args.each do |prop|
|
@@ -118,7 +125,7 @@ module Quickbooks
|
|
118
125
|
# Returns a hash of the attributes and their (new) values that have been changed since the object was last loaded or updated from Quickbooks.
|
119
126
|
# If you send in some attributes, it will compare to those given instead of original_attributes.
|
120
127
|
def dirty_attributes(compare={})
|
121
|
-
compare = original_values if compare.
|
128
|
+
compare = original_values if compare.empty?
|
122
129
|
pairs = {}
|
123
130
|
self.class.read_write.each do |column|
|
124
131
|
value = instance_variable_get('@' + column.to_s)
|
@@ -134,12 +141,12 @@ module Quickbooks
|
|
134
141
|
self.dirty_attributes.each do |key,value|
|
135
142
|
if value.is_a?(Quickbooks::Model)
|
136
143
|
h = value.to_dirty_hash
|
137
|
-
hsh[key] = h unless h.
|
144
|
+
hsh[key] = h unless h.empty?
|
138
145
|
else
|
139
146
|
hsh[key] = value
|
140
147
|
end
|
141
148
|
end
|
142
|
-
hsh.
|
149
|
+
hsh.ordered!(self.class.read_write.stringify_values)
|
143
150
|
hsh
|
144
151
|
end
|
145
152
|
|
@@ -148,12 +155,12 @@ module Quickbooks
|
|
148
155
|
self.attributes(include_read_only).each do |key,value|
|
149
156
|
if value.is_a?(Quickbooks::Model)
|
150
157
|
h = value.to_hash(include_read_only)
|
151
|
-
hsh[key] = h unless h.
|
158
|
+
hsh[key] = h unless h.empty?
|
152
159
|
else
|
153
160
|
hsh[key] = value
|
154
161
|
end
|
155
162
|
end
|
156
|
-
hsh.
|
163
|
+
hsh.ordered!((include_read_only ? self.class.read_only + self.class.read_write : self.class.read_write).stringify_values)
|
157
164
|
hsh
|
158
165
|
end
|
159
166
|
|
@@ -4,7 +4,7 @@ require 'quickbooks/models/customer/credit_card_info'
|
|
4
4
|
|
5
5
|
module Quickbooks
|
6
6
|
class Customer < ListItem
|
7
|
-
self.valid_filters = [
|
7
|
+
self.valid_filters = ['active_status', 'from_modified_date', 'to_modified_date', 'name_filter', 'name_range_filter', 'total_balance_filter']
|
8
8
|
|
9
9
|
# Properties are in the order required by QBXML
|
10
10
|
read_write :name,
|
@@ -0,0 +1,22 @@
|
|
1
|
+
module Quickbooks
|
2
|
+
class Deleted < Base
|
3
|
+
self.filter_aliases = {'deleted_after' => 'deleted_date_range_filter/from_deleted_date', 'deleted_before' => 'deleted_date_range_filter/to_deleted_date'}
|
4
|
+
end
|
5
|
+
|
6
|
+
class ListDeleted < Deleted
|
7
|
+
self.valid_filters = ['list_del_type', 'deleted_date_range_filter/from_deleted_date', 'deleted_date_range_filter/to_deleted_date']
|
8
|
+
class << self
|
9
|
+
def ListOrTxn
|
10
|
+
'List'
|
11
|
+
end
|
12
|
+
end
|
13
|
+
end
|
14
|
+
class TxnDeleted < Deleted
|
15
|
+
self.valid_filters = ['txn_del_type' 'deleted_date_range_filter/from_deleted_date', 'deleted_date_range_filter/to_deleted_date']
|
16
|
+
class << self
|
17
|
+
def ListOrTxn
|
18
|
+
'Txn'
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
@@ -1,33 +1,35 @@
|
|
1
|
-
|
1
|
+
module Quickbooks
|
2
|
+
class ListItem < Base
|
2
3
|
|
3
|
-
|
4
|
-
|
4
|
+
self.valid_filters = ['list_id', 'full_name']
|
5
|
+
self.filter_aliases = {'updated_after' => 'from_modified_date', 'updated_before' => 'to_modified_date'}
|
5
6
|
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
end
|
10
|
-
|
11
|
-
class << self
|
12
|
-
def ListOrTxn
|
13
|
-
'List'
|
7
|
+
def self.inherited(klass)
|
8
|
+
super
|
9
|
+
klass.read_only :list_id, :full_name, :edit_sequence, :time_created, :time_modified, :time_deleted # :time_deleted only comes from ListDeleted, but ListDeleted attributes can be instantiated into ListItems
|
14
10
|
end
|
15
11
|
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
12
|
+
class << self
|
13
|
+
def ListOrTxn
|
14
|
+
'List'
|
15
|
+
end
|
16
|
+
|
17
|
+
# def child_types
|
18
|
+
# [ "Account", "Account List", "BillingRate",
|
19
|
+
# "Class", "Currency", "Customer",
|
20
|
+
# "CustomerMessage", "CustomerType",
|
21
|
+
# "DateDrivenTerms", "Employee", "ItemDiscount",
|
22
|
+
# "ItemFixedAsset", "ItemGroup", "ItemInventory",
|
23
|
+
# "ItemInventoryAssembly", "ItemNonInventory",
|
24
|
+
# "ItemOtherCharge", "ItemPayment", "ItemSalesTax",
|
25
|
+
# "ItemSalesTaxGroup", "ItemService", "ItemSubtotal",
|
26
|
+
# "JobType", "OtherName", "PaymentMethod",
|
27
|
+
# "PayrollItemNonWage", "PayrollItemWage", "PriceLevel",
|
28
|
+
# "SalesRep", "SalesTaxCode", "ShipMethod",
|
29
|
+
# "StandardTerms", "TaxCode", "Template", "ToDo",
|
30
|
+
# "Vehicle", "Vendor", "VendorType"
|
31
|
+
# ]
|
32
|
+
# end
|
33
|
+
end
|
32
34
|
end
|
33
35
|
end
|
@@ -1,5 +1,7 @@
|
|
1
1
|
# This file contains several little tidbits of magic that I've made to make certain things easier.
|
2
2
|
# See Object, Class, and Hash.
|
3
|
+
require 'time'
|
4
|
+
require 'date'
|
3
5
|
|
4
6
|
class Object
|
5
7
|
# This allows one to effectively 'proxy' specific methods to be called on the return value of one of its methods.
|
@@ -39,17 +41,17 @@ class Object
|
|
39
41
|
@errors ||= []
|
40
42
|
end
|
41
43
|
def error?
|
42
|
-
!@errors.
|
44
|
+
!@errors.empty?
|
43
45
|
end
|
44
46
|
end
|
45
47
|
|
46
48
|
class Class
|
47
49
|
# Returns the class name without the module names that precede it. I'm sure there's a builtin way to do this, but I couldn't find it and this works just as reliably!
|
48
50
|
# Examples:
|
49
|
-
# -
|
51
|
+
# - Qbxml::Request.class_leaf_name # => 'Request'
|
50
52
|
# - Quickbooks::Customer.class_leaf_name # => 'Customer'
|
51
53
|
def class_leaf_name
|
52
|
-
|
54
|
+
name.split('::')[-1]
|
53
55
|
end
|
54
56
|
end
|
55
57
|
|
@@ -65,6 +67,16 @@ class Hash
|
|
65
67
|
self
|
66
68
|
end
|
67
69
|
|
70
|
+
def stringify_keys(specials={})
|
71
|
+
self.dup.stringify_keys!(specials)
|
72
|
+
end
|
73
|
+
def stringify_keys!(specials={})
|
74
|
+
self.each_key do |k|
|
75
|
+
self[specials.has_key?(k) ? specials[k] : k.to_s] = self.delete(k)
|
76
|
+
end
|
77
|
+
self
|
78
|
+
end
|
79
|
+
|
68
80
|
def underscore_keys(specials={})
|
69
81
|
self.dup.underscore_keys!(specials)
|
70
82
|
end
|
@@ -116,29 +128,11 @@ class Hash
|
|
116
128
|
self
|
117
129
|
end
|
118
130
|
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
@keys_in_order
|
125
|
-
end
|
126
|
-
def values
|
127
|
-
self.keys.collect {|k| self[k]}
|
128
|
-
end
|
129
|
-
def each(&block)
|
130
|
-
self.keys.each do |k|
|
131
|
-
block.call(k, self[k])
|
132
|
-
end
|
133
|
-
end
|
134
|
-
def each_key(&block)
|
135
|
-
self.keys.each &block
|
136
|
-
end
|
137
|
-
def each_value(&block)
|
138
|
-
self.values.each &block
|
139
|
-
end
|
140
|
-
end
|
141
|
-
self
|
131
|
+
def reverse_merge(hsh)
|
132
|
+
hsh.dup.merge(self)
|
133
|
+
end
|
134
|
+
def reverse_merge!(hsh)
|
135
|
+
self.replace(hsh.merge(self))
|
142
136
|
end
|
143
137
|
|
144
138
|
def transform_keys(trans_hash)
|
@@ -169,7 +163,7 @@ class Array
|
|
169
163
|
values.flatten!
|
170
164
|
i = 0
|
171
165
|
while i <= length-1 do
|
172
|
-
self[i].is_one_of?(values) ? i += 1 : self.slice!(i)
|
166
|
+
(self[i].is_one_of?(values) || collect[i].is_one_of?(values)) ? i += 1 : self.slice!(i)
|
173
167
|
end
|
174
168
|
self
|
175
169
|
end
|
@@ -179,7 +173,7 @@ class Array
|
|
179
173
|
end
|
180
174
|
def camelize_values!(specials={})
|
181
175
|
self.each_with_index do |v,i|
|
182
|
-
self[i] = specials.has_key?(v) ? specials[v] : (v.is_a?(Symbol) ? v.to_s.
|
176
|
+
self[i] = specials.has_key?(v) ? specials[v] : (v.is_a?(Symbol) ? v.to_s.camelize.to_sym : v.camelize)
|
183
177
|
end
|
184
178
|
self
|
185
179
|
end
|
@@ -191,3 +185,12 @@ class Array
|
|
191
185
|
self.replace(ordered.flatten!.only!(self))
|
192
186
|
end
|
193
187
|
end
|
188
|
+
|
189
|
+
class String
|
190
|
+
def underscore
|
191
|
+
gsub(/::/, '/').gsub(/([A-Z]+)([A-Z][a-z])/,'\1_\2').gsub(/([a-z\d])([A-Z])/,'\1_\2').tr("-", "_").downcase
|
192
|
+
end
|
193
|
+
def camelize
|
194
|
+
gsub(/\/(.?)/) { "::" + $1.upcase }.gsub(/(^|_)(.)/) { $2.upcase }
|
195
|
+
end
|
196
|
+
end
|