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
@@ -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
|
data/lib/quickbooks/qbxml.rb
DELETED
@@ -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
|