qube_sync 0.1.3 → 0.2.0
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.
- checksums.yaml +4 -4
- data/README.md +32 -8
- data/lib/qube_sync/request_builder.rb +49 -0
- data/lib/qube_sync/version.rb +1 -1
- data/lib/qube_sync.rb +1 -0
- metadata +3 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 00eae4c872c5ce3b07d1957a64126395b4b5f1321183968d4198705c136182ac
|
4
|
+
data.tar.gz: 19d7d5d9828ea9d12bbd0994a3bc1d57296a2523bd0e3c326c9710a16974dc45
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 55d230f8f304254ccae852e3aed424d31791ac852854fc07dcaa45b967a47b642e3c062f0d7b557362ec95ac09c58cc9388b56c39cece6bd0955a82f9e8daf62
|
7
|
+
data.tar.gz: 7c51738b3062d0e8fa0af4e066382194c961f54e20d528f00d2e26d595d7f6b13ba1f9b60ce0c6c00b19e424f28b3dff3d64a99df6b771b0a837c5c1e4099488
|
data/README.md
CHANGED
@@ -44,8 +44,20 @@ QubeSync.generate_password(connection_id)
|
|
44
44
|
QubeSync.get_qwc(connection_id)
|
45
45
|
# "<?xml version=\"1.0\"?>\n<QBWCXML>...</QBWCXML>\n"
|
46
46
|
|
47
|
+
# Using the RequestBuilder to build a Quickbooks Request (generates JSON for QubeSync to translate)
|
48
|
+
request_json = QubeSync::RequestBuilder.new do |b|
|
49
|
+
b.QBXML {
|
50
|
+
b.QBXMLMsgsRq(onError: "stopOnError") {
|
51
|
+
b.CustomerQueryRq(requestID: 1) {
|
52
|
+
b.MaxReturned(10)
|
53
|
+
}
|
54
|
+
}
|
55
|
+
}
|
56
|
+
end
|
47
57
|
|
58
|
+
QubeSync.queue_request(connection_id, {request_json: request_json, webhook_url: "myapp.com/webhook"})
|
48
59
|
|
60
|
+
# Using XML directly
|
49
61
|
request_xml = <<~XML
|
50
62
|
<?xml version="1.0"?>
|
51
63
|
<?qbxml version="16.0"?>
|
@@ -58,7 +70,7 @@ request_xml = <<~XML
|
|
58
70
|
</QBXML>
|
59
71
|
XML
|
60
72
|
|
61
|
-
QubeSync.queue_request(connection_id, request_xml, webhook_url
|
73
|
+
QubeSync.queue_request(connection_id, {request_xml: request_xml, webhook_url: "myapp.com/webhook"})
|
62
74
|
#=> {"id"=>"d401228f-06d4-4981-95d8-bb735c0a2c76",
|
63
75
|
# "state"=>"waiting",
|
64
76
|
# "response_xml"=>nil,
|
@@ -69,13 +81,25 @@ QubeSync.queue_request(connection_id, request_xml, webhook_url = "myapp.com/webh
|
|
69
81
|
request_id = _.fetch("id")
|
70
82
|
|
71
83
|
QubeSync.get_request(request_id)
|
72
|
-
#=> {"id"=>"d401228f-06d4-4981-95d8-bb735c0a2c76",
|
73
|
-
# "state"=>"webhook_succeeded",
|
74
|
-
# "response_xml"=>
|
75
|
-
#
|
76
|
-
# "
|
77
|
-
#
|
78
|
-
#
|
84
|
+
#=> {"id" => "d401228f-06d4-4981-95d8-bb735c0a2c76",
|
85
|
+
# "state" => "webhook_succeeded",
|
86
|
+
# "response_xml" =>
|
87
|
+
# "<?xml version=\"1.0\" ?> <QBXML> <QBXMLMsgsRs> ... </QBXMLMsgsRs> </QBXML>",
|
88
|
+
# "response_json" => [
|
89
|
+
# "CustomerQueryRs" => {
|
90
|
+
# "requestID"=>"1",
|
91
|
+
# "statusCode"=>"0",
|
92
|
+
# "statusSeverity"=>"Info",
|
93
|
+
# "statusMessage"=>"Status Message",
|
94
|
+
# "Results" => [
|
95
|
+
# {"Name"=>"Customer 1", "ListID"=>"123"},
|
96
|
+
# {"Name"=>"Customer 2", "ListID"=>"456"}
|
97
|
+
# ]
|
98
|
+
# },
|
99
|
+
# ],
|
100
|
+
# "webhook_url" => "myapp.com/webhook",
|
101
|
+
# "request_xml" =>
|
102
|
+
# "<?xml version=\"1.0\"?><?qbxml version=\"16.0\"?><QBXML> ... </QBXMLMsgsRq></QBXML>"}}
|
79
103
|
|
80
104
|
QubeSync.get_requests(connection_id)
|
81
105
|
#=> [{"id"=>"d401228f-06d4-4981-95d8-bb735c0a2c76",
|
@@ -0,0 +1,49 @@
|
|
1
|
+
module QubeSync
|
2
|
+
class RequestBuilder
|
3
|
+
attr_reader :version, :root
|
4
|
+
|
5
|
+
def initialize(version:, &block)
|
6
|
+
@version = version
|
7
|
+
@stack = []
|
8
|
+
instance_eval(&block) if block_given?
|
9
|
+
end
|
10
|
+
|
11
|
+
def method_missing(tag_name, *args, &block)
|
12
|
+
attributes = args.first.is_a?(Hash) ? args.first : {}
|
13
|
+
text = args.first unless args.first.is_a?(Hash)
|
14
|
+
|
15
|
+
element = {
|
16
|
+
"name" => tag_name.to_s,
|
17
|
+
}
|
18
|
+
element["attributes"] = attributes unless attributes.empty?
|
19
|
+
element["text"] = text if text.is_a?(String) || text.is_a?(Numeric)
|
20
|
+
|
21
|
+
if block_given?
|
22
|
+
element["children"] = []
|
23
|
+
@stack.push(element)
|
24
|
+
instance_eval(&block)
|
25
|
+
@stack.pop
|
26
|
+
end
|
27
|
+
|
28
|
+
if @stack.empty?
|
29
|
+
@root ||= []
|
30
|
+
@root << element
|
31
|
+
else
|
32
|
+
@stack.last["children"] << element
|
33
|
+
end
|
34
|
+
end
|
35
|
+
|
36
|
+
def as_json
|
37
|
+
{
|
38
|
+
"version" => version,
|
39
|
+
"request" => root
|
40
|
+
}
|
41
|
+
end
|
42
|
+
|
43
|
+
private
|
44
|
+
|
45
|
+
def root
|
46
|
+
@root || []
|
47
|
+
end
|
48
|
+
end
|
49
|
+
end
|
data/lib/qube_sync/version.rb
CHANGED
data/lib/qube_sync.rb
CHANGED
metadata
CHANGED
@@ -1,14 +1,14 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: qube_sync
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Garrett Lancaster
|
8
8
|
autorequire:
|
9
9
|
bindir: exe
|
10
10
|
cert_chain: []
|
11
|
-
date: 2025-
|
11
|
+
date: 2025-05-23 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
14
|
name: faraday
|
@@ -38,6 +38,7 @@ files:
|
|
38
38
|
- README.md
|
39
39
|
- Rakefile
|
40
40
|
- lib/qube_sync.rb
|
41
|
+
- lib/qube_sync/request_builder.rb
|
41
42
|
- lib/qube_sync/version.rb
|
42
43
|
- qube_sync.gemspec
|
43
44
|
- sig/qube_sync.rbs
|