quickeebooks 0.0.9 → 0.1.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.
- data/HISTORY.md +7 -0
- data/lib/quickeebooks/online/service/service_base.rb +11 -46
- data/lib/quickeebooks/version.rb +1 -1
- data/spec/quickeebooks/online/services/account_spec.rb +0 -5
- data/spec/quickeebooks/online/services/company_meta_data_spec.rb +0 -5
- data/spec/quickeebooks/online/services/customer_spec.rb +0 -5
- data/spec/quickeebooks/online/services/invoice_spec.rb +0 -5
- data/spec/quickeebooks/online/services/service_base_spec.rb +3 -19
- metadata +3 -2
data/HISTORY.md
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
## 0.1.0 (2013-01-16)
|
2
|
+
|
3
|
+
* Quickbooks Online now supports a single HTTP endpoint for API calls, no need to first determine the Base URL. `Quickeebooks::Online::ServiceBase` has been adjusted to use a single API endpoint.
|
4
|
+
|
5
|
+
## < 0.0.9
|
6
|
+
|
7
|
+
History was not being tracked so there is no changelog of activity before `0.0.9`
|
@@ -19,14 +19,14 @@ module Quickeebooks
|
|
19
19
|
attr_accessor :oauth
|
20
20
|
attr_accessor :base_uri
|
21
21
|
|
22
|
-
QB_BASE_URI = "https://qbo.intuit.com
|
22
|
+
QB_BASE_URI = "https://qbo.sbfinance.intuit.com"
|
23
23
|
XML_NS = %{xmlns:ns2="http://www.intuit.com/sb/cdm/qbo" xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:ns3="http://www.intuit.com/sb/cdm"}
|
24
24
|
|
25
25
|
def initialize(oauth_access_token = nil, realm_id = nil)
|
26
26
|
if !oauth_access_token.nil? && !realm_id.nil?
|
27
27
|
msg = "Quickeebooks::Online::ServiceBase - "
|
28
28
|
msg += "This version of the constructor is deprecated. "
|
29
|
-
msg += "Use the no-arg constructor and set the AccessToken and the RealmID using the
|
29
|
+
msg += "Use the no-arg constructor and set the AccessToken (access_token=) and the RealmID (realm_id=) using the setters."
|
30
30
|
warn(msg)
|
31
31
|
access_token = oauth_access_token
|
32
32
|
realm_id = realm_id
|
@@ -46,61 +46,29 @@ module Quickeebooks
|
|
46
46
|
@base_uri = uri
|
47
47
|
end
|
48
48
|
|
49
|
-
# Given a realm ID we need to determine the real Base URL
|
50
|
-
# to use for all subsequenet REST operations
|
51
|
-
# See: https://ipp.developer.intuit.com/0010_Intuit_Partner_Platform/0050_Data_Services/0400_QuickBooks_Online/0100_Calling_Data_Services/0010_Getting_the_Base_URL
|
52
|
-
def determine_base_url
|
53
|
-
if service_response
|
54
|
-
if service_response.code == "200"
|
55
|
-
element = base_doc.xpath("//qbo:QboUser/qbo:CurrentCompany/qbo:BaseURI")[0]
|
56
|
-
if element
|
57
|
-
@base_uri = element.text
|
58
|
-
else
|
59
|
-
raise IntuitRequestException.new("Response error: Could not extract BaseURI from response. Invalid XML: #{service_response.body}")
|
60
|
-
end
|
61
|
-
else
|
62
|
-
raise IntuitRequestException.new("Response error: invalid code #{service_response.code}")
|
63
|
-
end
|
64
|
-
end
|
65
|
-
end
|
66
|
-
|
67
49
|
def url_for_resource(resource)
|
68
50
|
url_for_base("resource/#{resource}")
|
69
51
|
end
|
70
52
|
|
71
53
|
def url_for_base(raw)
|
72
|
-
|
73
|
-
"#{@base_uri}/#{raw}/v2/#{@realm_id}"
|
74
|
-
end
|
75
|
-
|
76
|
-
def qb_base_uri_with_realm_id
|
77
|
-
"#{QB_BASE_URI}/#{@realm_id}"
|
78
|
-
end
|
79
|
-
|
80
|
-
# store service base response
|
81
|
-
# so it can be accessed by other methods
|
82
|
-
def service_response
|
83
|
-
@service_response ||= check_response(@oauth.request(:get, qb_base_uri_with_realm_id))
|
54
|
+
"#{QB_BASE_URI}/#{raw}/v2/#{@realm_id}"
|
84
55
|
end
|
85
56
|
|
86
|
-
# allows for reuse of service base's xml doc
|
87
|
-
# rather than loading it each time we need it
|
88
|
-
def base_doc
|
89
|
-
@base_doc ||= parse_xml(service_response.body)
|
90
|
-
end
|
91
|
-
|
92
57
|
# gives us the qbo user's LoginName
|
93
58
|
# useful for verifying email address against
|
94
59
|
def login_name
|
95
|
-
@login_name ||=
|
60
|
+
@login_name ||= begin
|
61
|
+
url = "https://qbo.intuit.com/qbo1/rest/user/v2/#{@realm_id}"
|
62
|
+
response = @oauth.request(:get, url)
|
63
|
+
if response && response.code.to_i == 200
|
64
|
+
xml = parse_xml(response.body)
|
65
|
+
xml.xpath("//qbo:QboUser/qbo:LoginName")[0].text
|
66
|
+
end
|
67
|
+
end
|
96
68
|
end
|
97
69
|
|
98
70
|
private
|
99
71
|
|
100
|
-
def determined_base_url?
|
101
|
-
@base_uri != nil
|
102
|
-
end
|
103
|
-
|
104
72
|
def parse_xml(xml)
|
105
73
|
Nokogiri::XML(xml)
|
106
74
|
end
|
@@ -112,8 +80,6 @@ module Quickeebooks
|
|
112
80
|
def fetch_collection(model, filters = [], page = 1, per_page = 20, sort = nil, options ={})
|
113
81
|
raise ArgumentError, "missing model to instantiate" if model.nil?
|
114
82
|
|
115
|
-
determine_base_url unless determined_base_url?
|
116
|
-
|
117
83
|
post_body_lines = []
|
118
84
|
|
119
85
|
if filters.is_a?(Array) && filters.length > 0
|
@@ -167,7 +133,6 @@ module Quickeebooks
|
|
167
133
|
unless headers.has_key?('Content-Type')
|
168
134
|
headers.merge!({'Content-Type' => 'application/xml'})
|
169
135
|
end
|
170
|
-
determine_base_url unless determined_base_url?
|
171
136
|
# puts "METHOD = #{method}"
|
172
137
|
# puts "URL = #{url}"
|
173
138
|
# puts "BODY = #{body == nil ? "<NIL>" : body}"
|
data/lib/quickeebooks/version.rb
CHANGED
@@ -10,7 +10,6 @@ describe "Quickeebooks::Online::Service::Account" do
|
|
10
10
|
qb_secret = "secreet"
|
11
11
|
|
12
12
|
@realm_id = "9991111222"
|
13
|
-
@base_uri = "https://qbo.intuit.com/qbo36"
|
14
13
|
@oauth_consumer = OAuth::Consumer.new(qb_key, qb_key, {
|
15
14
|
:site => "https://oauth.intuit.com",
|
16
15
|
:request_token_path => "/oauth/v1/get_request_token",
|
@@ -24,10 +23,6 @@ describe "Quickeebooks::Online::Service::Account" do
|
|
24
23
|
@service.instance_eval {
|
25
24
|
@realm_id = "9991111222"
|
26
25
|
}
|
27
|
-
@service.base_uri = @base_uri
|
28
|
-
determine_base_url = @service.qb_base_uri_with_realm_id
|
29
|
-
xml = File.read(File.dirname(__FILE__) + "/../../../xml/online/determine_base_url.xml")
|
30
|
-
FakeWeb.register_uri(:get, determine_base_url, :status => ["200", "OK"], :body => xml)
|
31
26
|
end
|
32
27
|
|
33
28
|
it "receives 404 from invalid base URL" do
|
@@ -10,7 +10,6 @@ describe "Quickeebooks::Online::Service::CompanyMetaData" do
|
|
10
10
|
qb_secret = "secreet"
|
11
11
|
|
12
12
|
@realm_id = "9991111222"
|
13
|
-
@base_uri = "https://qbo.intuit.com/qbo36"
|
14
13
|
@oauth_consumer = OAuth::Consumer.new(qb_key, qb_key, {
|
15
14
|
:site => "https://oauth.intuit.com",
|
16
15
|
:request_token_path => "/oauth/v1/get_request_token",
|
@@ -24,10 +23,6 @@ describe "Quickeebooks::Online::Service::CompanyMetaData" do
|
|
24
23
|
@service.instance_eval {
|
25
24
|
@realm_id = "9991111222"
|
26
25
|
}
|
27
|
-
@service.base_uri = @base_uri
|
28
|
-
determine_base_url = @service.qb_base_uri_with_realm_id
|
29
|
-
xml = File.read(File.dirname(__FILE__) + "/../../../xml/online/determine_base_url.xml")
|
30
|
-
FakeWeb.register_uri(:get, determine_base_url, :status => ["200", "OK"], :body => xml)
|
31
26
|
end
|
32
27
|
|
33
28
|
it "can get the realm's company_meta_data record" do
|
@@ -10,7 +10,6 @@ describe "Quickeebooks::Online::Service::Customer" do
|
|
10
10
|
qb_secret = "secreet"
|
11
11
|
|
12
12
|
@realm_id = "9991111222"
|
13
|
-
@base_uri = "https://qbo.intuit.com/qbo36"
|
14
13
|
@oauth_consumer = OAuth::Consumer.new(qb_key, qb_key, {
|
15
14
|
:site => "https://oauth.intuit.com",
|
16
15
|
:request_token_path => "/oauth/v1/get_request_token",
|
@@ -24,10 +23,6 @@ describe "Quickeebooks::Online::Service::Customer" do
|
|
24
23
|
@service.instance_eval {
|
25
24
|
@realm_id = "9991111222"
|
26
25
|
}
|
27
|
-
@service.base_uri = @base_uri
|
28
|
-
determine_base_url = @service.qb_base_uri_with_realm_id
|
29
|
-
xml = File.read(File.dirname(__FILE__) + "/../../../xml/online/determine_base_url.xml")
|
30
|
-
FakeWeb.register_uri(:get, determine_base_url, :status => ["200", "OK"], :body => xml)
|
31
26
|
end
|
32
27
|
|
33
28
|
it "can fetch a list of customers" do
|
@@ -10,7 +10,6 @@ describe "Quickeebooks::Online::Service::Invoice" do
|
|
10
10
|
qb_secret = "secreet"
|
11
11
|
|
12
12
|
@realm_id = "9991111222"
|
13
|
-
@base_uri = "https://qbo.intuit.com/qbo36"
|
14
13
|
@oauth_consumer = OAuth::Consumer.new(qb_key, qb_key, {
|
15
14
|
:site => "https://oauth.intuit.com",
|
16
15
|
:request_token_path => "/oauth/v1/get_request_token",
|
@@ -23,10 +22,6 @@ describe "Quickeebooks::Online::Service::Invoice" do
|
|
23
22
|
@service.instance_eval {
|
24
23
|
@realm_id = "9991111222"
|
25
24
|
}
|
26
|
-
@service.base_uri = @base_uri
|
27
|
-
determine_base_url = @service.qb_base_uri_with_realm_id
|
28
|
-
xml = File.read(File.dirname(__FILE__) + "/../../../xml/online/determine_base_url.xml")
|
29
|
-
FakeWeb.register_uri(:get, determine_base_url, :status => ["200", "OK"], :body => xml)
|
30
25
|
end
|
31
26
|
|
32
27
|
it "can create an invoice" do
|
@@ -28,27 +28,11 @@ describe "Quickeebooks::Online::Service::ServiceBase" do
|
|
28
28
|
}
|
29
29
|
end
|
30
30
|
|
31
|
-
it "can determine base url" do
|
32
|
-
@service.determine_base_url
|
33
|
-
@service.base_uri.should_not == nil
|
34
|
-
@service.url_for_resource(Quickeebooks::Online::Model::Customer.resource_for_collection).should == "https://qbo.intuit.com/qbo36/resource/customers/v2/#{@realm_id}"
|
35
|
-
end
|
36
|
-
|
37
31
|
it "can determine login_name" do
|
32
|
+
xml = File.read(File.dirname(__FILE__) + "/../../../xml/online/user.xml")
|
33
|
+
user_url = "https://qbo.intuit.com/qbo1/rest/user/v2/#{@realm_id}"
|
34
|
+
FakeWeb.register_uri(:get, user_url, :status => ["200", "OK"], :body => xml)
|
38
35
|
@service.login_name.should == 'foo@example.com'
|
39
36
|
end
|
40
37
|
|
41
|
-
it "throws exception when response XML is invalid when determining base url" do
|
42
|
-
xml = File.read(File.dirname(__FILE__) + "/../../../xml/online/invalid_user.xml")
|
43
|
-
user_url = Quickeebooks::Online::Service::ServiceBase::QB_BASE_URI + "/" + @realm_id
|
44
|
-
FakeWeb.register_uri(:get, user_url, :status => ["200", "OK"], :body => xml)
|
45
|
-
@service = Quickeebooks::Online::Service::ServiceBase.new
|
46
|
-
@service.access_token = @oauth
|
47
|
-
@service.instance_eval {
|
48
|
-
@realm_id = "9991111222"
|
49
|
-
}
|
50
|
-
lambda { @service.determine_base_url }.should raise_error(IntuitRequestException)
|
51
|
-
@service.base_uri.should == nil
|
52
|
-
end
|
53
|
-
|
54
38
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: quickeebooks
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0
|
4
|
+
version: 0.1.0
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date:
|
12
|
+
date: 2013-01-16 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: roxml
|
@@ -179,6 +179,7 @@ extra_rdoc_files: []
|
|
179
179
|
files:
|
180
180
|
- Gemfile
|
181
181
|
- Gemfile.lock
|
182
|
+
- HISTORY.md
|
182
183
|
- lib/quickeebooks/online/model/account.rb
|
183
184
|
- lib/quickeebooks/online/model/account_detail_type.rb
|
184
185
|
- lib/quickeebooks/online/model/account_reference.rb
|