quickeebooks 0.0.5 → 0.0.6

Sign up to get free protection for your applications and to get access to all the features.
data/Gemfile.lock CHANGED
@@ -1,7 +1,7 @@
1
1
  PATH
2
2
  remote: .
3
3
  specs:
4
- quickeebooks (0.0.4)
4
+ quickeebooks (0.0.6)
5
5
  activemodel
6
6
  nokogiri
7
7
  oauth
@@ -1,5 +1,5 @@
1
1
  module Quickeebooks
2
2
 
3
- VERSION = "0.0.5"
3
+ VERSION = "0.0.6"
4
4
 
5
5
  end
@@ -1,5 +1,4 @@
1
1
  require 'quickeebooks/windows/service/service_base'
2
- require 'nokogiri'
3
2
 
4
3
  module Quickeebooks
5
4
  module Windows
@@ -13,6 +12,11 @@ module Quickeebooks
13
12
  custom_field_query += '</CustomerQuery>'
14
13
  fetch_collection(Quickeebooks::Windows::Model::Customer, custom_field_query.strip, filters, page, per_page, sort, options)
15
14
  end
15
+
16
+ def fetch_by_id(id, idDomain = 'QB', options = {})
17
+ url = "#{url_for_resource(Quickeebooks::Windows::Model::Customer::REST_RESOURCE)}/#{id}"
18
+ fetch_object(Quickeebooks::Windows::Model::Customer, url, {:idDomain => idDomain})
19
+ end
16
20
 
17
21
  end
18
22
  end
@@ -60,7 +60,7 @@ module Quickeebooks
60
60
  private
61
61
 
62
62
  def parse_xml(xml)
63
- @last_response_xml ||=
63
+ @last_response_xml =
64
64
  begin
65
65
  x = Nokogiri::XML(xml)
66
66
  #x.document.remove_namespaces!
@@ -71,6 +71,19 @@ module Quickeebooks
71
71
  def valid_xml_document(xml)
72
72
  %Q{<?xml version="1.0" encoding="utf-8"?>\n#{xml.strip}}
73
73
  end
74
+
75
+ # In QBD a single object response is the same as a collection response except
76
+ # it just has a single main element
77
+ def fetch_object(model, url, params = {}, options = {})
78
+ raise ArgumentError, "missing model to instantiate" if model.nil?
79
+ response = do_http_get(url, params, {'Content-Type' => 'text/xml'})
80
+ collection = parse_collection(response, model)
81
+ if collection.is_a?(Quickeebooks::Collection)
82
+ collection.entries.first
83
+ else
84
+ nil
85
+ end
86
+ end
74
87
 
75
88
  def fetch_collection(model, custom_field_query = nil, filters = [], page = 1, per_page = 20, sort = nil, options ={})
76
89
  raise ArgumentError, "missing model to instantiate" if model.nil?
@@ -80,9 +93,13 @@ module Quickeebooks
80
93
  else
81
94
  response = do_http_get(url_for_resource(model::REST_RESOURCE), {}, {'Content-Type' => 'text/html'})
82
95
  end
96
+ parse_collection(response, model)
97
+ end
98
+
99
+ def parse_collection(response, model)
83
100
  if response
84
101
  collection = Quickeebooks::Collection.new
85
- xml = parse_xml(response.body)
102
+ xml = @last_response_xml
86
103
  begin
87
104
  results = []
88
105
  path_to_nodes = "//xmlns:RestResponse/xmlns:#{model::XML_COLLECTION_NODE}/xmlns:#{model::XML_NODE}"
data/quickeebooks.gemspec CHANGED
@@ -8,11 +8,11 @@ Gem::Specification.new do |gem|
8
8
  gem.author = "Cody Caughlan"
9
9
  gem.email = "toolbag@gmail.com"
10
10
  gem.homepage = "http://github.com/ruckus/quickeebooks"
11
- gem.summary = "REST integration with Quickbooks Online"
11
+ gem.summary = "REST API to Quickbooks Online/Windows via Intuit Data Services"
12
12
 
13
13
  gem.description = gem.summary
14
14
 
15
- gem.files = Dir["**/*"]#.select { |d| d =~ %r{^(README|bin/|data/|ext/|lib/|spec/|test/)} }
15
+ gem.files = Dir["**/*"]
16
16
 
17
17
  gem.add_dependency 'roxml'
18
18
  gem.add_dependency 'oauth'
@@ -45,5 +45,16 @@ describe "Quickeebooks::Windows::Service::Customer" do
45
45
  email.tag.should == "Business"
46
46
  email.default.should == "1"
47
47
  end
48
+
49
+ it "can fetch a customer by ID" do
50
+ xml = File.read(File.dirname(__FILE__) + "/../../../xml/windows/fetch_customer_by_id.xml")
51
+ model = Quickeebooks::Windows::Model::Customer
52
+ service = Quickeebooks::Windows::Service::Customer.new
53
+ service.access_token = @oauth
54
+ service.realm_id = @realm_id
55
+ FakeWeb.register_uri(:get, "#{service.url_for_resource(model::REST_RESOURCE)}/341?idDomain=QB", :status => ["200", "OK"], :body => xml)
56
+ customer = service.fetch_by_id(341)
57
+ customer.name.should == "Wine Stop"
58
+ end
48
59
 
49
60
  end
@@ -0,0 +1,53 @@
1
+ <RestResponse xmlns="http://www.intuit.com/sb/cdm/v2" xmlns:xdb="http://xmlns.oracle.com/xdb" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://www.intuit.com/sb/cdm/v2 ../common/RestDataFilter.xsd">
2
+ <Customers>
3
+ <Customer>
4
+ <Id idDomain="QB">341</Id>
5
+ <SyncToken>1</SyncToken>
6
+ <MetaData>
7
+ <CreatedBy>app</CreatedBy>
8
+ <CreateTime>2012-07-26T21:42:08.0Z</CreateTime>
9
+ <LastModifiedBy>app</LastModifiedBy>
10
+ <LastUpdatedTime>2012-07-26T21:42:08.0Z</LastUpdatedTime>
11
+ </MetaData>
12
+ <ExternalKey idDomain="QB">341</ExternalKey>
13
+ <Synchronized>true</Synchronized>
14
+ <PartyReferenceId idDomain="QB">341</PartyReferenceId>
15
+ <TypeOf>Person</TypeOf>
16
+ <Name>Wine Stop</Name>
17
+ <Address>
18
+ <Id idDomain="QB">0000000000000KU3</Id>
19
+ <Line1>Wine Stop</Line1>
20
+ <Line2>1300 Burlingame Avenue</Line2>
21
+ <City>Burlingame</City>
22
+ <CountrySubDivisionCode>CA</CountrySubDivisionCode>
23
+ <PostalCode>94010</PostalCode>
24
+ <Default>1</Default>
25
+ <Tag>Billing</Tag>
26
+ </Address>
27
+ <Address>
28
+ <Id idDomain="QB">0000000000000KU1</Id>
29
+ <Line1>Wine Stop</Line1>
30
+ <Line2>1300 Burlingame Avenue</Line2>
31
+ <City>Burlingame</City>
32
+ <CountrySubDivisionCode>CA</CountrySubDivisionCode>
33
+ <PostalCode>94010</PostalCode>
34
+ <Default>1</Default>
35
+ <Tag>Shipping</Tag>
36
+ </Address>
37
+ <Active>true</Active>
38
+ <ShowAs>Wine Stop</ShowAs>
39
+ <SalesTermId idDomain="QB">6</SalesTermId>
40
+ <SalesTermName>Net 30</SalesTermName>
41
+ <SalesRepId idDomain="QB">2</SalesRepId>
42
+ <TaxName>San Francisco County</TaxName>
43
+ <OpenBalance>
44
+ <CurrencyCode>USD</CurrencyCode>
45
+ <Amount>744</Amount>
46
+ </OpenBalance>
47
+ <OpenBalanceDate>2012-07-27</OpenBalanceDate>
48
+ <JobInfo>
49
+ <Status>None</Status>
50
+ </JobInfo>
51
+ </Customer>
52
+ </Customers>
53
+ </RestResponse>
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.5
4
+ version: 0.0.6
5
5
  prerelease:
6
6
  platform: ruby
7
7
  authors:
@@ -9,11 +9,11 @@ authors:
9
9
  autorequire:
10
10
  bindir: bin
11
11
  cert_chain: []
12
- date: 2012-07-26 00:00:00.000000000 Z
12
+ date: 2012-07-31 00:00:00.000000000 Z
13
13
  dependencies:
14
14
  - !ruby/object:Gem::Dependency
15
15
  name: roxml
16
- requirement: &70333347874080 !ruby/object:Gem::Requirement
16
+ requirement: !ruby/object:Gem::Requirement
17
17
  none: false
18
18
  requirements:
19
19
  - - ! '>='
@@ -21,10 +21,15 @@ dependencies:
21
21
  version: '0'
22
22
  type: :runtime
23
23
  prerelease: false
24
- version_requirements: *70333347874080
24
+ version_requirements: !ruby/object:Gem::Requirement
25
+ none: false
26
+ requirements:
27
+ - - ! '>='
28
+ - !ruby/object:Gem::Version
29
+ version: '0'
25
30
  - !ruby/object:Gem::Dependency
26
31
  name: oauth
27
- requirement: &70333347873660 !ruby/object:Gem::Requirement
32
+ requirement: !ruby/object:Gem::Requirement
28
33
  none: false
29
34
  requirements:
30
35
  - - ! '>='
@@ -32,10 +37,15 @@ dependencies:
32
37
  version: '0'
33
38
  type: :runtime
34
39
  prerelease: false
35
- version_requirements: *70333347873660
40
+ version_requirements: !ruby/object:Gem::Requirement
41
+ none: false
42
+ requirements:
43
+ - - ! '>='
44
+ - !ruby/object:Gem::Version
45
+ version: '0'
36
46
  - !ruby/object:Gem::Dependency
37
47
  name: nokogiri
38
- requirement: &70333347873240 !ruby/object:Gem::Requirement
48
+ requirement: !ruby/object:Gem::Requirement
39
49
  none: false
40
50
  requirements:
41
51
  - - ! '>='
@@ -43,10 +53,15 @@ dependencies:
43
53
  version: '0'
44
54
  type: :runtime
45
55
  prerelease: false
46
- version_requirements: *70333347873240
56
+ version_requirements: !ruby/object:Gem::Requirement
57
+ none: false
58
+ requirements:
59
+ - - ! '>='
60
+ - !ruby/object:Gem::Version
61
+ version: '0'
47
62
  - !ruby/object:Gem::Dependency
48
63
  name: activemodel
49
- requirement: &70333347872820 !ruby/object:Gem::Requirement
64
+ requirement: !ruby/object:Gem::Requirement
50
65
  none: false
51
66
  requirements:
52
67
  - - ! '>='
@@ -54,10 +69,15 @@ dependencies:
54
69
  version: '0'
55
70
  type: :runtime
56
71
  prerelease: false
57
- version_requirements: *70333347872820
72
+ version_requirements: !ruby/object:Gem::Requirement
73
+ none: false
74
+ requirements:
75
+ - - ! '>='
76
+ - !ruby/object:Gem::Version
77
+ version: '0'
58
78
  - !ruby/object:Gem::Dependency
59
79
  name: uuidtools
60
- requirement: &70333347888760 !ruby/object:Gem::Requirement
80
+ requirement: !ruby/object:Gem::Requirement
61
81
  none: false
62
82
  requirements:
63
83
  - - ! '>='
@@ -65,10 +85,15 @@ dependencies:
65
85
  version: '0'
66
86
  type: :runtime
67
87
  prerelease: false
68
- version_requirements: *70333347888760
88
+ version_requirements: !ruby/object:Gem::Requirement
89
+ none: false
90
+ requirements:
91
+ - - ! '>='
92
+ - !ruby/object:Gem::Version
93
+ version: '0'
69
94
  - !ruby/object:Gem::Dependency
70
95
  name: rake
71
- requirement: &70333347888340 !ruby/object:Gem::Requirement
96
+ requirement: !ruby/object:Gem::Requirement
72
97
  none: false
73
98
  requirements:
74
99
  - - ! '>='
@@ -76,10 +101,15 @@ dependencies:
76
101
  version: '0'
77
102
  type: :development
78
103
  prerelease: false
79
- version_requirements: *70333347888340
104
+ version_requirements: !ruby/object:Gem::Requirement
105
+ none: false
106
+ requirements:
107
+ - - ! '>='
108
+ - !ruby/object:Gem::Version
109
+ version: '0'
80
110
  - !ruby/object:Gem::Dependency
81
111
  name: rcov
82
- requirement: &70333347887840 !ruby/object:Gem::Requirement
112
+ requirement: !ruby/object:Gem::Requirement
83
113
  none: false
84
114
  requirements:
85
115
  - - ~>
@@ -87,10 +117,15 @@ dependencies:
87
117
  version: 0.9.8
88
118
  type: :development
89
119
  prerelease: false
90
- version_requirements: *70333347887840
120
+ version_requirements: !ruby/object:Gem::Requirement
121
+ none: false
122
+ requirements:
123
+ - - ~>
124
+ - !ruby/object:Gem::Version
125
+ version: 0.9.8
91
126
  - !ruby/object:Gem::Dependency
92
127
  name: rr
93
- requirement: &70333347887340 !ruby/object:Gem::Requirement
128
+ requirement: !ruby/object:Gem::Requirement
94
129
  none: false
95
130
  requirements:
96
131
  - - ~>
@@ -98,21 +133,31 @@ dependencies:
98
133
  version: 1.0.2
99
134
  type: :development
100
135
  prerelease: false
101
- version_requirements: *70333347887340
136
+ version_requirements: !ruby/object:Gem::Requirement
137
+ none: false
138
+ requirements:
139
+ - - ~>
140
+ - !ruby/object:Gem::Version
141
+ version: 1.0.2
102
142
  - !ruby/object:Gem::Dependency
103
143
  name: rspec
104
- requirement: &70333347886880 !ruby/object:Gem::Requirement
144
+ requirement: !ruby/object:Gem::Requirement
105
145
  none: false
106
146
  requirements:
107
- - - =
147
+ - - '='
108
148
  - !ruby/object:Gem::Version
109
149
  version: 2.11.0
110
150
  type: :development
111
151
  prerelease: false
112
- version_requirements: *70333347886880
152
+ version_requirements: !ruby/object:Gem::Requirement
153
+ none: false
154
+ requirements:
155
+ - - '='
156
+ - !ruby/object:Gem::Version
157
+ version: 2.11.0
113
158
  - !ruby/object:Gem::Dependency
114
159
  name: fakeweb
115
- requirement: &70333347886500 !ruby/object:Gem::Requirement
160
+ requirement: !ruby/object:Gem::Requirement
116
161
  none: false
117
162
  requirements:
118
163
  - - ! '>='
@@ -120,8 +165,13 @@ dependencies:
120
165
  version: '0'
121
166
  type: :development
122
167
  prerelease: false
123
- version_requirements: *70333347886500
124
- description: REST integration with Quickbooks Online
168
+ version_requirements: !ruby/object:Gem::Requirement
169
+ none: false
170
+ requirements:
171
+ - - ! '>='
172
+ - !ruby/object:Gem::Version
173
+ version: '0'
174
+ description: REST API to Quickbooks Online/Windows via Intuit Data Services
125
175
  email: toolbag@gmail.com
126
176
  executables: []
127
177
  extensions: []
@@ -254,6 +304,7 @@ files:
254
304
  - spec/xml/online/user.xml
255
305
  - spec/xml/windows/customer.xml
256
306
  - spec/xml/windows/customers.xml
307
+ - spec/xml/windows/fetch_customer_by_id.xml
257
308
  - spec/xml/windows/http_401.xml
258
309
  - spec/xml/windows/invoice_success_create.xml
259
310
  - spec/xml/windows/invoices.xml
@@ -280,8 +331,8 @@ required_rubygems_version: !ruby/object:Gem::Requirement
280
331
  version: '0'
281
332
  requirements: []
282
333
  rubyforge_project:
283
- rubygems_version: 1.8.16
334
+ rubygems_version: 1.8.24
284
335
  signing_key:
285
336
  specification_version: 3
286
- summary: REST integration with Quickbooks Online
337
+ summary: REST API to Quickbooks Online/Windows via Intuit Data Services
287
338
  test_files: []