xero 0.0.6 → 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.
- checksums.yaml +7 -0
- data/lib/xero.rb +1 -0
- data/lib/xero/connection.rb +14 -3
- data/lib/xero/errors/bad_request.rb +23 -0
- data/lib/xero/version.rb +1 -1
- data/spec/lib/xero/clients/private_application_spec.rb +14 -0
- data/spec/vcr_cassettes/save_invalid_invoice.yml +76 -0
- data/xero.gemspec +1 -0
- metadata +46 -53
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 3a6709590e45fb8983ef2f6ecaa194745c52f495
|
4
|
+
data.tar.gz: 934906f3430f1ce438e5e8d38886ff691ad59d16
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: 1582a31370715524cfe8cd62bcefa74fdef67d17936118f644f57dc6c5010a566ee149b8695af439253638c294a684172664f1b0b7bcbe8da30d5a6b7cf068f5
|
7
|
+
data.tar.gz: bfb845ce8ce89f101e436c1d0b6c6e2739595a5b014a76fe8e8b0ebe6b7fe52d0dd11119a2d90438678353453411893afd430fb6a108ba2b698ee42dd87e0690
|
data/lib/xero.rb
CHANGED
@@ -12,6 +12,7 @@ require 'xero/clients/partner_application'
|
|
12
12
|
require 'xero/clients/private_application'
|
13
13
|
require 'xero/configuration'
|
14
14
|
require 'xero/connection'
|
15
|
+
require 'xero/errors/bad_request'
|
15
16
|
require 'xero/models/base_model'
|
16
17
|
require 'xero/models/account'
|
17
18
|
require 'xero/models/address'
|
data/lib/xero/connection.rb
CHANGED
@@ -60,11 +60,22 @@ module Xero
|
|
60
60
|
"XERO::Connection RESPONSE code: #{response} body: #{response.body}"
|
61
61
|
)
|
62
62
|
|
63
|
-
handle_response(response)
|
63
|
+
handle_response(params, response)
|
64
64
|
end
|
65
65
|
|
66
|
-
def handle_response(response)
|
67
|
-
response
|
66
|
+
def handle_response(request, response)
|
67
|
+
if response.code.to_i == 200
|
68
|
+
response
|
69
|
+
else
|
70
|
+
handle_error(request, response)
|
71
|
+
end
|
72
|
+
end
|
73
|
+
|
74
|
+
def handle_error(request, response)
|
75
|
+
case response.code.to_i
|
76
|
+
when 400
|
77
|
+
raise Xero::Errors::BadRequest.new(request, response.body)
|
78
|
+
end
|
68
79
|
end
|
69
80
|
end
|
70
81
|
end
|
@@ -0,0 +1,23 @@
|
|
1
|
+
module Xero
|
2
|
+
module Errors
|
3
|
+
class BadRequest < StandardError
|
4
|
+
|
5
|
+
attr_reader :request_xml, :response_xml, :type, :message
|
6
|
+
|
7
|
+
def initialize(request_xml, response_xml)
|
8
|
+
@request_xml = request_xml
|
9
|
+
@response_xml = response_xml
|
10
|
+
Hash.from_xml(response_xml).tap do |data|
|
11
|
+
@type = data['ApiException']['Type']
|
12
|
+
@message = data['ApiException']['Message']
|
13
|
+
@error_number = data['ApiException']['ErrorNumber']
|
14
|
+
end
|
15
|
+
self
|
16
|
+
end
|
17
|
+
|
18
|
+
def message
|
19
|
+
"#{@type}: #{@message}"
|
20
|
+
end
|
21
|
+
end
|
22
|
+
end
|
23
|
+
end
|
data/lib/xero/version.rb
CHANGED
@@ -210,6 +210,20 @@ describe Xero::Clients::PrivateApplication do
|
|
210
210
|
end
|
211
211
|
end
|
212
212
|
|
213
|
+
context 'when saving an invalid invoice' do
|
214
|
+
before { configure }
|
215
|
+
|
216
|
+
let(:invoice) { Xero::Models::Invoice.new }
|
217
|
+
|
218
|
+
let(:response) do
|
219
|
+
VCR.use_cassette('save_invalid_invoice') { client.save(invoice) }
|
220
|
+
end
|
221
|
+
|
222
|
+
it 'should raise a BadRequest exception' do
|
223
|
+
expect { response }.to raise_error(Xero::Errors::BadRequest)
|
224
|
+
end
|
225
|
+
end
|
226
|
+
|
213
227
|
describe '#get_item' do
|
214
228
|
|
215
229
|
before { configure }
|
@@ -0,0 +1,76 @@
|
|
1
|
+
---
|
2
|
+
http_interactions:
|
3
|
+
- request:
|
4
|
+
method: post
|
5
|
+
uri: https://api.xero.com/api.xro/2.0/Invoices
|
6
|
+
body:
|
7
|
+
encoding: US-ASCII
|
8
|
+
string: xml=%3C%3Fxml%20version%3D%221.0%22%20encoding%3D%22UTF-8%22%3F%3E%0A%3CInvoice%3E%0A%20%20%3CDueDate%3E2012-12-12%3C%2FDueDate%3E%0A%3C%2FInvoice%3E%0A
|
9
|
+
headers:
|
10
|
+
charset:
|
11
|
+
- utf-8
|
12
|
+
accept:
|
13
|
+
- ! '*/*'
|
14
|
+
user-agent:
|
15
|
+
- OAuth gem v0.4.7
|
16
|
+
content-length:
|
17
|
+
- '0'
|
18
|
+
content-type:
|
19
|
+
- application/x-www-form-urlencoded
|
20
|
+
authorization:
|
21
|
+
- OAuth oauth_consumer_key="TYMATGTPO5QEAWP8I307AOMBHSOJI2", oauth_nonce="knfwvngQrAeAmKXDXHWBeRzQnNbYvrk3IF2i5SmPCqY",
|
22
|
+
oauth_signature="uUJ1Ni0IiEz42VbQ7A1g6HwrNbA2gjir8l9gbikJju%2BOiBmPJz7d2DUTHMiFc5l%2B7gKT6NwXVWOsETu8FN1vzGC5e9InIYPJMU27Cf5Yw1T1jirSo7R595wrb%2Ffcyi6BytVL4Q0xeZOFFj2LcxbpzJhN4IKaCGRE%2BwKae4w5H%2Fg%3D",
|
23
|
+
oauth_signature_method="RSA-SHA1", oauth_timestamp="1352748950", oauth_token="TYMATGTPO5QEAWP8I307AOMBHSOJI2",
|
24
|
+
oauth_version="1.0"
|
25
|
+
response:
|
26
|
+
status:
|
27
|
+
code: 400
|
28
|
+
message: Bad Request
|
29
|
+
headers:
|
30
|
+
cache-control:
|
31
|
+
- private
|
32
|
+
content-type:
|
33
|
+
- text/xml; charset=utf-8
|
34
|
+
server:
|
35
|
+
- Microsoft-IIS/7.0
|
36
|
+
x-aspnetmvc-version:
|
37
|
+
- '2.0'
|
38
|
+
www-authenticate:
|
39
|
+
- OAuth Realm="api.xero.com"
|
40
|
+
x-aspnet-version:
|
41
|
+
- 4.0.30319
|
42
|
+
x-s:
|
43
|
+
- api2
|
44
|
+
x-powered-by:
|
45
|
+
- ASP.NET
|
46
|
+
date:
|
47
|
+
- Mon, 12 Nov 2012 19:35:56 GMT
|
48
|
+
connection:
|
49
|
+
- close
|
50
|
+
content-length:
|
51
|
+
- '1666'
|
52
|
+
body:
|
53
|
+
encoding: US-ASCII
|
54
|
+
string: ! "<ApiException xmlns:xsd=\"http://www.w3.org/2001/XMLSchema\" xmlns:xsi=\"http://www.w3.org/2001/XMLSchema-instance\">\r\n
|
55
|
+
\ <ErrorNumber>10</ErrorNumber>\r\n <Type>ValidationException</Type>\r\n
|
56
|
+
\ <Message>A validation exception occurred</Message>\r\n <Elements>\r\n <DataContractBase
|
57
|
+
xsi:type=\"Invoice\">\r\n <ValidationErrors>\r\n <ValidationError>\r\n
|
58
|
+
\ <Message>One or more line items must be specified</Message>\r\n
|
59
|
+
\ </ValidationError>\r\n <ValidationError>\r\n <Message>Invoice
|
60
|
+
Type must be specified</Message>\r\n </ValidationError>\r\n <ValidationError>\r\n
|
61
|
+
\ <Message>A Contact must be specified for this type of transaction</Message>\r\n
|
62
|
+
\ </ValidationError>\r\n </ValidationErrors>\r\n <Warnings
|
63
|
+
/>\r\n <Date>2012-11-12T00:00:00</Date>\r\n <DueDate>2012-12-12T00:00:00</DueDate>\r\n
|
64
|
+
\ <BrandingThemeID xsi:nil=\"true\" />\r\n <Status>DRAFT</Status>\r\n
|
65
|
+
\ <LineAmountTypes>Exclusive</LineAmountTypes>\r\n <LineItems />\r\n
|
66
|
+
\ <SubTotal>0.00</SubTotal>\r\n <TotalTax>0.00</TotalTax>\r\n <Total>0.00</Total>\r\n
|
67
|
+
\ <UpdatedDateUTC xsi:nil=\"true\" />\r\n <CurrencyCode>EUR</CurrencyCode>\r\n
|
68
|
+
\ <FullyPaidOnDate xsi:nil=\"true\" />\r\n <InvoiceID>00000000-0000-0000-0000-000000000000</InvoiceID>\r\n
|
69
|
+
\ <Payments />\r\n <CreditNotes />\r\n <AmountDue xsi:nil=\"true\"
|
70
|
+
/>\r\n <AmountPaid xsi:nil=\"true\" />\r\n <AmountCredited xsi:nil=\"true\"
|
71
|
+
/>\r\n <SentToContact xsi:nil=\"true\" />\r\n <CurrencyRate xsi:nil=\"true\"
|
72
|
+
/>\r\n <TotalDiscount xsi:nil=\"true\" />\r\n <HasAttachments>false</HasAttachments>\r\n
|
73
|
+
\ <Attachments />\r\n </DataContractBase>\r\n </Elements>\r\n</ApiException>"
|
74
|
+
http_version: '1.1'
|
75
|
+
recorded_at: Mon, 12 Nov 2012 19:35:53 GMT
|
76
|
+
recorded_with: VCR 2.2.5
|
data/xero.gemspec
CHANGED
@@ -27,6 +27,7 @@ Gem::Specification.new do |gem|
|
|
27
27
|
gem.add_development_dependency('guard-rspec')
|
28
28
|
gem.add_development_dependency('rb-fsevent')
|
29
29
|
gem.add_development_dependency('rspec')
|
30
|
+
gem.add_development_dependency('rspec-spies')
|
30
31
|
gem.add_development_dependency('shoulda-matchers')
|
31
32
|
gem.add_development_dependency('vcr')
|
32
33
|
end
|
metadata
CHANGED
@@ -1,190 +1,181 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: xero
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.0.
|
5
|
-
prerelease:
|
4
|
+
version: 0.0.7
|
6
5
|
platform: ruby
|
7
6
|
authors:
|
8
7
|
- Matt Beedle
|
9
8
|
autorequire:
|
10
9
|
bindir: bin
|
11
10
|
cert_chain: []
|
12
|
-
date:
|
11
|
+
date: 2013-04-17 00:00:00.000000000 Z
|
13
12
|
dependencies:
|
14
13
|
- !ruby/object:Gem::Dependency
|
15
14
|
name: active_attr
|
16
15
|
requirement: !ruby/object:Gem::Requirement
|
17
|
-
none: false
|
18
16
|
requirements:
|
19
|
-
- -
|
17
|
+
- - '>='
|
20
18
|
- !ruby/object:Gem::Version
|
21
19
|
version: '0'
|
22
20
|
type: :runtime
|
23
21
|
prerelease: false
|
24
22
|
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
none: false
|
26
23
|
requirements:
|
27
|
-
- -
|
24
|
+
- - '>='
|
28
25
|
- !ruby/object:Gem::Version
|
29
26
|
version: '0'
|
30
27
|
- !ruby/object:Gem::Dependency
|
31
28
|
name: activesupport
|
32
29
|
requirement: !ruby/object:Gem::Requirement
|
33
|
-
none: false
|
34
30
|
requirements:
|
35
|
-
- -
|
31
|
+
- - '>='
|
36
32
|
- !ruby/object:Gem::Version
|
37
33
|
version: '0'
|
38
34
|
type: :runtime
|
39
35
|
prerelease: false
|
40
36
|
version_requirements: !ruby/object:Gem::Requirement
|
41
|
-
none: false
|
42
37
|
requirements:
|
43
|
-
- -
|
38
|
+
- - '>='
|
44
39
|
- !ruby/object:Gem::Version
|
45
40
|
version: '0'
|
46
41
|
- !ruby/object:Gem::Dependency
|
47
42
|
name: oauth
|
48
43
|
requirement: !ruby/object:Gem::Requirement
|
49
|
-
none: false
|
50
44
|
requirements:
|
51
|
-
- -
|
45
|
+
- - '>='
|
52
46
|
- !ruby/object:Gem::Version
|
53
47
|
version: '0'
|
54
48
|
type: :runtime
|
55
49
|
prerelease: false
|
56
50
|
version_requirements: !ruby/object:Gem::Requirement
|
57
|
-
none: false
|
58
51
|
requirements:
|
59
|
-
- -
|
52
|
+
- - '>='
|
60
53
|
- !ruby/object:Gem::Version
|
61
54
|
version: '0'
|
62
55
|
- !ruby/object:Gem::Dependency
|
63
56
|
name: faker
|
64
57
|
requirement: !ruby/object:Gem::Requirement
|
65
|
-
none: false
|
66
58
|
requirements:
|
67
|
-
- -
|
59
|
+
- - '>='
|
68
60
|
- !ruby/object:Gem::Version
|
69
61
|
version: '0'
|
70
62
|
type: :development
|
71
63
|
prerelease: false
|
72
64
|
version_requirements: !ruby/object:Gem::Requirement
|
73
|
-
none: false
|
74
65
|
requirements:
|
75
|
-
- -
|
66
|
+
- - '>='
|
76
67
|
- !ruby/object:Gem::Version
|
77
68
|
version: '0'
|
78
69
|
- !ruby/object:Gem::Dependency
|
79
70
|
name: fakeweb
|
80
71
|
requirement: !ruby/object:Gem::Requirement
|
81
|
-
none: false
|
82
72
|
requirements:
|
83
|
-
- -
|
73
|
+
- - '>='
|
84
74
|
- !ruby/object:Gem::Version
|
85
75
|
version: '0'
|
86
76
|
type: :development
|
87
77
|
prerelease: false
|
88
78
|
version_requirements: !ruby/object:Gem::Requirement
|
89
|
-
none: false
|
90
79
|
requirements:
|
91
|
-
- -
|
80
|
+
- - '>='
|
92
81
|
- !ruby/object:Gem::Version
|
93
82
|
version: '0'
|
94
83
|
- !ruby/object:Gem::Dependency
|
95
84
|
name: guard
|
96
85
|
requirement: !ruby/object:Gem::Requirement
|
97
|
-
none: false
|
98
86
|
requirements:
|
99
|
-
- -
|
87
|
+
- - '>='
|
100
88
|
- !ruby/object:Gem::Version
|
101
89
|
version: '0'
|
102
90
|
type: :development
|
103
91
|
prerelease: false
|
104
92
|
version_requirements: !ruby/object:Gem::Requirement
|
105
|
-
none: false
|
106
93
|
requirements:
|
107
|
-
- -
|
94
|
+
- - '>='
|
108
95
|
- !ruby/object:Gem::Version
|
109
96
|
version: '0'
|
110
97
|
- !ruby/object:Gem::Dependency
|
111
98
|
name: guard-rspec
|
112
99
|
requirement: !ruby/object:Gem::Requirement
|
113
|
-
none: false
|
114
100
|
requirements:
|
115
|
-
- -
|
101
|
+
- - '>='
|
116
102
|
- !ruby/object:Gem::Version
|
117
103
|
version: '0'
|
118
104
|
type: :development
|
119
105
|
prerelease: false
|
120
106
|
version_requirements: !ruby/object:Gem::Requirement
|
121
|
-
none: false
|
122
107
|
requirements:
|
123
|
-
- -
|
108
|
+
- - '>='
|
124
109
|
- !ruby/object:Gem::Version
|
125
110
|
version: '0'
|
126
111
|
- !ruby/object:Gem::Dependency
|
127
112
|
name: rb-fsevent
|
128
113
|
requirement: !ruby/object:Gem::Requirement
|
129
|
-
none: false
|
130
114
|
requirements:
|
131
|
-
- -
|
115
|
+
- - '>='
|
132
116
|
- !ruby/object:Gem::Version
|
133
117
|
version: '0'
|
134
118
|
type: :development
|
135
119
|
prerelease: false
|
136
120
|
version_requirements: !ruby/object:Gem::Requirement
|
137
|
-
none: false
|
138
121
|
requirements:
|
139
|
-
- -
|
122
|
+
- - '>='
|
140
123
|
- !ruby/object:Gem::Version
|
141
124
|
version: '0'
|
142
125
|
- !ruby/object:Gem::Dependency
|
143
126
|
name: rspec
|
144
127
|
requirement: !ruby/object:Gem::Requirement
|
145
|
-
none: false
|
146
128
|
requirements:
|
147
|
-
- -
|
129
|
+
- - '>='
|
148
130
|
- !ruby/object:Gem::Version
|
149
131
|
version: '0'
|
150
132
|
type: :development
|
151
133
|
prerelease: false
|
152
134
|
version_requirements: !ruby/object:Gem::Requirement
|
153
|
-
none: false
|
154
135
|
requirements:
|
155
|
-
- -
|
136
|
+
- - '>='
|
137
|
+
- !ruby/object:Gem::Version
|
138
|
+
version: '0'
|
139
|
+
- !ruby/object:Gem::Dependency
|
140
|
+
name: rspec-spies
|
141
|
+
requirement: !ruby/object:Gem::Requirement
|
142
|
+
requirements:
|
143
|
+
- - '>='
|
144
|
+
- !ruby/object:Gem::Version
|
145
|
+
version: '0'
|
146
|
+
type: :development
|
147
|
+
prerelease: false
|
148
|
+
version_requirements: !ruby/object:Gem::Requirement
|
149
|
+
requirements:
|
150
|
+
- - '>='
|
156
151
|
- !ruby/object:Gem::Version
|
157
152
|
version: '0'
|
158
153
|
- !ruby/object:Gem::Dependency
|
159
154
|
name: shoulda-matchers
|
160
155
|
requirement: !ruby/object:Gem::Requirement
|
161
|
-
none: false
|
162
156
|
requirements:
|
163
|
-
- -
|
157
|
+
- - '>='
|
164
158
|
- !ruby/object:Gem::Version
|
165
159
|
version: '0'
|
166
160
|
type: :development
|
167
161
|
prerelease: false
|
168
162
|
version_requirements: !ruby/object:Gem::Requirement
|
169
|
-
none: false
|
170
163
|
requirements:
|
171
|
-
- -
|
164
|
+
- - '>='
|
172
165
|
- !ruby/object:Gem::Version
|
173
166
|
version: '0'
|
174
167
|
- !ruby/object:Gem::Dependency
|
175
168
|
name: vcr
|
176
169
|
requirement: !ruby/object:Gem::Requirement
|
177
|
-
none: false
|
178
170
|
requirements:
|
179
|
-
- -
|
171
|
+
- - '>='
|
180
172
|
- !ruby/object:Gem::Version
|
181
173
|
version: '0'
|
182
174
|
type: :development
|
183
175
|
prerelease: false
|
184
176
|
version_requirements: !ruby/object:Gem::Requirement
|
185
|
-
none: false
|
186
177
|
requirements:
|
187
|
-
- -
|
178
|
+
- - '>='
|
188
179
|
- !ruby/object:Gem::Version
|
189
180
|
version: '0'
|
190
181
|
description: Library for communicating with the xero API
|
@@ -213,6 +204,7 @@ files:
|
|
213
204
|
- lib/xero/clients/private_application.rb
|
214
205
|
- lib/xero/configuration.rb
|
215
206
|
- lib/xero/connection.rb
|
207
|
+
- lib/xero/errors/bad_request.rb
|
216
208
|
- lib/xero/models/account.rb
|
217
209
|
- lib/xero/models/address.rb
|
218
210
|
- lib/xero/models/base_model.rb
|
@@ -251,31 +243,31 @@ files:
|
|
251
243
|
- spec/vcr_cassettes/get_item.yml
|
252
244
|
- spec/vcr_cassettes/get_items.yml
|
253
245
|
- spec/vcr_cassettes/invoices.yml
|
246
|
+
- spec/vcr_cassettes/save_invalid_invoice.yml
|
254
247
|
- spec/vcr_cassettes/save_invoice.yml
|
255
248
|
- xero.gemspec
|
256
249
|
homepage: https://github.com/mattbeedle/xero
|
257
250
|
licenses: []
|
251
|
+
metadata: {}
|
258
252
|
post_install_message:
|
259
253
|
rdoc_options: []
|
260
254
|
require_paths:
|
261
255
|
- lib
|
262
256
|
required_ruby_version: !ruby/object:Gem::Requirement
|
263
|
-
none: false
|
264
257
|
requirements:
|
265
|
-
- -
|
258
|
+
- - '>='
|
266
259
|
- !ruby/object:Gem::Version
|
267
260
|
version: '0'
|
268
261
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
269
|
-
none: false
|
270
262
|
requirements:
|
271
|
-
- -
|
263
|
+
- - '>='
|
272
264
|
- !ruby/object:Gem::Version
|
273
265
|
version: '0'
|
274
266
|
requirements: []
|
275
267
|
rubyforge_project:
|
276
|
-
rubygems_version:
|
268
|
+
rubygems_version: 2.0.3
|
277
269
|
signing_key:
|
278
|
-
specification_version:
|
270
|
+
specification_version: 4
|
279
271
|
summary: Library for communicating with the xero API
|
280
272
|
test_files:
|
281
273
|
- spec/lib/xero/client_spec.rb
|
@@ -303,4 +295,5 @@ test_files:
|
|
303
295
|
- spec/vcr_cassettes/get_item.yml
|
304
296
|
- spec/vcr_cassettes/get_items.yml
|
305
297
|
- spec/vcr_cassettes/invoices.yml
|
298
|
+
- spec/vcr_cassettes/save_invalid_invoice.yml
|
306
299
|
- spec/vcr_cassettes/save_invoice.yml
|