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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA256:
3
- metadata.gz: f34c269c2f1e3291ae88d68036b9d02eda39da5cc6d5601afba689a2630f8321
4
- data.tar.gz: 2c0c06fffbd1291b0e397365e9e0ac44fe899b47c75f8394f28ffca0ca97db23
3
+ metadata.gz: 00eae4c872c5ce3b07d1957a64126395b4b5f1321183968d4198705c136182ac
4
+ data.tar.gz: 19d7d5d9828ea9d12bbd0994a3bc1d57296a2523bd0e3c326c9710a16974dc45
5
5
  SHA512:
6
- metadata.gz: acfd00b12f982fcf9f49fd794a94fd8be728e3c72a0e45495823c91527f44e1dfe996df3e70afe7d0221dff632222fb3ea17d14492f2dceaa4d2e548f2060675
7
- data.tar.gz: 722d0eb8f1f40347bab42953104c8f58cc090b3c464ff25b07ea239d766c0871376c3bb3a45417251d982cec997f688e44e67b9ee002c15b0c91c054e46b9664
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 = "myapp.com/webhook")
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
- # "<?xml version=\"1.0\" ?> <QBXML> <QBXMLMsgsRs> ... </QBXMLMsgsRs> </QBXML>",
76
- # "webhook_url"=>"myapp.com/webhook",
77
- # "request_xml"=>
78
- # "<?xml version=\"1.0\"?><?qbxml version=\"16.0\"?><QBXML> ... </QBXMLMsgsRq></QBXML>"}}
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
@@ -1,5 +1,5 @@
1
1
  # frozen_string_literal: true
2
2
 
3
3
  module QubeSync
4
- VERSION = "0.1.3"
4
+ VERSION = "0.2.0"
5
5
  end
data/lib/qube_sync.rb CHANGED
@@ -1,4 +1,5 @@
1
1
  require_relative "qube_sync/version"
2
+ require_relative "qube_sync/request_builder"
2
3
  require "faraday"
3
4
 
4
5
  module QubeSync
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.1.3
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-02-19 00:00:00.000000000 Z
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